@eternalheart/react-file-preview 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +437 -60
  2. package/README.zh-CN.md +437 -60
  3. package/lib/FilePreviewContent.d.ts +1 -0
  4. package/lib/FilePreviewContent.d.ts.map +1 -1
  5. package/lib/FilePreviewEmbed.d.ts +2 -0
  6. package/lib/FilePreviewEmbed.d.ts.map +1 -1
  7. package/lib/FilePreviewModal.d.ts +2 -0
  8. package/lib/FilePreviewModal.d.ts.map +1 -1
  9. package/lib/chunks/index-BBYKNNLb.mjs +329 -0
  10. package/lib/chunks/index-BBYKNNLb.mjs.map +1 -0
  11. package/lib/chunks/index-BFh22D_W.mjs +78 -0
  12. package/lib/chunks/index-BFh22D_W.mjs.map +1 -0
  13. package/lib/chunks/{index-DoFsoBKL.mjs → index-BKXvtJh5.mjs} +27 -25
  14. package/lib/chunks/index-BKXvtJh5.mjs.map +1 -0
  15. package/lib/chunks/index-Bw3Fh4b5.mjs +116 -0
  16. package/lib/chunks/index-Bw3Fh4b5.mjs.map +1 -0
  17. package/lib/chunks/{index-kALp0tqz.mjs → index-CEC_DHgr.mjs} +22 -20
  18. package/lib/chunks/index-CEC_DHgr.mjs.map +1 -0
  19. package/lib/chunks/{index-CzM2mxrD.mjs → index-COOUxB5e.mjs} +130 -128
  20. package/lib/chunks/{index-CzM2mxrD.mjs.map → index-COOUxB5e.mjs.map} +1 -1
  21. package/lib/chunks/index-CU1Lc3lV.mjs +120 -0
  22. package/lib/chunks/index-CU1Lc3lV.mjs.map +1 -0
  23. package/lib/chunks/index-CgFv7B_G.mjs +359 -0
  24. package/lib/chunks/index-CgFv7B_G.mjs.map +1 -0
  25. package/lib/chunks/index-Cn4ZyhGM.mjs +587 -0
  26. package/lib/chunks/index-Cn4ZyhGM.mjs.map +1 -0
  27. package/lib/chunks/{index-DaAXRBWL.mjs → index-DGNNEnWE.mjs} +864 -862
  28. package/lib/chunks/{index-DaAXRBWL.mjs.map → index-DGNNEnWE.mjs.map} +1 -1
  29. package/lib/chunks/index-DLk08ylq.mjs +313 -0
  30. package/lib/chunks/index-DLk08ylq.mjs.map +1 -0
  31. package/lib/chunks/index-DVtPyN-s.mjs +200 -0
  32. package/lib/chunks/index-DVtPyN-s.mjs.map +1 -0
  33. package/lib/chunks/index-DreA69iU.mjs +2409 -0
  34. package/lib/chunks/index-DreA69iU.mjs.map +1 -0
  35. package/lib/chunks/{index-Cp68OevR.mjs → index-Dta7iGov.mjs} +1299 -1297
  36. package/lib/chunks/{index-Cp68OevR.mjs.map → index-Dta7iGov.mjs.map} +1 -1
  37. package/lib/chunks/index-fQGAUFAX.mjs +275 -0
  38. package/lib/chunks/index-fQGAUFAX.mjs.map +1 -0
  39. package/lib/chunks/{index-C_BJatqr.mjs → index-fSw6Hl5e.mjs} +42 -40
  40. package/lib/chunks/index-fSw6Hl5e.mjs.map +1 -0
  41. package/lib/chunks/index-jvNrkVkp.mjs +291 -0
  42. package/lib/chunks/index-jvNrkVkp.mjs.map +1 -0
  43. package/lib/chunks/index-oVJyD-FV.mjs +107 -0
  44. package/lib/chunks/index-oVJyD-FV.mjs.map +1 -0
  45. package/lib/chunks/{index-DuP0Tlpo.mjs → index-vRLKumL8.mjs} +43 -41
  46. package/lib/chunks/index-vRLKumL8.mjs.map +1 -0
  47. package/lib/chunks/useShikiHighlight-C6nJcETW.mjs +36 -0
  48. package/lib/chunks/useShikiHighlight-C6nJcETW.mjs.map +1 -0
  49. package/lib/components/preview/FilePreviewToolbar.d.ts +1 -0
  50. package/lib/components/preview/FilePreviewToolbar.d.ts.map +1 -1
  51. package/lib/components/preview/ToolbarButton.d.ts +3 -1
  52. package/lib/components/preview/ToolbarButton.d.ts.map +1 -1
  53. package/lib/hooks/index.d.ts +0 -6
  54. package/lib/hooks/index.d.ts.map +1 -1
  55. package/lib/hooks/useShikiHighlight.d.ts +3 -1
  56. package/lib/hooks/useShikiHighlight.d.ts.map +1 -1
  57. package/lib/index.cjs +32 -30
  58. package/lib/index.cjs.map +1 -1
  59. package/lib/index.css +1 -1
  60. package/lib/index.mjs +1 -1
  61. package/lib/renderers/Audio/index.d.ts +2 -1
  62. package/lib/renderers/Audio/index.d.ts.map +1 -1
  63. package/lib/renderers/Csv/index.d.ts +2 -1
  64. package/lib/renderers/Csv/index.d.ts.map +1 -1
  65. package/lib/renderers/Docx/index.d.ts +2 -1
  66. package/lib/renderers/Docx/index.d.ts.map +1 -1
  67. package/lib/renderers/Epub/index.d.ts +2 -3
  68. package/lib/renderers/Epub/index.d.ts.map +1 -1
  69. package/lib/renderers/Font/index.d.ts +2 -1
  70. package/lib/renderers/Font/index.d.ts.map +1 -1
  71. package/lib/renderers/Image/index.d.ts +6 -7
  72. package/lib/renderers/Image/index.d.ts.map +1 -1
  73. package/lib/renderers/Json/index.d.ts +2 -1
  74. package/lib/renderers/Json/index.d.ts.map +1 -1
  75. package/lib/renderers/Markdown/index.d.ts +2 -2
  76. package/lib/renderers/Markdown/index.d.ts.map +1 -1
  77. package/lib/renderers/Mobi/index.d.ts +2 -3
  78. package/lib/renderers/Mobi/index.d.ts.map +1 -1
  79. package/lib/renderers/Msg/index.d.ts +2 -1
  80. package/lib/renderers/Msg/index.d.ts.map +1 -1
  81. package/lib/renderers/Pdf/index.d.ts +4 -8
  82. package/lib/renderers/Pdf/index.d.ts.map +1 -1
  83. package/lib/renderers/Pptx/index.d.ts +2 -1
  84. package/lib/renderers/Pptx/index.d.ts.map +1 -1
  85. package/lib/renderers/Subtitle/index.d.ts +2 -1
  86. package/lib/renderers/Subtitle/index.d.ts.map +1 -1
  87. package/lib/renderers/Text/index.d.ts +2 -3
  88. package/lib/renderers/Text/index.d.ts.map +1 -1
  89. package/lib/renderers/Video/index.d.ts +2 -1
  90. package/lib/renderers/Video/index.d.ts.map +1 -1
  91. package/lib/renderers/Xlsx/index.d.ts +2 -1
  92. package/lib/renderers/Xlsx/index.d.ts.map +1 -1
  93. package/lib/renderers/Xml/index.d.ts +2 -1
  94. package/lib/renderers/Xml/index.d.ts.map +1 -1
  95. package/lib/renderers/Zip/index.d.ts +7 -2
  96. package/lib/renderers/Zip/index.d.ts.map +1 -1
  97. package/lib/renderers/base.types.d.ts +38 -0
  98. package/lib/renderers/base.types.d.ts.map +1 -0
  99. package/lib/renderers/registry.d.ts +36 -0
  100. package/lib/renderers/registry.d.ts.map +1 -0
  101. package/lib/renderers/toolbar.types.d.ts +2 -0
  102. package/lib/renderers/toolbar.types.d.ts.map +1 -1
  103. package/lib/toolbar/renderItems.d.ts.map +1 -1
  104. package/package.json +3 -3
  105. package/lib/chunks/index-0v5STX5f.mjs +0 -105
  106. package/lib/chunks/index-0v5STX5f.mjs.map +0 -1
  107. package/lib/chunks/index-10O8tfTH.mjs +0 -529
  108. package/lib/chunks/index-10O8tfTH.mjs.map +0 -1
  109. package/lib/chunks/index-BCyv1HM9.mjs +0 -175
  110. package/lib/chunks/index-BCyv1HM9.mjs.map +0 -1
  111. package/lib/chunks/index-Bo90aGhy.mjs +0 -114
  112. package/lib/chunks/index-Bo90aGhy.mjs.map +0 -1
  113. package/lib/chunks/index-CEeKt7L3.mjs +0 -2808
  114. package/lib/chunks/index-CEeKt7L3.mjs.map +0 -1
  115. package/lib/chunks/index-CWKbnvW6.mjs +0 -270
  116. package/lib/chunks/index-CWKbnvW6.mjs.map +0 -1
  117. package/lib/chunks/index-C_BJatqr.mjs.map +0 -1
  118. package/lib/chunks/index-Cbz5Z6ZK.mjs +0 -263
  119. package/lib/chunks/index-Cbz5Z6ZK.mjs.map +0 -1
  120. package/lib/chunks/index-DTYBFuAH.mjs +0 -357
  121. package/lib/chunks/index-DTYBFuAH.mjs.map +0 -1
  122. package/lib/chunks/index-DoFsoBKL.mjs.map +0 -1
  123. package/lib/chunks/index-DuP0Tlpo.mjs.map +0 -1
  124. package/lib/chunks/index-Dv3RQz86.mjs +0 -270
  125. package/lib/chunks/index-Dv3RQz86.mjs.map +0 -1
  126. package/lib/chunks/index-QfpHck8N.mjs +0 -55
  127. package/lib/chunks/index-QfpHck8N.mjs.map +0 -1
  128. package/lib/chunks/index-gjSQeou7.mjs +0 -194
  129. package/lib/chunks/index-gjSQeou7.mjs.map +0 -1
  130. package/lib/chunks/index-kALp0tqz.mjs.map +0 -1
  131. package/lib/chunks/index-kCeSnFs-.mjs +0 -54
  132. package/lib/chunks/index-kCeSnFs-.mjs.map +0 -1
  133. package/lib/chunks/useShikiHighlight-BA9qgdGA.mjs +0 -23
  134. package/lib/chunks/useShikiHighlight-BA9qgdGA.mjs.map +0 -1
  135. package/lib/hooks/rendererReducer.d.ts +0 -10
  136. package/lib/hooks/rendererReducer.d.ts.map +0 -1
  137. package/lib/hooks/types.d.ts +0 -152
  138. package/lib/hooks/types.d.ts.map +0 -1
  139. package/lib/hooks/useBookRenderer.d.ts +0 -14
  140. package/lib/hooks/useBookRenderer.d.ts.map +0 -1
  141. package/lib/hooks/useFilePreviewState.d.ts +0 -10
  142. package/lib/hooks/useFilePreviewState.d.ts.map +0 -1
  143. package/lib/hooks/useImageAutoFit.d.ts +0 -13
  144. package/lib/hooks/useImageAutoFit.d.ts.map +0 -1
  145. package/lib/hooks/useToolbarConfig.d.ts +0 -25
  146. package/lib/hooks/useToolbarConfig.d.ts.map +0 -1
  147. package/lib/renderers/Epub/toolbar.d.ts +0 -13
  148. package/lib/renderers/Epub/toolbar.d.ts.map +0 -1
  149. package/lib/renderers/Image/toolbar.d.ts +0 -15
  150. package/lib/renderers/Image/toolbar.d.ts.map +0 -1
  151. package/lib/renderers/Markdown/toolbar.d.ts +0 -9
  152. package/lib/renderers/Markdown/toolbar.d.ts.map +0 -1
  153. package/lib/renderers/Mobi/toolbar.d.ts +0 -13
  154. package/lib/renderers/Mobi/toolbar.d.ts.map +0 -1
  155. package/lib/renderers/Pdf/toolbar.d.ts +0 -16
  156. package/lib/renderers/Pdf/toolbar.d.ts.map +0 -1
  157. package/lib/renderers/Text/toolbar.d.ts +0 -12
  158. package/lib/renderers/Text/toolbar.d.ts.map +0 -1
  159. package/lib/renderers/Zip/toolbar.d.ts +0 -13
  160. package/lib/renderers/Zip/toolbar.d.ts.map +0 -1
  161. package/lib/toolbar/registry.d.ts +0 -51
  162. package/lib/toolbar/registry.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-Cp68OevR.mjs","sources":["../../../../node_modules/.pnpm/opentype.js@2.0.0/node_modules/opentype.js/dist/opentype.mjs","../../src/renderers/Font/index.tsx"],"sourcesContent":["// src/tiny-inflate@1.0.3.esm.mjs\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\nfunction Tree() {\n this.table = new Uint16Array(16);\n this.trans = new Uint16Array(288);\n}\nfunction Data(source, dest) {\n this.source = source;\n this.sourceIndex = 0;\n this.tag = 0;\n this.bitcount = 0;\n this.dest = dest;\n this.destLen = 0;\n this.ltree = new Tree();\n this.dtree = new Tree();\n}\nvar sltree = new Tree();\nvar sdtree = new Tree();\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\nvar clcidx = new Uint8Array([\n 16,\n 17,\n 18,\n 0,\n 8,\n 7,\n 9,\n 6,\n 10,\n 5,\n 11,\n 4,\n 12,\n 3,\n 13,\n 2,\n 14,\n 1,\n 15\n]);\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\nfunction tinf_build_bits_base(bits, base, delta, first) {\n var i, sum;\n for (i = 0; i < delta; ++i) bits[i] = 0;\n for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n for (sum = first, i = 0; i < 30; ++i) {\n base[i] = sum;\n sum += 1 << bits[i];\n }\n}\nfunction tinf_build_fixed_trees(lt, dt) {\n var i;\n for (i = 0; i < 7; ++i) lt.table[i] = 0;\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n for (i = 0; i < 5; ++i) dt.table[i] = 0;\n dt.table[5] = 32;\n for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\nvar offs = new Uint16Array(16);\nfunction tinf_build_tree(t, lengths2, off, num) {\n var i, sum;\n for (i = 0; i < 16; ++i) t.table[i] = 0;\n for (i = 0; i < num; ++i) t.table[lengths2[off + i]]++;\n t.table[0] = 0;\n for (sum = 0, i = 0; i < 16; ++i) {\n offs[i] = sum;\n sum += t.table[i];\n }\n for (i = 0; i < num; ++i) {\n if (lengths2[off + i]) t.trans[offs[lengths2[off + i]]++] = i;\n }\n}\nfunction tinf_getbit(d) {\n if (!d.bitcount--) {\n d.tag = d.source[d.sourceIndex++];\n d.bitcount = 7;\n }\n var bit = d.tag & 1;\n d.tag >>>= 1;\n return bit;\n}\nfunction tinf_read_bits(d, num, base) {\n if (!num)\n return base;\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var val = d.tag & 65535 >>> 16 - num;\n d.tag >>>= num;\n d.bitcount -= num;\n return val + base;\n}\nfunction tinf_decode_symbol(d, t) {\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var sum = 0, cur = 0, len = 0;\n var tag = d.tag;\n do {\n cur = 2 * cur + (tag & 1);\n tag >>>= 1;\n ++len;\n sum += t.table[len];\n cur -= t.table[len];\n } while (cur >= 0);\n d.tag = tag;\n d.bitcount -= len;\n return t.trans[sum + cur];\n}\nfunction tinf_decode_trees(d, lt, dt) {\n var hlit, hdist, hclen;\n var i, num, length;\n hlit = tinf_read_bits(d, 5, 257);\n hdist = tinf_read_bits(d, 5, 1);\n hclen = tinf_read_bits(d, 4, 4);\n for (i = 0; i < 19; ++i) lengths[i] = 0;\n for (i = 0; i < hclen; ++i) {\n var clen = tinf_read_bits(d, 3, 0);\n lengths[clcidx[i]] = clen;\n }\n tinf_build_tree(code_tree, lengths, 0, 19);\n for (num = 0; num < hlit + hdist; ) {\n var sym = tinf_decode_symbol(d, code_tree);\n switch (sym) {\n case 16:\n var prev = lengths[num - 1];\n for (length = tinf_read_bits(d, 2, 3); length; --length) {\n lengths[num++] = prev;\n }\n break;\n case 17:\n for (length = tinf_read_bits(d, 3, 3); length; --length) {\n lengths[num++] = 0;\n }\n break;\n case 18:\n for (length = tinf_read_bits(d, 7, 11); length; --length) {\n lengths[num++] = 0;\n }\n break;\n default:\n lengths[num++] = sym;\n break;\n }\n }\n tinf_build_tree(lt, lengths, 0, hlit);\n tinf_build_tree(dt, lengths, hlit, hdist);\n}\nfunction tinf_inflate_block_data(d, lt, dt) {\n for (; ; ) {\n var sym = tinf_decode_symbol(d, lt);\n if (sym === 256) {\n return TINF_OK;\n }\n if (sym < 256) {\n d.dest[d.destLen++] = sym;\n } else {\n var length, dist, offs2;\n var i;\n sym -= 257;\n length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n dist = tinf_decode_symbol(d, dt);\n offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n for (i = offs2; i < offs2 + length; ++i) {\n d.dest[d.destLen++] = d.dest[i];\n }\n }\n }\n}\nfunction tinf_inflate_uncompressed_block(d) {\n var length, invlength;\n var i;\n while (d.bitcount > 8) {\n d.sourceIndex--;\n d.bitcount -= 8;\n }\n length = d.source[d.sourceIndex + 1];\n length = 256 * length + d.source[d.sourceIndex];\n invlength = d.source[d.sourceIndex + 3];\n invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n if (length !== (~invlength & 65535))\n return TINF_DATA_ERROR;\n d.sourceIndex += 4;\n for (i = length; i; --i)\n d.dest[d.destLen++] = d.source[d.sourceIndex++];\n d.bitcount = 0;\n return TINF_OK;\n}\nfunction tinf_uncompress(source, dest) {\n var d = new Data(source, dest);\n var bfinal, btype, res;\n do {\n bfinal = tinf_getbit(d);\n btype = tinf_read_bits(d, 2, 0);\n switch (btype) {\n case 0:\n res = tinf_inflate_uncompressed_block(d);\n break;\n case 1:\n res = tinf_inflate_block_data(d, sltree, sdtree);\n break;\n case 2:\n tinf_decode_trees(d, d.ltree, d.dtree);\n res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n break;\n default:\n res = TINF_DATA_ERROR;\n }\n if (res !== TINF_OK)\n throw new Error(\"Data error\");\n } while (!bfinal);\n if (d.destLen < d.dest.length) {\n if (typeof d.dest.slice === \"function\")\n return d.dest.slice(0, d.destLen);\n else\n return d.dest.subarray(0, d.destLen);\n }\n return d.dest;\n}\ntinf_build_fixed_trees(sltree, sdtree);\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\n// src/bbox.mjs\nfunction derive(v0, v1, v2, v3, t) {\n return Math.pow(1 - t, 3) * v0 + 3 * Math.pow(1 - t, 2) * t * v1 + 3 * (1 - t) * Math.pow(t, 2) * v2 + Math.pow(t, 3) * v3;\n}\nfunction BoundingBox() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n}\nBoundingBox.prototype.isEmpty = function() {\n return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);\n};\nBoundingBox.prototype.addPoint = function(x, y) {\n if (typeof x === \"number\") {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n if (x < this.x1) {\n this.x1 = x;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n }\n if (typeof y === \"number\") {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n }\n};\nBoundingBox.prototype.addX = function(x) {\n this.addPoint(x, null);\n};\nBoundingBox.prototype.addY = function(y) {\n this.addPoint(null, y);\n};\nBoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {\n const p0 = [x0, y0];\n const p1 = [x1, y1];\n const p2 = [x2, y2];\n const p3 = [x, y];\n this.addPoint(x0, y0);\n this.addPoint(x, y);\n for (let i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0) continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2));\n }\n }\n};\nBoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {\n const cp1x = x0 + 2 / 3 * (x1 - x0);\n const cp1y = y0 + 2 / 3 * (y1 - y0);\n const cp2x = cp1x + 1 / 3 * (x - x0);\n const cp2y = cp1y + 1 / 3 * (y - y0);\n this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);\n};\nvar bbox_default = BoundingBox;\n\n// src/path.mjs\nfunction Path() {\n this.commands = [];\n this.fill = \"black\";\n this.stroke = null;\n this.strokeWidth = 1;\n}\nvar decimalRoundingCache = {};\nfunction roundDecimal(float, places) {\n const integerPart = Math.floor(float);\n const decimalPart = float - integerPart;\n if (!decimalRoundingCache[places]) {\n decimalRoundingCache[places] = {};\n }\n if (decimalRoundingCache[places][decimalPart] !== void 0) {\n const roundedDecimalPart2 = decimalRoundingCache[places][decimalPart];\n return integerPart + roundedDecimalPart2;\n }\n const roundedDecimalPart = +(Math.round(decimalPart + \"e+\" + places) + \"e-\" + places);\n decimalRoundingCache[places][decimalPart] = roundedDecimalPart;\n return integerPart + roundedDecimalPart;\n}\nfunction optimizeCommands(commands) {\n let subpaths = [[]];\n let startX = 0, startY = 0;\n for (let i = 0; i < commands.length; i += 1) {\n const subpath = subpaths[subpaths.length - 1];\n const cmd = commands[i];\n const firstCommand = subpath[0];\n const secondCommand = subpath[1];\n const previousCommand = subpath[subpath.length - 1];\n const nextCommand = commands[i + 1];\n subpath.push(cmd);\n if (cmd.type === \"M\") {\n startX = cmd.x;\n startY = cmd.y;\n } else if (cmd.type === \"L\" && (!nextCommand || nextCommand.type === \"Z\")) {\n if (!(Math.abs(cmd.x - startX) > 1 || Math.abs(cmd.y - startY) > 1)) {\n subpath.pop();\n }\n } else if (cmd.type === \"L\" && previousCommand && previousCommand.x === cmd.x && previousCommand.y === cmd.y) {\n subpath.pop();\n } else if (cmd.type === \"Z\") {\n if (firstCommand && secondCommand && previousCommand && firstCommand.type === \"M\" && secondCommand.type === \"L\" && previousCommand.type === \"L\" && previousCommand.x === firstCommand.x && previousCommand.y === firstCommand.y) {\n subpath.shift();\n subpath[0].type = \"M\";\n }\n if (i + 1 < commands.length) {\n subpaths.push([]);\n }\n }\n }\n commands = [].concat.apply([], subpaths);\n return commands;\n}\nfunction createSVGParsingOptions(options) {\n const defaultOptions = {\n decimalPlaces: 2,\n optimize: true,\n flipY: true,\n flipYBase: void 0,\n scale: 1,\n x: 0,\n y: 0\n };\n const newOptions = Object.assign({}, defaultOptions, options);\n return newOptions;\n}\nfunction createSVGOutputOptions(options) {\n if (parseInt(options) === options) {\n options = { decimalPlaces: options, flipY: false };\n }\n const defaultOptions = {\n decimalPlaces: 2,\n optimize: true,\n flipY: true,\n flipYBase: void 0\n };\n const newOptions = Object.assign({}, defaultOptions, options);\n return newOptions;\n}\nPath.prototype.fromSVG = function(pathData, options = {}) {\n if (typeof SVGPathElement !== \"undefined\" && pathData instanceof SVGPathElement) {\n pathData = pathData.getAttribute(\"d\");\n }\n options = createSVGParsingOptions(options);\n this.commands = [];\n const number = \"0123456789\";\n const supportedCommands = \"MmLlQqCcZzHhVv\";\n const unsupportedCommands = \"SsTtAa\";\n const sign = \"-+\";\n let command = {};\n let buffer = [\"\"];\n let isUnexpected = false;\n function parseBuffer2(buffer2) {\n return buffer2.filter((b) => b.length).map((b) => {\n let float = parseFloat(b);\n if (options.decimalPlaces || options.decimalPlaces === 0) {\n float = roundDecimal(float, options.decimalPlaces);\n }\n return float;\n });\n }\n function makeRelative(buffer2) {\n if (!this.commands.length) {\n return buffer2;\n }\n const lastCommand = this.commands[this.commands.length - 1];\n for (let i = 0; i < buffer2.length; i++) {\n buffer2[i] += lastCommand[i & 1 ? \"y\" : \"x\"];\n }\n return buffer2;\n }\n function applyCommand() {\n if (command.type === void 0) {\n return;\n }\n const commandType = command.type.toUpperCase();\n const relative = commandType !== \"Z\" && command.type.toUpperCase() !== command.type;\n let parsedBuffer = parseBuffer2(buffer);\n buffer = [\"\"];\n if (!parsedBuffer.length && commandType !== \"Z\") {\n return;\n }\n if (relative && commandType !== \"H\" && commandType !== \"V\") {\n parsedBuffer = makeRelative.apply(this, [parsedBuffer]);\n }\n const currentX = this.commands.length ? this.commands[this.commands.length - 1].x || 0 : 0;\n const currentY = this.commands.length ? this.commands[this.commands.length - 1].y || 0 : 0;\n switch (commandType) {\n case \"M\":\n this.moveTo(...parsedBuffer);\n break;\n case \"L\":\n this.lineTo(...parsedBuffer);\n break;\n case \"V\":\n for (let i = 0; i < parsedBuffer.length; i++) {\n let offset = 0;\n if (relative) {\n offset = this.commands.length ? this.commands[this.commands.length - 1].y || 0 : 0;\n }\n this.lineTo(currentX, parsedBuffer[i] + offset);\n }\n break;\n case \"H\":\n for (let i = 0; i < parsedBuffer.length; i++) {\n let offset = 0;\n if (relative) {\n offset = this.commands.length ? this.commands[this.commands.length - 1].x || 0 : 0;\n }\n this.lineTo(parsedBuffer[i] + offset, currentY);\n }\n break;\n case \"C\":\n this.bezierCurveTo(...parsedBuffer);\n break;\n case \"Q\":\n this.quadraticCurveTo(...parsedBuffer);\n break;\n case \"Z\":\n if (this.commands.length < 1 || this.commands[this.commands.length - 1].type !== \"Z\") {\n this.close();\n }\n break;\n }\n if (this.commands.length) {\n for (const prop in this.commands[this.commands.length - 1]) {\n if (this.commands[this.commands.length - 1][prop] === void 0) {\n this.commands[this.commands.length - 1][prop] = 0;\n }\n }\n }\n }\n for (let i = 0; i < pathData.length; i++) {\n const token = pathData.charAt(i);\n const lastBuffer = buffer[buffer.length - 1];\n if (number.indexOf(token) > -1) {\n buffer[buffer.length - 1] += token;\n } else if (sign.indexOf(token) > -1) {\n if (!command.type && !this.commands.length) {\n command.type = \"L\";\n }\n if (token === \"-\") {\n if (!command.type || lastBuffer.indexOf(\"-\") > 0) {\n isUnexpected = true;\n } else if (lastBuffer.length) {\n buffer.push(\"-\");\n } else {\n buffer[buffer.length - 1] = token;\n }\n } else {\n if (!command.type || lastBuffer.length > 0) {\n isUnexpected = true;\n } else {\n continue;\n }\n }\n } else if (supportedCommands.indexOf(token) > -1) {\n if (command.type) {\n applyCommand.apply(this);\n command = { type: token };\n } else {\n command.type = token;\n }\n } else if (unsupportedCommands.indexOf(token) > -1) {\n throw new Error(\"Unsupported path command: \" + token + \". Currently supported commands are \" + supportedCommands.split(\"\").join(\", \") + \".\");\n } else if (\" ,\t\\n\\r\\f\\v\".indexOf(token) > -1) {\n buffer.push(\"\");\n } else if (token === \".\") {\n if (!command.type || lastBuffer.indexOf(token) > -1) {\n isUnexpected = true;\n } else {\n buffer[buffer.length - 1] += token;\n }\n } else {\n isUnexpected = true;\n }\n if (isUnexpected) {\n throw new Error(\"Unexpected character: \" + token + \" at offset \" + i);\n }\n }\n applyCommand.apply(this);\n if (options.optimize) {\n this.commands = optimizeCommands(this.commands);\n }\n const flipY = options.flipY;\n let flipYBase = options.flipYBase;\n if (flipY === true && options.flipYBase === void 0) {\n const boundingBox = this.getBoundingBox();\n flipYBase = boundingBox.y1 + boundingBox.y2;\n }\n for (const i in this.commands) {\n const cmd = this.commands[i];\n for (const prop in cmd) {\n if ([\"x\", \"x1\", \"x2\"].includes(prop)) {\n this.commands[i][prop] = options.x + cmd[prop] * options.scale;\n } else if ([\"y\", \"y1\", \"y2\"].includes(prop)) {\n this.commands[i][prop] = options.y + (flipY ? flipYBase - cmd[prop] : cmd[prop]) * options.scale;\n }\n }\n }\n return this;\n};\nPath.fromSVG = function(path, options) {\n const newPath = new Path();\n return newPath.fromSVG(path, options);\n};\nPath.prototype.moveTo = function(x, y) {\n this.commands.push({\n type: \"M\",\n x,\n y\n });\n};\nPath.prototype.lineTo = function(x, y) {\n this.commands.push({\n type: \"L\",\n x,\n y\n });\n};\nPath.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) {\n this.commands.push({\n type: \"C\",\n x1,\n y1,\n x2,\n y2,\n x,\n y\n });\n};\nPath.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) {\n this.commands.push({\n type: \"Q\",\n x1,\n y1,\n x,\n y\n });\n};\nPath.prototype.close = Path.prototype.closePath = function() {\n this.commands.push({\n type: \"Z\"\n });\n};\nPath.prototype.extend = function(pathOrCommands) {\n if (pathOrCommands.commands) {\n pathOrCommands = pathOrCommands.commands;\n } else if (pathOrCommands instanceof bbox_default) {\n const box = pathOrCommands;\n this.moveTo(box.x1, box.y1);\n this.lineTo(box.x2, box.y1);\n this.lineTo(box.x2, box.y2);\n this.lineTo(box.x1, box.y2);\n this.close();\n return;\n }\n Array.prototype.push.apply(this.commands, pathOrCommands);\n};\nPath.prototype.getBoundingBox = function() {\n const box = new bbox_default();\n let startX = 0;\n let startY = 0;\n let prevX = 0;\n let prevY = 0;\n for (let i = 0; i < this.commands.length; i++) {\n const cmd = this.commands[i];\n switch (cmd.type) {\n case \"M\":\n box.addPoint(cmd.x, cmd.y);\n startX = prevX = cmd.x;\n startY = prevY = cmd.y;\n break;\n case \"L\":\n box.addPoint(cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Q\":\n box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"C\":\n box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Z\":\n prevX = startX;\n prevY = startY;\n break;\n default:\n throw new Error(\"Unexpected path command \" + cmd.type);\n }\n }\n if (box.isEmpty()) {\n box.addPoint(0, 0);\n }\n return box;\n};\nPath.prototype.draw = function(ctx) {\n const layers = this._layers;\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l++) {\n this.draw.call(layers[l], ctx);\n }\n return;\n }\n const image = this._image;\n if (image) {\n ctx.drawImage(image.image, image.x, image.y, image.width, image.height);\n return;\n }\n ctx.beginPath();\n for (let i = 0; i < this.commands.length; i += 1) {\n const cmd = this.commands[i];\n if (cmd.type === \"M\") {\n ctx.moveTo(cmd.x, cmd.y);\n } else if (cmd.type === \"L\") {\n ctx.lineTo(cmd.x, cmd.y);\n } else if (cmd.type === \"C\") {\n ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n } else if (cmd.type === \"Q\") {\n ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);\n } else if (cmd.type === \"Z\" && this.stroke && this.strokeWidth) {\n ctx.closePath();\n }\n }\n if (this.fill) {\n ctx.fillStyle = this.fill;\n ctx.fill();\n }\n if (this.stroke) {\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n ctx.stroke();\n }\n};\nPath.prototype.toPathData = function(options) {\n options = createSVGOutputOptions(options);\n function floatToString(v) {\n const rounded = roundDecimal(v, options.decimalPlaces);\n if (Math.round(v) === rounded) {\n return \"\" + rounded;\n } else {\n return rounded.toFixed(options.decimalPlaces);\n }\n }\n function packValues() {\n let s = \"\";\n for (let i = 0; i < arguments.length; i += 1) {\n const v = arguments[i];\n if (v >= 0 && i > 0) {\n s += \" \";\n }\n s += floatToString(v);\n }\n return s;\n }\n let commandsCopy = this.commands;\n if (options.optimize) {\n commandsCopy = JSON.parse(JSON.stringify(this.commands));\n commandsCopy = optimizeCommands(commandsCopy);\n }\n const flipY = options.flipY;\n let flipYBase = options.flipYBase;\n if (flipY === true && flipYBase === void 0) {\n const tempPath = new Path();\n tempPath.extend(commandsCopy);\n const boundingBox = tempPath.getBoundingBox();\n flipYBase = boundingBox.y1 + boundingBox.y2;\n }\n let d = \"\";\n for (let i = 0; i < commandsCopy.length; i += 1) {\n const cmd = commandsCopy[i];\n if (cmd.type === \"M\") {\n d += \"M\" + packValues(\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"L\") {\n d += \"L\" + packValues(\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"C\") {\n d += \"C\" + packValues(\n cmd.x1,\n flipY ? flipYBase - cmd.y1 : cmd.y1,\n cmd.x2,\n flipY ? flipYBase - cmd.y2 : cmd.y2,\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"Q\") {\n d += \"Q\" + packValues(\n cmd.x1,\n flipY ? flipYBase - cmd.y1 : cmd.y1,\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"Z\") {\n d += \"Z\";\n }\n }\n return d;\n};\nPath.prototype.toSVG = function(options, pathData) {\n if (this._layers && this._layers.length) {\n console.warn(\"toSVG() does not support colr font layers yet\");\n }\n if (this._image) {\n console.warn(\"toSVG() does not support SVG glyphs yet\");\n }\n if (!pathData) {\n pathData = this.toPathData(options);\n }\n let svg = '<path d=\"';\n svg += pathData;\n svg += '\"';\n if (this.fill !== void 0 && this.fill !== \"black\") {\n if (this.fill === null) {\n svg += ' fill=\"none\"';\n } else {\n svg += ' fill=\"' + this.fill + '\"';\n }\n }\n if (this.stroke) {\n svg += ' stroke=\"' + this.stroke + '\" stroke-width=\"' + this.strokeWidth + '\"';\n }\n svg += \"/>\";\n return svg;\n};\nPath.prototype.toDOMElement = function(options, pathData) {\n if (this._layers && this._layers.length) {\n console.warn(\"toDOMElement() does not support colr font layers yet\");\n }\n if (!pathData) {\n pathData = this.toPathData(options);\n }\n const newPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n newPath.setAttribute(\"d\", pathData);\n if (this.fill !== void 0 && this.fill !== \"black\") {\n if (this.fill === null) {\n newPath.setAttribute(\"fill\", \"none\");\n } else {\n newPath.setAttribute(\"fill\", this.fill);\n }\n }\n if (this.stroke) {\n newPath.setAttribute(\"stroke\", this.stroke);\n newPath.setAttribute(\"stroke-width\", this.strokeWidth);\n }\n return newPath;\n};\nvar path_default = Path;\n\n// src/check.mjs\nfunction fail(message) {\n throw new Error(message);\n}\nfunction argument(predicate, message) {\n if (!predicate) {\n fail(message);\n }\n}\nvar check_default = { fail, argument, assert: argument };\n\n// src/types.mjs\nvar LIMIT16 = 32768;\nvar LIMIT32 = 2147483648;\nvar MIN_16_16 = -(1 << 15);\nvar MAX_16_16 = (1 << 15) - 1 + 1 / (1 << 16);\nvar decode = {};\nvar encode = {};\nvar sizeOf = {};\nfunction constant(v) {\n return function() {\n return v;\n };\n}\nencode.BYTE = function(v) {\n check_default.argument(v >= 0 && v <= 255, \"Byte value should be between 0 and 255.\");\n return [v];\n};\nsizeOf.BYTE = constant(1);\nencode.CHAR = function(v) {\n return [v.charCodeAt(0)];\n};\nsizeOf.CHAR = constant(1);\nencode.CHARARRAY = function(v) {\n if (v === null || typeof v === \"undefined\") {\n v = \"\";\n console.warn(\"CHARARRAY with undefined or null value encountered and treated as an empty string. This is probably caused by a missing glyph name.\");\n }\n const b = [];\n for (let i = 0; i < v.length; i += 1) {\n b[i] = v.charCodeAt(i);\n }\n return b;\n};\nsizeOf.CHARARRAY = function(v) {\n if (typeof v === \"undefined\") {\n return 0;\n }\n return v.length;\n};\nencode.USHORT = function(v) {\n return [v >> 8 & 255, v & 255];\n};\nsizeOf.USHORT = constant(2);\nencode.SHORT = function(v) {\n if (v >= LIMIT16) {\n v = -(2 * LIMIT16 - v);\n }\n return [v >> 8 & 255, v & 255];\n};\nsizeOf.SHORT = constant(2);\nencode.UINT24 = function(v) {\n return [v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.UINT24 = constant(3);\nencode.ULONG = function(v) {\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.ULONG = constant(4);\nencode.LONG = function(v) {\n if (v >= LIMIT32) {\n v = -(2 * LIMIT32 - v);\n }\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.LONG = constant(4);\nencode.FLOAT = function(v) {\n if (v > MAX_16_16 || v < MIN_16_16) {\n throw new Error(`Value ${v} is outside the range of representable values in 16.16 format`);\n }\n const fixedValue = Math.round(v * (1 << 16)) << 0;\n return encode.ULONG(fixedValue);\n};\nsizeOf.FLOAT = sizeOf.ULONG;\nencode.FIXED = encode.ULONG;\nsizeOf.FIXED = sizeOf.ULONG;\nencode.FWORD = encode.SHORT;\nsizeOf.FWORD = sizeOf.SHORT;\nencode.UFWORD = encode.USHORT;\nsizeOf.UFWORD = sizeOf.USHORT;\nencode.F2DOT14 = function(v) {\n return encode.USHORT(v * 16384);\n};\nsizeOf.F2DOT14 = sizeOf.USHORT;\nencode.LONGDATETIME = function(v) {\n return [0, 0, 0, 0, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.LONGDATETIME = constant(8);\nencode.TAG = function(v) {\n check_default.argument(v.length === 4, \"Tag should be exactly 4 ASCII characters.\");\n return [\n v.charCodeAt(0),\n v.charCodeAt(1),\n v.charCodeAt(2),\n v.charCodeAt(3)\n ];\n};\nsizeOf.TAG = constant(4);\nencode.Card8 = encode.BYTE;\nsizeOf.Card8 = sizeOf.BYTE;\nencode.Card16 = encode.USHORT;\nsizeOf.Card16 = sizeOf.USHORT;\nencode.OffSize = encode.BYTE;\nsizeOf.OffSize = sizeOf.BYTE;\nencode.SID = encode.USHORT;\nsizeOf.SID = sizeOf.USHORT;\nencode.NUMBER = function(v) {\n if (v >= -107 && v <= 107) {\n return [v + 139];\n } else if (v >= 108 && v <= 1131) {\n v = v - 108;\n return [(v >> 8) + 247, v & 255];\n } else if (v >= -1131 && v <= -108) {\n v = -v - 108;\n return [(v >> 8) + 251, v & 255];\n } else if (v >= -32768 && v <= 32767) {\n return encode.NUMBER16(v);\n } else {\n return encode.NUMBER32(v);\n }\n};\nsizeOf.NUMBER = function(v) {\n return encode.NUMBER(v).length;\n};\nencode.NUMBER16 = function(v) {\n return [28, v >> 8 & 255, v & 255];\n};\nsizeOf.NUMBER16 = constant(3);\nencode.NUMBER32 = function(v) {\n return [29, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.NUMBER32 = constant(5);\nencode.REAL = function(v) {\n let value = v.toString();\n const m = /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(value);\n if (m) {\n const epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n value = (Math.round(v * epsilon) / epsilon).toString();\n }\n let nibbles = \"\";\n for (let i = 0, ii = value.length; i < ii; i += 1) {\n const c = value[i];\n if (c === \"e\") {\n nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n } else if (c === \".\") {\n nibbles += \"a\";\n } else if (c === \"-\") {\n nibbles += \"e\";\n } else {\n nibbles += c;\n }\n }\n nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n const out = [30];\n for (let i = 0, ii = nibbles.length; i < ii; i += 2) {\n out.push(parseInt(nibbles.substr(i, 2), 16));\n }\n return out;\n};\nsizeOf.REAL = function(v) {\n return encode.REAL(v).length;\n};\nencode.NAME = encode.CHARARRAY;\nsizeOf.NAME = sizeOf.CHARARRAY;\nencode.STRING = encode.CHARARRAY;\nsizeOf.STRING = sizeOf.CHARARRAY;\ndecode.UTF8 = function(data, offset, numBytes) {\n const codePoints = [];\n const numChars = numBytes;\n for (let j = 0; j < numChars; j++, offset += 1) {\n codePoints[j] = data.getUint8(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n};\ndecode.UTF16 = function(data, offset, numBytes) {\n const codePoints = [];\n const numChars = numBytes / 2;\n for (let j = 0; j < numChars; j++, offset += 2) {\n codePoints[j] = data.getUint16(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n};\nencode.UTF16 = function(v) {\n const b = [];\n for (let i = 0; i < v.length; i += 1) {\n const codepoint = v.charCodeAt(i);\n b[b.length] = codepoint >> 8 & 255;\n b[b.length] = codepoint & 255;\n }\n return b;\n};\nsizeOf.UTF16 = function(v) {\n return v.length * 2;\n};\nvar eightBitMacEncodings = {\n \"x-mac-croatian\": (\n // Python: 'mac_croatian'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\u0160\\u2122\\xB4\\xA8\\u2260\\u017D\\xD8\\u221E\\xB1\\u2264\\u2265\\u2206\\xB5\\u2202\\u2211\\u220F\\u0161\\u222B\\xAA\\xBA\\u03A9\\u017E\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u0106\\xAB\\u010C\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u0110\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\uF8FF\\xA9\\u2044\\u20AC\\u2039\\u203A\\xC6\\xBB\\u2013\\xB7\\u201A\\u201E\\u2030\\xC2\\u0107\\xC1\\u010D\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\u0111\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u03C0\\xCB\\u02DA\\xB8\\xCA\\xE6\\u02C7\"\n ),\n \"x-mac-cyrillic\": (\n // Python: 'mac_cyrillic'\n \"\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041A\\u041B\\u041C\\u041D\\u041E\\u041F\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042A\\u042B\\u042C\\u042D\\u042E\\u042F\\u2020\\xB0\\u0490\\xA3\\xA7\\u2022\\xB6\\u0406\\xAE\\xA9\\u2122\\u0402\\u0452\\u2260\\u0403\\u0453\\u221E\\xB1\\u2264\\u2265\\u0456\\xB5\\u0491\\u0408\\u0404\\u0454\\u0407\\u0457\\u0409\\u0459\\u040A\\u045A\\u0458\\u0405\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\u040B\\u045B\\u040C\\u045C\\u0455\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u201E\\u040E\\u045E\\u040F\\u045F\\u2116\\u0401\\u0451\\u044F\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043A\\u043B\\u043C\\u043D\\u043E\\u043F\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044A\\u044B\\u044C\\u044D\\u044E\"\n ),\n \"x-mac-gaelic\": (\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u1E02\\xB1\\u2264\\u2265\\u1E03\\u010A\\u010B\\u1E0A\\u1E0B\\u1E1E\\u1E1F\\u0120\\u0121\\u1E40\\xE6\\xF8\\u1E41\\u1E56\\u1E57\\u027C\\u0192\\u017F\\u1E60\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\u1E61\\u1E9B\\xFF\\u0178\\u1E6A\\u20AC\\u2039\\u203A\\u0176\\u0177\\u1E6B\\xB7\\u1EF2\\u1EF3\\u204A\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\u2663\\xD2\\xDA\\xDB\\xD9\\u0131\\xDD\\xFD\\u0174\\u0175\\u1E84\\u1E85\\u1E80\\u1E81\\u1E82\\u1E83\"\n ),\n \"x-mac-greek\": (\n // Python: 'mac_greek'\n \"\\xC4\\xB9\\xB2\\xC9\\xB3\\xD6\\xDC\\u0385\\xE0\\xE2\\xE4\\u0384\\xA8\\xE7\\xE9\\xE8\\xEA\\xEB\\xA3\\u2122\\xEE\\xEF\\u2022\\xBD\\u2030\\xF4\\xF6\\xA6\\u20AC\\xF9\\xFB\\xFC\\u2020\\u0393\\u0394\\u0398\\u039B\\u039E\\u03A0\\xDF\\xAE\\xA9\\u03A3\\u03AA\\xA7\\u2260\\xB0\\xB7\\u0391\\xB1\\u2264\\u2265\\xA5\\u0392\\u0395\\u0396\\u0397\\u0399\\u039A\\u039C\\u03A6\\u03AB\\u03A8\\u03A9\\u03AC\\u039D\\xAC\\u039F\\u03A1\\u2248\\u03A4\\xAB\\xBB\\u2026\\xA0\\u03A5\\u03A7\\u0386\\u0388\\u0153\\u2013\\u2015\\u201C\\u201D\\u2018\\u2019\\xF7\\u0389\\u038A\\u038C\\u038E\\u03AD\\u03AE\\u03AF\\u03CC\\u038F\\u03CD\\u03B1\\u03B2\\u03C8\\u03B4\\u03B5\\u03C6\\u03B3\\u03B7\\u03B9\\u03BE\\u03BA\\u03BB\\u03BC\\u03BD\\u03BF\\u03C0\\u03CE\\u03C1\\u03C3\\u03C4\\u03B8\\u03C9\\u03C2\\u03C7\\u03C5\\u03B6\\u03CA\\u03CB\\u0390\\u03B0\\xAD\"\n ),\n \"x-mac-icelandic\": (\n // Python: 'mac_iceland'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\xDD\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\xD0\\xF0\\xDE\\xFE\\xFD\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-inuit\": (\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT\n \"\\u1403\\u1404\\u1405\\u1406\\u140A\\u140B\\u1431\\u1432\\u1433\\u1434\\u1438\\u1439\\u1449\\u144E\\u144F\\u1450\\u1451\\u1455\\u1456\\u1466\\u146D\\u146E\\u146F\\u1470\\u1472\\u1473\\u1483\\u148B\\u148C\\u148D\\u148E\\u1490\\u1491\\xB0\\u14A1\\u14A5\\u14A6\\u2022\\xB6\\u14A7\\xAE\\xA9\\u2122\\u14A8\\u14AA\\u14AB\\u14BB\\u14C2\\u14C3\\u14C4\\u14C5\\u14C7\\u14C8\\u14D0\\u14EF\\u14F0\\u14F1\\u14F2\\u14F4\\u14F5\\u1505\\u14D5\\u14D6\\u14D7\\u14D8\\u14DA\\u14DB\\u14EA\\u1528\\u1529\\u152A\\u152B\\u152D\\u2026\\xA0\\u152E\\u153E\\u1555\\u1556\\u1557\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\u1558\\u1559\\u155A\\u155D\\u1546\\u1547\\u1548\\u1549\\u154B\\u154C\\u1550\\u157F\\u1580\\u1581\\u1582\\u1583\\u1584\\u1585\\u158F\\u1590\\u1591\\u1592\\u1593\\u1594\\u1595\\u1671\\u1672\\u1673\\u1674\\u1675\\u1676\\u1596\\u15A0\\u15A1\\u15A2\\u15A3\\u15A4\\u15A5\\u15A6\\u157C\\u0141\\u0142\"\n ),\n \"x-mac-ce\": (\n // Python: 'mac_latin2'\n \"\\xC4\\u0100\\u0101\\xC9\\u0104\\xD6\\xDC\\xE1\\u0105\\u010C\\xE4\\u010D\\u0106\\u0107\\xE9\\u0179\\u017A\\u010E\\xED\\u010F\\u0112\\u0113\\u0116\\xF3\\u0117\\xF4\\xF6\\xF5\\xFA\\u011A\\u011B\\xFC\\u2020\\xB0\\u0118\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\u0119\\xA8\\u2260\\u0123\\u012E\\u012F\\u012A\\u2264\\u2265\\u012B\\u0136\\u2202\\u2211\\u0142\\u013B\\u013C\\u013D\\u013E\\u0139\\u013A\\u0145\\u0146\\u0143\\xAC\\u221A\\u0144\\u0147\\u2206\\xAB\\xBB\\u2026\\xA0\\u0148\\u0150\\xD5\\u0151\\u014C\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\u014D\\u0154\\u0155\\u0158\\u2039\\u203A\\u0159\\u0156\\u0157\\u0160\\u201A\\u201E\\u0161\\u015A\\u015B\\xC1\\u0164\\u0165\\xCD\\u017D\\u017E\\u016A\\xD3\\xD4\\u016B\\u016E\\xDA\\u016F\\u0170\\u0171\\u0172\\u0173\\xDD\\xFD\\u0137\\u017B\\u0141\\u017C\\u0122\\u02C7\"\n ),\n macintosh: (\n // Python: 'mac_roman'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\u2039\\u203A\\uFB01\\uFB02\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-romanian\": (\n // Python: 'mac_romanian'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\u0102\\u0218\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\u0103\\u0219\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\u2039\\u203A\\u021A\\u021B\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-turkish\": (\n // Python: 'mac_turkish'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u011E\\u011F\\u0130\\u0131\\u015E\\u015F\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\uF8A0\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n )\n};\ndecode.MACSTRING = function(dataView, offset, dataLength, encoding) {\n const table = eightBitMacEncodings[encoding];\n if (table === void 0) {\n return void 0;\n }\n let result = \"\";\n for (let i = 0; i < dataLength; i++) {\n const c = dataView.getUint8(offset + i);\n if (c <= 127) {\n result += String.fromCharCode(c);\n } else {\n result += table[c & 127];\n }\n }\n return result;\n};\nvar macEncodingTableCache = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\nvar macEncodingCacheKeys;\nvar getMacEncodingTable = function(encoding) {\n if (!macEncodingCacheKeys) {\n macEncodingCacheKeys = {};\n for (let e in eightBitMacEncodings) {\n macEncodingCacheKeys[e] = new String(e);\n }\n }\n const cacheKey = macEncodingCacheKeys[encoding];\n if (cacheKey === void 0) {\n return void 0;\n }\n if (macEncodingTableCache) {\n const cachedTable = macEncodingTableCache.get(cacheKey);\n if (cachedTable !== void 0) {\n return cachedTable;\n }\n }\n const decodingTable = eightBitMacEncodings[encoding];\n if (decodingTable === void 0) {\n return void 0;\n }\n const encodingTable = {};\n for (let i = 0; i < decodingTable.length; i++) {\n encodingTable[decodingTable.charCodeAt(i)] = i + 128;\n }\n if (macEncodingTableCache) {\n macEncodingTableCache.set(cacheKey, encodingTable);\n }\n return encodingTable;\n};\nencode.MACSTRING = function(str, encoding) {\n const table = getMacEncodingTable(encoding);\n if (table === void 0) {\n return void 0;\n }\n const result = [];\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c >= 128) {\n c = table[c];\n if (c === void 0) {\n return void 0;\n }\n }\n result[i] = c;\n }\n return result;\n};\nsizeOf.MACSTRING = function(str, encoding) {\n const b = encode.MACSTRING(str, encoding);\n if (b !== void 0) {\n return b.length;\n } else {\n return 0;\n }\n};\nfunction isByteEncodable(value) {\n return value >= -128 && value <= 127;\n}\nfunction encodeVarDeltaRunAsZeroes(deltas, pos, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {\n ++pos;\n ++runLength;\n }\n result.push(128 | runLength - 1);\n return pos;\n}\nfunction encodeVarDeltaRunAsBytes(deltas, offset, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n let pos = offset;\n while (pos < numDeltas && runLength < 64) {\n const value = deltas[pos];\n if (!isByteEncodable(value)) {\n break;\n }\n if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(runLength - 1);\n for (let i = offset; i < pos; ++i) {\n result.push(deltas[i] + 256 & 255);\n }\n return pos;\n}\nfunction encodeVarDeltaRunAsWords(deltas, offset, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n let pos = offset;\n while (pos < numDeltas && runLength < 64) {\n const value = deltas[pos];\n if (value === 0) {\n break;\n }\n if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(64 | runLength - 1);\n for (let i = offset; i < pos; ++i) {\n const val = deltas[i];\n result.push(val + 65536 >> 8 & 255, val + 256 & 255);\n }\n return pos;\n}\nencode.VARDELTAS = function(deltas) {\n let pos = 0;\n const result = [];\n while (pos < deltas.length) {\n const value = deltas[pos];\n if (value === 0) {\n pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);\n } else if (value >= -128 && value <= 127) {\n pos = encodeVarDeltaRunAsBytes(deltas, pos, result);\n } else {\n pos = encodeVarDeltaRunAsWords(deltas, pos, result);\n }\n }\n return result;\n};\nencode.INDEX = function(l) {\n let offset = 1;\n const offsets = [offset];\n const data = [];\n for (let i = 0; i < l.length; i += 1) {\n const v = encode.OBJECT(l[i]);\n Array.prototype.push.apply(data, v);\n offset += v.length;\n offsets.push(offset);\n }\n if (data.length === 0) {\n return [0, 0];\n }\n const encodedOffsets = [];\n const offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0;\n const offsetEncoder = [void 0, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize];\n for (let i = 0; i < offsets.length; i += 1) {\n const encodedOffset = offsetEncoder(offsets[i]);\n Array.prototype.push.apply(encodedOffsets, encodedOffset);\n }\n return Array.prototype.concat(\n encode.Card16(l.length),\n encode.OffSize(offSize),\n encodedOffsets,\n data\n );\n};\nsizeOf.INDEX = function(v) {\n return encode.INDEX(v).length;\n};\nencode.DICT = function(m) {\n let d = [];\n const keys = Object.keys(m);\n const length = keys.length;\n for (let i = 0; i < length; i += 1) {\n const k = parseInt(keys[i], 0);\n const v = m[k];\n const enc1 = encode.OPERAND(v.value, v.type);\n const enc2 = encode.OPERATOR(k);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n for (let j = 0; j < enc2.length; j++) {\n d.push(enc2[j]);\n }\n }\n return d;\n};\nsizeOf.DICT = function(m) {\n return encode.DICT(m).length;\n};\nencode.OPERATOR = function(v) {\n if (v < 1200) {\n return [v];\n } else {\n return [12, v - 1200];\n }\n};\nencode.OPERAND = function(v, type) {\n let d = [];\n if (Array.isArray(type)) {\n for (let i = 0; i < type.length; i += 1) {\n check_default.argument(v.length === type.length, \"Not enough arguments given for type\" + type);\n const enc1 = encode.OPERAND(v[i], type[i]);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n }\n } else {\n if (type === \"SID\") {\n const enc1 = encode.NUMBER(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"offset\") {\n const enc1 = encode.NUMBER32(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"number\") {\n const enc1 = encode.NUMBER(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"real\") {\n const enc1 = encode.REAL(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else {\n throw new Error(\"Unknown operand type \" + type);\n }\n }\n return d;\n};\nencode.OP = encode.BYTE;\nsizeOf.OP = sizeOf.BYTE;\nvar wmm = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\nencode.CHARSTRING = function(ops) {\n if (wmm) {\n const cachedValue = wmm.get(ops);\n if (cachedValue !== void 0) {\n return cachedValue;\n }\n }\n let d = [];\n const length = ops.length;\n for (let i = 0; i < length; i += 1) {\n const op = ops[i];\n const enc1 = encode[op.type](op.value);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n }\n if (wmm) {\n wmm.set(ops, d);\n }\n return d;\n};\nsizeOf.CHARSTRING = function(ops) {\n return encode.CHARSTRING(ops).length;\n};\nencode.OBJECT = function(v) {\n const encodingFunction = encode[v.type];\n check_default.argument(encodingFunction !== void 0, \"No encoding function for type \" + v.type);\n return encodingFunction(v.value);\n};\nsizeOf.OBJECT = function(v) {\n const sizeOfFunction = sizeOf[v.type];\n check_default.argument(sizeOfFunction !== void 0, \"No sizeOf function for type \" + v.type);\n return sizeOfFunction(v.value);\n};\nencode.TABLE = function(table) {\n let d = [];\n const length = (table.fields || []).length;\n const subtables = [];\n const subtableOffsets = [];\n for (let i = 0; i < length; i += 1) {\n const field = table.fields[i];\n const encodingFunction = encode[field.type];\n check_default.argument(encodingFunction !== void 0, \"No encoding function for field type \" + field.type + \" (\" + field.name + \")\");\n let value = table[field.name];\n if (value === void 0) {\n value = field.value;\n }\n const bytes = encodingFunction(value);\n if (field.type === \"TABLE\") {\n if (value.fields !== null) {\n subtableOffsets.push(d.length);\n subtables.push(bytes);\n }\n d.push(...[0, 0]);\n } else {\n for (let j = 0; j < bytes.length; j++) {\n d.push(bytes[j]);\n }\n }\n }\n for (let i = 0; i < subtables.length; i += 1) {\n const o = subtableOffsets[i];\n const offset = d.length;\n check_default.argument(offset < 65536, \"Table \" + table.tableName + \" too big.\");\n d[o] = offset >> 8;\n d[o + 1] = offset & 255;\n for (let j = 0; j < subtables[i].length; j++) {\n d.push(subtables[i][j]);\n }\n }\n return d;\n};\nsizeOf.TABLE = function(table) {\n let numBytes = 0;\n const length = (table.fields || []).length;\n for (let i = 0; i < length; i += 1) {\n const field = table.fields[i];\n const sizeOfFunction = sizeOf[field.type];\n check_default.argument(sizeOfFunction !== void 0, \"No sizeOf function for field type \" + field.type + \" (\" + field.name + \")\");\n let value = table[field.name];\n if (value === void 0) {\n value = field.value;\n }\n numBytes += sizeOfFunction(value);\n if (field.type === \"TABLE\") {\n numBytes += 2;\n }\n }\n return numBytes;\n};\nencode.RECORD = encode.TABLE;\nsizeOf.RECORD = sizeOf.TABLE;\nencode.LITERAL = function(v) {\n return v;\n};\nsizeOf.LITERAL = function(v) {\n return v.length;\n};\n\n// src/table.mjs\nfunction Table(tableName, fields, options) {\n if (fields && fields.length) {\n for (let i = 0; i < fields.length; i += 1) {\n const field = fields[i];\n this[field.name] = field.value;\n }\n }\n this.tableName = tableName;\n this.fields = fields;\n if (options) {\n const optionKeys = Object.keys(options);\n for (let i = 0; i < optionKeys.length; i += 1) {\n const k = optionKeys[i];\n const v = options[k];\n if (this[k] !== void 0) {\n this[k] = v;\n }\n }\n }\n}\nTable.prototype.encode = function() {\n return encode.TABLE(this);\n};\nTable.prototype.sizeOf = function() {\n return sizeOf.TABLE(this);\n};\nfunction ushortList(itemName, list, count) {\n if (count === void 0) {\n count = list.length;\n }\n const fields = new Array(list.length + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < list.length; i++) {\n fields[i + 1] = { name: itemName + i, type: \"USHORT\", value: list[i] };\n }\n return fields;\n}\nfunction tableList(itemName, records, itemCallback) {\n const count = records.length;\n const fields = new Array(count + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < count; i++) {\n fields[i + 1] = { name: itemName + i, type: \"TABLE\", value: itemCallback(records[i], i) };\n }\n return fields;\n}\nfunction recordList(itemName, records, itemCallback) {\n const count = records.length;\n let fields = [];\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < count; i++) {\n fields = fields.concat(itemCallback(records[i], i));\n }\n return fields;\n}\nfunction Coverage(coverageTable) {\n if (coverageTable.format === 1) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 1 }].concat(ushortList(\"glyph\", coverageTable.glyphs))\n );\n } else if (coverageTable.format === 2) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 2 }].concat(recordList(\"rangeRecord\", coverageTable.ranges, function(RangeRecord, i) {\n return [\n { name: \"startGlyphID\" + i, type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\" + i, type: \"USHORT\", value: RangeRecord.end },\n { name: \"startCoverageIndex\" + i, type: \"USHORT\", value: RangeRecord.index }\n ];\n }))\n );\n } else {\n check_default.assert(false, \"Coverage format must be 1 or 2.\");\n }\n}\nCoverage.prototype = Object.create(Table.prototype);\nCoverage.prototype.constructor = Coverage;\nfunction ScriptList(scriptListTable) {\n Table.call(\n this,\n \"scriptListTable\",\n recordList(\"scriptRecord\", scriptListTable, function(scriptRecord, i) {\n const script = scriptRecord.script;\n let defaultLangSys = script.defaultLangSys;\n check_default.assert(!!defaultLangSys, \"Unable to write GSUB: script \" + scriptRecord.tag + \" has no default language system.\");\n return [\n { name: \"scriptTag\" + i, type: \"TAG\", value: scriptRecord.tag },\n { name: \"script\" + i, type: \"TABLE\", value: new Table(\"scriptTable\", [\n { name: \"defaultLangSys\", type: \"TABLE\", value: new Table(\"defaultLangSys\", [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: defaultLangSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", defaultLangSys.featureIndexes))) }\n ].concat(recordList(\"langSys\", script.langSysRecords, function(langSysRecord, i2) {\n const langSys = langSysRecord.langSys;\n return [\n { name: \"langSysTag\" + i2, type: \"TAG\", value: langSysRecord.tag },\n { name: \"langSys\" + i2, type: \"TABLE\", value: new Table(\"langSys\", [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: langSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", langSys.featureIndexes))) }\n ];\n }))) }\n ];\n })\n );\n}\nScriptList.prototype = Object.create(Table.prototype);\nScriptList.prototype.constructor = ScriptList;\nfunction FeatureList(featureListTable) {\n Table.call(\n this,\n \"featureListTable\",\n recordList(\"featureRecord\", featureListTable, function(featureRecord, i) {\n const feature = featureRecord.feature;\n return [\n { name: \"featureTag\" + i, type: \"TAG\", value: featureRecord.tag },\n { name: \"feature\" + i, type: \"TABLE\", value: new Table(\"featureTable\", [\n { name: \"featureParams\", type: \"USHORT\", value: feature.featureParams }\n ].concat(ushortList(\"lookupListIndex\", feature.lookupListIndexes))) }\n ];\n })\n );\n}\nFeatureList.prototype = Object.create(Table.prototype);\nFeatureList.prototype.constructor = FeatureList;\nfunction LookupList(lookupListTable, subtableMakers3) {\n Table.call(this, \"lookupListTable\", tableList(\"lookup\", lookupListTable, function(lookupTable) {\n let subtableCallback = subtableMakers3[lookupTable.lookupType];\n check_default.assert(!!subtableCallback, \"Unable to write GSUB lookup type \" + lookupTable.lookupType + \" tables.\");\n return new Table(\"lookupTable\", [\n { name: \"lookupType\", type: \"USHORT\", value: lookupTable.lookupType },\n { name: \"lookupFlag\", type: \"USHORT\", value: lookupTable.lookupFlag }\n ].concat(tableList(\"subtable\", lookupTable.subtables, subtableCallback)));\n }));\n}\nLookupList.prototype = Object.create(Table.prototype);\nLookupList.prototype.constructor = LookupList;\nfunction ClassDef(classDefTable) {\n if (classDefTable.format === 1) {\n Table.call(\n this,\n \"classDefTable\",\n [\n { name: \"classFormat\", type: \"USHORT\", value: 1 },\n { name: \"startGlyphID\", type: \"USHORT\", value: classDefTable.startGlyph }\n ].concat(ushortList(\"glyph\", classDefTable.classes))\n );\n } else if (classDefTable.format === 2) {\n Table.call(\n this,\n \"classDefTable\",\n [{ name: \"classFormat\", type: \"USHORT\", value: 2 }].concat(recordList(\"rangeRecord\", classDefTable.ranges, function(RangeRecord, i) {\n return [\n { name: \"startGlyphID\" + i, type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\" + i, type: \"USHORT\", value: RangeRecord.end },\n { name: \"class\" + i, type: \"USHORT\", value: RangeRecord.classId }\n ];\n }))\n );\n } else {\n check_default.assert(false, \"Class format must be 1 or 2.\");\n }\n}\nClassDef.prototype = Object.create(Table.prototype);\nClassDef.prototype.constructor = ClassDef;\nvar table_default = {\n Table,\n Record: Table,\n Coverage,\n ClassDef,\n ScriptList,\n FeatureList,\n LookupList,\n ushortList,\n tableList,\n recordList\n};\n\n// src/parse.mjs\nfunction getByte(dataView, offset) {\n return dataView.getUint8(offset);\n}\nfunction getUShort(dataView, offset) {\n return dataView.getUint16(offset, false);\n}\nfunction getShort(dataView, offset) {\n return dataView.getInt16(offset, false);\n}\nfunction getUInt24(dataView, offset) {\n return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n}\nfunction getULong(dataView, offset) {\n return dataView.getUint32(offset, false);\n}\nfunction getLong(dataView, offset) {\n return dataView.getInt32(offset, false);\n}\nfunction getFixed(dataView, offset) {\n const decimal = dataView.getInt16(offset, false);\n const fraction = dataView.getUint16(offset + 2, false);\n return decimal + fraction / 65535;\n}\nfunction getTag(dataView, offset) {\n let tag = \"\";\n for (let i = offset; i < offset + 4; i += 1) {\n tag += String.fromCharCode(dataView.getInt8(i));\n }\n return tag;\n}\nfunction getOffset(dataView, offset, offSize) {\n let v = 0;\n for (let i = 0; i < offSize; i += 1) {\n v <<= 8;\n v += dataView.getUint8(offset + i);\n }\n return v;\n}\nfunction getBytes(dataView, startOffset, endOffset) {\n const bytes = [];\n for (let i = startOffset; i < endOffset; i += 1) {\n bytes.push(dataView.getUint8(i));\n }\n return bytes;\n}\nfunction bytesToString(bytes) {\n let s = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n s += String.fromCharCode(bytes[i]);\n }\n return s;\n}\nvar typeOffsets = {\n byte: 1,\n uShort: 2,\n f2dot14: 2,\n short: 2,\n uInt24: 3,\n uLong: 4,\n fixed: 4,\n longDateTime: 8,\n tag: 4\n};\nvar masks = {\n LONG_WORDS: 32768,\n WORD_DELTA_COUNT_MASK: 32767,\n SHARED_POINT_NUMBERS: 32768,\n COUNT_MASK: 4095,\n EMBEDDED_PEAK_TUPLE: 32768,\n INTERMEDIATE_REGION: 16384,\n PRIVATE_POINT_NUMBERS: 8192,\n TUPLE_INDEX_MASK: 4095,\n POINTS_ARE_WORDS: 128,\n POINT_RUN_COUNT_MASK: 127,\n DELTAS_ARE_ZERO: 128,\n DELTAS_ARE_WORDS: 64,\n DELTA_RUN_COUNT_MASK: 63,\n INNER_INDEX_BIT_COUNT_MASK: 15,\n MAP_ENTRY_SIZE_MASK: 48\n};\nfunction Parser(data, offset) {\n this.data = data;\n this.offset = offset;\n this.relativeOffset = 0;\n}\nParser.prototype.parseByte = function() {\n const v = this.data.getUint8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n};\nParser.prototype.parseChar = function() {\n const v = this.data.getInt8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n};\nParser.prototype.parseCard8 = Parser.prototype.parseByte;\nParser.prototype.parseUShort = function() {\n const v = this.data.getUint16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseCard16 = Parser.prototype.parseUShort;\nParser.prototype.parseSID = Parser.prototype.parseUShort;\nParser.prototype.parseOffset16 = Parser.prototype.parseUShort;\nParser.prototype.parseShort = function() {\n const v = this.data.getInt16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseF2Dot14 = function() {\n const v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseUInt24 = function() {\n const v = getUInt24(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 3;\n return v;\n};\nParser.prototype.parseULong = function() {\n const v = getULong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseLong = function() {\n const v = getLong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseOffset32 = Parser.prototype.parseULong;\nParser.prototype.parseFixed = function() {\n const v = getFixed(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseString = function(length) {\n const dataView = this.data;\n const offset = this.offset + this.relativeOffset;\n let string = \"\";\n this.relativeOffset += length;\n for (let i = 0; i < length; i++) {\n string += String.fromCharCode(dataView.getUint8(offset + i));\n }\n return string;\n};\nParser.prototype.parseTag = function() {\n return this.parseString(4);\n};\nParser.prototype.parseLongDateTime = function() {\n let v = getULong(this.data, this.offset + this.relativeOffset + 4);\n v -= 2082844800;\n this.relativeOffset += 8;\n return v;\n};\nParser.prototype.parseVersion = function(minorBase) {\n const major = getUShort(this.data, this.offset + this.relativeOffset);\n const minor = getUShort(this.data, this.offset + this.relativeOffset + 2);\n this.relativeOffset += 4;\n if (minorBase === void 0) minorBase = 4096;\n return major + minor / minorBase / 10;\n};\nParser.prototype.skip = function(type, amount) {\n if (amount === void 0) {\n amount = 1;\n }\n this.relativeOffset += typeOffsets[type] * amount;\n};\nParser.prototype.parseULongList = function(count) {\n if (count === void 0) {\n count = this.parseULong();\n }\n const offsets = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n offsets[i] = dataView.getUint32(offset);\n offset += 4;\n }\n this.relativeOffset += count * 4;\n return offsets;\n};\nParser.prototype.parseOffset16List = Parser.prototype.parseUShortList = function(count) {\n if (count === void 0) {\n count = this.parseUShort();\n }\n const offsets = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n offsets[i] = dataView.getUint16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return offsets;\n};\nParser.prototype.parseShortList = function(count) {\n const list = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n list[i] = dataView.getInt16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return list;\n};\nParser.prototype.parseByteList = function(count) {\n const list = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n list[i] = dataView.getUint8(offset++);\n }\n this.relativeOffset += count;\n return list;\n};\nParser.prototype.parseList = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseUShort();\n }\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n};\nParser.prototype.parseList32 = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseULong();\n }\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n};\nParser.prototype.parseRecordList = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseUShort();\n }\n const records = new Array(count);\n const fields = Object.keys(recordDescription);\n for (let i = 0; i < count; i++) {\n const rec = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n};\nParser.prototype.parseRecordList32 = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseULong();\n }\n const records = new Array(count);\n const fields = Object.keys(recordDescription);\n for (let i = 0; i < count; i++) {\n const rec = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n};\nParser.prototype.parseTupleRecords = function(tupleCount, axisCount) {\n let tuples = [];\n for (let i = 0; i < tupleCount; i++) {\n let tuple = [];\n for (let axisIndex = 0; axisIndex < axisCount; axisIndex++) {\n tuple.push(this.parseF2Dot14());\n }\n tuples.push(tuple);\n }\n return tuples;\n};\nParser.prototype.parseStruct = function(description) {\n if (typeof description === \"function\") {\n return description.call(this);\n } else {\n const fields = Object.keys(description);\n const struct = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = description[fieldName];\n struct[fieldName] = fieldType.call(this);\n }\n return struct;\n }\n};\nParser.prototype.parseValueRecord = function(valueFormat) {\n if (valueFormat === void 0) {\n valueFormat = this.parseUShort();\n }\n if (valueFormat === 0) {\n return;\n }\n const valueRecord = {};\n if (valueFormat & 1) {\n valueRecord.xPlacement = this.parseShort();\n }\n if (valueFormat & 2) {\n valueRecord.yPlacement = this.parseShort();\n }\n if (valueFormat & 4) {\n valueRecord.xAdvance = this.parseShort();\n }\n if (valueFormat & 8) {\n valueRecord.yAdvance = this.parseShort();\n }\n if (valueFormat & 16) {\n valueRecord.xPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 32) {\n valueRecord.yPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 64) {\n valueRecord.xAdvDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 128) {\n valueRecord.yAdvDevice = void 0;\n this.parseShort();\n }\n return valueRecord;\n};\nParser.prototype.parseValueRecordList = function() {\n const valueFormat = this.parseUShort();\n const valueCount = this.parseUShort();\n const values = new Array(valueCount);\n for (let i = 0; i < valueCount; i++) {\n values[i] = this.parseValueRecord(valueFormat);\n }\n return values;\n};\nParser.prototype.parsePointer = function(description) {\n const structOffset = this.parseOffset16();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n};\nParser.prototype.parsePointer32 = function(description) {\n const structOffset = this.parseOffset32();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n};\nParser.prototype.parseListOfLists = function(itemCallback) {\n const offsets = this.parseOffset16List();\n const count = offsets.length;\n const relativeOffset = this.relativeOffset;\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n const start = offsets[i];\n if (start === 0) {\n list[i] = void 0;\n continue;\n }\n this.relativeOffset = start;\n if (itemCallback) {\n const subOffsets = this.parseOffset16List();\n const subList = new Array(subOffsets.length);\n for (let j = 0; j < subOffsets.length; j++) {\n this.relativeOffset = start + subOffsets[j];\n subList[j] = itemCallback.call(this);\n }\n list[i] = subList;\n } else {\n list[i] = this.parseUShortList();\n }\n }\n this.relativeOffset = relativeOffset;\n return list;\n};\nParser.prototype.parseCoverage = function() {\n const startOffset = this.offset + this.relativeOffset;\n const format = this.parseUShort();\n const count = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n glyphs: this.parseUShortList(count)\n };\n } else if (format === 2) {\n const ranges = new Array(count);\n for (let i = 0; i < count; i++) {\n ranges[i] = {\n start: this.parseUShort(),\n end: this.parseUShort(),\n index: this.parseUShort()\n };\n }\n return {\n format: 2,\n ranges\n };\n }\n throw new Error(\"0x\" + startOffset.toString(16) + \": Coverage format must be 1 or 2.\");\n};\nParser.prototype.parseClassDef = function() {\n const startOffset = this.offset + this.relativeOffset;\n const format = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n startGlyph: this.parseUShort(),\n classes: this.parseUShortList()\n };\n } else if (format === 2) {\n return {\n format: 2,\n ranges: this.parseRecordList({\n start: Parser.uShort,\n end: Parser.uShort,\n classId: Parser.uShort\n })\n };\n }\n console.warn(`0x${startOffset.toString(16)}: This font file uses an invalid ClassDef format of ${format}. It might be corrupted and should be reacquired if it doesn't display as intended.`);\n return {\n format\n };\n};\nParser.list = function(count, itemCallback) {\n return function() {\n return this.parseList(count, itemCallback);\n };\n};\nParser.list32 = function(count, itemCallback) {\n return function() {\n return this.parseList32(count, itemCallback);\n };\n};\nParser.recordList = function(count, recordDescription) {\n return function() {\n return this.parseRecordList(count, recordDescription);\n };\n};\nParser.recordList32 = function(count, recordDescription) {\n return function() {\n return this.parseRecordList32(count, recordDescription);\n };\n};\nParser.pointer = function(description) {\n return function() {\n return this.parsePointer(description);\n };\n};\nParser.pointer32 = function(description) {\n return function() {\n return this.parsePointer32(description);\n };\n};\nParser.tag = Parser.prototype.parseTag;\nParser.byte = Parser.prototype.parseByte;\nParser.uShort = Parser.offset16 = Parser.prototype.parseUShort;\nParser.uShortList = Parser.prototype.parseUShortList;\nParser.uInt24 = Parser.prototype.parseUInt24;\nParser.uLong = Parser.offset32 = Parser.prototype.parseULong;\nParser.uLongList = Parser.prototype.parseULongList;\nParser.fixed = Parser.prototype.parseFixed;\nParser.f2Dot14 = Parser.prototype.parseF2Dot14;\nParser.struct = Parser.prototype.parseStruct;\nParser.coverage = Parser.prototype.parseCoverage;\nParser.classDef = Parser.prototype.parseClassDef;\nvar langSysTable = {\n reserved: Parser.uShort,\n reqFeatureIndex: Parser.uShort,\n featureIndexes: Parser.uShortList\n};\nParser.prototype.parseScriptList = function() {\n return this.parsePointer(Parser.recordList({\n tag: Parser.tag,\n script: Parser.pointer({\n defaultLangSys: Parser.pointer(langSysTable),\n langSysRecords: Parser.recordList({\n tag: Parser.tag,\n langSys: Parser.pointer(langSysTable)\n })\n })\n })) || [];\n};\nParser.prototype.parseFeatureList = function() {\n return this.parsePointer(Parser.recordList({\n tag: Parser.tag,\n feature: Parser.pointer({\n featureParams: Parser.offset16,\n lookupListIndexes: Parser.uShortList\n })\n })) || [];\n};\nParser.prototype.parseLookupList = function(lookupTableParsers) {\n return this.parsePointer(Parser.list(Parser.pointer(function() {\n const lookupType = this.parseUShort();\n check_default.argument(1 <= lookupType && lookupType <= 9, \"GPOS/GSUB lookup type \" + lookupType + \" unknown.\");\n const lookupFlag = this.parseUShort();\n const useMarkFilteringSet = lookupFlag & 16;\n return {\n lookupType,\n lookupFlag,\n subtables: this.parseList(Parser.pointer(lookupTableParsers[lookupType])),\n markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0\n };\n }))) || [];\n};\nParser.prototype.parseFeatureVariationsList = function() {\n return this.parsePointer32(function() {\n const majorVersion = this.parseUShort();\n const minorVersion = this.parseUShort();\n check_default.argument(majorVersion === 1 && minorVersion < 1, \"GPOS/GSUB feature variations table unknown.\");\n const featureVariations = this.parseRecordList32({\n conditionSetOffset: Parser.offset32,\n featureTableSubstitutionOffset: Parser.offset32\n });\n return featureVariations;\n }) || [];\n};\nParser.prototype.parseVariationStore = function() {\n const vsOffset = this.relativeOffset;\n const length = this.parseUShort();\n const variationStore = {\n itemVariationStore: this.parseItemVariationStore()\n };\n this.relativeOffset = vsOffset + length + 2;\n return variationStore;\n};\nParser.prototype.parseItemVariationStore = function() {\n const itemStoreOffset = this.relativeOffset;\n const iVStore = {\n format: this.parseUShort(),\n variationRegions: [],\n itemVariationSubtables: []\n };\n const variationRegionListOffset = this.parseOffset32();\n const itemVariationDataCount = this.parseUShort();\n const itemVariationDataOffsets = this.parseULongList(itemVariationDataCount);\n this.relativeOffset = itemStoreOffset + variationRegionListOffset;\n iVStore.variationRegions = this.parseVariationRegionList();\n for (let i = 0; i < itemVariationDataCount; i++) {\n const subtableOffset = itemVariationDataOffsets[i];\n this.relativeOffset = itemStoreOffset + subtableOffset;\n iVStore.itemVariationSubtables.push(this.parseItemVariationSubtable());\n }\n return iVStore;\n};\nParser.prototype.parseVariationRegionList = function() {\n const axisCount = this.parseUShort();\n const regionCount = this.parseUShort();\n return this.parseRecordList(regionCount, {\n regionAxes: Parser.recordList(axisCount, {\n startCoord: Parser.f2Dot14,\n peakCoord: Parser.f2Dot14,\n endCoord: Parser.f2Dot14\n })\n });\n};\nParser.prototype.parseItemVariationSubtable = function() {\n const itemCount = this.parseUShort();\n const wordDeltaCount = this.parseUShort();\n const regionIndexes = this.parseUShortList();\n const regionIndexCount = regionIndexes.length;\n const subtable = {\n regionIndexes,\n deltaSets: itemCount && regionIndexCount ? this.parseDeltaSets(itemCount, wordDeltaCount, regionIndexCount) : []\n };\n return subtable;\n};\nParser.prototype.parseDeltaSetIndexMap = function() {\n const format = this.parseByte();\n const entryFormat = this.parseByte();\n const map = [];\n let mapCount = 0;\n switch (format) {\n case 0:\n mapCount = this.parseUShort();\n break;\n case 1:\n mapCount = this.parseULong();\n break;\n default:\n console.error(`unsupported DeltaSetIndexMap format ${format}`);\n }\n if (!mapCount) return {\n format,\n entryFormat\n };\n const bitCount = (entryFormat & masks.INNER_INDEX_BIT_COUNT_MASK) + 1;\n const entrySize = ((entryFormat & masks.MAP_ENTRY_SIZE_MASK) >> 4) + 1;\n for (let n = 0; n < mapCount; n++) {\n let entry;\n if (entrySize === 1) {\n entry = this.parseByte();\n } else if (entrySize === 2) {\n entry = this.parseUShort();\n } else if (entrySize === 3) {\n entry = this.parseUInt24();\n } else if (entrySize === 4) {\n entry = this.parseULong();\n } else {\n throw new Error(`Invalid entry size of ${entrySize}`);\n }\n const outerIndex = entry >> bitCount;\n const innerIndex = entry & (1 << bitCount) - 1;\n map.push({ outerIndex, innerIndex });\n }\n return {\n format,\n entryFormat,\n map\n };\n};\nParser.prototype.parseDeltaSets = function(itemCount, wordDeltaCount, regionIndexCount) {\n const deltas = Array.from({ length: itemCount }, () => []);\n const longFlag = wordDeltaCount & masks.LONG_WORDS;\n const wordCount = wordDeltaCount & masks.WORD_DELTA_COUNT_MASK;\n if (wordCount > regionIndexCount) {\n throw Error(\"wordCount must be less than or equal to regionIndexCount\");\n }\n const wordParser = (longFlag ? this.parseLong : this.parseShort).bind(this);\n const restParser = (longFlag ? this.parseShort : this.parseChar).bind(this);\n for (let i = 0; i < itemCount; i++) {\n for (let j = 0; j < regionIndexCount; j++) {\n if (j < wordCount) {\n deltas[i].push(wordParser());\n } else {\n deltas[i].push(restParser());\n }\n }\n }\n return deltas;\n};\nParser.prototype.parseTupleVariationStoreList = function(axisCount, flavor, glyphs) {\n const glyphCount = this.parseUShort();\n const flags = this.parseUShort();\n const offsetSizeIs32Bit = flags & 1;\n const glyphVariationDataArrayOffset = this.parseOffset32();\n const parseOffset = (offsetSizeIs32Bit ? this.parseULong : this.parseUShort).bind(this);\n const glyphVariations = {};\n let currentOffset = parseOffset();\n if (!offsetSizeIs32Bit) currentOffset *= 2;\n let nextOffset;\n for (let i = 0; i < glyphCount; i++) {\n nextOffset = parseOffset();\n if (!offsetSizeIs32Bit) nextOffset *= 2;\n const length = nextOffset - currentOffset;\n glyphVariations[i] = length ? this.parseTupleVariationStore(\n glyphVariationDataArrayOffset + currentOffset,\n axisCount,\n flavor,\n glyphs,\n i\n ) : void 0;\n currentOffset = nextOffset;\n }\n return glyphVariations;\n};\nParser.prototype.parseTupleVariationStore = function(tableOffset, axisCount, flavor, glyphs, glyphIndex) {\n const relativeOffset = this.relativeOffset;\n this.relativeOffset = tableOffset;\n if (flavor === \"cvar\") {\n this.relativeOffset += 4;\n }\n const tupleVariationCount = this.parseUShort();\n const hasSharedPoints = !!(tupleVariationCount & masks.SHARED_POINT_NUMBERS);\n const count = tupleVariationCount & masks.COUNT_MASK;\n let dataOffset = this.parseOffset16();\n const headers = [];\n let sharedPoints = [];\n for (let h = 0; h < count; h++) {\n const headerData = this.parseTupleVariationHeader(axisCount, flavor);\n headers.push(headerData);\n }\n if (this.relativeOffset !== tableOffset + dataOffset) {\n console.warn(`Unexpected offset after parsing tuple variation headers! Expected ${tableOffset + dataOffset}, actually ${this.relativeOffset}`);\n this.relativeOffset = tableOffset + dataOffset;\n }\n if (hasSharedPoints) {\n sharedPoints = this.parsePackedPointNumbers();\n }\n let serializedDataOffset = this.relativeOffset;\n for (let h = 0; h < count; h++) {\n const header = headers[h];\n header.privatePoints = [];\n this.relativeOffset = serializedDataOffset;\n if (flavor === \"cvar\" && !header.peakTuple) {\n console.warn(\"An embedded peak tuple is required in TupleVariationHeaders for the cvar table.\");\n }\n if (header.flags.privatePointNumbers) {\n header.privatePoints = this.parsePackedPointNumbers();\n }\n delete header.flags;\n const deltasOffset = this.offset;\n const deltasRelativeOffset = this.relativeOffset;\n const defineDeltas = (propertyName) => {\n let _deltas = void 0;\n let _deltasY = void 0;\n const parseDeltas = () => {\n let pointsCount = 0;\n if (flavor === \"gvar\") {\n pointsCount = header.privatePoints.length || sharedPoints.length;\n if (!pointsCount) {\n const glyph = glyphs.get(glyphIndex);\n glyph.path;\n pointsCount = glyph.points.length;\n pointsCount += 4;\n }\n } else if (flavor === \"cvar\") {\n pointsCount = glyphs.length;\n }\n this.offset = deltasOffset;\n this.relativeOffset = deltasRelativeOffset;\n _deltas = this.parsePackedDeltas(pointsCount);\n if (flavor === \"gvar\") {\n _deltasY = this.parsePackedDeltas(pointsCount);\n }\n };\n return {\n configurable: true,\n get: function() {\n if (_deltas === void 0) parseDeltas();\n return propertyName === \"deltasY\" ? _deltasY : _deltas;\n },\n set: function(deltas) {\n if (_deltas === void 0) parseDeltas();\n if (propertyName === \"deltasY\") {\n _deltasY = deltas;\n } else {\n _deltas = deltas;\n }\n }\n };\n };\n Object.defineProperty(header, \"deltas\", defineDeltas.call(this, \"deltas\"));\n if (flavor === \"gvar\") {\n Object.defineProperty(header, \"deltasY\", defineDeltas.call(this, \"deltasY\"));\n }\n serializedDataOffset += header.variationDataSize;\n delete header.variationDataSize;\n }\n this.relativeOffset = relativeOffset;\n const result = {\n headers\n };\n result.sharedPoints = sharedPoints;\n return result;\n};\nParser.prototype.parseTupleVariationHeader = function(axisCount, flavor) {\n const variationDataSize = this.parseUShort();\n const tupleIndex = this.parseUShort();\n const embeddedPeakTuple = !!(tupleIndex & masks.EMBEDDED_PEAK_TUPLE);\n const intermediateRegion = !!(tupleIndex & masks.INTERMEDIATE_REGION);\n const privatePointNumbers = !!(tupleIndex & masks.PRIVATE_POINT_NUMBERS);\n const sharedTupleRecordsIndex = embeddedPeakTuple ? void 0 : tupleIndex & masks.TUPLE_INDEX_MASK;\n const peakTuple = embeddedPeakTuple ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const intermediateStartTuple = intermediateRegion ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const intermediateEndTuple = intermediateRegion ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const result = {\n variationDataSize,\n peakTuple,\n intermediateStartTuple,\n intermediateEndTuple,\n flags: {\n embeddedPeakTuple,\n intermediateRegion,\n privatePointNumbers\n }\n };\n if (flavor === \"gvar\") {\n result.sharedTupleRecordsIndex = sharedTupleRecordsIndex;\n }\n return result;\n};\nParser.prototype.parsePackedPointNumbers = function() {\n const countByte1 = this.parseByte();\n const points = [];\n let totalPointCount = countByte1;\n if (countByte1 >= 128) {\n const countByte2 = this.parseByte();\n totalPointCount = (countByte1 & masks.POINT_RUN_COUNT_MASK) << 8 | countByte2;\n }\n let lastPoint = 0;\n while (points.length < totalPointCount) {\n const controlByte = this.parseByte();\n const numbersAre16Bit = !!(controlByte & masks.POINTS_ARE_WORDS);\n let runCount = (controlByte & masks.POINT_RUN_COUNT_MASK) + 1;\n for (let i = 0; i < runCount && points.length < totalPointCount; i++) {\n let pointDelta;\n if (numbersAre16Bit) {\n pointDelta = this.parseUShort();\n } else {\n pointDelta = this.parseByte();\n }\n lastPoint = lastPoint + pointDelta;\n points.push(lastPoint);\n }\n }\n return points;\n};\nParser.prototype.parsePackedDeltas = function(expectedCount) {\n const deltas = [];\n while (deltas.length < expectedCount) {\n const controlByte = this.parseByte();\n const zeroData = !!(controlByte & masks.DELTAS_ARE_ZERO);\n const deltaWords = !!(controlByte & masks.DELTAS_ARE_WORDS);\n const runCount = (controlByte & masks.DELTA_RUN_COUNT_MASK) + 1;\n for (let i = 0; i < runCount && deltas.length < expectedCount; i++) {\n if (zeroData) {\n deltas.push(0);\n } else if (deltaWords) {\n deltas.push(this.parseShort());\n } else {\n deltas.push(this.parseChar());\n }\n }\n }\n return deltas;\n};\nvar parse_default = {\n getByte,\n getCard8: getByte,\n getUShort,\n getCard16: getUShort,\n getShort,\n getUInt24,\n getULong,\n getFixed,\n getTag,\n getOffset,\n getBytes,\n bytesToString,\n Parser\n};\n\n// src/tables/name.mjs\nvar nameTableNames = [\n \"copyright\",\n // 0\n \"fontFamily\",\n // 1\n \"fontSubfamily\",\n // 2\n \"uniqueID\",\n // 3\n \"fullName\",\n // 4\n \"version\",\n // 5\n \"postScriptName\",\n // 6\n \"trademark\",\n // 7\n \"manufacturer\",\n // 8\n \"designer\",\n // 9\n \"description\",\n // 10\n \"manufacturerURL\",\n // 11\n \"designerURL\",\n // 12\n \"license\",\n // 13\n \"licenseURL\",\n // 14\n \"reserved\",\n // 15\n \"preferredFamily\",\n // 16\n \"preferredSubfamily\",\n // 17\n \"compatibleFullName\",\n // 18\n \"sampleText\",\n // 19\n \"postScriptFindFontName\",\n // 20\n \"wwsFamily\",\n // 21\n \"wwsSubfamily\"\n // 22\n];\nvar macLanguages = {\n 0: \"en\",\n 1: \"fr\",\n 2: \"de\",\n 3: \"it\",\n 4: \"nl\",\n 5: \"sv\",\n 6: \"es\",\n 7: \"da\",\n 8: \"pt\",\n 9: \"no\",\n 10: \"he\",\n 11: \"ja\",\n 12: \"ar\",\n 13: \"fi\",\n 14: \"el\",\n 15: \"is\",\n 16: \"mt\",\n 17: \"tr\",\n 18: \"hr\",\n 19: \"zh-Hant\",\n 20: \"ur\",\n 21: \"hi\",\n 22: \"th\",\n 23: \"ko\",\n 24: \"lt\",\n 25: \"pl\",\n 26: \"hu\",\n 27: \"es\",\n 28: \"lv\",\n 29: \"se\",\n 30: \"fo\",\n 31: \"fa\",\n 32: \"ru\",\n 33: \"zh\",\n 34: \"nl-BE\",\n 35: \"ga\",\n 36: \"sq\",\n 37: \"ro\",\n 38: \"cz\",\n 39: \"sk\",\n 40: \"si\",\n 41: \"yi\",\n 42: \"sr\",\n 43: \"mk\",\n 44: \"bg\",\n 45: \"uk\",\n 46: \"be\",\n 47: \"uz\",\n 48: \"kk\",\n 49: \"az-Cyrl\",\n 50: \"az-Arab\",\n 51: \"hy\",\n 52: \"ka\",\n 53: \"mo\",\n 54: \"ky\",\n 55: \"tg\",\n 56: \"tk\",\n 57: \"mn-CN\",\n 58: \"mn\",\n 59: \"ps\",\n 60: \"ks\",\n 61: \"ku\",\n 62: \"sd\",\n 63: \"bo\",\n 64: \"ne\",\n 65: \"sa\",\n 66: \"mr\",\n 67: \"bn\",\n 68: \"as\",\n 69: \"gu\",\n 70: \"pa\",\n 71: \"or\",\n 72: \"ml\",\n 73: \"kn\",\n 74: \"ta\",\n 75: \"te\",\n 76: \"si\",\n 77: \"my\",\n 78: \"km\",\n 79: \"lo\",\n 80: \"vi\",\n 81: \"id\",\n 82: \"tl\",\n 83: \"ms\",\n 84: \"ms-Arab\",\n 85: \"am\",\n 86: \"ti\",\n 87: \"om\",\n 88: \"so\",\n 89: \"sw\",\n 90: \"rw\",\n 91: \"rn\",\n 92: \"ny\",\n 93: \"mg\",\n 94: \"eo\",\n 128: \"cy\",\n 129: \"eu\",\n 130: \"ca\",\n 131: \"la\",\n 132: \"qu\",\n 133: \"gn\",\n 134: \"ay\",\n 135: \"tt\",\n 136: \"ug\",\n 137: \"dz\",\n 138: \"jv\",\n 139: \"su\",\n 140: \"gl\",\n 141: \"af\",\n 142: \"br\",\n 143: \"iu\",\n 144: \"gd\",\n 145: \"gv\",\n 146: \"ga\",\n 147: \"to\",\n 148: \"el-polyton\",\n 149: \"kl\",\n 150: \"az\",\n 151: \"nn\"\n};\nvar macLanguageToScript = {\n 0: 0,\n // langEnglish → smRoman\n 1: 0,\n // langFrench → smRoman\n 2: 0,\n // langGerman → smRoman\n 3: 0,\n // langItalian → smRoman\n 4: 0,\n // langDutch → smRoman\n 5: 0,\n // langSwedish → smRoman\n 6: 0,\n // langSpanish → smRoman\n 7: 0,\n // langDanish → smRoman\n 8: 0,\n // langPortuguese → smRoman\n 9: 0,\n // langNorwegian → smRoman\n 10: 5,\n // langHebrew → smHebrew\n 11: 1,\n // langJapanese → smJapanese\n 12: 4,\n // langArabic → smArabic\n 13: 0,\n // langFinnish → smRoman\n 14: 6,\n // langGreek → smGreek\n 15: 0,\n // langIcelandic → smRoman (modified)\n 16: 0,\n // langMaltese → smRoman\n 17: 0,\n // langTurkish → smRoman (modified)\n 18: 0,\n // langCroatian → smRoman (modified)\n 19: 2,\n // langTradChinese → smTradChinese\n 20: 4,\n // langUrdu → smArabic\n 21: 9,\n // langHindi → smDevanagari\n 22: 21,\n // langThai → smThai\n 23: 3,\n // langKorean → smKorean\n 24: 29,\n // langLithuanian → smCentralEuroRoman\n 25: 29,\n // langPolish → smCentralEuroRoman\n 26: 29,\n // langHungarian → smCentralEuroRoman\n 27: 29,\n // langEstonian → smCentralEuroRoman\n 28: 29,\n // langLatvian → smCentralEuroRoman\n 29: 0,\n // langSami → smRoman\n 30: 0,\n // langFaroese → smRoman (modified)\n 31: 4,\n // langFarsi → smArabic (modified)\n 32: 7,\n // langRussian → smCyrillic\n 33: 25,\n // langSimpChinese → smSimpChinese\n 34: 0,\n // langFlemish → smRoman\n 35: 0,\n // langIrishGaelic → smRoman (modified)\n 36: 0,\n // langAlbanian → smRoman\n 37: 0,\n // langRomanian → smRoman (modified)\n 38: 29,\n // langCzech → smCentralEuroRoman\n 39: 29,\n // langSlovak → smCentralEuroRoman\n 40: 0,\n // langSlovenian → smRoman (modified)\n 41: 5,\n // langYiddish → smHebrew\n 42: 7,\n // langSerbian → smCyrillic\n 43: 7,\n // langMacedonian → smCyrillic\n 44: 7,\n // langBulgarian → smCyrillic\n 45: 7,\n // langUkrainian → smCyrillic (modified)\n 46: 7,\n // langByelorussian → smCyrillic\n 47: 7,\n // langUzbek → smCyrillic\n 48: 7,\n // langKazakh → smCyrillic\n 49: 7,\n // langAzerbaijani → smCyrillic\n 50: 4,\n // langAzerbaijanAr → smArabic\n 51: 24,\n // langArmenian → smArmenian\n 52: 23,\n // langGeorgian → smGeorgian\n 53: 7,\n // langMoldavian → smCyrillic\n 54: 7,\n // langKirghiz → smCyrillic\n 55: 7,\n // langTajiki → smCyrillic\n 56: 7,\n // langTurkmen → smCyrillic\n 57: 27,\n // langMongolian → smMongolian\n 58: 7,\n // langMongolianCyr → smCyrillic\n 59: 4,\n // langPashto → smArabic\n 60: 4,\n // langKurdish → smArabic\n 61: 4,\n // langKashmiri → smArabic\n 62: 4,\n // langSindhi → smArabic\n 63: 26,\n // langTibetan → smTibetan\n 64: 9,\n // langNepali → smDevanagari\n 65: 9,\n // langSanskrit → smDevanagari\n 66: 9,\n // langMarathi → smDevanagari\n 67: 13,\n // langBengali → smBengali\n 68: 13,\n // langAssamese → smBengali\n 69: 11,\n // langGujarati → smGujarati\n 70: 10,\n // langPunjabi → smGurmukhi\n 71: 12,\n // langOriya → smOriya\n 72: 17,\n // langMalayalam → smMalayalam\n 73: 16,\n // langKannada → smKannada\n 74: 14,\n // langTamil → smTamil\n 75: 15,\n // langTelugu → smTelugu\n 76: 18,\n // langSinhalese → smSinhalese\n 77: 19,\n // langBurmese → smBurmese\n 78: 20,\n // langKhmer → smKhmer\n 79: 22,\n // langLao → smLao\n 80: 30,\n // langVietnamese → smVietnamese\n 81: 0,\n // langIndonesian → smRoman\n 82: 0,\n // langTagalog → smRoman\n 83: 0,\n // langMalayRoman → smRoman\n 84: 4,\n // langMalayArabic → smArabic\n 85: 28,\n // langAmharic → smEthiopic\n 86: 28,\n // langTigrinya → smEthiopic\n 87: 28,\n // langOromo → smEthiopic\n 88: 0,\n // langSomali → smRoman\n 89: 0,\n // langSwahili → smRoman\n 90: 0,\n // langKinyarwanda → smRoman\n 91: 0,\n // langRundi → smRoman\n 92: 0,\n // langNyanja → smRoman\n 93: 0,\n // langMalagasy → smRoman\n 94: 0,\n // langEsperanto → smRoman\n 128: 0,\n // langWelsh → smRoman (modified)\n 129: 0,\n // langBasque → smRoman\n 130: 0,\n // langCatalan → smRoman\n 131: 0,\n // langLatin → smRoman\n 132: 0,\n // langQuechua → smRoman\n 133: 0,\n // langGuarani → smRoman\n 134: 0,\n // langAymara → smRoman\n 135: 7,\n // langTatar → smCyrillic\n 136: 4,\n // langUighur → smArabic\n 137: 26,\n // langDzongkha → smTibetan\n 138: 0,\n // langJavaneseRom → smRoman\n 139: 0,\n // langSundaneseRom → smRoman\n 140: 0,\n // langGalician → smRoman\n 141: 0,\n // langAfrikaans → smRoman\n 142: 0,\n // langBreton → smRoman (modified)\n 143: 28,\n // langInuktitut → smEthiopic (modified)\n 144: 0,\n // langScottishGaelic → smRoman (modified)\n 145: 0,\n // langManxGaelic → smRoman (modified)\n 146: 0,\n // langIrishGaelicScript → smRoman (modified)\n 147: 0,\n // langTongan → smRoman\n 148: 6,\n // langGreekAncient → smRoman\n 149: 0,\n // langGreenlandic → smRoman\n 150: 0,\n // langAzerbaijanRoman → smRoman\n 151: 0\n // langNynorsk → smRoman\n};\nvar windowsLanguages = {\n 1078: \"af\",\n 1052: \"sq\",\n 1156: \"gsw\",\n 1118: \"am\",\n 5121: \"ar-DZ\",\n 15361: \"ar-BH\",\n 3073: \"ar\",\n 2049: \"ar-IQ\",\n 11265: \"ar-JO\",\n 13313: \"ar-KW\",\n 12289: \"ar-LB\",\n 4097: \"ar-LY\",\n 6145: \"ary\",\n 8193: \"ar-OM\",\n 16385: \"ar-QA\",\n 1025: \"ar-SA\",\n 10241: \"ar-SY\",\n 7169: \"aeb\",\n 14337: \"ar-AE\",\n 9217: \"ar-YE\",\n 1067: \"hy\",\n 1101: \"as\",\n 2092: \"az-Cyrl\",\n 1068: \"az\",\n 1133: \"ba\",\n 1069: \"eu\",\n 1059: \"be\",\n 2117: \"bn\",\n 1093: \"bn-IN\",\n 8218: \"bs-Cyrl\",\n 5146: \"bs\",\n 1150: \"br\",\n 1026: \"bg\",\n 1027: \"ca\",\n 3076: \"zh-HK\",\n 5124: \"zh-MO\",\n 2052: \"zh\",\n 4100: \"zh-SG\",\n 1028: \"zh-TW\",\n 1155: \"co\",\n 1050: \"hr\",\n 4122: \"hr-BA\",\n 1029: \"cs\",\n 1030: \"da\",\n 1164: \"prs\",\n 1125: \"dv\",\n 2067: \"nl-BE\",\n 1043: \"nl\",\n 3081: \"en-AU\",\n 10249: \"en-BZ\",\n 4105: \"en-CA\",\n 9225: \"en-029\",\n 16393: \"en-IN\",\n 6153: \"en-IE\",\n 8201: \"en-JM\",\n 17417: \"en-MY\",\n 5129: \"en-NZ\",\n 13321: \"en-PH\",\n 18441: \"en-SG\",\n 7177: \"en-ZA\",\n 11273: \"en-TT\",\n 2057: \"en-GB\",\n 1033: \"en\",\n 12297: \"en-ZW\",\n 1061: \"et\",\n 1080: \"fo\",\n 1124: \"fil\",\n 1035: \"fi\",\n 2060: \"fr-BE\",\n 3084: \"fr-CA\",\n 1036: \"fr\",\n 5132: \"fr-LU\",\n 6156: \"fr-MC\",\n 4108: \"fr-CH\",\n 1122: \"fy\",\n 1110: \"gl\",\n 1079: \"ka\",\n 3079: \"de-AT\",\n 1031: \"de\",\n 5127: \"de-LI\",\n 4103: \"de-LU\",\n 2055: \"de-CH\",\n 1032: \"el\",\n 1135: \"kl\",\n 1095: \"gu\",\n 1128: \"ha\",\n 1037: \"he\",\n 1081: \"hi\",\n 1038: \"hu\",\n 1039: \"is\",\n 1136: \"ig\",\n 1057: \"id\",\n 1117: \"iu\",\n 2141: \"iu-Latn\",\n 2108: \"ga\",\n 1076: \"xh\",\n 1077: \"zu\",\n 1040: \"it\",\n 2064: \"it-CH\",\n 1041: \"ja\",\n 1099: \"kn\",\n 1087: \"kk\",\n 1107: \"km\",\n 1158: \"quc\",\n 1159: \"rw\",\n 1089: \"sw\",\n 1111: \"kok\",\n 1042: \"ko\",\n 1088: \"ky\",\n 1108: \"lo\",\n 1062: \"lv\",\n 1063: \"lt\",\n 2094: \"dsb\",\n 1134: \"lb\",\n 1071: \"mk\",\n 2110: \"ms-BN\",\n 1086: \"ms\",\n 1100: \"ml\",\n 1082: \"mt\",\n 1153: \"mi\",\n 1146: \"arn\",\n 1102: \"mr\",\n 1148: \"moh\",\n 1104: \"mn\",\n 2128: \"mn-CN\",\n 1121: \"ne\",\n 1044: \"nb\",\n 2068: \"nn\",\n 1154: \"oc\",\n 1096: \"or\",\n 1123: \"ps\",\n 1045: \"pl\",\n 1046: \"pt\",\n 2070: \"pt-PT\",\n 1094: \"pa\",\n 1131: \"qu-BO\",\n 2155: \"qu-EC\",\n 3179: \"qu\",\n 1048: \"ro\",\n 1047: \"rm\",\n 1049: \"ru\",\n 9275: \"smn\",\n 4155: \"smj-NO\",\n 5179: \"smj\",\n 3131: \"se-FI\",\n 1083: \"se\",\n 2107: \"se-SE\",\n 8251: \"sms\",\n 6203: \"sma-NO\",\n 7227: \"sms\",\n 1103: \"sa\",\n 7194: \"sr-Cyrl-BA\",\n 3098: \"sr\",\n 6170: \"sr-Latn-BA\",\n 2074: \"sr-Latn\",\n 1132: \"nso\",\n 1074: \"tn\",\n 1115: \"si\",\n 1051: \"sk\",\n 1060: \"sl\",\n 11274: \"es-AR\",\n 16394: \"es-BO\",\n 13322: \"es-CL\",\n 9226: \"es-CO\",\n 5130: \"es-CR\",\n 7178: \"es-DO\",\n 12298: \"es-EC\",\n 17418: \"es-SV\",\n 4106: \"es-GT\",\n 18442: \"es-HN\",\n 2058: \"es-MX\",\n 19466: \"es-NI\",\n 6154: \"es-PA\",\n 15370: \"es-PY\",\n 10250: \"es-PE\",\n 20490: \"es-PR\",\n // Microsoft has defined two different language codes for\n // “Spanish with modern sorting” and “Spanish with traditional\n // sorting”. This makes sense for collation APIs, and it would be\n // possible to express this in BCP 47 language tags via Unicode\n // extensions (eg., es-u-co-trad is Spanish with traditional\n // sorting). However, for storing names in fonts, the distinction\n // does not make sense, so we give “es” in both cases.\n 3082: \"es\",\n 1034: \"es\",\n 21514: \"es-US\",\n 14346: \"es-UY\",\n 8202: \"es-VE\",\n 2077: \"sv-FI\",\n 1053: \"sv\",\n 1114: \"syr\",\n 1064: \"tg\",\n 2143: \"tzm\",\n 1097: \"ta\",\n 1092: \"tt\",\n 1098: \"te\",\n 1054: \"th\",\n 1105: \"bo\",\n 1055: \"tr\",\n 1090: \"tk\",\n 1152: \"ug\",\n 1058: \"uk\",\n 1070: \"hsb\",\n 1056: \"ur\",\n 2115: \"uz-Cyrl\",\n 1091: \"uz\",\n 1066: \"vi\",\n 1106: \"cy\",\n 1160: \"wo\",\n 1157: \"sah\",\n 1144: \"ii\",\n 1130: \"yo\"\n};\nfunction getLanguageCode(platformID, languageID, ltag) {\n switch (platformID) {\n case 0:\n if (languageID === 65535) {\n return \"und\";\n } else if (ltag) {\n return ltag[languageID];\n }\n break;\n case 1:\n return macLanguages[languageID];\n case 3:\n return windowsLanguages[languageID];\n }\n return void 0;\n}\nvar utf16 = \"utf-16\";\nvar macScriptEncodings = {\n 0: \"macintosh\",\n // smRoman\n 1: \"x-mac-japanese\",\n // smJapanese\n 2: \"x-mac-chinesetrad\",\n // smTradChinese\n 3: \"x-mac-korean\",\n // smKorean\n 6: \"x-mac-greek\",\n // smGreek\n 7: \"x-mac-cyrillic\",\n // smCyrillic\n 9: \"x-mac-devanagai\",\n // smDevanagari\n 10: \"x-mac-gurmukhi\",\n // smGurmukhi\n 11: \"x-mac-gujarati\",\n // smGujarati\n 12: \"x-mac-oriya\",\n // smOriya\n 13: \"x-mac-bengali\",\n // smBengali\n 14: \"x-mac-tamil\",\n // smTamil\n 15: \"x-mac-telugu\",\n // smTelugu\n 16: \"x-mac-kannada\",\n // smKannada\n 17: \"x-mac-malayalam\",\n // smMalayalam\n 18: \"x-mac-sinhalese\",\n // smSinhalese\n 19: \"x-mac-burmese\",\n // smBurmese\n 20: \"x-mac-khmer\",\n // smKhmer\n 21: \"x-mac-thai\",\n // smThai\n 22: \"x-mac-lao\",\n // smLao\n 23: \"x-mac-georgian\",\n // smGeorgian\n 24: \"x-mac-armenian\",\n // smArmenian\n 25: \"x-mac-chinesesimp\",\n // smSimpChinese\n 26: \"x-mac-tibetan\",\n // smTibetan\n 27: \"x-mac-mongolian\",\n // smMongolian\n 28: \"x-mac-ethiopic\",\n // smEthiopic\n 29: \"x-mac-ce\",\n // smCentralEuroRoman\n 30: \"x-mac-vietnamese\",\n // smVietnamese\n 31: \"x-mac-extarabic\"\n // smExtArabic\n};\nvar macLanguageEncodings = {\n 15: \"x-mac-icelandic\",\n // langIcelandic\n 17: \"x-mac-turkish\",\n // langTurkish\n 18: \"x-mac-croatian\",\n // langCroatian\n 24: \"x-mac-ce\",\n // langLithuanian\n 25: \"x-mac-ce\",\n // langPolish\n 26: \"x-mac-ce\",\n // langHungarian\n 27: \"x-mac-ce\",\n // langEstonian\n 28: \"x-mac-ce\",\n // langLatvian\n 30: \"x-mac-icelandic\",\n // langFaroese\n 37: \"x-mac-romanian\",\n // langRomanian\n 38: \"x-mac-ce\",\n // langCzech\n 39: \"x-mac-ce\",\n // langSlovak\n 40: \"x-mac-ce\",\n // langSlovenian\n 143: \"x-mac-inuit\",\n // langInuktitut\n 146: \"x-mac-gaelic\"\n // langIrishGaelicScript\n};\nfunction getEncoding(platformID, encodingID, languageID) {\n switch (platformID) {\n case 0:\n return utf16;\n case 1:\n return macLanguageEncodings[languageID] || macScriptEncodings[encodingID];\n case 3:\n if (encodingID === 1 || encodingID === 10) {\n return utf16;\n }\n break;\n }\n return void 0;\n}\nvar platforms = {\n 0: \"unicode\",\n 1: \"macintosh\",\n 2: \"reserved\",\n 3: \"windows\"\n};\nfunction getPlatform(platformID) {\n return platforms[platformID];\n}\nfunction parseNameTable(data, start, ltag) {\n const name = {};\n const p = new parse_default.Parser(data, start);\n const format = p.parseUShort();\n const count = p.parseUShort();\n const stringOffset = p.offset + p.parseUShort();\n for (let i = 0; i < count; i++) {\n const platformID = p.parseUShort();\n const encodingID = p.parseUShort();\n const languageID = p.parseUShort();\n const nameID = p.parseUShort();\n const property = nameTableNames[nameID] || nameID;\n const byteLength = p.parseUShort();\n const offset = p.parseUShort();\n const language = getLanguageCode(platformID, languageID, ltag);\n const encoding = getEncoding(platformID, encodingID, languageID);\n const platformName = getPlatform(platformID);\n if (encoding !== void 0 && language !== void 0 && platformName !== void 0) {\n let text;\n if (encoding === utf16) {\n text = decode.UTF16(data, stringOffset + offset, byteLength);\n } else {\n text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding);\n }\n if (text) {\n let platform = name[platformName];\n if (platform === void 0) {\n platform = name[platformName] = {};\n }\n let translations = platform[property];\n if (translations === void 0) {\n translations = platform[property] = {};\n }\n translations[language] = text;\n }\n }\n }\n if (format === 1) {\n p.parseUShort();\n }\n return name;\n}\nfunction reverseDict(dict) {\n const result = {};\n for (let key in dict) {\n result[dict[key]] = parseInt(key);\n }\n return result;\n}\nfunction makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) {\n return new table_default.Record(\"NameRecord\", [\n { name: \"platformID\", type: \"USHORT\", value: platformID },\n { name: \"encodingID\", type: \"USHORT\", value: encodingID },\n { name: \"languageID\", type: \"USHORT\", value: languageID },\n { name: \"nameID\", type: \"USHORT\", value: nameID },\n { name: \"length\", type: \"USHORT\", value: length },\n { name: \"offset\", type: \"USHORT\", value: offset }\n ]);\n}\nfunction findSubArray(needle, haystack) {\n const needleLength = needle.length;\n const limit = haystack.length - needleLength + 1;\n loop:\n for (let pos = 0; pos < limit; pos++) {\n for (; pos < limit; pos++) {\n for (let k = 0; k < needleLength; k++) {\n if (haystack[pos + k] !== needle[k]) {\n continue loop;\n }\n }\n return pos;\n }\n }\n return -1;\n}\nfunction addStringToPool(s, pool) {\n let offset = findSubArray(s, pool);\n if (offset < 0) {\n offset = pool.length;\n let i = 0;\n const len = s.length;\n for (; i < len; ++i) {\n pool.push(s[i]);\n }\n }\n return offset;\n}\nfunction makeNameTable(names, ltag) {\n const platformNameIds = reverseDict(platforms);\n const macLanguageIds = reverseDict(macLanguages);\n const windowsLanguageIds = reverseDict(windowsLanguages);\n const nameRecords = [];\n const stringPool = [];\n for (let platform in names) {\n let nameID;\n const nameIDs = [];\n const namesWithNumericKeys = {};\n const nameTableIds = reverseDict(nameTableNames);\n const platformID = platformNameIds[platform];\n for (let key in names[platform]) {\n let id = nameTableIds[key];\n if (id === void 0) {\n id = key;\n }\n nameID = parseInt(id);\n if (isNaN(nameID)) {\n throw new Error('Name table entry \"' + key + '\" does not exist, see nameTableNames for complete list.');\n }\n namesWithNumericKeys[nameID] = names[platform][key];\n nameIDs.push(nameID);\n }\n for (let i = 0; i < nameIDs.length; i++) {\n nameID = nameIDs[i];\n const translations = namesWithNumericKeys[nameID];\n for (let lang in translations) {\n const text = translations[lang];\n if (platformID === 1 || platformID === 0) {\n let macLanguage = macLanguageIds[lang];\n let macScript = macLanguageToScript[macLanguage];\n const macEncoding = getEncoding(platformID, macScript, macLanguage);\n let macName = encode.MACSTRING(text, macEncoding);\n if (platformID === 0) {\n macLanguage = ltag.indexOf(lang);\n if (macLanguage < 0) {\n macLanguage = ltag.length;\n ltag.push(lang);\n }\n macScript = 4;\n macName = encode.UTF16(text);\n }\n if (macName !== void 0) {\n const macNameOffset = addStringToPool(macName, stringPool);\n nameRecords.push(makeNameRecord(\n platformID,\n macScript,\n macLanguage,\n nameID,\n macName.length,\n macNameOffset\n ));\n }\n }\n if (platformID === 3) {\n const winLanguage = windowsLanguageIds[lang];\n if (winLanguage !== void 0) {\n const winName = encode.UTF16(text);\n const winNameOffset = addStringToPool(winName, stringPool);\n nameRecords.push(makeNameRecord(\n 3,\n 1,\n winLanguage,\n nameID,\n winName.length,\n winNameOffset\n ));\n }\n }\n }\n }\n }\n nameRecords.sort(function(a, b) {\n return a.platformID - b.platformID || a.encodingID - b.encodingID || a.languageID - b.languageID || a.nameID - b.nameID;\n });\n const t = new table_default.Table(\"name\", [\n { name: \"format\", type: \"USHORT\", value: 0 },\n { name: \"count\", type: \"USHORT\", value: nameRecords.length },\n { name: \"stringOffset\", type: \"USHORT\", value: 6 + nameRecords.length * 12 }\n ]);\n for (let r = 0; r < nameRecords.length; r++) {\n t.fields.push({ name: \"record_\" + r, type: \"RECORD\", value: nameRecords[r] });\n }\n t.fields.push({ name: \"strings\", type: \"LITERAL\", value: stringPool });\n return t;\n}\nfunction getNameByID(names, nameID, allowedStandardIDs = []) {\n if (nameID < 256 && nameID in nameTableNames) {\n if (allowedStandardIDs.length && !allowedStandardIDs.includes(parseInt(nameID))) {\n return void 0;\n }\n nameID = nameTableNames[nameID];\n }\n for (let platform in names) {\n for (let nameKey in names[platform]) {\n if (nameKey === nameID || parseInt(nameKey) === nameID) {\n return names[platform][nameKey];\n }\n }\n }\n return void 0;\n}\nvar name_default = { parse: parseNameTable, make: makeNameTable, getNameByID };\n\n// src/tables/cmap.mjs\nfunction parseCmapTableFormat0(cmap, p, platformID, encodingID) {\n cmap.length = p.parseUShort();\n cmap.language = p.parseUShort() - 1;\n const indexMap = p.parseByteList(cmap.length);\n const glyphIndexMap = Object.assign({}, indexMap);\n const encoding = getEncoding(platformID, encodingID, cmap.language);\n const decodingTable = eightBitMacEncodings[encoding];\n for (let i = 0; i < decodingTable.length; i++) {\n glyphIndexMap[decodingTable.charCodeAt(i)] = indexMap[128 + i];\n }\n cmap.glyphIndexMap = glyphIndexMap;\n}\nfunction parseCmapTableFormat12or13(cmap, p, format) {\n p.parseUShort();\n cmap.length = p.parseULong();\n cmap.language = p.parseULong();\n let groupCount;\n cmap.groupCount = groupCount = p.parseULong();\n cmap.glyphIndexMap = {};\n for (let i = 0; i < groupCount; i += 1) {\n const startCharCode = p.parseULong();\n const endCharCode = p.parseULong();\n let startGlyphId = p.parseULong();\n for (let c = startCharCode; c <= endCharCode; c += 1) {\n cmap.glyphIndexMap[c] = startGlyphId;\n if (format === 12) {\n startGlyphId++;\n }\n }\n }\n}\nfunction parseCmapTableFormat4(cmap, p, data, start, offset) {\n cmap.length = p.parseUShort();\n cmap.language = p.parseUShort();\n let segCount;\n cmap.segCount = segCount = p.parseUShort() >> 1;\n p.skip(\"uShort\", 3);\n cmap.glyphIndexMap = {};\n const endCountParser = new parse_default.Parser(data, start + offset + 14);\n const startCountParser = new parse_default.Parser(data, start + offset + 16 + segCount * 2);\n const idDeltaParser = new parse_default.Parser(data, start + offset + 16 + segCount * 4);\n const idRangeOffsetParser = new parse_default.Parser(data, start + offset + 16 + segCount * 6);\n let glyphIndexOffset = start + offset + 16 + segCount * 8;\n for (let i = 0; i < segCount - 1; i += 1) {\n let glyphIndex;\n const endCount = endCountParser.parseUShort();\n const startCount = startCountParser.parseUShort();\n const idDelta = idDeltaParser.parseShort();\n const idRangeOffset = idRangeOffsetParser.parseUShort();\n for (let c = startCount; c <= endCount; c += 1) {\n if (idRangeOffset !== 0) {\n glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2;\n glyphIndexOffset += idRangeOffset;\n glyphIndexOffset += (c - startCount) * 2;\n glyphIndex = parse_default.getUShort(data, glyphIndexOffset);\n if (glyphIndex !== 0) {\n glyphIndex = glyphIndex + idDelta & 65535;\n }\n } else {\n glyphIndex = c + idDelta & 65535;\n }\n cmap.glyphIndexMap[c] = glyphIndex;\n }\n }\n}\nfunction parseCmapTableFormat14(cmap, p) {\n const varSelectorList = {};\n p.skip(\"uLong\");\n const numVarSelectorRecords = p.parseULong();\n for (let i = 0; i < numVarSelectorRecords; i += 1) {\n const varSelector = p.parseUInt24();\n const varSelectorRecord = {\n varSelector\n };\n const defaultUVSOffset = p.parseOffset32();\n const nonDefaultUVSOffset = p.parseOffset32();\n const currentOffset = p.relativeOffset;\n if (defaultUVSOffset) {\n p.relativeOffset = defaultUVSOffset;\n varSelectorRecord.defaultUVS = p.parseStruct({\n ranges: function() {\n return p.parseRecordList32({\n startUnicodeValue: p.parseUInt24,\n additionalCount: p.parseByte\n });\n }\n });\n }\n if (nonDefaultUVSOffset) {\n p.relativeOffset = nonDefaultUVSOffset;\n varSelectorRecord.nonDefaultUVS = p.parseStruct({\n uvsMappings: function() {\n const map = {};\n const list = p.parseRecordList32({\n unicodeValue: p.parseUInt24,\n glyphID: p.parseUShort\n });\n for (let i2 = 0; i2 < list.length; i2 += 1) {\n map[list[i2].unicodeValue] = list[i2];\n }\n return map;\n }\n });\n }\n varSelectorList[varSelector] = varSelectorRecord;\n p.relativeOffset = currentOffset;\n }\n cmap.varSelectorList = varSelectorList;\n}\nfunction parseCmapTable(data, start) {\n const cmap = {};\n cmap.version = parse_default.getUShort(data, start);\n check_default.argument(cmap.version === 0, \"cmap table version should be 0.\");\n cmap.numTables = parse_default.getUShort(data, start + 2);\n let format14Parser = null;\n let format14offset = -1;\n let offset = -1;\n let platformId = null;\n let encodingId = null;\n const platform0Encodings = [0, 1, 2, 3, 4, 6];\n const platform3Encodings = [0, 1, 10];\n for (let i = cmap.numTables - 1; i >= 0; i -= 1) {\n platformId = parse_default.getUShort(data, start + 4 + i * 8);\n encodingId = parse_default.getUShort(data, start + 4 + i * 8 + 2);\n if (platformId === 3 && platform3Encodings.includes(encodingId) || platformId === 0 && platform0Encodings.includes(encodingId) || platformId === 1 && encodingId === 0) {\n if (offset > 0) continue;\n offset = parse_default.getULong(data, start + 4 + i * 8 + 4);\n if (format14Parser) {\n break;\n }\n } else if (platformId === 0 && encodingId === 5) {\n format14offset = parse_default.getULong(data, start + 4 + i * 8 + 4);\n format14Parser = new parse_default.Parser(data, start + format14offset);\n if (format14Parser.parseUShort() !== 14) {\n format14offset = -1;\n format14Parser = null;\n } else if (offset > 0) {\n break;\n }\n }\n }\n if (offset === -1) {\n throw new Error(\"No valid cmap sub-tables found.\");\n }\n const p = new parse_default.Parser(data, start + offset);\n cmap.format = p.parseUShort();\n if (cmap.format === 0) {\n parseCmapTableFormat0(cmap, p, platformId, encodingId);\n } else if (cmap.format === 12 || cmap.format === 13) {\n parseCmapTableFormat12or13(cmap, p, cmap.format);\n } else if (cmap.format === 4) {\n parseCmapTableFormat4(cmap, p, data, start, offset);\n } else {\n throw new Error(\n \"Only format 0 (platformId 1, encodingId 0), 4, 12 and 14 cmap tables are supported (found format \" + cmap.format + \", platformId \" + platformId + \", encodingId \" + encodingId + \").\"\n );\n }\n if (format14Parser) {\n parseCmapTableFormat14(cmap, format14Parser);\n }\n return cmap;\n}\nfunction addSegment(t, code, glyphIndex) {\n t.segments.push({\n end: code,\n start: code,\n delta: -(code - glyphIndex),\n offset: 0,\n glyphIndex\n });\n}\nfunction addTerminatorSegment(t) {\n t.segments.push({\n end: 65535,\n start: 65535,\n delta: 1,\n offset: 0\n });\n}\nfunction mergeSegments(segments) {\n if (segments.length === 0) return segments;\n const merged = [segments[0]];\n for (let i = 1; i < segments.length; i++) {\n const prev = merged[merged.length - 1];\n const curr = segments[i];\n if (prev.end + 1 === curr.start && prev.delta === curr.delta && curr.end !== 65535) {\n prev.end = curr.end;\n } else {\n merged.push(curr);\n }\n }\n return merged;\n}\nfunction makeCmapTable(glyphs) {\n let isPlan0Only = true;\n let i;\n for (i = glyphs.length - 1; i > 0; i -= 1) {\n const g = glyphs.get(i);\n if (g.unicode > 65535) {\n isPlan0Only = false;\n break;\n }\n }\n let cmapTable = [\n { name: \"version\", type: \"USHORT\", value: 0 },\n { name: \"numTables\", type: \"USHORT\", value: isPlan0Only ? 1 : 2 },\n // CMAP 4 header\n { name: \"platformID\", type: \"USHORT\", value: 3 },\n { name: \"encodingID\", type: \"USHORT\", value: 1 },\n { name: \"offset\", type: \"ULONG\", value: isPlan0Only ? 12 : 12 + 8 }\n ];\n if (!isPlan0Only)\n cmapTable.push(...[\n // CMAP 12 header\n { name: \"cmap12PlatformID\", type: \"USHORT\", value: 3 },\n // We encode only for PlatformID = 3 (Windows) because it is supported everywhere\n { name: \"cmap12EncodingID\", type: \"USHORT\", value: 10 },\n { name: \"cmap12Offset\", type: \"ULONG\", value: 0 }\n ]);\n cmapTable.push(...[\n // CMAP 4 Subtable\n { name: \"format\", type: \"USHORT\", value: 4 },\n { name: \"cmap4Length\", type: \"USHORT\", value: 0 },\n { name: \"language\", type: \"USHORT\", value: 0 },\n { name: \"segCountX2\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n const t = new table_default.Table(\"cmap\", cmapTable);\n t.segments = [];\n for (i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n for (let j = 0; j < glyph.unicodes.length; j += 1) {\n addSegment(t, glyph.unicodes[j], i);\n }\n }\n t.segments.sort(function(a, b) {\n return a.start - b.start;\n });\n t.segments = mergeSegments(t.segments);\n addTerminatorSegment(t);\n const segCount = t.segments.length;\n let segCountToRemove = 0;\n let endCounts = [];\n let startCounts = [];\n let idDeltas = [];\n let idRangeOffsets = [];\n let glyphIds = [];\n let cmap12Groups = [];\n for (i = 0; i < segCount; i += 1) {\n const segment = t.segments[i];\n if (segment.end <= 65535 && segment.start <= 65535) {\n endCounts.push({ name: \"end_\" + i, type: \"USHORT\", value: segment.end });\n startCounts.push({ name: \"start_\" + i, type: \"USHORT\", value: segment.start });\n idDeltas.push({ name: \"idDelta_\" + i, type: \"SHORT\", value: segment.delta });\n idRangeOffsets.push({ name: \"idRangeOffset_\" + i, type: \"USHORT\", value: segment.offset });\n if (segment.glyphId !== void 0) {\n glyphIds.push({ name: \"glyph_\" + i, type: \"USHORT\", value: segment.glyphId });\n }\n } else {\n segCountToRemove += 1;\n }\n if (!isPlan0Only && segment.glyphIndex !== void 0) {\n cmap12Groups.push({ name: \"cmap12Start_\" + i, type: \"ULONG\", value: segment.start });\n cmap12Groups.push({ name: \"cmap12End_\" + i, type: \"ULONG\", value: segment.end });\n cmap12Groups.push({ name: \"cmap12Glyph_\" + i, type: \"ULONG\", value: segment.glyphIndex });\n }\n }\n t.segCountX2 = (segCount - segCountToRemove) * 2;\n t.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2;\n t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);\n t.rangeShift = t.segCountX2 - t.searchRange;\n for (let i2 = 0; i2 < endCounts.length; i2++) {\n t.fields.push(endCounts[i2]);\n }\n t.fields.push({ name: \"reservedPad\", type: \"USHORT\", value: 0 });\n for (let i2 = 0; i2 < startCounts.length; i2++) {\n t.fields.push(startCounts[i2]);\n }\n for (let i2 = 0; i2 < idDeltas.length; i2++) {\n t.fields.push(idDeltas[i2]);\n }\n for (let i2 = 0; i2 < idRangeOffsets.length; i2++) {\n t.fields.push(idRangeOffsets[i2]);\n }\n for (let i2 = 0; i2 < glyphIds.length; i2++) {\n t.fields.push(glyphIds[i2]);\n }\n t.cmap4Length = 14 + // Subtable header\n endCounts.length * 2 + 2 + // reservedPad\n startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2;\n if (!isPlan0Only) {\n const cmap12Length = 16 + // Subtable header\n cmap12Groups.length * 4;\n t.cmap12Offset = 12 + 2 * 2 + 4 + t.cmap4Length;\n t.fields.push(...[\n { name: \"cmap12Format\", type: \"USHORT\", value: 12 },\n { name: \"cmap12Reserved\", type: \"USHORT\", value: 0 },\n { name: \"cmap12Length\", type: \"ULONG\", value: cmap12Length },\n { name: \"cmap12Language\", type: \"ULONG\", value: 0 },\n { name: \"cmap12nGroups\", type: \"ULONG\", value: cmap12Groups.length / 3 }\n ]);\n for (let i2 = 0; i2 < cmap12Groups.length; i2++) {\n t.fields.push(cmap12Groups[i2]);\n }\n }\n return t;\n}\nvar cmap_default = { parse: parseCmapTable, make: makeCmapTable };\n\n// src/encoding.mjs\nvar cffStandardStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"266 ff\",\n \"onedotenleader\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\",\n \"001.000\",\n \"001.001\",\n \"001.002\",\n \"001.003\",\n \"Black\",\n \"Bold\",\n \"Book\",\n \"Light\",\n \"Medium\",\n \"Regular\",\n \"Roman\",\n \"Semibold\"\n];\nvar cffISOAdobeStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\"\n];\nvar cffIExpertStrings = [\n \".notdef\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n];\nvar cffExpertSubsetStrings = [\n \".notdef\",\n \"space\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"hyphensuperior\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"centoldstyle\",\n \"figuredash\",\n \"hypheninferior\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\"\n];\nvar cffStandardEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"\",\n \"questiondown\",\n \"\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"\",\n \"ring\",\n \"cedilla\",\n \"\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"AE\",\n \"\",\n \"ordfeminine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"ae\",\n \"\",\n \"\",\n \"\",\n \"dotlessi\",\n \"\",\n \"\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\"\n];\nvar cffExpertEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"\",\n \"\",\n \"isuperior\",\n \"\",\n \"\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"\",\n \"\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"\",\n \"\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"\",\n \"Dotaccentsmall\",\n \"\",\n \"\",\n \"Macronsmall\",\n \"\",\n \"\",\n \"figuredash\",\n \"hypheninferior\",\n \"\",\n \"\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"\",\n \"\",\n \"\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"\",\n \"\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n];\nvar standardNames = [\n \".notdef\",\n \".null\",\n \"nonmarkingreturn\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quotesingle\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"grave\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"Adieresis\",\n \"Aring\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ntilde\",\n \"Odieresis\",\n \"Udieresis\",\n \"aacute\",\n \"agrave\",\n \"acircumflex\",\n \"adieresis\",\n \"atilde\",\n \"aring\",\n \"ccedilla\",\n \"eacute\",\n \"egrave\",\n \"ecircumflex\",\n \"edieresis\",\n \"iacute\",\n \"igrave\",\n \"icircumflex\",\n \"idieresis\",\n \"ntilde\",\n \"oacute\",\n \"ograve\",\n \"ocircumflex\",\n \"odieresis\",\n \"otilde\",\n \"uacute\",\n \"ugrave\",\n \"ucircumflex\",\n \"udieresis\",\n \"dagger\",\n \"degree\",\n \"cent\",\n \"sterling\",\n \"section\",\n \"bullet\",\n \"paragraph\",\n \"germandbls\",\n \"registered\",\n \"copyright\",\n \"trademark\",\n \"acute\",\n \"dieresis\",\n \"notequal\",\n \"AE\",\n \"Oslash\",\n \"infinity\",\n \"plusminus\",\n \"lessequal\",\n \"greaterequal\",\n \"yen\",\n \"mu\",\n \"partialdiff\",\n \"summation\",\n \"product\",\n \"pi\",\n \"integral\",\n \"ordfeminine\",\n \"ordmasculine\",\n \"Omega\",\n \"ae\",\n \"oslash\",\n \"questiondown\",\n \"exclamdown\",\n \"logicalnot\",\n \"radical\",\n \"florin\",\n \"approxequal\",\n \"Delta\",\n \"guillemotleft\",\n \"guillemotright\",\n \"ellipsis\",\n \"nonbreakingspace\",\n \"Agrave\",\n \"Atilde\",\n \"Otilde\",\n \"OE\",\n \"oe\",\n \"endash\",\n \"emdash\",\n \"quotedblleft\",\n \"quotedblright\",\n \"quoteleft\",\n \"quoteright\",\n \"divide\",\n \"lozenge\",\n \"ydieresis\",\n \"Ydieresis\",\n \"fraction\",\n \"currency\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"daggerdbl\",\n \"periodcentered\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"perthousand\",\n \"Acircumflex\",\n \"Ecircumflex\",\n \"Aacute\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Oacute\",\n \"Ocircumflex\",\n \"apple\",\n \"Ograve\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Ugrave\",\n \"dotlessi\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"Lslash\",\n \"lslash\",\n \"Scaron\",\n \"scaron\",\n \"Zcaron\",\n \"zcaron\",\n \"brokenbar\",\n \"Eth\",\n \"eth\",\n \"Yacute\",\n \"yacute\",\n \"Thorn\",\n \"thorn\",\n \"minus\",\n \"multiply\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"onehalf\",\n \"onequarter\",\n \"threequarters\",\n \"franc\",\n \"Gbreve\",\n \"gbreve\",\n \"Idotaccent\",\n \"Scedilla\",\n \"scedilla\",\n \"Cacute\",\n \"cacute\",\n \"Ccaron\",\n \"ccaron\",\n \"dcroat\"\n];\nfunction DefaultEncoding(font) {\n this.font = font;\n}\nDefaultEncoding.prototype.charToGlyphIndex = function(c) {\n const code = c.codePointAt(0);\n const glyphs = this.font.glyphs;\n if (glyphs) {\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n for (let j = 0; j < glyph.unicodes.length; j += 1) {\n if (glyph.unicodes[j] === code) {\n return i;\n }\n }\n }\n }\n return null;\n};\nfunction CmapEncoding(cmap) {\n this.cmap = cmap;\n}\nCmapEncoding.prototype.charToGlyphIndex = function(c) {\n return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;\n};\nfunction CffEncoding(encoding, charset) {\n this.encoding = encoding;\n this.charset = charset;\n}\nCffEncoding.prototype.charToGlyphIndex = function(s) {\n const code = s.codePointAt(0);\n const charName = this.encoding[code];\n return this.charset.indexOf(charName);\n};\nfunction GlyphNames(post) {\n switch (post.version) {\n case 1:\n this.names = standardNames.slice();\n break;\n case 2:\n this.names = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n if (post.glyphNameIndex[i] < standardNames.length) {\n this.names[i] = standardNames[post.glyphNameIndex[i]];\n } else {\n this.names[i] = post.names[post.glyphNameIndex[i] - standardNames.length];\n }\n }\n break;\n case 2.5:\n this.names = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n this.names[i] = standardNames[i + post.glyphNameIndex[i]];\n }\n break;\n case 3:\n this.names = [];\n break;\n default:\n this.names = [];\n break;\n }\n}\nGlyphNames.prototype.nameToGlyphIndex = function(name) {\n return this.names.indexOf(name);\n};\nGlyphNames.prototype.glyphIndexToName = function(gid) {\n return this.names[gid];\n};\nfunction addGlyphNamesAll(font) {\n let glyph;\n const glyphIndexMap = font.tables.cmap.glyphIndexMap;\n const charCodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < charCodes.length; i += 1) {\n const c = charCodes[i];\n const glyphIndex = glyphIndexMap[c];\n glyph = font.glyphs.get(glyphIndex);\n glyph.addUnicode(parseInt(c));\n }\n for (let i = 0; i < font.glyphs.length; i += 1) {\n glyph = font.glyphs.get(i);\n if (font.cffEncoding) {\n glyph.name = font.cffEncoding.charset[i];\n } else if (font.glyphNames.names) {\n glyph.name = font.glyphNames.glyphIndexToName(i);\n }\n }\n}\nfunction addGlyphNamesToUnicodeMap(font) {\n font._IndexToUnicodeMap = {};\n const glyphIndexMap = font.tables.cmap.glyphIndexMap;\n const charCodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < charCodes.length; i += 1) {\n const c = charCodes[i];\n let glyphIndex = glyphIndexMap[c];\n if (font._IndexToUnicodeMap[glyphIndex] === void 0) {\n font._IndexToUnicodeMap[glyphIndex] = {\n unicodes: [parseInt(c)]\n };\n } else {\n font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c));\n }\n }\n}\nfunction addGlyphNames(font, opt) {\n if (opt.lowMemory) {\n addGlyphNamesToUnicodeMap(font);\n } else {\n addGlyphNamesAll(font);\n }\n}\n\n// src/draw.mjs\nfunction line(ctx, x1, y1, x2, y2) {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n}\nvar draw_default = { line };\n\n// src/tables/cpal.mjs\nfunction parseCpalTable(data, start) {\n const p = new Parser(data, start);\n const version = p.parseShort();\n if (version !== 0) {\n console.warn(\"Only CPALv0 is currently fully supported.\");\n }\n const numPaletteEntries = p.parseShort();\n const numPalettes = p.parseShort();\n const numColorRecords = p.parseShort();\n const colorRecordsArrayOffset = p.parseOffset32();\n const colorRecordIndices = p.parseUShortList(numPalettes);\n p.relativeOffset = colorRecordsArrayOffset;\n const colorRecords = p.parseULongList(numColorRecords);\n p.relativeOffset = colorRecordsArrayOffset;\n return {\n version,\n numPaletteEntries,\n colorRecords,\n colorRecordIndices\n };\n}\nfunction makeCpalTable({ version = 0, numPaletteEntries = 0, colorRecords = [], colorRecordIndices = [0] }) {\n check_default.argument(version === 0, \"Only CPALv0 are supported.\");\n check_default.argument(colorRecords.length, \"No colorRecords given.\");\n check_default.argument(colorRecordIndices.length, \"No colorRecordIndices given.\");\n if (colorRecordIndices.length > 1) {\n check_default.argument(numPaletteEntries, \"Can't infer numPaletteEntries on multiple colorRecordIndices\");\n }\n return new table_default.Table(\"CPAL\", [\n { name: \"version\", type: \"USHORT\", value: version },\n { name: \"numPaletteEntries\", type: \"USHORT\", value: numPaletteEntries || colorRecords.length },\n { name: \"numPalettes\", type: \"USHORT\", value: colorRecordIndices.length },\n { name: \"numColorRecords\", type: \"USHORT\", value: colorRecords.length },\n { name: \"colorRecordsArrayOffset\", type: \"ULONG\", value: 12 + 2 * colorRecordIndices.length },\n ...colorRecordIndices.map((palette, i) => ({ name: \"colorRecordIndices_\" + i, type: \"USHORT\", value: palette })),\n ...colorRecords.map((color, i) => ({ name: \"colorRecords_\" + i, type: \"ULONG\", value: color }))\n ]);\n}\nfunction parseCPALColor(bgra) {\n var b = (bgra & 4278190080) >> 24;\n var g = (bgra & 16711680) >> 16;\n var r = (bgra & 65280) >> 8;\n var a = bgra & 255;\n b = b + 256 & 255;\n g = g + 256 & 255;\n r = r + 256 & 255;\n a = (a + 256 & 255) / 255;\n return { b, g, r, a };\n}\nfunction getPaletteColor(font, index, palette = 0, colorFormat = \"hexa\") {\n if (index == 65535) {\n return \"currentColor\";\n }\n const cpalTable = font && font.tables && font.tables.cpal;\n if (!cpalTable) return \"currentColor\";\n if (palette > cpalTable.colorRecordIndices.length - 1) {\n throw new Error(`Palette index out of range (colorRecordIndices.length: ${cpalTable.colorRecordIndices.length}, index: ${index})`);\n }\n if (index > cpalTable.numPaletteEntries) {\n throw new Error(`Color index out of range (numPaletteEntries: ${cpalTable.numPaletteEntries}, index: ${index})`);\n }\n const lookupIndex = cpalTable.colorRecordIndices[palette] + index;\n if (lookupIndex > cpalTable.colorRecords) {\n throw new Error(`Color index out of range (colorRecords.length: ${cpalTable.colorRecords.length}, lookupIndex: ${lookupIndex})`);\n }\n const color = parseCPALColor(cpalTable.colorRecords[lookupIndex]);\n if (colorFormat === \"bgra\") {\n return color;\n }\n return formatColor(color, colorFormat);\n}\nfunction toHex(d) {\n return (\"0\" + parseInt(d).toString(16)).slice(-2);\n}\nfunction rgbToHSL(bgra) {\n const r = bgra.r / 255;\n const g = bgra.g / 255;\n const b = bgra.b / 255;\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h * 360,\n s: s * 100,\n l: l * 100\n };\n}\nfunction hslToRGB(hsla) {\n let { h, s, l, a } = hsla;\n h = h % 360;\n s /= 100;\n l /= 100;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0, g = 0, b = 0;\n if (0 <= h && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= h && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= h && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= h && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= h && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= h && h <= 360) {\n r = c;\n g = 0;\n b = x;\n }\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n a\n };\n}\nfunction bgraToRaw(color) {\n return parseInt(`0x${toHex(color.b)}${toHex(color.g)}${toHex(color.r)}${toHex(color.a * 255)}`, 16);\n}\nfunction parseColor(color, targetFormat = \"hexa\") {\n const returnRaw = targetFormat == \"raw\" || targetFormat == \"cpal\";\n const isRaw = Number.isInteger(color);\n let validFormat = true;\n if (isRaw && returnRaw || color === \"currentColor\") {\n return color;\n } else if (typeof color === \"object\") {\n if (targetFormat == \"bgra\") {\n return color;\n }\n if (returnRaw) {\n return bgraToRaw(color);\n }\n } else if (!isRaw && /^#([a-f0-9]{3}|[a-f0-9]{4}|[a-f0-9]{6}|[a-f0-9]{8})$/i.test(color.trim())) {\n color = color.trim().substring(1);\n switch (color.length) {\n case 3:\n color = {\n r: parseInt(color[0].repeat(2), 16),\n g: parseInt(color[1].repeat(2), 16),\n b: parseInt(color[2].repeat(2), 16),\n a: 1\n };\n break;\n case 4:\n color = {\n r: parseInt(color[0].repeat(2), 16),\n g: parseInt(color[1].repeat(2), 16),\n b: parseInt(color[2].repeat(2), 16),\n a: parseInt(color[3].repeat(2), 16) / 255\n };\n break;\n case 6:\n color = {\n r: parseInt(color[0] + color[1], 16),\n g: parseInt(color[2] + color[3], 16),\n b: parseInt(color[4] + color[5], 16),\n a: 1\n };\n break;\n case 8:\n color = {\n r: parseInt(color[0] + color[1], 16),\n g: parseInt(color[2] + color[3], 16),\n b: parseInt(color[4] + color[5], 16),\n a: parseInt(color[6] + color[7], 16) / 255\n };\n break;\n }\n if (targetFormat == \"bgra\") {\n return color;\n }\n } else if (typeof document !== \"undefined\" && /^[a-z]+$/i.test(color)) {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n ctx.fillStyle = color;\n const detectedColor = formatColor(ctx.fillStyle, \"hexa\");\n if (detectedColor === \"#000000ff\" && color.toLowerCase() !== \"black\") {\n validFormat = false;\n } else {\n color = detectedColor;\n }\n } else {\n color = color.trim();\n const rgbaRegex = /rgba?\\(\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:(?:,|\\s|\\/)\\s*(?:(0*(?:\\.\\d+)?()|0*1(?:\\.0+)?())|(?:\\.\\d+)|(\\d+)(%)|(\\d*\\.\\d+)(%)))?\\s*\\)/;\n if (rgbaRegex.test(color)) {\n const matches = color.match(rgbaRegex).filter((i) => typeof i !== \"undefined\");\n color = {\n r: Math.round(parseFloat(matches[1]) / (matches[2] ? 100 / 255 : 1)),\n g: Math.round(parseFloat(matches[3]) / (matches[4] ? 100 / 255 : 1)),\n b: Math.round(parseFloat(matches[5]) / (matches[6] ? 100 / 255 : 1)),\n a: !matches[7] ? 1 : parseFloat(matches[7]) / (matches[8] ? 100 : 1)\n };\n } else {\n const hslaRegex = /hsla?\\(\\s*(?:(\\d*\\.\\d+|\\d+)(deg|turn|))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)%?|(\\d+)%?)\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)%?|(\\d+)%?)\\s*(?:(?:,|\\s|\\/)\\s*(?:(0*(?:\\.\\d+)?()|0*1(?:\\.0+)?())|(?:\\.\\d+)|(\\d+)(%)|(\\d*\\.\\d+)(%)))?\\s*\\)/;\n if (hslaRegex.test(color)) {\n const matches = color.match(hslaRegex).filter((i) => typeof i !== \"undefined\");\n color = hslToRGB({\n h: parseFloat(matches[1]) * (matches[2] === \"turn\" ? 360 : 1),\n s: parseFloat(matches[3]),\n l: parseFloat(matches[4]),\n a: !matches[5] ? 1 : parseFloat(matches[5]) / (matches[6] ? 100 : 1)\n });\n } else {\n validFormat = false;\n }\n }\n }\n if (!validFormat) {\n throw new Error(`Invalid color format: ${color}`);\n }\n return formatColor(color, targetFormat);\n}\nfunction formatColor(bgra, format = \"hexa\") {\n if (bgra === \"currentColor\") return bgra;\n if (Number.isInteger(bgra)) {\n if (format == \"raw\" || format == \"cpal\") {\n return bgra;\n }\n bgra = parseCPALColor(bgra);\n } else if (typeof bgra !== \"object\") {\n bgra = parseColor(bgra, \"bgra\");\n }\n let hsl = [\"hsl\", \"hsla\"].includes(format) ? rgbToHSL(bgra) : null;\n switch (format) {\n case \"rgba\":\n return `rgba(${bgra.r}, ${bgra.g}, ${bgra.b}, ${parseFloat(bgra.a.toFixed(3))})`;\n case \"rgb\":\n return `rgb(${bgra.r}, ${bgra.g}, ${bgra.b})`;\n case \"hex\":\n case \"hex6\":\n case \"hex-6\":\n return `#${toHex(bgra.r)}${toHex(bgra.g)}${toHex(bgra.b)}`;\n case \"hexa\":\n case \"hex8\":\n case \"hex-8\":\n return `#${toHex(bgra.r)}${toHex(bgra.g)}${toHex(bgra.b)}${toHex(bgra.a * 255)}`;\n case \"hsl\":\n return `hsl(${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}%, ${hsl.l.toFixed(2)}%)`;\n case \"hsla\":\n return `hsla(${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}%, ${hsl.l.toFixed(2)}%, ${parseFloat(bgra.a.toFixed(3))})`;\n case \"bgra\":\n return bgra;\n case \"raw\":\n case \"cpal\":\n return bgraToRaw(bgra);\n default:\n throw new Error(\"Unknown color format: \" + format);\n }\n}\nvar cpal_default = { parse: parseCpalTable, make: makeCpalTable, getPaletteColor, parseColor, formatColor };\n\n// src/glyph.mjs\nfunction getPathDefinition(glyph, path) {\n let _path = path || new path_default();\n return {\n configurable: true,\n get: function() {\n if (typeof _path === \"function\") {\n _path = _path();\n }\n return _path;\n },\n set: function(p) {\n _path = p;\n }\n };\n}\nfunction Glyph(options) {\n this.bindConstructorValues(options);\n}\nGlyph.prototype.bindConstructorValues = function(options) {\n this.index = options.index || 0;\n if (options.name === \".notdef\") {\n options.unicode = void 0;\n } else if (options.name === \".null\") {\n options.unicode = 0;\n }\n if (options.unicode === 0 && options.name !== \".null\") {\n throw new Error('The unicode value \"0\" is reserved for the glyph name \".null\" and cannot be used by any other glyph.');\n }\n this.name = options.name || null;\n this.unicode = options.unicode;\n this.unicodes = options.unicodes || (options.unicode !== void 0 ? [options.unicode] : []);\n if (\"xMin\" in options) {\n this.xMin = options.xMin;\n }\n if (\"yMin\" in options) {\n this.yMin = options.yMin;\n }\n if (\"xMax\" in options) {\n this.xMax = options.xMax;\n }\n if (\"yMax\" in options) {\n this.yMax = options.yMax;\n }\n if (\"advanceWidth\" in options) {\n this.advanceWidth = options.advanceWidth;\n }\n if (\"leftSideBearing\" in options) {\n this.leftSideBearing = options.leftSideBearing;\n }\n if (\"points\" in options) {\n this.points = options.points;\n }\n Object.defineProperty(this, \"path\", getPathDefinition(this, options.path));\n};\nGlyph.prototype.addUnicode = function(unicode) {\n if (this.unicodes.length === 0) {\n this.unicode = unicode;\n }\n this.unicodes.push(unicode);\n};\nGlyph.prototype.getBoundingBox = function() {\n return this.path.getBoundingBox();\n};\nGlyph.prototype.getPath = function(x, y, fontSize, options, font) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n let commands;\n let hPoints;\n let xScale = options.xScale;\n let yScale = options.yScale;\n const scale = 1 / (this.path.unitsPerEm || 1e3) * fontSize;\n let useGlyph = this;\n if (font && font.variation) {\n useGlyph = font.variation.getTransform(this, options.variation);\n commands = useGlyph.path.commands;\n }\n if (options.hinting && font && font.hinting) {\n hPoints = useGlyph.path && font.hinting.exec(useGlyph, fontSize, options);\n }\n if (hPoints) {\n commands = font.hinting.getCommands(hPoints);\n x = Math.round(x);\n y = Math.round(y);\n xScale = yScale = 1;\n } else {\n commands = useGlyph.path.commands;\n if (xScale === void 0) xScale = scale;\n if (yScale === void 0) yScale = scale;\n }\n const p = new path_default();\n if (options.drawSVG) {\n const svgImage = this.getSvgImage(font);\n if (svgImage) {\n const layer = new path_default();\n layer._image = {\n image: svgImage.image,\n x: x + svgImage.leftSideBearing * scale,\n y: y - svgImage.baseline * scale,\n width: svgImage.image.width * scale,\n height: svgImage.image.height * scale\n };\n p._layers = [layer];\n return p;\n }\n }\n if (options.drawLayers) {\n const layers = this.getLayers(font);\n if (layers && layers.length) {\n p._layers = [];\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n let color = getPaletteColor(font, layer.paletteIndex, options.usePalette);\n if (color === \"currentColor\") {\n color = options.fill || \"black\";\n } else {\n color = formatColor(color, options.colorFormat || \"rgba\");\n }\n options = Object.assign({}, options, { fill: color });\n p._layers.push(this.getPath.call(layer.glyph, x, y, fontSize, options, font));\n }\n return p;\n }\n }\n p.fill = options.fill || this.path.fill;\n p.stroke = this.path.stroke;\n p.strokeWidth = this.path.strokeWidth * scale;\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.type === \"M\") {\n p.moveTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"L\") {\n p.lineTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"Q\") {\n p.quadraticCurveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"C\") {\n p.curveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x2 * xScale,\n y + -cmd.y2 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"Z\" && p.stroke && p.strokeWidth) {\n p.closePath();\n }\n }\n return p;\n};\nGlyph.prototype.getLayers = function(font) {\n if (!font) {\n throw new Error(\"The font object is required to read the colr/cpal tables in order to get the layers.\");\n }\n return font.layers.get(this.index);\n};\nGlyph.prototype.getSvgImage = function(font) {\n if (!font) {\n throw new Error(\"The font object is required to read the svg table in order to get the image.\");\n }\n return font.svgImages.get(this.index);\n};\nGlyph.prototype.getContours = function(transformedPoints = null) {\n if (this.points === void 0 && !transformedPoints) {\n return [];\n }\n const contours = [];\n let currentContour = [];\n let points = transformedPoints ? transformedPoints : this.points;\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check_default.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n};\nGlyph.prototype.getMetrics = function() {\n const commands = this.path.commands;\n const xCoords = [];\n const yCoords = [];\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.type !== \"Z\") {\n xCoords.push(cmd.x);\n yCoords.push(cmd.y);\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n xCoords.push(cmd.x1);\n yCoords.push(cmd.y1);\n }\n if (cmd.type === \"C\") {\n xCoords.push(cmd.x2);\n yCoords.push(cmd.y2);\n }\n }\n const metrics = {\n xMin: Math.min.apply(null, xCoords),\n yMin: Math.min.apply(null, yCoords),\n xMax: Math.max.apply(null, xCoords),\n yMax: Math.max.apply(null, yCoords),\n leftSideBearing: this.leftSideBearing\n };\n if (!isFinite(metrics.xMin)) {\n metrics.xMin = 0;\n }\n if (!isFinite(metrics.xMax)) {\n metrics.xMax = this.advanceWidth;\n }\n if (!isFinite(metrics.yMin)) {\n metrics.yMin = 0;\n }\n if (!isFinite(metrics.yMax)) {\n metrics.yMax = 0;\n }\n metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin);\n return metrics;\n};\nGlyph.prototype.draw = function(ctx, x, y, fontSize, options, font) {\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n const path = this.getPath(x, y, fontSize, options, font);\n path.draw(ctx);\n};\nGlyph.prototype.drawPoints = function(ctx, x, y, fontSize, options, font) {\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n if (options.drawLayers) {\n const layers = this.getLayers(font);\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l += 1) {\n if (layers[l].glyph.index !== this.index) {\n this.drawPoints.call(layers[l].glyph, ctx, x, y, fontSize);\n }\n }\n return;\n }\n }\n function drawCircles(l, x2, y2, scale2) {\n ctx.beginPath();\n for (let j = 0; j < l.length; j += 1) {\n ctx.moveTo(x2 + l[j].x * scale2, y2 + l[j].y * scale2);\n ctx.arc(x2 + l[j].x * scale2, y2 + l[j].y * scale2, 2, 0, Math.PI * 2, false);\n }\n ctx.fill();\n }\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n const scale = 1 / this.path.unitsPerEm * fontSize;\n const blueCircles = [];\n const redCircles = [];\n const path = this.path;\n let commands = path.commands;\n if (font && font.variation) {\n commands = font.variation.getTransform(this, options.variation).path.commands;\n }\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.x !== void 0) {\n blueCircles.push({ x: cmd.x, y: -cmd.y });\n }\n if (cmd.x1 !== void 0) {\n redCircles.push({ x: cmd.x1, y: -cmd.y1 });\n }\n if (cmd.x2 !== void 0) {\n redCircles.push({ x: cmd.x2, y: -cmd.y2 });\n }\n }\n ctx.fillStyle = \"blue\";\n drawCircles(blueCircles, x, y, scale);\n ctx.fillStyle = \"red\";\n drawCircles(redCircles, x, y, scale);\n};\nGlyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {\n let scale;\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n scale = 1 / this.path.unitsPerEm * fontSize;\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"black\";\n draw_default.line(ctx, x, -1e4, x, 1e4);\n draw_default.line(ctx, -1e4, y, 1e4, y);\n const xMin = this.xMin || 0;\n let yMin = this.yMin || 0;\n const xMax = this.xMax || 0;\n let yMax = this.yMax || 0;\n const advanceWidth = this.advanceWidth || 0;\n ctx.strokeStyle = \"blue\";\n draw_default.line(ctx, x + xMin * scale, -1e4, x + xMin * scale, 1e4);\n draw_default.line(ctx, x + xMax * scale, -1e4, x + xMax * scale, 1e4);\n draw_default.line(ctx, -1e4, y + -yMin * scale, 1e4, y + -yMin * scale);\n draw_default.line(ctx, -1e4, y + -yMax * scale, 1e4, y + -yMax * scale);\n ctx.strokeStyle = \"green\";\n draw_default.line(ctx, x + advanceWidth * scale, -1e4, x + advanceWidth * scale, 1e4);\n};\nGlyph.prototype.toPathData = function(options, font) {\n options = Object.assign({}, { variation: font && font.defaultRenderOptions.variation }, options);\n let useGlyph = this;\n if (font && font.variation) {\n useGlyph = font.variation.getTransform(this, options.variation);\n }\n let usePath = useGlyph.points && options.pointsTransform ? options.pointsTransform(useGlyph.points) : useGlyph.path;\n if (options.pathTransform) {\n usePath = options.pathTransform(usePath);\n }\n return usePath.toPathData(options);\n};\nGlyph.prototype.fromSVG = function(pathData, options = {}) {\n return this.path.fromSVG(pathData, options);\n};\nGlyph.prototype.toSVG = function(options, font) {\n const pathData = this.toPathData.apply(this, [options, font]);\n return this.path.toSVG(options, pathData);\n};\nGlyph.prototype.toDOMElement = function(options, font) {\n options = Object.assign({}, { variation: font && font.defaultRenderOptions.variation }, options);\n let usePath = this.path;\n if (font && font.variation) {\n usePath = font.variation.getTransform(this, options.variation).path;\n }\n return usePath.toDOMElement(options);\n};\nvar glyph_default = Glyph;\n\n// src/glyphset.mjs\nfunction defineDependentProperty(glyph, externalName, internalName) {\n Object.defineProperty(glyph, externalName, {\n get: function() {\n typeof glyph[internalName] === \"undefined\" && glyph.path;\n return glyph[internalName];\n },\n set: function(newValue) {\n glyph[internalName] = newValue;\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction GlyphSet(font, glyphs) {\n this.font = font;\n this.glyphs = {};\n if (Array.isArray(glyphs)) {\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n glyph.path.unitsPerEm = font.unitsPerEm;\n this.glyphs[i] = glyph;\n }\n }\n this.length = glyphs && glyphs.length || 0;\n}\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n GlyphSet.prototype[Symbol.iterator] = function() {\n let n = -1;\n return {\n next: function() {\n n++;\n const done = n >= this.length - 1;\n return { value: this.get(n), done };\n }.bind(this)\n };\n };\n}\nGlyphSet.prototype.get = function(index) {\n if (this.font._push && this.glyphs[index] === void 0) {\n this.font._push(index);\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n let glyph = this.glyphs[index];\n let unicodeObj = this.font._IndexToUnicodeMap[index];\n if (unicodeObj) {\n for (let j = 0; j < unicodeObj.unicodes.length; j++)\n glyph.addUnicode(unicodeObj.unicodes[j]);\n }\n if (this.font.cffEncoding) {\n glyph.name = this.font.cffEncoding.charset[index];\n } else if (this.font.glyphNames.names) {\n glyph.name = this.font.glyphNames.glyphIndexToName(index);\n }\n this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth;\n this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing;\n } else {\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n }\n return this.glyphs[index];\n};\nGlyphSet.prototype.push = function(index, loader) {\n this.glyphs[index] = loader;\n this.length++;\n};\nfunction glyphLoader(font, index) {\n return new glyph_default({ index, font });\n}\nfunction ttfGlyphLoader(font, index, parseGlyph2, data, position, buildPath2) {\n return function() {\n const glyph = new glyph_default({ index, font });\n glyph.path = function() {\n parseGlyph2(glyph, data, position);\n const path = buildPath2(font.glyphs, glyph);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n defineDependentProperty(glyph, \"numberOfContours\", \"_numberOfContours\");\n defineDependentProperty(glyph, \"xMin\", \"_xMin\");\n defineDependentProperty(glyph, \"xMax\", \"_xMax\");\n defineDependentProperty(glyph, \"yMin\", \"_yMin\");\n defineDependentProperty(glyph, \"yMax\", \"_yMax\");\n defineDependentProperty(glyph, \"points\", \"_points\");\n return glyph;\n };\n}\nfunction cffGlyphLoader(font, index, parseCFFCharstring2, charstring, version) {\n return function() {\n const glyph = new glyph_default({ index, font });\n glyph.path = function() {\n const path = parseCFFCharstring2(font, glyph, charstring, version);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n return glyph;\n };\n}\nvar glyphset_default = { GlyphSet, glyphLoader, ttfGlyphLoader, cffGlyphLoader };\n\n// src/tables/cff.mjs\nfunction equals(a, b) {\n if (a === b) {\n return true;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i += 1) {\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nvar MAX_CALL_DEPTH = 10;\nfunction calcCFFSubroutineBias(subrs) {\n let bias;\n if (subrs.length < 1240) {\n bias = 107;\n } else if (subrs.length < 33900) {\n bias = 1131;\n } else {\n bias = 32768;\n }\n return bias;\n}\nfunction parseCFFIndex(data, start, conversionFn, version) {\n const offsets = [];\n const objects = [];\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset;\n let endOffset;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n let pos = start + countLength + 1;\n for (let i = 0; i < count + 1; i += 1) {\n offsets.push(parse_default.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + countLength;\n }\n for (let i = 0; i < offsets.length - 1; i += 1) {\n let value = parse_default.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value, data, start, version);\n }\n objects.push(value);\n }\n return { objects, startOffset: start, endOffset };\n}\nfunction parseCFFIndexLowMemory(data, start, version) {\n const offsets = [];\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset;\n let endOffset;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n let pos = start + countLength + 1;\n for (let i = 0; i < count + 1; i += 1) {\n offsets.push(parse_default.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + countLength;\n }\n return { offsets, startOffset: start, endOffset };\n}\nfunction getCffIndexObject(i, offsets, data, start, conversionFn, version) {\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset = 0;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n }\n let value = parse_default.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value);\n }\n return value;\n}\nfunction parseFloatOperand(parser) {\n let s = \"\";\n const eof = 15;\n const lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n for (; ; ) {\n const b = parser.parseByte();\n const n1 = b >> 4;\n const n2 = b & 15;\n if (n1 === eof) {\n break;\n }\n s += lookup[n1];\n if (n2 === eof) {\n break;\n }\n s += lookup[n2];\n }\n return parseFloat(s);\n}\nfunction parseOperand(parser, b0) {\n let b1;\n let b2;\n let b3;\n let b4;\n if (b0 === 28) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n return b1 << 8 | b2;\n }\n if (b0 === 29) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n b3 = parser.parseByte();\n b4 = parser.parseByte();\n return b1 << 24 | b2 << 16 | b3 << 8 | b4;\n }\n if (b0 === 30) {\n return parseFloatOperand(parser);\n }\n if (b0 >= 32 && b0 <= 246) {\n return b0 - 139;\n }\n if (b0 >= 247 && b0 <= 250) {\n b1 = parser.parseByte();\n return (b0 - 247) * 256 + b1 + 108;\n }\n if (b0 >= 251 && b0 <= 254) {\n b1 = parser.parseByte();\n return -(b0 - 251) * 256 - b1 - 108;\n }\n throw new Error(\"Invalid b0 \" + b0);\n}\nfunction entriesToObject(entries) {\n const o = {};\n for (let i = 0; i < entries.length; i += 1) {\n const key = entries[i][0];\n const values = entries[i][1];\n let value;\n if (values.length === 1) {\n value = values[0];\n } else {\n value = values;\n }\n if (Object.prototype.hasOwnProperty.call(o, key) && !isNaN(o[key])) {\n throw new Error(\"Object \" + o + \" already has key \" + key);\n }\n o[key] = value;\n }\n return o;\n}\nfunction parseCFFDict(data, start, size, version) {\n start = start !== void 0 ? start : 0;\n const parser = new parse_default.Parser(data, start);\n const entries = [];\n let operands = [];\n size = size !== void 0 ? size : data.byteLength;\n let operandsStart = version < 2 ? 22 : 28;\n while (parser.relativeOffset < size) {\n let op = parser.parseByte();\n if (op < operandsStart) {\n if (op === 12) {\n op = 1200 + parser.parseByte();\n }\n if (version > 1 && op === 23) {\n parseBlend(operands);\n continue;\n }\n entries.push([op, operands]);\n operands = [];\n } else {\n operands.push(parseOperand(parser, op, version));\n }\n }\n return entriesToObject(entries);\n}\nfunction getCFFString(strings, index) {\n if (index <= 390) {\n index = cffStandardStrings[index];\n } else if (strings) {\n index = strings[index - 391];\n } else {\n index = void 0;\n }\n return index;\n}\nfunction interpretDict(dict, meta, strings) {\n const newDict = {};\n let value;\n for (let i = 0; i < meta.length; i += 1) {\n const m = meta[i];\n if (Array.isArray(m.type)) {\n const values = [];\n values.length = m.type.length;\n for (let j = 0; j < m.type.length; j++) {\n value = dict[m.op] !== void 0 ? dict[m.op][j] : void 0;\n if (value === void 0) {\n value = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null;\n }\n if (m.type[j] === \"SID\") {\n value = getCFFString(strings, value);\n }\n values[j] = value;\n }\n newDict[m.name] = values;\n } else {\n value = dict[m.op];\n if (value === void 0) {\n value = m.value !== void 0 ? m.value : null;\n }\n if (m.type === \"SID\") {\n value = getCFFString(strings, value);\n }\n newDict[m.name] = value;\n }\n }\n return newDict;\n}\nfunction parseCFFHeader(data, start) {\n const header = {};\n header.formatMajor = parse_default.getCard8(data, start);\n header.formatMinor = parse_default.getCard8(data, start + 1);\n if (header.formatMajor > 2) {\n throw new Error(`Unsupported CFF table version ${header.formatMajor}.${header.formatMinor}`);\n }\n header.size = parse_default.getCard8(data, start + 2);\n if (header.formatMajor < 2) {\n header.offsetSize = parse_default.getCard8(data, start + 3);\n header.startOffset = start;\n header.endOffset = start + 4;\n } else {\n header.topDictLength = parse_default.getCard16(data, start + 3);\n header.endOffset = start + 8;\n }\n return header;\n}\nvar TOP_DICT_META = [\n { name: \"version\", op: 0, type: \"SID\" },\n { name: \"notice\", op: 1, type: \"SID\" },\n { name: \"copyright\", op: 1200, type: \"SID\" },\n { name: \"fullName\", op: 2, type: \"SID\" },\n { name: \"familyName\", op: 3, type: \"SID\" },\n { name: \"weight\", op: 4, type: \"SID\" },\n { name: \"isFixedPitch\", op: 1201, type: \"number\", value: 0 },\n { name: \"italicAngle\", op: 1202, type: \"number\", value: 0 },\n { name: \"underlinePosition\", op: 1203, type: \"number\", value: -100 },\n { name: \"underlineThickness\", op: 1204, type: \"number\", value: 50 },\n { name: \"paintType\", op: 1205, type: \"number\", value: 0 },\n { name: \"charstringType\", op: 1206, type: \"number\", value: 2 },\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"uniqueId\", op: 13, type: \"number\" },\n { name: \"fontBBox\", op: 5, type: [\"number\", \"number\", \"number\", \"number\"], value: [0, 0, 0, 0] },\n { name: \"strokeWidth\", op: 1208, type: \"number\", value: 0 },\n { name: \"xuid\", op: 14, type: [], value: null },\n { name: \"charset\", op: 15, type: \"offset\", value: 0 },\n { name: \"encoding\", op: 16, type: \"offset\", value: 0 },\n { name: \"charStrings\", op: 17, type: \"offset\", value: 0 },\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] },\n { name: \"ros\", op: 1230, type: [\"SID\", \"SID\", \"number\"] },\n { name: \"cidFontVersion\", op: 1231, type: \"number\", value: 0 },\n { name: \"cidFontRevision\", op: 1232, type: \"number\", value: 0 },\n { name: \"cidFontType\", op: 1233, type: \"number\", value: 0 },\n { name: \"cidCount\", op: 1234, type: \"number\", value: 8720 },\n { name: \"uidBase\", op: 1235, type: \"number\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"fontName\", op: 1238, type: \"SID\" }\n];\nvar TOP_DICT_META_CFF2 = [\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"charStrings\", op: 17, type: \"offset\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"vstore\", op: 24, type: \"offset\" }\n];\nvar PRIVATE_DICT_META = [\n { name: \"subrs\", op: 19, type: \"offset\", value: 0 },\n { name: \"defaultWidthX\", op: 20, type: \"number\", value: 0 },\n { name: \"nominalWidthX\", op: 21, type: \"number\", value: 0 }\n];\nvar PRIVATE_DICT_META_CFF2 = [\n { name: \"blueValues\", op: 6, type: \"delta\" },\n { name: \"otherBlues\", op: 7, type: \"delta\" },\n { name: \"familyBlues\", op: 7, type: \"delta\" },\n { name: \"familyBlues\", op: 8, type: \"delta\" },\n { name: \"familyOtherBlues\", op: 9, type: \"delta\" },\n { name: \"blueScale\", op: 1209, type: \"number\", value: 0.039625 },\n { name: \"blueShift\", op: 1210, type: \"number\", value: 7 },\n { name: \"blueFuzz\", op: 1211, type: \"number\", value: 1 },\n { name: \"stdHW\", op: 10, type: \"number\" },\n { name: \"stdVW\", op: 11, type: \"number\" },\n { name: \"stemSnapH\", op: 1212, type: \"number\" },\n { name: \"stemSnapV\", op: 1213, type: \"number\" },\n { name: \"languageGroup\", op: 1217, type: \"number\", value: 0 },\n { name: \"expansionFactor\", op: 1218, type: \"number\", value: 0.06 },\n { name: \"vsindex\", op: 22, type: \"number\", value: 0 },\n { name: \"subrs\", op: 19, type: \"offset\" }\n];\nvar FONT_DICT_META = [\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] }\n];\nfunction parseCFFTopDict(data, start, strings, version) {\n const dict = parseCFFDict(data, start, data.byteLength, version);\n return interpretDict(dict, version > 1 ? TOP_DICT_META_CFF2 : TOP_DICT_META, strings);\n}\nfunction parseCFFPrivateDict(data, start, size, strings, version) {\n const dict = parseCFFDict(data, start, size, version);\n return interpretDict(dict, version > 1 ? PRIVATE_DICT_META_CFF2 : PRIVATE_DICT_META, strings);\n}\nfunction parseFontDict(data, start, version) {\n const dict = parseCFFDict(data, start, void 0, version);\n return interpretDict(dict, FONT_DICT_META);\n}\nfunction gatherCFF2FontDicts(data, start, fdArray) {\n const fontDictArray = [];\n for (let i = 0; i < fdArray.length; i++) {\n const fontDictData = new DataView(new Uint8Array(fdArray[i]).buffer);\n const fontDict = parseFontDict(fontDictData, 0, 2);\n const privateSize = fontDict.private[0];\n const privateOffset = fontDict.private[1];\n if (privateSize !== 0 && privateOffset !== 0) {\n const privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, [], 2);\n if (privateDict.subrs) {\n const subrOffset = privateOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset + start, void 0, 2);\n fontDict._subrs = subrIndex.objects;\n fontDict._subrsBias = calcCFFSubroutineBias(fontDict._subrs);\n }\n fontDict._privateDict = privateDict;\n }\n fontDictArray.push(fontDict);\n }\n return fontDictArray;\n}\nfunction gatherCFFTopDicts(data, start, cffIndex, strings, version) {\n const topDictArray = [];\n for (let iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {\n const topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);\n const topDict = parseCFFTopDict(topDictData, 0, strings, version);\n topDict._subrs = [];\n topDict._subrsBias = 0;\n topDict._defaultWidthX = 0;\n topDict._nominalWidthX = 0;\n const privateSize = version < 2 ? topDict.private[0] : 0;\n const privateOffset = version < 2 ? topDict.private[1] : 0;\n if (privateSize !== 0 && privateOffset !== 0) {\n const privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings, version);\n topDict._defaultWidthX = privateDict.defaultWidthX;\n topDict._nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n const subrOffset = privateOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset + start, void 0, version);\n topDict._subrs = subrIndex.objects;\n topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);\n }\n topDict._privateDict = privateDict;\n }\n topDictArray.push(topDict);\n }\n return topDictArray;\n}\nfunction parseCFFCharset(data, start, nGlyphs, strings, isCIDFont) {\n let sid;\n let count;\n const parser = new parse_default.Parser(data, start);\n nGlyphs -= 1;\n const charset = [\".notdef\"];\n const format = parser.parseCard8();\n if (format === 0) {\n for (let i = 0; i < nGlyphs; i += 1) {\n sid = parser.parseSID();\n if (isCIDFont) {\n charset.push(sid);\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n }\n } else if (format === 1) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard8();\n for (let i = 0; i <= count; i += 1) {\n if (isCIDFont) {\n charset.push(\"cid\" + (\"00000\" + sid).slice(-5));\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n sid += 1;\n }\n }\n } else if (format === 2) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard16();\n for (let i = 0; i <= count; i += 1) {\n if (isCIDFont) {\n charset.push(\"cid\" + (\"00000\" + sid).slice(-5));\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n sid += 1;\n }\n }\n } else {\n throw new Error(\"Unknown charset format \" + format);\n }\n return charset;\n}\nfunction parseCFFEncoding(data, start) {\n let code;\n const encoding = {};\n const parser = new parse_default.Parser(data, start);\n const format = parser.parseCard8();\n if (format === 0) {\n const nCodes = parser.parseCard8();\n for (let i = 0; i < nCodes; i += 1) {\n code = parser.parseCard8();\n encoding[code] = i;\n }\n } else if (format === 1) {\n const nRanges = parser.parseCard8();\n code = 1;\n for (let i = 0; i < nRanges; i += 1) {\n const first = parser.parseCard8();\n const nLeft = parser.parseCard8();\n for (let j = first; j <= first + nLeft; j += 1) {\n encoding[j] = code;\n code += 1;\n }\n }\n } else {\n throw new Error(\"Unknown encoding format \" + format);\n }\n return encoding;\n}\nfunction parseBlend(operands) {\n let numberOfBlends = operands.pop();\n while (operands.length > numberOfBlends) {\n operands.pop();\n }\n}\nfunction applyPaintType(font, path) {\n const paintType = font.tables.cff && font.tables.cff.topDict && font.tables.cff.topDict.paintType || 0;\n if (paintType === 2) {\n path.fill = null;\n path.stroke = \"black\";\n path.strokeWidth = font.tables.cff.topDict.strokeWidth || 0;\n }\n return paintType;\n}\nfunction parseCFFCharstring(font, glyph, code, version, coords) {\n let c1x;\n let c1y;\n let c2x;\n let c2y;\n const p = new path_default();\n const stack = [];\n let nStems = 0;\n let haveWidth = false;\n let open = false;\n let x = 0;\n let y = 0;\n let subrs;\n let subrsBias;\n let defaultWidthX;\n let nominalWidthX;\n let vsindex = 0;\n let vstore = [];\n let blendVector;\n let callDepth = 0;\n const cffTable = font.tables.cff2 || font.tables.cff;\n defaultWidthX = cffTable.topDict._defaultWidthX;\n nominalWidthX = cffTable.topDict._nominalWidthX;\n coords = coords || font.variation && font.variation.get();\n if (!glyph.getBlendPath) {\n glyph.getBlendPath = function(variationCoords) {\n return parseCFFCharstring(font, glyph, code, version, variationCoords);\n };\n }\n if (font.isCIDFont || version > 1) {\n const fdIndex = cffTable.topDict._fdSelect ? cffTable.topDict._fdSelect[glyph.index] : 0;\n const fdDict = cffTable.topDict._fdArray[fdIndex];\n subrs = fdDict._subrs;\n subrsBias = fdDict._subrsBias;\n if (version > 1) {\n vstore = cffTable.topDict._vstore.itemVariationStore;\n vsindex = fdDict._privateDict.vsindex;\n } else {\n defaultWidthX = fdDict._defaultWidthX;\n nominalWidthX = fdDict._nominalWidthX;\n }\n } else {\n subrs = cffTable.topDict._subrs;\n subrsBias = cffTable.topDict._subrsBias;\n }\n const paintType = applyPaintType(font, p);\n let width = defaultWidthX;\n function newContour(x2, y2) {\n if (open && paintType !== 2) {\n p.closePath();\n }\n p.moveTo(x2, y2);\n open = true;\n }\n function parseStems() {\n let hasWidthArg;\n hasWidthArg = (stack.length & 1) !== 0;\n if (hasWidthArg && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n }\n nStems += stack.length >> 1;\n stack.length = 0;\n haveWidth = true;\n }\n function parse(code2) {\n let b1;\n let b2;\n let b3;\n let b4;\n let codeIndex;\n let subrCode;\n let jpx;\n let jpy;\n let c3x;\n let c3y;\n let c4x;\n let c4y;\n let i = 0;\n while (i < code2.length) {\n let v = code2[i];\n i += 1;\n switch (v) {\n case 1:\n parseStems();\n break;\n case 3:\n parseStems();\n break;\n case 4:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n newContour(x, y);\n break;\n case 5:\n while (stack.length > 0) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 6:\n while (stack.length > 0) {\n x += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 7:\n while (stack.length > 0) {\n y += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n x += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 8:\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 10:\n codeIndex = stack.pop() + subrsBias;\n subrCode = subrs[codeIndex];\n if (subrCode) {\n if (callDepth >= MAX_CALL_DEPTH) {\n console.warn(\"CFF charstring subroutine call depth exceeded, skipping callsubr\");\n break;\n }\n callDepth++;\n parse(subrCode);\n callDepth--;\n }\n break;\n case 11:\n if (version > 1) {\n console.error(\"CFF CharString operator return (11) is not supported in CFF2\");\n break;\n }\n return;\n case 12:\n v = code2[i];\n i += 1;\n switch (v) {\n case 35:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n y = c4y + stack.shift();\n stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 34:\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = y;\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 36:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 37:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n if (Math.abs(c4x - x) > Math.abs(c4y - y)) {\n x = c4x + stack.shift();\n } else {\n y = c4y + stack.shift();\n }\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n default:\n console.log(\"Glyph \" + glyph.index + \": unknown operator 1200\" + v);\n stack.length = 0;\n }\n break;\n case 14:\n if (version > 1) {\n console.error(\"CFF CharString operator endchar (14) is not supported in CFF2\");\n break;\n }\n if (stack.length >= 4) {\n const acharName = cffStandardEncoding[stack.pop()];\n const bcharName = cffStandardEncoding[stack.pop()];\n const ady = stack.pop();\n const adx = stack.pop();\n if (acharName && bcharName) {\n glyph.isComposite = true;\n glyph.components = [];\n const acharGlyphIndex = font.cffEncoding.charset.indexOf(acharName);\n const bcharGlyphIndex = font.cffEncoding.charset.indexOf(bcharName);\n glyph.components.push({\n glyphIndex: bcharGlyphIndex,\n dx: 0,\n dy: 0\n });\n glyph.components.push({\n glyphIndex: acharGlyphIndex,\n dx: adx,\n dy: ady\n });\n p.extend(font.glyphs.get(bcharGlyphIndex).path);\n const acharGlyph = font.glyphs.get(acharGlyphIndex);\n const shiftedCommands = JSON.parse(JSON.stringify(acharGlyph.path.commands));\n for (let i2 = 0; i2 < shiftedCommands.length; i2 += 1) {\n const cmd = shiftedCommands[i2];\n if (cmd.type !== \"Z\") {\n cmd.x += adx;\n cmd.y += ady;\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n cmd.x1 += adx;\n cmd.y1 += ady;\n }\n if (cmd.type === \"C\") {\n cmd.x2 += adx;\n cmd.y2 += ady;\n }\n }\n p.extend(shiftedCommands);\n }\n } else if (stack.length > 0 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n if (open && paintType !== 2) {\n p.closePath();\n open = false;\n }\n break;\n case 15:\n if (version < 2) {\n console.error(\"CFF2 CharString operator vsindex (15) is not supported in CFF\");\n break;\n }\n vsindex = stack.pop();\n break;\n case 16:\n if (version < 2) {\n console.error(\"CFF2 CharString operator blend (16) is not supported in CFF\");\n break;\n }\n if (!blendVector) {\n blendVector = font.variation && coords && font.variation.process.getBlendVector(vstore, vsindex, coords);\n }\n var n = stack.pop();\n var axisCount = blendVector ? blendVector.length : vstore.itemVariationSubtables[vsindex].regionIndexes.length;\n var deltaSetCount = n * axisCount;\n var delta = stack.length - deltaSetCount;\n var deltaSetIndex = delta - n;\n if (blendVector) {\n for (let i2 = 0; i2 < n; i2++) {\n var sum = stack[deltaSetIndex + i2];\n for (let j = 0; j < axisCount; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n stack[deltaSetIndex + i2] = sum;\n }\n }\n while (deltaSetCount--) {\n stack.pop();\n }\n break;\n case 18:\n parseStems();\n break;\n case 19:\n // hintmask\n case 20:\n parseStems();\n i += nStems + 7 >> 3;\n break;\n case 21:\n if (stack.length > 2 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n x += stack.pop();\n newContour(x, y);\n break;\n case 22:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n x += stack.pop();\n newContour(x, y);\n break;\n case 23:\n parseStems();\n break;\n case 24:\n while (stack.length > 2) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n break;\n case 25:\n while (stack.length > 6) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n case 26:\n if (stack.length & 1) {\n x += stack.shift();\n }\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 27:\n if (stack.length & 1) {\n y += stack.shift();\n }\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 28:\n b1 = code2[i];\n b2 = code2[i + 1];\n stack.push((b1 << 24 | b2 << 16) >> 16);\n i += 2;\n break;\n case 29:\n codeIndex = stack.pop() + font.gsubrsBias;\n subrCode = font.gsubrs[codeIndex];\n if (subrCode) {\n if (callDepth >= MAX_CALL_DEPTH) {\n console.warn(\"CFF charstring subroutine call depth exceeded, skipping callgsubr\");\n break;\n }\n callDepth++;\n parse(subrCode);\n callDepth--;\n }\n break;\n case 30:\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 31:\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n default:\n if (v < 32) {\n console.log(\"Glyph \" + glyph.index + \": unknown operator \" + v);\n } else if (v < 247) {\n stack.push(v - 139);\n } else if (v < 251) {\n b1 = code2[i];\n i += 1;\n stack.push((v - 247) * 256 + b1 + 108);\n } else if (v < 255) {\n b1 = code2[i];\n i += 1;\n stack.push(-(v - 251) * 256 - b1 - 108);\n } else {\n b1 = code2[i];\n b2 = code2[i + 1];\n b3 = code2[i + 2];\n b4 = code2[i + 3];\n i += 4;\n stack.push((b1 << 24 | b2 << 16 | b3 << 8 | b4) / 65536);\n }\n }\n }\n }\n parse(code);\n if (font.variation && coords) {\n p.commands = p.commands.map((c) => {\n const keys = Object.keys(c);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === \"type\") continue;\n c[key] = Math.round(c[key]);\n }\n return c;\n });\n }\n if (haveWidth) {\n glyph.advanceWidth = width;\n }\n return p;\n}\nfunction parseCFFFDSelect(data, start, nGlyphs, fdArrayCount, version) {\n const fdSelect = [];\n let fdIndex;\n const parser = new parse_default.Parser(data, start);\n const format = parser.parseCard8();\n if (format === 0) {\n for (let iGid = 0; iGid < nGlyphs; iGid++) {\n fdIndex = parser.parseCard8();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\");\n }\n fdSelect.push(fdIndex);\n }\n } else if (format === 3 || version > 1 && format === 4) {\n const nRanges = format === 4 ? parser.parseULong() : parser.parseCard16();\n let first = format === 4 ? parser.parseULong() : parser.parseCard16();\n if (first !== 0) {\n throw new Error(`CFF Table CID Font FDSelect format ${format} range has bad initial GID ${first}`);\n }\n let next;\n for (let iRange = 0; iRange < nRanges; iRange++) {\n fdIndex = format === 4 ? parser.parseUShort() : parser.parseCard8();\n next = format === 4 ? parser.parseULong() : parser.parseCard16();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\");\n }\n if (next > nGlyphs) {\n throw new Error(`CFF Table CID Font FDSelect format ${version} range has bad GID ${next}`);\n }\n for (; first < next; first++) {\n fdSelect.push(fdIndex);\n }\n first = next;\n }\n if (next !== nGlyphs) {\n throw new Error(\"CFF Table CID Font FDSelect format 3 range has bad final (Sentinal) GID \" + next);\n }\n } else {\n throw new Error(\"CFF Table CID Font FDSelect table has unsupported format \" + format);\n }\n return fdSelect;\n}\nfunction parseCFFTable(data, start, font, opt) {\n let resultTable;\n const header = parseCFFHeader(data, start);\n if (header.formatMajor === 2) {\n resultTable = font.tables.cff2 = {};\n } else {\n resultTable = font.tables.cff = {};\n }\n const nameIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, header.endOffset, parse_default.bytesToString);\n const topDictIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, nameIndex.endOffset);\n const stringIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, topDictIndex.endOffset, parse_default.bytesToString);\n const globalSubrIndex = parseCFFIndex(data, header.formatMajor > 1 ? start + header.size + header.topDictLength : stringIndex.endOffset, void 0, header.formatMajor);\n font.gsubrs = globalSubrIndex.objects;\n font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);\n let topDict;\n if (header.formatMajor > 1) {\n const topDictOffset = start + header.size;\n const topDictData = parse_default.getBytes(data, topDictOffset, topDictOffset + header.topDictLength);\n topDict = gatherCFFTopDicts(data, 0, [topDictData], void 0, header.formatMajor)[0];\n } else {\n const topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects, header.formatMajor);\n if (topDictArray.length !== 1) {\n throw new Error(\"CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = \" + topDictArray.length);\n }\n topDict = topDictArray[0];\n }\n resultTable.topDict = topDict;\n if (topDict._privateDict) {\n font.defaultWidthX = topDict._privateDict.defaultWidthX;\n font.nominalWidthX = topDict._privateDict.nominalWidthX;\n }\n if (header.formatMajor < 2 && topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) {\n font.isCIDFont = true;\n }\n if (header.formatMajor > 1) {\n let fdArrayIndexOffset = topDict.fdArray;\n let fdSelectOffset = topDict.fdSelect;\n if (!fdArrayIndexOffset) {\n throw new Error(\"This is a CFF2 font, but FDArray information is missing\");\n }\n const fdArrayIndex = parseCFFIndex(data, start + fdArrayIndexOffset, null, header.formatMajor);\n const fdArray = gatherCFF2FontDicts(data, start, fdArrayIndex.objects);\n topDict._fdArray = fdArray;\n if (fdSelectOffset) {\n topDict._fdSelect = parseCFFFDSelect(data, start + fdSelectOffset, font.numGlyphs, fdArray.length, header.formatMajor);\n }\n } else if (font.isCIDFont) {\n let fdArrayOffset = topDict.fdArray;\n let fdSelectOffset = topDict.fdSelect;\n if (fdArrayOffset === 0 || fdSelectOffset === 0) {\n throw new Error(\"Font is marked as a CID font, but FDArray and/or FDSelect information is missing\");\n }\n fdArrayOffset += start;\n const fdArrayIndex = parseCFFIndex(data, fdArrayOffset);\n const fdArray = gatherCFFTopDicts(data, start, fdArrayIndex.objects, stringIndex.objects, header.formatMajor);\n topDict._fdArray = fdArray;\n fdSelectOffset += start;\n topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length, header.formatMajor);\n }\n if (header.formatMajor < 2) {\n const privateDictOffset = start + topDict.private[1];\n const privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects, header.formatMajor);\n font.defaultWidthX = privateDict.defaultWidthX;\n font.nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n const subrOffset = privateDictOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset);\n font.subrs = subrIndex.objects;\n font.subrsBias = calcCFFSubroutineBias(font.subrs);\n } else {\n font.subrs = [];\n font.subrsBias = 0;\n }\n }\n let charStringsIndex;\n if (opt.lowMemory) {\n charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings, header.formatMajor);\n font.nGlyphs = charStringsIndex.offsets.length - (header.formatMajor > 1 ? 1 : 0);\n } else {\n charStringsIndex = parseCFFIndex(data, start + topDict.charStrings, null, header.formatMajor);\n font.nGlyphs = charStringsIndex.objects.length;\n }\n if (header.formatMajor > 1 && font.tables.maxp && font.nGlyphs !== font.tables.maxp.numGlyphs) {\n console.error(`Glyph count in the CFF2 table (${font.nGlyphs}) must correspond to the glyph count in the maxp table (${font.tables.maxp.numGlyphs})`);\n }\n if (header.formatMajor < 2) {\n let charset = [];\n let encoding = [];\n if (topDict.charset === 0) {\n charset = cffISOAdobeStrings;\n } else if (topDict.charset === 1) {\n charset = cffIExpertStrings;\n } else if (topDict.charset === 2) {\n charset = cffExpertSubsetStrings;\n } else {\n charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects, font.isCIDFont);\n }\n if (topDict.encoding === 0) {\n encoding = cffStandardEncoding;\n } else if (topDict.encoding === 1) {\n encoding = cffExpertEncoding;\n } else {\n encoding = parseCFFEncoding(data, start + topDict.encoding);\n }\n font.cffEncoding = new CffEncoding(encoding, charset);\n font.encoding = font.encoding || font.cffEncoding;\n }\n font.glyphs = new glyphset_default.GlyphSet(font);\n if (opt.lowMemory) {\n font._push = function(i) {\n const charString = getCffIndexObject(i, charStringsIndex.offsets, data, start + topDict.charStrings, void 0, header.formatMajor);\n font.glyphs.push(i, glyphset_default.cffGlyphLoader(font, i, parseCFFCharstring, charString, header.formatMajor));\n };\n } else {\n for (let i = 0; i < font.nGlyphs; i += 1) {\n const charString = charStringsIndex.objects[i];\n font.glyphs.push(i, glyphset_default.cffGlyphLoader(font, i, parseCFFCharstring, charString, header.formatMajor));\n }\n }\n if (topDict.vstore) {\n const p = new parse_default.Parser(data, start + topDict.vstore);\n topDict._vstore = p.parseVariationStore();\n }\n}\nfunction encodeString(s, strings) {\n let sid;\n let i = cffStandardStrings.indexOf(s);\n if (i >= 0) {\n sid = i;\n }\n i = strings.indexOf(s);\n if (i >= 0) {\n sid = i + cffStandardStrings.length;\n } else {\n sid = cffStandardStrings.length + strings.length;\n strings.push(s);\n }\n return sid;\n}\nfunction makeHeader() {\n return new table_default.Record(\"Header\", [\n { name: \"major\", type: \"Card8\", value: 1 },\n { name: \"minor\", type: \"Card8\", value: 0 },\n { name: \"hdrSize\", type: \"Card8\", value: 4 },\n { name: \"major\", type: \"Card8\", value: 1 }\n ]);\n}\nfunction makeNameIndex(fontNames) {\n const t = new table_default.Record(\"Name INDEX\", [\n { name: \"names\", type: \"INDEX\", value: [] }\n ]);\n t.names = [];\n for (let i = 0; i < fontNames.length; i += 1) {\n t.names.push({ name: \"name_\" + i, type: \"NAME\", value: fontNames[i] });\n }\n return t;\n}\nfunction makeDict(meta, attrs, strings) {\n const m = {};\n for (let i = 0; i < meta.length; i += 1) {\n const entry = meta[i];\n let value = attrs[entry.name];\n if (value !== void 0 && !equals(value, entry.value)) {\n if (entry.type === \"SID\") {\n value = encodeString(value, strings);\n }\n m[entry.op] = { name: entry.name, type: entry.type, value };\n }\n }\n return m;\n}\nfunction makeTopDict(attrs, strings, version) {\n const t = new table_default.Record(\"Top DICT\", [\n { name: \"dict\", type: \"DICT\", value: {} }\n ]);\n t.dict = makeDict(version > 1 ? TOP_DICT_META_CFF2 : TOP_DICT_META, attrs, strings);\n return t;\n}\nfunction makeTopDictIndex(topDict) {\n const t = new table_default.Record(\"Top DICT INDEX\", [\n { name: \"topDicts\", type: \"INDEX\", value: [] }\n ]);\n t.topDicts = [{ name: \"topDict_0\", type: \"TABLE\", value: topDict }];\n return t;\n}\nfunction makeStringIndex(strings) {\n const t = new table_default.Record(\"String INDEX\", [\n { name: \"strings\", type: \"INDEX\", value: [] }\n ]);\n t.strings = [];\n for (let i = 0; i < strings.length; i += 1) {\n t.strings.push({ name: \"string_\" + i, type: \"STRING\", value: strings[i] });\n }\n return t;\n}\nfunction makeGlobalSubrIndex() {\n return new table_default.Record(\"Global Subr INDEX\", [\n { name: \"subrs\", type: \"INDEX\", value: [] }\n ]);\n}\nfunction makeCharsets(glyphNames, strings) {\n const t = new table_default.Record(\"Charsets\", [\n { name: \"format\", type: \"Card8\", value: 0 }\n ]);\n for (let i = 0; i < glyphNames.length; i += 1) {\n const glyphName = glyphNames[i];\n const glyphSID = encodeString(glyphName, strings);\n t.fields.push({ name: \"glyph_\" + i, type: \"SID\", value: glyphSID });\n }\n return t;\n}\nfunction glyphToOps(glyph, version) {\n const ops = [];\n const path = glyph.path;\n if (version < 2) {\n ops.push({ name: \"width\", type: \"NUMBER\", value: glyph.advanceWidth });\n }\n let x = 0;\n let y = 0;\n for (let i = 0; i < path.commands.length; i += 1) {\n let dx;\n let dy;\n let cmd = path.commands[i];\n if (cmd.type === \"Q\") {\n const _13 = 1 / 3;\n const _23 = 2 / 3;\n cmd = {\n type: \"C\",\n x: cmd.x,\n y: cmd.y,\n x1: Math.round(_13 * x + _23 * cmd.x1),\n y1: Math.round(_13 * y + _23 * cmd.y1),\n x2: Math.round(_13 * cmd.x + _23 * cmd.x1),\n y2: Math.round(_13 * cmd.y + _23 * cmd.y1)\n };\n }\n if (cmd.type === \"M\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rmoveto\", type: \"OP\", value: 21 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"L\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rlineto\", type: \"OP\", value: 5 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"C\") {\n const dx1 = Math.round(cmd.x1 - x);\n const dy1 = Math.round(cmd.y1 - y);\n const dx2 = Math.round(cmd.x2 - cmd.x1);\n const dy2 = Math.round(cmd.y2 - cmd.y1);\n dx = Math.round(cmd.x - cmd.x2);\n dy = Math.round(cmd.y - cmd.y2);\n ops.push({ name: \"dx1\", type: \"NUMBER\", value: dx1 });\n ops.push({ name: \"dy1\", type: \"NUMBER\", value: dy1 });\n ops.push({ name: \"dx2\", type: \"NUMBER\", value: dx2 });\n ops.push({ name: \"dy2\", type: \"NUMBER\", value: dy2 });\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rrcurveto\", type: \"OP\", value: 8 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n }\n }\n if (version < 2) {\n ops.push({ name: \"endchar\", type: \"OP\", value: 14 });\n }\n return ops;\n}\nfunction makeCharStringsIndex(glyphs, version) {\n const t = new table_default.Record(\"CharStrings INDEX\", [\n { name: \"charStrings\", type: \"INDEX\", value: [] }\n ]);\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n const ops = glyphToOps(glyph, version);\n t.charStrings.push({ name: glyph.name, type: \"CHARSTRING\", value: ops });\n }\n return t;\n}\nfunction makePrivateDict(attrs, strings, version) {\n const t = new table_default.Record(\"Private DICT\", [\n { name: \"dict\", type: \"DICT\", value: {} }\n ]);\n t.dict = makeDict(version > 1 ? PRIVATE_DICT_META_CFF2 : PRIVATE_DICT_META, attrs, strings);\n return t;\n}\nfunction makeCFFTable(glyphs, options) {\n const cffVersion = 1;\n const t = new table_default.Table(\"CFF \", [\n { name: \"header\", type: \"RECORD\" },\n { name: \"nameIndex\", type: \"RECORD\" },\n { name: \"topDictIndex\", type: \"RECORD\" },\n { name: \"stringIndex\", type: \"RECORD\" },\n { name: \"globalSubrIndex\", type: \"RECORD\" },\n { name: \"charsets\", type: \"RECORD\" },\n { name: \"charStringsIndex\", type: \"RECORD\" },\n { name: \"privateDict\", type: \"RECORD\" }\n ]);\n const fontScale = 1 / options.unitsPerEm;\n const attrs = {\n version: options.version,\n fullName: options.fullName,\n familyName: options.familyName,\n weight: options.weightName,\n fontBBox: options.fontBBox || [0, 0, 0, 0],\n fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],\n charset: 999,\n encoding: 0,\n charStrings: 999,\n private: [0, 999]\n };\n const topDictOptions = options && options.topDict || {};\n if (cffVersion < 2 && topDictOptions.paintType) {\n attrs.paintType = topDictOptions.paintType;\n attrs.strokeWidth = topDictOptions.strokeWidth || 0;\n }\n const privateAttrs = {};\n const glyphNames = [];\n let glyph;\n for (let i = 1; i < glyphs.length; i += 1) {\n glyph = glyphs.get(i);\n glyphNames.push(glyph.name);\n }\n const strings = [];\n t.header = makeHeader();\n t.nameIndex = makeNameIndex([options.postScriptName]);\n let topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n t.globalSubrIndex = makeGlobalSubrIndex();\n t.charsets = makeCharsets(glyphNames, strings);\n t.charStringsIndex = makeCharStringsIndex(glyphs, cffVersion);\n t.privateDict = makePrivateDict(privateAttrs, strings);\n t.stringIndex = makeStringIndex(strings);\n const startOffset = t.header.sizeOf() + t.nameIndex.sizeOf() + t.topDictIndex.sizeOf() + t.stringIndex.sizeOf() + t.globalSubrIndex.sizeOf();\n attrs.charset = startOffset;\n attrs.encoding = 0;\n attrs.charStrings = attrs.charset + t.charsets.sizeOf();\n attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();\n topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n return t;\n}\nvar cff_default = { parse: parseCFFTable, make: makeCFFTable };\n\n// src/tables/head.mjs\nfunction parseHeadTable(data, start) {\n const head = {};\n const p = new parse_default.Parser(data, start);\n head.version = p.parseVersion();\n head.fontRevision = Math.round(p.parseFixed() * 1e3) / 1e3;\n head.checkSumAdjustment = p.parseULong();\n head.magicNumber = p.parseULong();\n check_default.argument(head.magicNumber === 1594834165, \"Font header has wrong magic number.\");\n head.flags = p.parseUShort();\n head.unitsPerEm = p.parseUShort();\n head.created = p.parseLongDateTime();\n head.modified = p.parseLongDateTime();\n head.xMin = p.parseShort();\n head.yMin = p.parseShort();\n head.xMax = p.parseShort();\n head.yMax = p.parseShort();\n head.macStyle = p.parseUShort();\n head.lowestRecPPEM = p.parseUShort();\n head.fontDirectionHint = p.parseShort();\n head.indexToLocFormat = p.parseShort();\n head.glyphDataFormat = p.parseShort();\n return head;\n}\nfunction makeHeadTable(options) {\n const timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800;\n let createdTimestamp = timestamp;\n let macStyle = options.macStyle || 0;\n if (options.createdTimestamp) {\n createdTimestamp = options.createdTimestamp + 2082844800;\n }\n return new table_default.Table(\"head\", [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"fontRevision\", type: \"FIXED\", value: 65536 },\n { name: \"checkSumAdjustment\", type: \"ULONG\", value: 0 },\n { name: \"magicNumber\", type: \"ULONG\", value: 1594834165 },\n { name: \"flags\", type: \"USHORT\", value: 0 },\n { name: \"unitsPerEm\", type: \"USHORT\", value: 1e3 },\n { name: \"created\", type: \"LONGDATETIME\", value: createdTimestamp },\n { name: \"modified\", type: \"LONGDATETIME\", value: timestamp },\n { name: \"xMin\", type: \"SHORT\", value: 0 },\n { name: \"yMin\", type: \"SHORT\", value: 0 },\n { name: \"xMax\", type: \"SHORT\", value: 0 },\n { name: \"yMax\", type: \"SHORT\", value: 0 },\n { name: \"macStyle\", type: \"USHORT\", value: macStyle },\n { name: \"lowestRecPPEM\", type: \"USHORT\", value: 0 },\n { name: \"fontDirectionHint\", type: \"SHORT\", value: 2 },\n { name: \"indexToLocFormat\", type: \"SHORT\", value: 0 },\n { name: \"glyphDataFormat\", type: \"SHORT\", value: 0 }\n ], options);\n}\nvar head_default = { parse: parseHeadTable, make: makeHeadTable };\n\n// src/tables/hhea.mjs\nfunction parseHheaTable(data, start) {\n const hhea = {};\n const p = new parse_default.Parser(data, start);\n hhea.version = p.parseVersion();\n hhea.ascender = p.parseShort();\n hhea.descender = p.parseShort();\n hhea.lineGap = p.parseShort();\n hhea.advanceWidthMax = p.parseUShort();\n hhea.minLeftSideBearing = p.parseShort();\n hhea.minRightSideBearing = p.parseShort();\n hhea.xMaxExtent = p.parseShort();\n hhea.caretSlopeRise = p.parseShort();\n hhea.caretSlopeRun = p.parseShort();\n hhea.caretOffset = p.parseShort();\n p.relativeOffset += 8;\n hhea.metricDataFormat = p.parseShort();\n hhea.numberOfHMetrics = p.parseUShort();\n return hhea;\n}\nfunction makeHheaTable(options) {\n return new table_default.Table(\"hhea\", [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"ascender\", type: \"FWORD\", value: 0 },\n { name: \"descender\", type: \"FWORD\", value: 0 },\n { name: \"lineGap\", type: \"FWORD\", value: 0 },\n { name: \"advanceWidthMax\", type: \"UFWORD\", value: 0 },\n { name: \"minLeftSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"minRightSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"xMaxExtent\", type: \"FWORD\", value: 0 },\n { name: \"caretSlopeRise\", type: \"SHORT\", value: 1 },\n { name: \"caretSlopeRun\", type: \"SHORT\", value: 0 },\n { name: \"caretOffset\", type: \"SHORT\", value: 0 },\n { name: \"reserved1\", type: \"SHORT\", value: 0 },\n { name: \"reserved2\", type: \"SHORT\", value: 0 },\n { name: \"reserved3\", type: \"SHORT\", value: 0 },\n { name: \"reserved4\", type: \"SHORT\", value: 0 },\n { name: \"metricDataFormat\", type: \"SHORT\", value: 0 },\n { name: \"numberOfHMetrics\", type: \"USHORT\", value: 0 }\n ], options);\n}\nvar hhea_default = { parse: parseHheaTable, make: makeHheaTable };\n\n// src/tables/hmtx.mjs\nfunction parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) {\n let advanceWidth;\n let leftSideBearing;\n const p = new parse_default.Parser(data, start);\n for (let i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n const glyph = glyphs.get(i);\n glyph.advanceWidth = advanceWidth;\n glyph.leftSideBearing = leftSideBearing;\n }\n}\nfunction parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) {\n font._hmtxTableData = {};\n let advanceWidth;\n let leftSideBearing;\n const p = new parse_default.Parser(data, start);\n for (let i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n font._hmtxTableData[i] = {\n advanceWidth,\n leftSideBearing\n };\n }\n}\nfunction parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) {\n if (opt.lowMemory)\n parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs);\n else\n parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs);\n}\nfunction makeHmtxTable(glyphs) {\n const t = new table_default.Table(\"hmtx\", []);\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n const advanceWidth = glyph.advanceWidth || 0;\n const leftSideBearing = glyph.leftSideBearing || 0;\n t.fields.push({ name: \"advanceWidth_\" + i, type: \"USHORT\", value: advanceWidth });\n t.fields.push({ name: \"leftSideBearing_\" + i, type: \"SHORT\", value: leftSideBearing });\n }\n return t;\n}\nvar hmtx_default = { parse: parseHmtxTable, make: makeHmtxTable };\n\n// src/tables/ltag.mjs\nfunction makeLtagTable(tags) {\n const result = new table_default.Table(\"ltag\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"numTags\", type: \"ULONG\", value: tags.length }\n ]);\n let stringPool = \"\";\n const stringPoolOffset = 12 + tags.length * 4;\n for (let i = 0; i < tags.length; ++i) {\n let pos = stringPool.indexOf(tags[i]);\n if (pos < 0) {\n pos = stringPool.length;\n stringPool += tags[i];\n }\n result.fields.push({ name: \"offset \" + i, type: \"USHORT\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + i, type: \"USHORT\", value: tags[i].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n}\nfunction parseLtagTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 1, \"Unsupported ltag table version.\");\n p.skip(\"uLong\", 1);\n const numTags = p.parseULong();\n const tags = [];\n for (let i = 0; i < numTags; i++) {\n let tag = \"\";\n const offset = start + p.parseUShort();\n const length = p.parseUShort();\n for (let j = offset; j < offset + length; ++j) {\n tag += String.fromCharCode(data.getInt8(j));\n }\n tags.push(tag);\n }\n return tags;\n}\nvar ltag_default = { make: makeLtagTable, parse: parseLtagTable };\n\n// src/tables/maxp.mjs\nfunction parseMaxpTable(data, start) {\n const maxp = {};\n const p = new parse_default.Parser(data, start);\n maxp.version = p.parseVersion();\n maxp.numGlyphs = p.parseUShort();\n if (maxp.version === 1) {\n maxp.maxPoints = p.parseUShort();\n maxp.maxContours = p.parseUShort();\n maxp.maxCompositePoints = p.parseUShort();\n maxp.maxCompositeContours = p.parseUShort();\n maxp.maxZones = p.parseUShort();\n maxp.maxTwilightPoints = p.parseUShort();\n maxp.maxStorage = p.parseUShort();\n maxp.maxFunctionDefs = p.parseUShort();\n maxp.maxInstructionDefs = p.parseUShort();\n maxp.maxStackElements = p.parseUShort();\n maxp.maxSizeOfInstructions = p.parseUShort();\n maxp.maxComponentElements = p.parseUShort();\n maxp.maxComponentDepth = p.parseUShort();\n }\n return maxp;\n}\nfunction makeMaxpTable(numGlyphs) {\n return new table_default.Table(\"maxp\", [\n { name: \"version\", type: \"FIXED\", value: 20480 },\n { name: \"numGlyphs\", type: \"USHORT\", value: numGlyphs }\n ]);\n}\nvar maxp_default = { parse: parseMaxpTable, make: makeMaxpTable };\n\n// src/tables/os2.mjs\nvar unicodeRanges = [\n { begin: 0, end: 127 },\n // Basic Latin\n { begin: 128, end: 255 },\n // Latin-1 Supplement\n { begin: 256, end: 383 },\n // Latin Extended-A\n { begin: 384, end: 591 },\n // Latin Extended-B\n { begin: 592, end: 687 },\n // IPA Extensions\n { begin: 688, end: 767 },\n // Spacing Modifier Letters\n { begin: 768, end: 879 },\n // Combining Diacritical Marks\n { begin: 880, end: 1023 },\n // Greek and Coptic\n { begin: 11392, end: 11519 },\n // Coptic\n { begin: 1024, end: 1279 },\n // Cyrillic\n { begin: 1328, end: 1423 },\n // Armenian\n { begin: 1424, end: 1535 },\n // Hebrew\n { begin: 42240, end: 42559 },\n // Vai\n { begin: 1536, end: 1791 },\n // Arabic\n { begin: 1984, end: 2047 },\n // NKo\n { begin: 2304, end: 2431 },\n // Devanagari\n { begin: 2432, end: 2559 },\n // Bengali\n { begin: 2560, end: 2687 },\n // Gurmukhi\n { begin: 2688, end: 2815 },\n // Gujarati\n { begin: 2816, end: 2943 },\n // Oriya\n { begin: 2944, end: 3071 },\n // Tamil\n { begin: 3072, end: 3199 },\n // Telugu\n { begin: 3200, end: 3327 },\n // Kannada\n { begin: 3328, end: 3455 },\n // Malayalam\n { begin: 3584, end: 3711 },\n // Thai\n { begin: 3712, end: 3839 },\n // Lao\n { begin: 4256, end: 4351 },\n // Georgian\n { begin: 6912, end: 7039 },\n // Balinese\n { begin: 4352, end: 4607 },\n // Hangul Jamo\n { begin: 7680, end: 7935 },\n // Latin Extended Additional\n { begin: 7936, end: 8191 },\n // Greek Extended\n { begin: 8192, end: 8303 },\n // General Punctuation\n { begin: 8304, end: 8351 },\n // Superscripts And Subscripts\n { begin: 8352, end: 8399 },\n // Currency Symbol\n { begin: 8400, end: 8447 },\n // Combining Diacritical Marks For Symbols\n { begin: 8448, end: 8527 },\n // Letterlike Symbols\n { begin: 8528, end: 8591 },\n // Number Forms\n { begin: 8592, end: 8703 },\n // Arrows\n { begin: 8704, end: 8959 },\n // Mathematical Operators\n { begin: 8960, end: 9215 },\n // Miscellaneous Technical\n { begin: 9216, end: 9279 },\n // Control Pictures\n { begin: 9280, end: 9311 },\n // Optical Character Recognition\n { begin: 9312, end: 9471 },\n // Enclosed Alphanumerics\n { begin: 9472, end: 9599 },\n // Box Drawing\n { begin: 9600, end: 9631 },\n // Block Elements\n { begin: 9632, end: 9727 },\n // Geometric Shapes\n { begin: 9728, end: 9983 },\n // Miscellaneous Symbols\n { begin: 9984, end: 10175 },\n // Dingbats\n { begin: 12288, end: 12351 },\n // CJK Symbols And Punctuation\n { begin: 12352, end: 12447 },\n // Hiragana\n { begin: 12448, end: 12543 },\n // Katakana\n { begin: 12544, end: 12591 },\n // Bopomofo\n { begin: 12592, end: 12687 },\n // Hangul Compatibility Jamo\n { begin: 43072, end: 43135 },\n // Phags-pa\n { begin: 12800, end: 13055 },\n // Enclosed CJK Letters And Months\n { begin: 13056, end: 13311 },\n // CJK Compatibility\n { begin: 44032, end: 55215 },\n // Hangul Syllables\n { begin: 55296, end: 57343 },\n // Non-Plane 0 *\n { begin: 67840, end: 67871 },\n // Phoenicia\n { begin: 19968, end: 40959 },\n // CJK Unified Ideographs\n { begin: 57344, end: 63743 },\n // Private Use Area (plane 0)\n { begin: 12736, end: 12783 },\n // CJK Strokes\n { begin: 64256, end: 64335 },\n // Alphabetic Presentation Forms\n { begin: 64336, end: 65023 },\n // Arabic Presentation Forms-A\n { begin: 65056, end: 65071 },\n // Combining Half Marks\n { begin: 65040, end: 65055 },\n // Vertical Forms\n { begin: 65104, end: 65135 },\n // Small Form Variants\n { begin: 65136, end: 65279 },\n // Arabic Presentation Forms-B\n { begin: 65280, end: 65519 },\n // Halfwidth And Fullwidth Forms\n { begin: 65520, end: 65535 },\n // Specials\n { begin: 3840, end: 4095 },\n // Tibetan\n { begin: 1792, end: 1871 },\n // Syriac\n { begin: 1920, end: 1983 },\n // Thaana\n { begin: 3456, end: 3583 },\n // Sinhala\n { begin: 4096, end: 4255 },\n // Myanmar\n { begin: 4608, end: 4991 },\n // Ethiopic\n { begin: 5024, end: 5119 },\n // Cherokee\n { begin: 5120, end: 5759 },\n // Unified Canadian Aboriginal Syllabics\n { begin: 5760, end: 5791 },\n // Ogham\n { begin: 5792, end: 5887 },\n // Runic\n { begin: 6016, end: 6143 },\n // Khmer\n { begin: 6144, end: 6319 },\n // Mongolian\n { begin: 10240, end: 10495 },\n // Braille Patterns\n { begin: 40960, end: 42127 },\n // Yi Syllables\n { begin: 5888, end: 5919 },\n // Tagalog\n { begin: 66304, end: 66351 },\n // Old Italic\n { begin: 66352, end: 66383 },\n // Gothic\n { begin: 66560, end: 66639 },\n // Deseret\n { begin: 118784, end: 119039 },\n // Byzantine Musical Symbols\n { begin: 119808, end: 120831 },\n // Mathematical Alphanumeric Symbols\n { begin: 1044480, end: 1048573 },\n // Private Use (plane 15)\n { begin: 65024, end: 65039 },\n // Variation Selectors\n { begin: 917504, end: 917631 },\n // Tags\n { begin: 6400, end: 6479 },\n // Limbu\n { begin: 6480, end: 6527 },\n // Tai Le\n { begin: 6528, end: 6623 },\n // New Tai Lue\n { begin: 6656, end: 6687 },\n // Buginese\n { begin: 11264, end: 11359 },\n // Glagolitic\n { begin: 11568, end: 11647 },\n // Tifinagh\n { begin: 19904, end: 19967 },\n // Yijing Hexagram Symbols\n { begin: 43008, end: 43055 },\n // Syloti Nagri\n { begin: 65536, end: 65663 },\n // Linear B Syllabary\n { begin: 65856, end: 65935 },\n // Ancient Greek Numbers\n { begin: 66432, end: 66463 },\n // Ugaritic\n { begin: 66464, end: 66527 },\n // Old Persian\n { begin: 66640, end: 66687 },\n // Shavian\n { begin: 66688, end: 66735 },\n // Osmanya\n { begin: 67584, end: 67647 },\n // Cypriot Syllabary\n { begin: 68096, end: 68191 },\n // Kharoshthi\n { begin: 119552, end: 119647 },\n // Tai Xuan Jing Symbols\n { begin: 73728, end: 74751 },\n // Cuneiform\n { begin: 119648, end: 119679 },\n // Counting Rod Numerals\n { begin: 7040, end: 7103 },\n // Sundanese\n { begin: 7168, end: 7247 },\n // Lepcha\n { begin: 7248, end: 7295 },\n // Ol Chiki\n { begin: 43136, end: 43231 },\n // Saurashtra\n { begin: 43264, end: 43311 },\n // Kayah Li\n { begin: 43312, end: 43359 },\n // Rejang\n { begin: 43520, end: 43615 },\n // Cham\n { begin: 65936, end: 65999 },\n // Ancient Symbols\n { begin: 66e3, end: 66047 },\n // Phaistos Disc\n { begin: 66208, end: 66271 },\n // Carian\n { begin: 127024, end: 127135 }\n // Domino Tiles\n];\nfunction getUnicodeRange(unicode) {\n for (let i = 0; i < unicodeRanges.length; i += 1) {\n const range = unicodeRanges[i];\n if (unicode >= range.begin && unicode < range.end) {\n return i;\n }\n }\n return -1;\n}\nfunction parseOS2Table(data, start) {\n const os2 = {};\n const p = new parse_default.Parser(data, start);\n os2.version = p.parseUShort();\n os2.xAvgCharWidth = p.parseShort();\n os2.usWeightClass = p.parseUShort();\n os2.usWidthClass = p.parseUShort();\n os2.fsType = p.parseUShort();\n os2.ySubscriptXSize = p.parseShort();\n os2.ySubscriptYSize = p.parseShort();\n os2.ySubscriptXOffset = p.parseShort();\n os2.ySubscriptYOffset = p.parseShort();\n os2.ySuperscriptXSize = p.parseShort();\n os2.ySuperscriptYSize = p.parseShort();\n os2.ySuperscriptXOffset = p.parseShort();\n os2.ySuperscriptYOffset = p.parseShort();\n os2.yStrikeoutSize = p.parseShort();\n os2.yStrikeoutPosition = p.parseShort();\n os2.sFamilyClass = p.parseShort();\n os2.panose = [];\n for (let i = 0; i < 10; i++) {\n os2.panose[i] = p.parseByte();\n }\n os2.ulUnicodeRange1 = p.parseULong();\n os2.ulUnicodeRange2 = p.parseULong();\n os2.ulUnicodeRange3 = p.parseULong();\n os2.ulUnicodeRange4 = p.parseULong();\n os2.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte());\n os2.fsSelection = p.parseUShort();\n os2.usFirstCharIndex = p.parseUShort();\n os2.usLastCharIndex = p.parseUShort();\n os2.sTypoAscender = p.parseShort();\n os2.sTypoDescender = p.parseShort();\n os2.sTypoLineGap = p.parseShort();\n os2.usWinAscent = p.parseUShort();\n os2.usWinDescent = p.parseUShort();\n if (os2.version >= 1) {\n os2.ulCodePageRange1 = p.parseULong();\n os2.ulCodePageRange2 = p.parseULong();\n }\n if (os2.version >= 2) {\n os2.sxHeight = p.parseShort();\n os2.sCapHeight = p.parseShort();\n os2.usDefaultChar = p.parseUShort();\n os2.usBreakChar = p.parseUShort();\n os2.usMaxContent = p.parseUShort();\n }\n return os2;\n}\nfunction makeOS2Table(options) {\n return new table_default.Table(\"OS/2\", [\n { name: \"version\", type: \"USHORT\", value: 3 },\n { name: \"xAvgCharWidth\", type: \"SHORT\", value: 0 },\n { name: \"usWeightClass\", type: \"USHORT\", value: 0 },\n { name: \"usWidthClass\", type: \"USHORT\", value: 0 },\n { name: \"fsType\", type: \"USHORT\", value: 0 },\n { name: \"ySubscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySubscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySubscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySubscriptYOffset\", type: \"SHORT\", value: 140 },\n { name: \"ySuperscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySuperscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySuperscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySuperscriptYOffset\", type: \"SHORT\", value: 479 },\n { name: \"yStrikeoutSize\", type: \"SHORT\", value: 49 },\n { name: \"yStrikeoutPosition\", type: \"SHORT\", value: 258 },\n { name: \"sFamilyClass\", type: \"SHORT\", value: 0 },\n { name: \"bFamilyType\", type: \"BYTE\", value: 0 },\n { name: \"bSerifStyle\", type: \"BYTE\", value: 0 },\n { name: \"bWeight\", type: \"BYTE\", value: 0 },\n { name: \"bProportion\", type: \"BYTE\", value: 0 },\n { name: \"bContrast\", type: \"BYTE\", value: 0 },\n { name: \"bStrokeVariation\", type: \"BYTE\", value: 0 },\n { name: \"bArmStyle\", type: \"BYTE\", value: 0 },\n { name: \"bLetterform\", type: \"BYTE\", value: 0 },\n { name: \"bMidline\", type: \"BYTE\", value: 0 },\n { name: \"bXHeight\", type: \"BYTE\", value: 0 },\n { name: \"ulUnicodeRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange2\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange3\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange4\", type: \"ULONG\", value: 0 },\n { name: \"achVendID\", type: \"CHARARRAY\", value: \"XXXX\" },\n { name: \"fsSelection\", type: \"USHORT\", value: 0 },\n { name: \"usFirstCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"usLastCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"sTypoAscender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoDescender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoLineGap\", type: \"SHORT\", value: 0 },\n { name: \"usWinAscent\", type: \"USHORT\", value: 0 },\n { name: \"usWinDescent\", type: \"USHORT\", value: 0 },\n { name: \"ulCodePageRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulCodePageRange2\", type: \"ULONG\", value: 0 },\n { name: \"sxHeight\", type: \"SHORT\", value: 0 },\n { name: \"sCapHeight\", type: \"SHORT\", value: 0 },\n { name: \"usDefaultChar\", type: \"USHORT\", value: 0 },\n { name: \"usBreakChar\", type: \"USHORT\", value: 0 },\n { name: \"usMaxContext\", type: \"USHORT\", value: 0 }\n ], options);\n}\nvar os2_default = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges, getUnicodeRange };\n\n// src/tables/post.mjs\nfunction parsePostTable(data, start) {\n const post = {};\n const p = new parse_default.Parser(data, start);\n post.version = p.parseVersion();\n post.italicAngle = p.parseFixed();\n post.underlinePosition = p.parseShort();\n post.underlineThickness = p.parseShort();\n post.isFixedPitch = p.parseULong();\n post.minMemType42 = p.parseULong();\n post.maxMemType42 = p.parseULong();\n post.minMemType1 = p.parseULong();\n post.maxMemType1 = p.parseULong();\n switch (post.version) {\n case 1:\n post.names = standardNames.slice();\n break;\n case 2:\n post.numberOfGlyphs = p.parseUShort();\n post.glyphNameIndex = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n post.glyphNameIndex[i] = p.parseUShort();\n }\n post.names = [];\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n if (post.glyphNameIndex[i] >= standardNames.length) {\n const nameLength = p.parseChar();\n post.names.push(p.parseString(nameLength));\n }\n }\n break;\n case 2.5:\n post.numberOfGlyphs = p.parseUShort();\n post.offset = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n post.offset[i] = p.parseChar();\n }\n break;\n }\n return post;\n}\nfunction makePostTable(font) {\n const {\n italicAngle = Math.round((font.italicAngle || 0) * 65536),\n underlinePosition = 0,\n underlineThickness = 0,\n isFixedPitch = 0,\n minMemType42 = 0,\n maxMemType42 = 0,\n minMemType1 = 0,\n maxMemType1 = 0\n } = font.tables.post || {};\n return new table_default.Table(\"post\", [\n { name: \"version\", type: \"FIXED\", value: 196608 },\n { name: \"italicAngle\", type: \"FIXED\", value: italicAngle },\n { name: \"underlinePosition\", type: \"FWORD\", value: underlinePosition },\n { name: \"underlineThickness\", type: \"FWORD\", value: underlineThickness },\n { name: \"isFixedPitch\", type: \"ULONG\", value: isFixedPitch },\n { name: \"minMemType42\", type: \"ULONG\", value: minMemType42 },\n { name: \"maxMemType42\", type: \"ULONG\", value: maxMemType42 },\n { name: \"minMemType1\", type: \"ULONG\", value: minMemType1 },\n { name: \"maxMemType1\", type: \"ULONG\", value: maxMemType1 }\n ]);\n}\nvar post_default = { parse: parsePostTable, make: makePostTable };\n\n// src/tables/gsub.mjs\nvar subtableParsers = new Array(9);\nsubtableParsers[1] = function parseLookup1() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n deltaGlyphId: this.parseShort()\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n substitute: this.parseOffset16List()\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 1 format must be 1 or 2.\");\n};\nsubtableParsers[2] = function parseLookup2() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Multiple Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n sequences: this.parseListOfLists()\n };\n};\nsubtableParsers[3] = function parseLookup3() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Alternate Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n alternateSets: this.parseListOfLists()\n };\n};\nsubtableParsers[4] = function parseLookup4() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB ligature table identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ligatureSets: this.parseListOfLists(function() {\n return {\n ligGlyph: this.parseUShort(),\n components: this.parseUShortList(this.parseUShort() - 1)\n };\n })\n };\n};\nvar lookupRecordDesc = {\n sequenceIndex: Parser.uShort,\n lookupListIndex: Parser.uShort\n};\nsubtableParsers[5] = function parseLookup5() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ruleSets: this.parseListOfLists(function() {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n input: this.parseUShortList(glyphCount - 1),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n classDef: this.parsePointer(Parser.classDef),\n classSets: this.parseListOfLists(function() {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n classes: this.parseUShortList(glyphCount - 1),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n substFormat,\n coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 5 format must be 1, 2 or 3.\");\n};\nsubtableParsers[6] = function parseLookup6() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n chainRuleSets: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n backtrackClassDef: this.parsePointer(Parser.classDef),\n inputClassDef: this.parsePointer(Parser.classDef),\n lookaheadClassDef: this.parsePointer(Parser.classDef),\n chainClassSet: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n return {\n substFormat: 3,\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n inputCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 6 format must be 1, 2 or 3.\");\n};\nsubtableParsers[7] = function parseLookup7() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Extension Substitution subtable identifier-format must be 1\");\n const extensionLookupType = this.parseUShort();\n const extensionParser = new Parser(this.data, this.offset + this.parseULong());\n return {\n substFormat: 1,\n lookupType: extensionLookupType,\n extension: subtableParsers[extensionLookupType].call(extensionParser)\n };\n};\nsubtableParsers[8] = function parseLookup8() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n substitutes: this.parseUShortList()\n };\n};\nfunction parseGsubTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GSUB table version.\");\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers),\n variations: p.parseFeatureVariationsList()\n };\n }\n}\nvar subtableMakers = new Array(9);\nsubtableMakers[1] = function makeLookup1(subtable) {\n if (subtable.substFormat === 1) {\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) },\n { name: \"deltaGlyphID\", type: \"SHORT\", value: subtable.deltaGlyphId }\n ]);\n } else if (subtable.substFormat === 2) {\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 2 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.ushortList(\"substitute\", subtable.substitute)));\n }\n check_default.fail(\"Lookup type 1 substFormat must be 1 or 2.\");\n};\nsubtableMakers[2] = function makeLookup2(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 2 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"seqSet\", subtable.sequences, function(sequenceSet) {\n return new table_default.Table(\"sequenceSetTable\", table_default.ushortList(\"sequence\", sequenceSet));\n })));\n};\nsubtableMakers[3] = function makeLookup3(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 3 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"altSet\", subtable.alternateSets, function(alternateSet) {\n return new table_default.Table(\"alternateSetTable\", table_default.ushortList(\"alternate\", alternateSet));\n })));\n};\nsubtableMakers[4] = function makeLookup4(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 4 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"ligSet\", subtable.ligatureSets, function(ligatureSet) {\n return new table_default.Table(\"ligatureSetTable\", table_default.tableList(\"ligature\", ligatureSet, function(ligature) {\n return new table_default.Table(\n \"ligatureTable\",\n [{ name: \"ligGlyph\", type: \"USHORT\", value: ligature.ligGlyph }].concat(table_default.ushortList(\"component\", ligature.components, ligature.components.length + 1))\n );\n }));\n })));\n};\nsubtableMakers[5] = function makeLookup5(subtable) {\n if (subtable.substFormat === 1) {\n return new table_default.Table(\"contextualSubstitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"sequenceRuleSet\", subtable.ruleSets, function(sequenceRuleSet) {\n if (!sequenceRuleSet) {\n return new table_default.Table(\"NULL\", null);\n }\n return new table_default.Table(\"sequenceRuleSetTable\", table_default.tableList(\"sequenceRule\", sequenceRuleSet, function(sequenceRule) {\n let tableData = table_default.ushortList(\"seqLookup\", [], sequenceRule.lookupRecords.length).concat(table_default.ushortList(\"inputSequence\", sequenceRule.input, sequenceRule.input.length + 1));\n [tableData[0], tableData[1]] = [tableData[1], tableData[0]];\n for (let i = 0; i < sequenceRule.lookupRecords.length; i++) {\n const record = sequenceRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"sequenceRuleTable\", tableData);\n }));\n })));\n } else if (subtable.substFormat === 2) {\n return new table_default.Table(\"contextualSubstitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) },\n { name: \"classDef\", type: \"TABLE\", value: new table_default.ClassDef(subtable.classDef) }\n ].concat(table_default.tableList(\"classSeqRuleSet\", subtable.classSets, function(classSeqRuleSet) {\n if (!classSeqRuleSet) {\n return new table_default.Table(\"NULL\", null);\n }\n return new table_default.Table(\"classSeqRuleSetTable\", table_default.tableList(\"classSeqRule\", classSeqRuleSet, function(classSeqRule) {\n let tableData = table_default.ushortList(\"classes\", classSeqRule.classes, classSeqRule.classes.length + 1).concat(table_default.ushortList(\"seqLookupCount\", [], classSeqRule.lookupRecords.length));\n for (let i = 0; i < classSeqRule.lookupRecords.length; i++) {\n const record = classSeqRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"classSeqRuleTable\", tableData);\n }));\n })));\n } else if (subtable.substFormat === 3) {\n let tableData = [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }\n ];\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.coverages.length });\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n for (let i = 0; i < subtable.coverages.length; i++) {\n const coverage = subtable.coverages[i];\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const record = subtable.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n let returnTable = new table_default.Table(\"contextualSubstitutionTable\", tableData);\n return returnTable;\n }\n check_default.assert(false, \"lookup type 5 format must be 1, 2 or 3.\");\n};\nsubtableMakers[6] = function makeLookup6(subtable) {\n if (subtable.substFormat === 1) {\n let returnTable = new table_default.Table(\"chainContextTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"chainRuleSet\", subtable.chainRuleSets, function(chainRuleSet) {\n return new table_default.Table(\"chainRuleSetTable\", table_default.tableList(\"chainRule\", chainRuleSet, function(chainRule) {\n let tableData = table_default.ushortList(\"backtrackGlyph\", chainRule.backtrack, chainRule.backtrack.length).concat(table_default.ushortList(\"inputGlyph\", chainRule.input, chainRule.input.length + 1)).concat(table_default.ushortList(\"lookaheadGlyph\", chainRule.lookahead, chainRule.lookahead.length)).concat(table_default.ushortList(\"substitution\", [], chainRule.lookupRecords.length));\n for (let i = 0; i < chainRule.lookupRecords.length; i++) {\n const record = chainRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"chainRuleTable\", tableData);\n }));\n })));\n return returnTable;\n } else if (subtable.substFormat === 2) {\n check_default.assert(false, \"lookup type 6 format 2 is not yet supported.\");\n } else if (subtable.substFormat === 3) {\n let tableData = [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }\n ];\n tableData.push({ name: \"backtrackGlyphCount\", type: \"USHORT\", value: subtable.backtrackCoverage.length });\n for (let i = 0; i < subtable.backtrackCoverage.length; i++) {\n const coverage = subtable.backtrackCoverage[i];\n tableData.push({ name: \"backtrackCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.inputCoverage.length });\n for (let i = 0; i < subtable.inputCoverage.length; i++) {\n const coverage = subtable.inputCoverage[i];\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"lookaheadGlyphCount\", type: \"USHORT\", value: subtable.lookaheadCoverage.length });\n for (let i = 0; i < subtable.lookaheadCoverage.length; i++) {\n const coverage = subtable.lookaheadCoverage[i];\n tableData.push({ name: \"lookaheadCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const record = subtable.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n let returnTable = new table_default.Table(\"chainContextTable\", tableData);\n return returnTable;\n }\n check_default.assert(false, \"lookup type 6 format must be 1, 2 or 3.\");\n};\nfunction makeGsubTable(gsub) {\n return new table_default.Table(\"GSUB\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table_default.ScriptList(gsub.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table_default.FeatureList(gsub.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table_default.LookupList(gsub.lookups, subtableMakers) }\n ]);\n}\nvar gsub_default = { parse: parseGsubTable, make: makeGsubTable };\n\n// src/tables/meta.mjs\nfunction parseMetaTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 1, \"Unsupported META table version.\");\n p.parseULong();\n p.parseULong();\n const numDataMaps = p.parseULong();\n const tags = {};\n for (let i = 0; i < numDataMaps; i++) {\n const tag = p.parseTag();\n const dataOffset = p.parseULong();\n const dataLength = p.parseULong();\n if (tag === \"appl\" || tag === \"bild\")\n continue;\n const text = decode.UTF8(data, start + dataOffset, dataLength);\n tags[tag] = text;\n }\n return tags;\n}\nfunction makeMetaTable(tags) {\n const numTags = Object.keys(tags).length;\n let stringPool = \"\";\n const stringPoolOffset = 16 + numTags * 12;\n const result = new table_default.Table(\"meta\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"offset\", type: \"ULONG\", value: stringPoolOffset },\n { name: \"numTags\", type: \"ULONG\", value: numTags }\n ]);\n for (let tag in tags) {\n const pos = stringPool.length;\n stringPool += tags[tag];\n result.fields.push({ name: \"tag \" + tag, type: \"TAG\", value: tag });\n result.fields.push({ name: \"offset \" + tag, type: \"ULONG\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + tag, type: \"ULONG\", value: tags[tag].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n}\nvar meta_default = { parse: parseMetaTable, make: makeMetaTable };\n\n// src/tables/colr.mjs\nfunction parseColrTable(data, start) {\n const p = new Parser(data, start);\n const version = p.parseUShort();\n if (version !== 0) {\n console.warn(\"Only COLRv0 is currently fully supported. A subset of color glyphs might be available in this font if provided in the v0 format.\");\n }\n const numBaseGlyphRecords = p.parseUShort();\n const baseGlyphRecordsOffset = p.parseOffset32();\n const layerRecordsOffset = p.parseOffset32();\n const numLayerRecords = p.parseUShort();\n p.relativeOffset = baseGlyphRecordsOffset;\n const baseGlyphRecords = p.parseRecordList(numBaseGlyphRecords, {\n glyphID: Parser.uShort,\n firstLayerIndex: Parser.uShort,\n numLayers: Parser.uShort\n });\n p.relativeOffset = layerRecordsOffset;\n const layerRecords = p.parseRecordList(numLayerRecords, {\n glyphID: Parser.uShort,\n paletteIndex: Parser.uShort\n });\n return {\n version,\n baseGlyphRecords,\n layerRecords\n };\n}\nfunction makeColrTable({ version = 0, baseGlyphRecords = [], layerRecords = [] }) {\n check_default.argument(version === 0, \"Only COLRv0 supported.\");\n const baseGlyphRecordsOffset = 14;\n const layerRecordsOffset = baseGlyphRecordsOffset + baseGlyphRecords.length * 6;\n return new table_default.Table(\"COLR\", [\n { name: \"version\", type: \"USHORT\", value: version },\n { name: \"numBaseGlyphRecords\", type: \"USHORT\", value: baseGlyphRecords.length },\n { name: \"baseGlyphRecordsOffset\", type: \"ULONG\", value: baseGlyphRecordsOffset },\n { name: \"layerRecordsOffset\", type: \"ULONG\", value: layerRecordsOffset },\n { name: \"numLayerRecords\", type: \"USHORT\", value: layerRecords.length },\n ...baseGlyphRecords.map((glyph, i) => [\n { name: \"glyphID_\" + i, type: \"USHORT\", value: glyph.glyphID },\n { name: \"firstLayerIndex_\" + i, type: \"USHORT\", value: glyph.firstLayerIndex },\n { name: \"numLayers_\" + i, type: \"USHORT\", value: glyph.numLayers }\n ]).flat(),\n ...layerRecords.map((layer, i) => [\n { name: \"LayerGlyphID_\" + i, type: \"USHORT\", value: layer.glyphID },\n { name: \"paletteIndex_\" + i, type: \"USHORT\", value: layer.paletteIndex }\n ]).flat()\n ]);\n}\nvar colr_default = { parse: parseColrTable, make: makeColrTable };\n\n// src/tables/fvar.mjs\nfunction makeFvarAxis(n, axis) {\n return [\n { name: \"tag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"minValue_\" + n, type: \"FIXED\", value: axis.minValue << 16 },\n { name: \"defaultValue_\" + n, type: \"FIXED\", value: axis.defaultValue << 16 },\n { name: \"maxValue_\" + n, type: \"FIXED\", value: axis.maxValue << 16 },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 },\n { name: \"nameID_\" + n, type: \"USHORT\", value: axis.axisNameID }\n ];\n}\nfunction parseFvarAxis(data, start, names) {\n const axis = {};\n const p = new parse_default.Parser(data, start);\n axis.tag = p.parseTag();\n axis.minValue = p.parseFixed();\n axis.defaultValue = p.parseFixed();\n axis.maxValue = p.parseFixed();\n p.skip(\"uShort\", 1);\n const axisNameID = p.parseUShort();\n axis.axisNameID = axisNameID;\n axis.name = getNameByID(names, axisNameID);\n return axis;\n}\nfunction makeFvarInstance(n, inst, axes, optionalFields = {}) {\n const fields = [\n { name: \"nameID_\" + n, type: \"USHORT\", value: inst.subfamilyNameID },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 }\n ];\n for (let i = 0; i < axes.length; ++i) {\n const axisTag = axes[i].tag;\n fields.push({\n name: \"axis_\" + n + \" \" + axisTag,\n type: \"FIXED\",\n value: inst.coordinates[axisTag] << 16\n });\n }\n if (optionalFields && optionalFields.postScriptNameID) {\n fields.push({\n name: \"postScriptNameID_\",\n type: \"USHORT\",\n value: inst.postScriptNameID !== void 0 ? inst.postScriptNameID : 65535\n });\n }\n return fields;\n}\nfunction parseFvarInstance(data, start, axes, names, instanceSize) {\n const inst = {};\n const p = new parse_default.Parser(data, start);\n const subfamilyNameID = p.parseUShort();\n inst.subfamilyNameID = subfamilyNameID;\n inst.name = getNameByID(names, subfamilyNameID, [2, 17]);\n p.skip(\"uShort\", 1);\n inst.coordinates = {};\n for (let i = 0; i < axes.length; ++i) {\n inst.coordinates[axes[i].tag] = p.parseFixed();\n }\n if (p.relativeOffset === instanceSize) {\n inst.postScriptNameID = void 0;\n inst.postScriptName = void 0;\n return inst;\n }\n const postScriptNameID = p.parseUShort();\n inst.postScriptNameID = postScriptNameID == 65535 ? void 0 : postScriptNameID;\n inst.postScriptName = inst.postScriptNameID !== void 0 ? getNameByID(names, postScriptNameID, [6]) : \"\";\n return inst;\n}\nfunction makeFvarTable(fvar, names) {\n const result = new table_default.Table(\"fvar\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"offsetToData\", type: \"USHORT\", value: 0 },\n { name: \"countSizePairs\", type: \"USHORT\", value: 2 },\n { name: \"axisCount\", type: \"USHORT\", value: fvar.axes.length },\n { name: \"axisSize\", type: \"USHORT\", value: 20 },\n { name: \"instanceCount\", type: \"USHORT\", value: fvar.instances.length },\n { name: \"instanceSize\", type: \"USHORT\", value: 4 + fvar.axes.length * 4 }\n ]);\n result.offsetToData = result.sizeOf();\n for (let i = 0; i < fvar.axes.length; i++) {\n result.fields = result.fields.concat(makeFvarAxis(i, fvar.axes[i], names));\n }\n const optionalFields = {};\n for (let j = 0; j < fvar.instances.length; j++) {\n if (fvar.instances[j].postScriptNameID !== void 0) {\n result.instanceSize += 2;\n optionalFields.postScriptNameID = true;\n break;\n }\n }\n for (let j = 0; j < fvar.instances.length; j++) {\n result.fields = result.fields.concat(makeFvarInstance(\n j,\n fvar.instances[j],\n fvar.axes,\n optionalFields\n ));\n }\n return result;\n}\nfunction parseFvarTable(data, start, names) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 65536, \"Unsupported fvar table version.\");\n const offsetToData = p.parseOffset16();\n p.skip(\"uShort\", 1);\n const axisCount = p.parseUShort();\n const axisSize = p.parseUShort();\n const instanceCount = p.parseUShort();\n const instanceSize = p.parseUShort();\n const axes = [];\n for (let i = 0; i < axisCount; i++) {\n axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names));\n }\n const instances = [];\n const instanceStart = start + offsetToData + axisCount * axisSize;\n for (let j = 0; j < instanceCount; j++) {\n instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names, instanceSize));\n }\n return { axes, instances };\n}\nvar fvar_default = { make: makeFvarTable, parse: parseFvarTable };\n\n// src/tables/stat.mjs\nvar axisRecordStruct = {\n tag: Parser.tag,\n nameID: Parser.uShort,\n ordering: Parser.uShort\n};\nvar axisValueParsers = new Array(5);\naxisValueParsers[1] = function axisValueParser1() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n value: this.parseFixed()\n };\n};\naxisValueParsers[2] = function axisValueParser2() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n nominalValue: this.parseFixed(),\n rangeMinValue: this.parseFixed(),\n rangeMaxValue: this.parseFixed()\n };\n};\naxisValueParsers[3] = function axisValueParser3() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n value: this.parseFixed(),\n linkedValue: this.parseFixed()\n };\n};\naxisValueParsers[4] = function axisValueParser4() {\n const axisCount = this.parseUShort();\n return {\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n axisValues: this.parseList(axisCount, function() {\n return {\n axisIndex: this.parseUShort(),\n value: this.parseFixed()\n };\n })\n };\n};\nfunction parseSTATAxisValue() {\n const valueTableFormat = this.parseUShort();\n const axisValueParser = axisValueParsers[valueTableFormat];\n const formatStub = {\n format: valueTableFormat\n };\n if (axisValueParser === void 0) {\n console.warn(`Unknown axis value table format ${valueTableFormat}`);\n return formatStub;\n }\n return Object.assign(formatStub, this.parseStruct(axisValueParser.bind(this)));\n}\nfunction parseSTATTable(data, start, fvar) {\n if (!start) {\n start = 0;\n }\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported STAT table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const version = [\n tableVersionMajor,\n tableVersionMinor\n ];\n const designAxisSize = p.parseUShort();\n const designAxisCount = p.parseUShort();\n const designAxesOffset = p.parseOffset32();\n const axisValueCount = p.parseUShort();\n const offsetToAxisValueOffsets = p.parseOffset32();\n const elidedFallbackNameID = tableVersionMajor > 1 || tableVersionMinor > 0 ? p.parseUShort() : void 0;\n if (fvar !== void 0) {\n check_default.argument(designAxisCount >= fvar.axes.length, \"STAT axis count must be greater than or equal to fvar axis count\");\n }\n if (axisValueCount > 0) {\n check_default.argument(designAxisCount >= 0, \"STAT axis count must be greater than 0 if STAT axis value count is greater than 0\");\n }\n const axes = [];\n for (let i = 0; i < designAxisCount; i++) {\n p.offset = start + designAxesOffset;\n p.relativeOffset = i * designAxisSize;\n axes.push(p.parseStruct(axisRecordStruct));\n }\n p.offset = start;\n p.relativeOffset = offsetToAxisValueOffsets;\n const valueOffsets = p.parseUShortList(axisValueCount);\n const values = [];\n for (let i = 0; i < axisValueCount; i++) {\n p.offset = start + offsetToAxisValueOffsets;\n p.relativeOffset = valueOffsets[i];\n values.push(parseSTATAxisValue.apply(p));\n }\n return {\n version,\n axes,\n values,\n elidedFallbackNameID\n };\n}\nvar axisValueMakers = new Array(5);\naxisValueMakers[1] = function axisValueMaker1(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 1 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `value${n}`, type: \"FLOAT\", value: table.value }\n ];\n};\naxisValueMakers[2] = function axisValueMaker2(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 2 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `nominalValue${n}`, type: \"FLOAT\", value: table.nominalValue },\n { name: `rangeMinValue${n}`, type: \"FLOAT\", value: table.rangeMinValue },\n { name: `rangeMaxValue${n}`, type: \"FLOAT\", value: table.rangeMaxValue }\n ];\n};\naxisValueMakers[3] = function axisValueMaker3(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 3 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `value${n}`, type: \"FLOAT\", value: table.value },\n { name: `linkedValue${n}`, type: \"FLOAT\", value: table.linkedValue }\n ];\n};\naxisValueMakers[4] = function axisValueMaker4(n, table) {\n let returnFields = [\n { name: `format${n}`, type: \"USHORT\", value: 4 },\n { name: `axisCount${n}`, type: \"USHORT\", value: table.axisValues.length },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID }\n ];\n for (let i = 0; i < table.axisValues.length; i++) {\n returnFields = returnFields.concat([\n { name: `format${n}axisIndex${i}`, type: \"USHORT\", value: table.axisValues[i].axisIndex },\n { name: `format${n}value${i}`, type: \"FLOAT\", value: table.axisValues[i].value }\n ]);\n }\n return returnFields;\n};\nfunction makeSTATAxisRecord(n, axis) {\n return new table_default.Record(\"axisRecord_\" + n, [\n { name: \"axisTag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"axisNameID_\" + n, type: \"USHORT\", value: axis.nameID },\n { name: \"axisOrdering_\" + n, type: \"USHORT\", value: axis.ordering }\n ]);\n}\nfunction makeSTATValueTable(n, tableData) {\n const valueTableFormat = tableData.format;\n const axisValueMaker = axisValueMakers[valueTableFormat];\n check_default.argument(axisValueMaker !== void 0, `Unknown axis value table format ${valueTableFormat}`);\n const fields = axisValueMaker(n, tableData);\n return new table_default.Table(\"axisValueTable_\" + n, fields);\n}\nfunction makeSTATTable(STAT) {\n const result = new table_default.Table(\"STAT\", [\n { name: \"majorVersion\", type: \"USHORT\", value: 1 },\n { name: \"minorVersion\", type: \"USHORT\", value: 2 },\n { name: \"designAxisSize\", type: \"USHORT\", value: 8 },\n { name: \"designAxisCount\", type: \"USHORT\", value: STAT.axes.length },\n { name: \"designAxesOffset\", type: \"ULONG\", value: 0 },\n { name: \"axisValueCount\", type: \"USHORT\", value: STAT.values.length },\n { name: \"offsetToAxisValueOffsets\", type: \"ULONG\", value: 0 },\n { name: \"elidedFallbackNameID\", type: \"USHORT\", value: STAT.elidedFallbackNameID }\n ]);\n result.designAxesOffset = result.offsetToAxisValueOffsets = result.sizeOf();\n for (let i = 0; i < STAT.axes.length; i++) {\n const axisRecord = makeSTATAxisRecord(i, STAT.axes[i]);\n result.offsetToAxisValueOffsets += axisRecord.sizeOf();\n result.fields = result.fields.concat(axisRecord.fields);\n }\n const axisValueOffsets = [];\n let axisValueTables = [];\n let axisValueTableOffset = STAT.values.length * 2;\n for (let j = 0; j < STAT.values.length; j++) {\n const axisValueTable = makeSTATValueTable(j, STAT.values[j]);\n axisValueOffsets.push({\n name: \"offset_\" + j,\n type: \"USHORT\",\n value: axisValueTableOffset\n });\n axisValueTableOffset += axisValueTable.sizeOf();\n axisValueTables = axisValueTables.concat(axisValueTable.fields);\n }\n result.fields = result.fields.concat(axisValueOffsets);\n result.fields = result.fields.concat(axisValueTables);\n return result;\n}\nvar stat_default = { make: makeSTATTable, parse: parseSTATTable };\n\n// src/tables/avar.mjs\nfunction makeAvarAxisValueMap(n, axisValueMap) {\n return new table_default.Record(\"axisValueMap_\" + n, [\n { name: \"fromCoordinate_\" + n, type: \"F2DOT14\", value: axisValueMap.fromCoordinate },\n { name: \"toCoordinate_\" + n, type: \"F2DOT14\", value: axisValueMap.toCoordinate }\n ]);\n}\nfunction makeAvarSegmentMap(n, axis) {\n const returnTable = new table_default.Record(\"segmentMap_\" + n, [\n { name: \"positionMapCount_\" + n, type: \"USHORT\", value: axis.axisValueMaps.length }\n ]);\n let axisValueMaps = [];\n for (let i = 0; i < axis.axisValueMaps.length; i++) {\n const valueMap = makeAvarAxisValueMap(`${n}_${i}`, axis.axisValueMaps[i]);\n axisValueMaps = axisValueMaps.concat(valueMap.fields);\n }\n returnTable.fields = returnTable.fields.concat(axisValueMaps);\n return returnTable;\n}\nfunction makeAvarTable(avar, fvar) {\n check_default.argument(avar.axisSegmentMaps.length === fvar.axes.length, \"avar axis count must correspond to fvar axis count\");\n const result = new table_default.Table(\"avar\", [\n { name: \"majorVersion\", type: \"USHORT\", value: 1 },\n { name: \"minorVersion\", type: \"USHORT\", value: 0 },\n { name: \"reserved\", type: \"USHORT\", value: 0 },\n { name: \"axisCount\", type: \"USHORT\", value: avar.axisSegmentMaps.length }\n ]);\n for (let i = 0; i < avar.axisSegmentMaps.length; i++) {\n const axisRecord = makeAvarSegmentMap(i, avar.axisSegmentMaps[i]);\n result.fields = result.fields.concat(axisRecord.fields);\n }\n return result;\n}\nfunction parseAvarTable(data, start, fvar) {\n if (!start) {\n start = 0;\n }\n const p = new Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported avar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n p.skip(\"uShort\", 1);\n const axisCount = p.parseUShort();\n check_default.argument(axisCount === fvar.axes.length, \"avar axis count must correspond to fvar axis count\");\n const axisSegmentMaps = [];\n for (let i = 0; i < axisCount; i++) {\n const axisValueMaps = [];\n const positionMapCount = p.parseUShort();\n for (let j = 0; j < positionMapCount; j++) {\n const fromCoordinate = p.parseF2Dot14();\n const toCoordinate = p.parseF2Dot14();\n axisValueMaps.push({\n fromCoordinate,\n toCoordinate\n });\n }\n axisSegmentMaps.push({\n axisValueMaps\n });\n }\n return {\n version: [tableVersionMajor, tableVersionMinor],\n axisSegmentMaps\n };\n}\nvar avar_default = { make: makeAvarTable, parse: parseAvarTable };\n\n// src/tables/cvar.mjs\nfunction parseCvarTable(data, start, fvar, cvt) {\n const p = new parse_default.Parser(data, start);\n const cvtVariations = p.parseTupleVariationStore(\n p.relativeOffset,\n fvar.axes.length,\n \"cvar\",\n cvt\n );\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported cvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n return {\n version: [tableVersionMajor, tableVersionMinor],\n ...cvtVariations\n };\n}\nfunction makeCvarTable() {\n console.warn(\"Writing of cvar tables is not yet supported.\");\n}\nvar cvar_default = { make: makeCvarTable, parse: parseCvarTable };\n\n// src/tables/gvar.mjs\nfunction parseGvarTable(data, start, fvar, glyphs) {\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported gvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const axisCount = p.parseUShort();\n if (axisCount !== fvar.axes.length) {\n console.warn(`axisCount ${axisCount} in gvar table does not match the number of axes ${fvar.axes.length} in the fvar table!`);\n }\n const sharedTupleCount = p.parseUShort();\n const sharedTuples = p.parsePointer32(function() {\n return this.parseTupleRecords(sharedTupleCount, axisCount);\n });\n const glyphVariations = p.parseTupleVariationStoreList(axisCount, \"gvar\", glyphs);\n return {\n version: [tableVersionMajor, tableVersionMinor],\n sharedTuples,\n glyphVariations\n };\n}\nfunction makeGvarTable() {\n console.warn(\"Writing of gvar tables is not yet supported.\");\n}\nvar gvar_default = { make: makeGvarTable, parse: parseGvarTable };\n\n// src/tables/gasp.mjs\nfunction parseGaspTable(data, start) {\n const gasp = {};\n const p = new parse_default.Parser(data, start);\n gasp.version = p.parseUShort();\n check_default.argument(gasp.version <= 1, \"Unsupported gasp table version.\");\n gasp.numRanges = p.parseUShort();\n gasp.gaspRanges = [];\n for (let i = 0; i < gasp.numRanges; i++) {\n gasp.gaspRanges[i] = {\n rangeMaxPPEM: p.parseUShort(),\n rangeGaspBehavior: p.parseUShort()\n };\n }\n return gasp;\n}\nfunction makeGaspTable(gasp) {\n const result = new table_default.Table(\"gasp\", [\n { name: \"version\", type: \"USHORT\", value: 1 },\n { name: \"numRanges\", type: \"USHORT\", value: gasp.numRanges }\n ]);\n for (let i in gasp.gaspRanges) {\n result.fields.push({ name: \"rangeMaxPPEM\", type: \"USHORT\", value: gasp.gaspRanges[i].rangeMaxPPEM });\n result.fields.push({ name: \"rangeGaspBehavior\", type: \"USHORT\", value: gasp.gaspRanges[i].rangeGaspBehavior });\n }\n return result;\n}\nvar gasp_default = { parse: parseGaspTable, make: makeGaspTable };\n\n// src/tables/svg.mjs\nfunction parseSvgTable(data, offset) {\n const svgTable = /* @__PURE__ */ new Map();\n const buf = data.buffer;\n const p = new Parser(data, offset);\n const version = p.parseUShort();\n if (version !== 0) return svgTable;\n p.relativeOffset = p.parseOffset32();\n const svgDocumentListOffset = data.byteOffset + offset + p.relativeOffset;\n const numEntries = p.parseUShort();\n const svgDocMap = /* @__PURE__ */ new Map();\n for (let i = 0; i < numEntries; i++) {\n const startGlyphID = p.parseUShort();\n const endGlyphID = p.parseUShort();\n const svgDocOffset = svgDocumentListOffset + p.parseOffset32();\n const svgDocLength = p.parseULong();\n let svgDoc = svgDocMap.get(svgDocOffset);\n if (svgDoc === void 0) {\n svgDoc = new Uint8Array(buf, svgDocOffset, svgDocLength);\n svgDocMap.set(svgDocOffset, svgDoc);\n }\n for (let i2 = startGlyphID; i2 <= endGlyphID; i2++) {\n svgTable.set(i2, svgDoc);\n }\n }\n return svgTable;\n}\nfunction makeSvgTable(svgTable) {\n const glyphIds = Array.from(svgTable.keys()).sort();\n const documentRecords = [];\n const documentBuffers = [];\n const documentOffsets = /* @__PURE__ */ new Map();\n let nextSvgDocOffset = 0;\n let record = { endGlyphID: null };\n for (let i = 0, l = glyphIds.length; i < l; i++) {\n const glyphId = glyphIds[i];\n const svgDoc = svgTable.get(glyphId);\n let svgDocOffset = documentOffsets.get(svgDoc);\n if (svgDocOffset === void 0) {\n svgDocOffset = nextSvgDocOffset;\n documentBuffers.push(svgDoc);\n documentOffsets.set(svgDoc, svgDocOffset);\n nextSvgDocOffset += svgDoc.byteLength;\n }\n if (glyphId - 1 === record.endGlyphID && svgDocOffset === record.svgDocOffset) {\n record.endGlyphID = glyphId;\n } else {\n record = {\n startGlyphID: glyphId,\n endGlyphID: glyphId,\n svgDocOffset,\n svgDocLength: svgDoc.byteLength\n };\n documentRecords.push(record);\n }\n }\n const numEntries = documentRecords.length;\n const numDocuments = documentBuffers.length;\n const documentsOffset = 2 + numEntries * (2 + 2 + 4 + 4);\n const fields = new Array(3 + 1 + numEntries * 4 + numDocuments);\n let fieldIndex = 0;\n fields[fieldIndex++] = { name: \"version\", type: \"USHORT\", value: 0 };\n fields[fieldIndex++] = { name: \"svgDocumentListOffset\", type: \"ULONG\", value: 2 + 4 + 4 };\n fields[fieldIndex++] = { name: \"reserved\", type: \"ULONG\", value: 0 };\n fields[fieldIndex++] = { name: \"numEntries\", type: \"USHORT\", value: numEntries };\n for (let i = 0; i < numEntries; i++) {\n const namePrefix = \"documentRecord_\" + i;\n const { startGlyphID, endGlyphID, svgDocOffset, svgDocLength } = documentRecords[i];\n fields[fieldIndex++] = { name: namePrefix + \"_startGlyphID\", type: \"USHORT\", value: startGlyphID };\n fields[fieldIndex++] = { name: namePrefix + \"_endGlyphID\", type: \"USHORT\", value: endGlyphID };\n fields[fieldIndex++] = { name: namePrefix + \"_svgDocOffset\", type: \"ULONG\", value: documentsOffset + svgDocOffset };\n fields[fieldIndex++] = { name: namePrefix + \"_svgDocLength\", type: \"ULONG\", value: svgDocLength };\n }\n for (let i = 0; i < numDocuments; i++) {\n fields[fieldIndex++] = { name: \"svgDoc_\" + i, type: \"LITERAL\", value: documentBuffers[i] };\n }\n return new table_default.Table(\"SVG \", fields);\n}\nvar svg_default = {\n make: makeSvgTable,\n parse: parseSvgTable\n};\n\n// src/tables/sfnt.mjs\nfunction log2(v) {\n return Math.log(v) / Math.log(2) | 0;\n}\nfunction computeCheckSum(bytes) {\n while (bytes.length % 4 !== 0) {\n bytes.push(0);\n }\n let sum = 0;\n for (let i = 0; i < bytes.length; i += 4) {\n sum += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3];\n }\n sum %= Math.pow(2, 32);\n return sum;\n}\nfunction makeTableRecord(tag, checkSum, offset, length) {\n return new table_default.Record(\"Table Record\", [\n { name: \"tag\", type: \"TAG\", value: tag !== void 0 ? tag : \"\" },\n { name: \"checkSum\", type: \"ULONG\", value: checkSum !== void 0 ? checkSum : 0 },\n { name: \"offset\", type: \"ULONG\", value: offset !== void 0 ? offset : 0 },\n { name: \"length\", type: \"ULONG\", value: length !== void 0 ? length : 0 }\n ]);\n}\nfunction makeSfntTable(tables) {\n const sfnt = new table_default.Table(\"sfnt\", [\n { name: \"version\", type: \"TAG\", value: \"OTTO\" },\n { name: \"numTables\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n sfnt.tables = tables;\n sfnt.numTables = tables.length;\n const highestPowerOf2 = Math.pow(2, log2(sfnt.numTables));\n sfnt.searchRange = 16 * highestPowerOf2;\n sfnt.entrySelector = log2(highestPowerOf2);\n sfnt.rangeShift = sfnt.numTables * 16 - sfnt.searchRange;\n const recordFields = [];\n const tableFields = [];\n let offset = sfnt.sizeOf() + makeTableRecord().sizeOf() * sfnt.numTables;\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n for (let i = 0; i < tables.length; i += 1) {\n const t = tables[i];\n check_default.argument(t.tableName.length === 4, \"Table name\" + t.tableName + \" is invalid.\");\n const tableLength = t.sizeOf();\n const tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength);\n recordFields.push({ name: tableRecord.tag + \" Table Record\", type: \"RECORD\", value: tableRecord });\n tableFields.push({ name: t.tableName + \" table\", type: \"RECORD\", value: t });\n offset += tableLength;\n check_default.argument(!isNaN(offset), \"Something went wrong calculating the offset.\");\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n }\n recordFields.sort(function(r1, r2) {\n if (r1.value.tag > r2.value.tag) {\n return 1;\n } else {\n return -1;\n }\n });\n sfnt.fields = sfnt.fields.concat(recordFields);\n sfnt.fields = sfnt.fields.concat(tableFields);\n return sfnt;\n}\nfunction metricsForChar(font, chars, notFoundMetrics) {\n for (let i = 0; i < chars.length; i += 1) {\n const glyphIndex = font.charToGlyphIndex(chars[i]);\n if (glyphIndex > 0) {\n const glyph = font.glyphs.get(glyphIndex);\n return glyph.getMetrics();\n }\n }\n return notFoundMetrics;\n}\nfunction average(vs) {\n let sum = 0;\n for (let i = 0; i < vs.length; i += 1) {\n sum += vs[i];\n }\n return sum / vs.length;\n}\nfunction fontToSfntTable(font) {\n const xMins = [];\n const yMins = [];\n const xMaxs = [];\n const yMaxs = [];\n const advanceWidths = [];\n const leftSideBearings = [];\n const rightSideBearings = [];\n let firstCharIndex;\n let lastCharIndex = 0;\n let ulUnicodeRange1 = 0;\n let ulUnicodeRange2 = 0;\n let ulUnicodeRange3 = 0;\n let ulUnicodeRange4 = 0;\n for (let i = 0; i < font.glyphs.length; i += 1) {\n const glyph = font.glyphs.get(i);\n const unicode = glyph.unicode | 0;\n if (isNaN(glyph.advanceWidth)) {\n throw new Error(\"Glyph \" + glyph.name + \" (\" + i + \"): advanceWidth is not a number.\");\n }\n if (firstCharIndex > unicode || firstCharIndex === void 0) {\n if (unicode > 0) {\n firstCharIndex = unicode;\n }\n }\n if (lastCharIndex < unicode) {\n lastCharIndex = unicode;\n }\n const position = os2_default.getUnicodeRange(unicode);\n if (position < 32) {\n ulUnicodeRange1 |= 1 << position;\n } else if (position < 64) {\n ulUnicodeRange2 |= 1 << position - 32;\n } else if (position < 96) {\n ulUnicodeRange3 |= 1 << position - 64;\n } else if (position < 123) {\n ulUnicodeRange4 |= 1 << position - 96;\n } else {\n throw new Error(\"Unicode ranges bits > 123 are reserved for internal usage\");\n }\n if (glyph.name === \".notdef\") continue;\n const metrics = glyph.getMetrics();\n xMins.push(metrics.xMin);\n yMins.push(metrics.yMin);\n xMaxs.push(metrics.xMax);\n yMaxs.push(metrics.yMax);\n leftSideBearings.push(metrics.leftSideBearing);\n rightSideBearings.push(metrics.rightSideBearing);\n advanceWidths.push(glyph.advanceWidth);\n }\n const globals = {\n xMin: Math.min.apply(null, xMins),\n yMin: Math.min.apply(null, yMins),\n xMax: Math.max.apply(null, xMaxs),\n yMax: Math.max.apply(null, yMaxs),\n advanceWidthMax: Math.max.apply(null, advanceWidths),\n advanceWidthAvg: average(advanceWidths),\n minLeftSideBearing: Math.min.apply(null, leftSideBearings),\n maxLeftSideBearing: Math.max.apply(null, leftSideBearings),\n minRightSideBearing: Math.min.apply(null, rightSideBearings)\n };\n globals.ascender = font.ascender;\n globals.descender = font.descender;\n let macStyle = 0;\n if (font.weightClass >= 600) {\n macStyle |= font.macStyleValues.BOLD;\n }\n if (font.italicAngle < 0) {\n macStyle |= font.macStyleValues.ITALIC;\n }\n const headTable = head_default.make({\n flags: 3,\n // 00000011 (baseline for font at y=0; left sidebearing point at x=0)\n unitsPerEm: font.unitsPerEm,\n xMin: globals.xMin,\n yMin: globals.yMin,\n xMax: globals.xMax,\n yMax: globals.yMax,\n lowestRecPPEM: 3,\n macStyle,\n createdTimestamp: font.createdTimestamp\n });\n const hheaTable = hhea_default.make({\n ascender: globals.ascender,\n descender: globals.descender,\n advanceWidthMax: globals.advanceWidthMax,\n minLeftSideBearing: globals.minLeftSideBearing,\n minRightSideBearing: globals.minRightSideBearing,\n xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),\n numberOfHMetrics: font.glyphs.length\n });\n const maxpTable = maxp_default.make(font.glyphs.length);\n const os2Table = os2_default.make(Object.assign({\n xAvgCharWidth: Math.round(globals.advanceWidthAvg),\n usFirstCharIndex: firstCharIndex,\n usLastCharIndex: lastCharIndex,\n ulUnicodeRange1,\n ulUnicodeRange2,\n ulUnicodeRange3,\n ulUnicodeRange4,\n // See http://typophile.com/node/13081 for more info on vertical metrics.\n // We get metrics for typical characters (such as \"x\" for xHeight).\n // We provide some fallback characters if characters are unavailable: their\n // ordering was chosen experimentally.\n sTypoAscender: globals.ascender,\n sTypoDescender: globals.descender,\n sTypoLineGap: 0,\n usWinAscent: globals.yMax,\n usWinDescent: Math.abs(globals.yMin),\n ulCodePageRange1: 1,\n // FIXME: hard-code Latin 1 support for now\n sxHeight: metricsForChar(font, \"xyvw\", { yMax: Math.round(globals.ascender / 2) }).yMax,\n sCapHeight: metricsForChar(font, \"HIKLEFJMNTZBDPRAGOQSUVWXY\", globals).yMax,\n usDefaultChar: font.hasChar(\" \") ? 32 : 0,\n // Use space as the default character, if available.\n usBreakChar: font.hasChar(\" \") ? 32 : 0\n // Use space as the break character, if available.\n }, font.tables.os2));\n const hmtxTable = hmtx_default.make(font.glyphs);\n const cmapTable = cmap_default.make(font.glyphs);\n const englishFamilyName = font.getEnglishName(\"fontFamily\");\n const englishStyleName = font.getEnglishName(\"fontSubfamily\");\n const englishFullName = englishFamilyName + \" \" + englishStyleName;\n let postScriptName = font.getEnglishName(\"postScriptName\");\n if (!postScriptName) {\n postScriptName = englishFamilyName.replace(/\\s/g, \"\") + \"-\" + englishStyleName;\n }\n const names = {};\n for (let n in font.names) {\n names[n] = font.names[n];\n }\n names.unicode = names.unicode || {};\n names.macintosh = names.macintosh || {};\n names.windows = names.windows || {};\n const fontNamesUnicode = font.names.unicode || {};\n const fontNamesMacintosh = font.names.macintosh || {};\n const fontNamesWindows = font.names.windows || {};\n for (const platform in names) {\n names[platform] = names[platform] || {};\n if (!names[platform].uniqueID) {\n const manufacturer = font.getEnglishName(\"manufacturer\") || \"\";\n names[platform].uniqueID = { en: `${manufacturer}: ${englishFullName}` };\n }\n if (!names[platform].postScriptName) {\n names[platform].postScriptName = { en: postScriptName };\n }\n }\n if (!names.unicode.preferredFamily) {\n names.unicode.preferredFamily = fontNamesUnicode.fontFamily || fontNamesMacintosh.fontFamily || fontNamesWindows.fontFamily;\n }\n if (!names.macintosh.preferredFamily) {\n names.macintosh.preferredFamily = fontNamesMacintosh.fontFamily || fontNamesUnicode.fontFamily || fontNamesWindows.fontFamily;\n }\n if (!names.windows.preferredFamily) {\n names.windows.preferredFamily = fontNamesWindows.fontFamily || fontNamesUnicode.fontFamily || fontNamesMacintosh.fontFamily;\n }\n if (!names.unicode.preferredSubfamily) {\n names.unicode.preferredSubfamily = fontNamesUnicode.fontSubfamily || fontNamesMacintosh.fontSubfamily || fontNamesWindows.fontSubfamily;\n }\n if (!names.macintosh.preferredSubfamily) {\n names.macintosh.preferredSubfamily = fontNamesMacintosh.fontSubfamily || fontNamesUnicode.fontSubfamily || fontNamesWindows.fontSubfamily;\n }\n if (!names.windows.preferredSubfamily) {\n names.windows.preferredSubfamily = fontNamesWindows.fontSubfamily || fontNamesUnicode.fontSubfamily || fontNamesMacintosh.fontSubfamily;\n }\n const languageTags = [];\n const nameTable = name_default.make(names, languageTags);\n const ltagTable = languageTags.length > 0 ? ltag_default.make(languageTags) : void 0;\n const postTable = post_default.make(font);\n const cffTable = cff_default.make(font.glyphs, {\n version: font.getEnglishName(\"version\"),\n fullName: englishFullName,\n familyName: englishFamilyName,\n weightName: englishStyleName,\n postScriptName,\n unitsPerEm: font.unitsPerEm,\n fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax],\n topDict: font.tables.cff && font.tables.cff.topDict || {}\n });\n const metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta_default.make(font.metas) : void 0;\n const tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable];\n if (ltagTable) {\n tables.push(ltagTable);\n }\n const optionalTables = {\n gsub: gsub_default,\n cpal: cpal_default,\n colr: colr_default,\n stat: stat_default,\n avar: avar_default,\n cvar: cvar_default,\n fvar: fvar_default,\n gvar: gvar_default,\n gasp: gasp_default,\n svg: svg_default\n };\n const optionalTableArgs = {\n avar: [font.tables.fvar],\n fvar: [font.names]\n };\n for (let tableName in optionalTables) {\n const table = font.tables[tableName];\n if (table) {\n const tableData = optionalTables[tableName].make.call(font, table, ...optionalTableArgs[tableName] || []);\n if (tableData) {\n tables.push(tableData);\n }\n }\n }\n if (metaTable) {\n tables.push(metaTable);\n }\n const sfntTable = makeSfntTable(tables);\n const bytes = sfntTable.encode();\n const checkSum = computeCheckSum(bytes);\n const tableFields = sfntTable.fields;\n let checkSumAdjusted = false;\n for (let i = 0; i < tableFields.length; i += 1) {\n if (tableFields[i].name === \"head table\") {\n tableFields[i].value.checkSumAdjustment = 2981146554 - checkSum;\n checkSumAdjusted = true;\n break;\n }\n }\n if (!checkSumAdjusted) {\n throw new Error(\"Could not find head table with checkSum to adjust.\");\n }\n return sfntTable;\n}\nvar sfnt_default = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum };\n\n// src/layout.mjs\nfunction searchTag(arr, tag) {\n let imin = 0;\n let imax = arr.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n const val = arr[imid].tag;\n if (val === tag) {\n return imid;\n } else if (val < tag) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n}\nfunction binSearch(arr, value) {\n let imin = 0;\n let imax = arr.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n const val = arr[imid];\n if (val === value) {\n return imid;\n } else if (val < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n}\nfunction searchRange(ranges, value) {\n let range;\n let imin = 0;\n let imax = ranges.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n range = ranges[imid];\n const start = range.start;\n if (start === value) {\n return range;\n } else if (start < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n if (imin > 0) {\n range = ranges[imin - 1];\n if (value > range.end) return 0;\n return range;\n }\n}\nfunction Layout(font, tableName) {\n this.font = font;\n this.tableName = tableName;\n}\nLayout.prototype = {\n /**\n * Binary search an object by \"tag\" property\n * @instance\n * @function searchTag\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {string} tag\n * @return {number}\n */\n searchTag,\n /**\n * Binary search in a list of numbers\n * @instance\n * @function binSearch\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {number} value\n * @return {number}\n */\n binSearch,\n /**\n * Get or create the Layout table (GSUB, GPOS etc).\n * @param {boolean} create - Whether to create a new one.\n * @return {Object} The GSUB or GPOS table.\n */\n getTable: function(create) {\n let layout = this.font.tables[this.tableName];\n if (!layout && create) {\n layout = this.font.tables[this.tableName] = this.createDefaultTable();\n }\n return layout;\n },\n /**\n * Returns all scripts in the substitution table.\n * @instance\n * @return {Array}\n */\n getScriptNames: function() {\n let layout = this.getTable();\n if (!layout) {\n return [];\n }\n return layout.scripts.map(function(script) {\n return script.tag;\n });\n },\n /**\n * Returns the best bet for a script name.\n * Returns 'DFLT' if it exists.\n * If not, returns 'latn' if it exists.\n * If neither exist, returns undefined.\n */\n getDefaultScriptName: function() {\n let layout = this.getTable();\n if (!layout) {\n return;\n }\n let hasLatn = false;\n for (let i = 0; i < layout.scripts.length; i++) {\n const name = layout.scripts[i].tag;\n if (name === \"DFLT\") return name;\n if (name === \"latn\") hasLatn = true;\n }\n if (hasLatn) return \"latn\";\n },\n /**\n * Returns all LangSysRecords in the given script.\n * @instance\n * @param {string} [script='DFLT']\n * @param {boolean} create - forces the creation of this script table if it doesn't exist.\n * @return {Object} An object with tag and script properties.\n */\n getScriptTable: function(script, create) {\n const layout = this.getTable(create);\n if (layout) {\n script = script || \"DFLT\";\n const scripts = layout.scripts;\n const pos = searchTag(layout.scripts, script);\n if (pos >= 0) {\n return scripts[pos].script;\n } else if (create) {\n const scr = {\n tag: script,\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n };\n scripts.splice(-1 - pos, 0, scr);\n return scr.script;\n }\n }\n },\n /**\n * Returns a language system table\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.\n * @return {Object}\n */\n getLangSysTable: function(script, language, create) {\n const scriptTable = this.getScriptTable(script, create);\n if (scriptTable) {\n if (!language || language === \"dflt\" || language === \"DFLT\") {\n return scriptTable.defaultLangSys;\n }\n const pos = searchTag(scriptTable.langSysRecords, language);\n if (pos >= 0) {\n return scriptTable.langSysRecords[pos].langSys;\n } else if (create) {\n const langSysRecord = {\n tag: language,\n langSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }\n };\n scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);\n return langSysRecord.langSys;\n }\n }\n },\n /**\n * Get a specific feature table.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm\n * @param {boolean} create - forces the creation of the feature table if it doesn't exist.\n * @return {Object}\n */\n getFeatureTable: function(script, language, feature, create) {\n const langSysTable2 = this.getLangSysTable(script, language, create);\n if (langSysTable2) {\n let featureRecord;\n const featIndexes = langSysTable2.featureIndexes;\n const allFeatures = this.font.tables[this.tableName].features;\n for (let i = 0; i < featIndexes.length; i++) {\n featureRecord = allFeatures[featIndexes[i]];\n if (featureRecord.tag === feature) {\n return featureRecord.feature;\n }\n }\n if (create) {\n const index = allFeatures.length;\n check_default.assert(index === 0 || feature >= allFeatures[index - 1].tag, \"Features must be added in alphabetical order.\");\n featureRecord = {\n tag: feature,\n feature: { params: 0, lookupListIndexes: [] }\n };\n allFeatures.push(featureRecord);\n featIndexes.push(index);\n return featureRecord.feature;\n }\n }\n },\n /**\n * Get the lookup tables of a given type for a script/language/feature.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - 4-letter feature code\n * @param {number} lookupType - 1 to 9\n * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.\n * @return {Object[]}\n */\n getLookupTables: function(script, language, feature, lookupType, create) {\n const featureTable = this.getFeatureTable(script, language, feature, create);\n const tables = [];\n if (featureTable) {\n let lookupTable;\n const lookupListIndexes = featureTable.lookupListIndexes;\n const allLookups = this.font.tables[this.tableName].lookups;\n for (let i = 0; i < lookupListIndexes.length; i++) {\n lookupTable = allLookups[lookupListIndexes[i]];\n if (lookupTable.lookupType === lookupType) {\n tables.push(lookupTable);\n }\n }\n if (tables.length === 0 && create) {\n lookupTable = {\n lookupType,\n lookupFlag: 0,\n subtables: [],\n markFilteringSet: void 0\n };\n const index = allLookups.length;\n allLookups.push(lookupTable);\n lookupListIndexes.push(index);\n return [lookupTable];\n }\n }\n return tables;\n },\n /**\n * Find a glyph in a class definition table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table\n * @param {object} classDefTable - an OpenType Layout class definition table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getGlyphClass: function(classDefTable, glyphIndex) {\n switch (classDefTable.format) {\n case 1: {\n if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) {\n return classDefTable.classes[glyphIndex - classDefTable.startGlyph];\n }\n return 0;\n }\n case 2: {\n const range = searchRange(classDefTable.ranges, glyphIndex);\n return range ? range.classId : 0;\n }\n }\n },\n /**\n * Find a glyph in a coverage table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table\n * @param {object} coverageTable - an OpenType Layout coverage table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getCoverageIndex: function(coverageTable, glyphIndex) {\n switch (coverageTable.format) {\n case 1: {\n const index = binSearch(coverageTable.glyphs, glyphIndex);\n return index >= 0 ? index : -1;\n }\n case 2: {\n const range = searchRange(coverageTable.ranges, glyphIndex);\n return range ? range.index + glyphIndex - range.start : -1;\n }\n }\n },\n /**\n * Returns the list of glyph indexes of a coverage table.\n * Format 1: the list is stored raw\n * Format 2: compact list as range records.\n * @instance\n * @param {Object} coverageTable\n * @return {Array}\n */\n expandCoverage: function(coverageTable) {\n if (coverageTable.format === 1) {\n return coverageTable.glyphs;\n } else {\n const glyphs = [];\n const ranges = coverageTable.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n const start = range.start;\n const end = range.end;\n for (let j = start; j <= end; j++) {\n glyphs.push(j);\n }\n }\n return glyphs;\n }\n }\n};\nvar layout_default = Layout;\n\n// src/position.mjs\nfunction Position(font) {\n layout_default.call(this, font, \"gpos\");\n}\nPosition.prototype = layout_default.prototype;\nPosition.prototype.init = function() {\n const script = this.getDefaultScriptName();\n this.defaultKerningTables = this.getKerningTables(script);\n};\nPosition.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {\n for (let i = 0; i < kerningLookups.length; i++) {\n const subtables = kerningLookups[i].subtables;\n for (let j = 0; j < subtables.length; j++) {\n const subtable = subtables[j];\n const covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);\n if (covIndex < 0) continue;\n switch (subtable.posFormat) {\n case 1: {\n let pairSet = subtable.pairSets[covIndex];\n for (let k = 0; k < pairSet.length; k++) {\n let pair = pairSet[k];\n if (pair.secondGlyph === rightIndex) {\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n break;\n }\n case 2: {\n const class1 = this.getGlyphClass(subtable.classDef1, leftIndex);\n const class2 = this.getGlyphClass(subtable.classDef2, rightIndex);\n const pair = subtable.classRecords[class1][class2];\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n }\n }\n return 0;\n};\nPosition.prototype.getKerningTables = function(script, language) {\n if (this.font.tables.gpos) {\n return this.getLookupTables(script, language, \"kern\", 2);\n }\n};\nvar position_default = Position;\n\n// src/util.mjs\nfunction arraysEqual(ar1, ar2) {\n const n = ar1.length;\n if (n !== ar2.length) {\n return false;\n }\n for (let i = 0; i < n; i++) {\n if (ar1[i] !== ar2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction binarySearch(array, key, value) {\n let low = 0, high = array.length - 1;\n let result = null;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const record = array[mid];\n const recordValue = record[key];\n if (recordValue < value) {\n low = mid + 1;\n } else if (recordValue > value) {\n high = mid - 1;\n } else {\n result = record;\n break;\n }\n }\n return result;\n}\nfunction binarySearchIndex(array, key, value) {\n let low = 0, high = array.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (element[key] < value) {\n low = mid + 1;\n } else if (element[key] > value) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n return -1;\n}\nfunction binarySearchInsert(array, key, value) {\n let low = 0, high = array.length;\n const compare = (a, b) => a[key] - b[key];\n while (low < high) {\n const mid = low + high >>> 1;\n if (compare(array[mid], value) < 0) low = mid + 1;\n else high = mid;\n }\n array.splice(low, 0, value);\n return low;\n}\nfunction isGzip(buf) {\n return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;\n}\nfunction unGzip(gzip) {\n const data = new DataView(gzip.buffer, gzip.byteOffset, gzip.byteLength);\n let start = 10;\n const end = gzip.byteLength - 8;\n const flg = data.getInt8(3);\n if (flg & 4) {\n start += 2 + data.getUint16(start, true);\n }\n if (flg & 8) {\n while (start < end) if (gzip[start++] === 0) break;\n }\n if (flg & 16) {\n while (start < end) if (gzip[start++] === 0) break;\n }\n if (flg & 2) {\n start += 2;\n }\n if (start >= end) throw new Error(\"Can't find compressed blocks\");\n const isize = data.getUint32(data.byteLength - 4, true);\n return tinf_uncompress(gzip.subarray(start, end), new Uint8Array(isize));\n}\nfunction copyPoint(p) {\n return {\n x: p.x,\n y: p.y,\n onCurve: p.onCurve,\n lastPointOfContour: p.lastPointOfContour\n };\n}\nfunction copyComponent(c) {\n return {\n glyphIndex: c.glyphIndex,\n xScale: c.xScale,\n scale01: c.scale01,\n scale10: c.scale10,\n yScale: c.yScale,\n dx: c.dx,\n dy: c.dy\n };\n}\n\n// src/substitution.mjs\nfunction Substitution(font) {\n layout_default.call(this, font, \"gsub\");\n}\nfunction getSubstFormat(lookupTable, format, defaultSubtable) {\n const subtables = lookupTable.subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n if (subtable.substFormat === format) {\n return subtable;\n }\n }\n if (defaultSubtable) {\n subtables.push(defaultSubtable);\n return defaultSubtable;\n }\n return void 0;\n}\nSubstitution.prototype = layout_default.prototype;\nSubstitution.prototype.createDefaultTable = function() {\n return {\n version: 1,\n scripts: [{\n tag: \"DFLT\",\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n }],\n features: [],\n lookups: []\n };\n};\nSubstitution.prototype.getSingle = function(feature, script, language) {\n const substitutions = [];\n const lookupTables = this.getLookupTables(script, language, feature, 1);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n let j;\n if (subtable.substFormat === 1) {\n const delta = subtable.deltaGlyphId;\n for (j = 0; j < glyphs.length; j++) {\n const glyph = glyphs[j];\n substitutions.push({ sub: glyph, by: glyph + delta });\n }\n } else {\n const substitute = subtable.substitute;\n for (j = 0; j < glyphs.length; j++) {\n substitutions.push({ sub: glyphs[j], by: substitute[j] });\n }\n }\n }\n }\n return substitutions;\n};\nSubstitution.prototype.getMultiple = function(feature, script, language) {\n const substitutions = [];\n const lookupTables = this.getLookupTables(script, language, feature, 2);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n let j;\n for (j = 0; j < glyphs.length; j++) {\n const glyph = glyphs[j];\n const replacements = subtable.sequences[j];\n substitutions.push({ sub: glyph, by: replacements });\n }\n }\n }\n return substitutions;\n};\nSubstitution.prototype.getAlternates = function(feature, script, language) {\n const alternates = [];\n const lookupTables = this.getLookupTables(script, language, feature, 3);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n const alternateSets = subtable.alternateSets;\n for (let j = 0; j < glyphs.length; j++) {\n alternates.push({ sub: glyphs[j], by: alternateSets[j] });\n }\n }\n }\n return alternates;\n};\nSubstitution.prototype.getLigatures = function(feature, script, language) {\n const ligatures = [];\n const lookupTables = this.getLookupTables(script, language, feature, 4);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n const ligatureSets = subtable.ligatureSets;\n for (let j = 0; j < glyphs.length; j++) {\n const startGlyph = glyphs[j];\n const ligSet = ligatureSets[j];\n for (let k = 0; k < ligSet.length; k++) {\n const lig = ligSet[k];\n ligatures.push({\n sub: [startGlyph].concat(lig.components),\n by: lig.ligGlyph\n });\n }\n }\n }\n }\n return ligatures;\n};\nSubstitution.prototype.addSingle = function(feature, substitution, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 1, true)[0];\n const subtable = getSubstFormat(lookupTable, 2, {\n // lookup type 1 subtable, format 2, coverage format 1\n substFormat: 2,\n coverage: { format: 1, glyphs: [] },\n substitute: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Single: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.substitute.splice(pos, 0, 0);\n }\n subtable.substitute[pos] = substitution.by;\n};\nSubstitution.prototype.addMultiple = function(feature, substitution, script, language) {\n check_default.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: \"by\" must be an array of two or more ids');\n const lookupTable = this.getLookupTables(script, language, feature, 2, true)[0];\n const subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 2 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n sequences: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Multiple: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.sequences.splice(pos, 0, 0);\n }\n subtable.sequences[pos] = substitution.by;\n};\nSubstitution.prototype.addAlternate = function(feature, substitution, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 3, true)[0];\n const subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 3 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n alternateSets: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Alternate: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.alternateSets.splice(pos, 0, 0);\n }\n subtable.alternateSets[pos] = substitution.by;\n};\nSubstitution.prototype.addLigature = function(feature, ligature, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 4, true)[0];\n let subtable = lookupTable.subtables[0];\n if (!subtable) {\n subtable = {\n // lookup type 4 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n ligatureSets: []\n };\n lookupTable.subtables[0] = subtable;\n }\n check_default.assert(subtable.coverage.format === 1, \"Ligature: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = ligature.sub[0];\n const ligComponents = ligature.sub.slice(1);\n const ligatureTable = {\n ligGlyph: ligature.by,\n components: ligComponents\n };\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos >= 0) {\n const ligatureSet = subtable.ligatureSets[pos];\n for (let i = 0; i < ligatureSet.length; i++) {\n if (arraysEqual(ligatureSet[i].components, ligComponents)) {\n return;\n }\n }\n ligatureSet.push(ligatureTable);\n } else {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.ligatureSets.splice(pos, 0, [ligatureTable]);\n }\n};\nSubstitution.prototype.getFeature = function(feature, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.getSingle(feature, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language));\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.getLigatures(feature, script, language);\n case \"ccmp\":\n return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language));\n case \"stch\":\n return this.getMultiple(feature, script, language);\n }\n return void 0;\n};\nSubstitution.prototype.add = function(feature, sub, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.addSingle(feature, sub, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n if (typeof sub.by === \"number\") {\n return this.addSingle(feature, sub, script, language);\n }\n return this.addAlternate(feature, sub, script, language);\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.addLigature(feature, sub, script, language);\n case \"ccmp\":\n if (sub.by instanceof Array) {\n return this.addMultiple(feature, sub, script, language);\n }\n return this.addLigature(feature, sub, script, language);\n }\n return void 0;\n};\nvar substitution_default = Substitution;\n\n// src/palettes.mjs\nvar PaletteManager = class {\n // private properties don't work with reify\n // @TODO: refactor once we migrated to ES6 modules, see https://github.com/opentypejs/opentype.js/pull/579\n // #font = null;\n /**\n * @type {integer} CPAL color used to (pre)fill unset colors in a palette.\n * Format 0xBBGGRRAA\n */\n // defaultValue = 0x000000FF;\n /**\n * \n * @param {opentype.Font} font \n */\n constructor(font) {\n this.defaultValue = 255;\n this.font = font;\n }\n /**\n * Returns the font's cpal table object if present\n * @returns {Object}\n */\n cpal() {\n if (this.font.tables && this.font.tables.cpal) {\n return this.font.tables.cpal;\n }\n return false;\n }\n /**\n * Returns an array of arrays of color values for each palette, optionally in a specified color format\n * @param {string} colorFormat \n * @returns {Array<Array>}\n */\n getAll(colorFormat) {\n const palettes = [];\n const cpal = this.cpal();\n if (!cpal) return palettes;\n for (let i = 0; i < cpal.colorRecordIndices.length; i++) {\n const startIndex = cpal.colorRecordIndices[i];\n const paletteColors = [];\n for (let j = startIndex; j < startIndex + cpal.numPaletteEntries; j++) {\n paletteColors.push(formatColor(cpal.colorRecords[j], colorFormat || \"hexa\"));\n }\n palettes.push(paletteColors);\n }\n return palettes;\n }\n /**\n * Converts a color value string or array of color value strings to CPAL integer color value(s)\n * @param {string|Array<string></string>} color \n * @returns {integer}\n */\n toCPALcolor(color) {\n if (Array.isArray(color)) {\n return color.map((color2) => parseColor(color2, \"raw\"));\n }\n return parseColor(color, \"raw\");\n }\n /**\n * Fills a set of palette colors (from palette index, or a provided array of CPAL color values) with a set of colors, falling back to the default color value, until a given count\n * @param {Array<string>|integer} palette Palette index integer or Array of colors to be filled\n * @param {Array<string|integer>} colors Colors to fill the palette with\n * @param {integer} _colorCount Number of colors to fill the palette with, defaults to the value of the numPaletteEntries field. Used internally by extend() and shouldn't be set manually\n * @returns \n */\n fillPalette(palette, colors = [], _colorCount = this.cpal().numPaletteEntries) {\n palette = Number.isInteger(palette) ? this.get(palette, \"raw\") : palette;\n return Object.assign(Array(_colorCount).fill(this.defaultValue), this.toCPALcolor(palette).concat(this.toCPALcolor(colors)));\n }\n /**\n * Extend existing palettes and numPaletteEntries by a number of color slots\n * @param {integer} num number of additional color slots to add to all palettes\n */\n extend(num) {\n if (this.ensureCPAL(Array(num).fill(this.defaultValue))) {\n return;\n }\n const cpal = this.cpal();\n const newCount = cpal.numPaletteEntries + num;\n const palettes = this.getAll().map((palette) => this.fillPalette(palette, [], newCount));\n cpal.numPaletteEntries = newCount;\n cpal.colorRecords = this.toCPALcolor(palettes.flat());\n this.updateIndices();\n }\n /**\n * Get a specific palette by its zero-based index\n * @param {integer} paletteIndex \n * @param {string} [colorFormat='hexa']\n * @returns {Array}\n */\n get(paletteIndex, colorFormat = \"hexa\") {\n return this.getAll(colorFormat)[paletteIndex] || null;\n }\n /**\n * Get a color from a specific palette by its zero-based index\n * @param {integer} index \n * @param {integer} paletteIndex\n * @param {string} [colorFormat ='hexa']\n * @returns \n */\n getColor(index, paletteIndex = 0, colorFormat = \"hexa\") {\n return getPaletteColor(this.font, index, paletteIndex, colorFormat);\n }\n /**\n * Set one or more colors on a specific palette by its zero-based index\n * @param {integer} index zero-based color index to start filling from\n * @param {string|integer|Array<string|integer>} color color value or array of color values\n * @param {integer} paletteIndex\n * @returns \n */\n setColor(index, colors, paletteIndex = 0) {\n index = parseInt(index);\n paletteIndex = parseInt(paletteIndex);\n let palettes = this.getAll(\"raw\");\n let palette = palettes[paletteIndex];\n if (!palette) {\n throw Error(`paletteIndex ${paletteIndex} out of range`);\n }\n const cpal = this.cpal();\n const colorCount = cpal.numPaletteEntries;\n if (!Array.isArray(colors)) {\n colors = [colors];\n }\n if (colors.length + index > colorCount) {\n this.extend(colors.length + index - colorCount);\n palettes = this.getAll(\"raw\");\n palette = palettes[paletteIndex];\n }\n for (let i = 0; i < colors.length; i++) {\n palette[i + index] = this.toCPALcolor(colors[i]);\n }\n cpal.colorRecords = palettes.flat();\n this.updateIndices();\n }\n /**\n * Add a new palette. \n * @param {Array} colors (optional) colors to add to the palette, differences to existing palettes will be filled with the defaultValue.\n * @returns \n */\n add(colors) {\n if (this.ensureCPAL(colors)) {\n return;\n }\n const cpal = this.cpal();\n const colorCount = cpal.numPaletteEntries;\n if (colors && colors.length) {\n colors = this.toCPALcolor(colors);\n if (colors.length > colorCount) {\n this.extend(colors.length - colorCount);\n } else if (colors.length < colorCount) {\n colors = this.fillPalette(colors);\n }\n cpal.colorRecordIndices.push(cpal.colorRecords.length);\n cpal.colorRecords.push(...colors);\n } else {\n cpal.colorRecordIndices.push(cpal.colorRecords.length);\n cpal.colorRecords.push(...Array(colorCount).fill(this.defaultValue));\n }\n }\n /**\n * deletes a palette by its zero-based index\n * @param {integer} paletteIndex \n */\n delete(paletteIndex) {\n const palettes = this.getAll(\"raw\");\n delete palettes[paletteIndex];\n const cpal = this.cpal();\n cpal.colorRecordIndices.pop();\n cpal.colorRecords = palettes.flat();\n }\n /**\n * Deletes a specific color index in all palettes and updates all layers using that color with the replacement index\n * @param {integer} colorIndex index of the color that should be deleted\n * @param {integer} replacementIndex index (according to the palette before deletion) of the color to replace in layers using the color to be to deleted\n */\n deleteColor(colorIndex, replacementIndex) {\n if (colorIndex === replacementIndex) {\n throw Error(\"replacementIndex cannot be the same as colorIndex\");\n }\n const cpal = this.cpal();\n const palettes = this.getAll(\"raw\");\n const updatedPalettes = [];\n if (replacementIndex > cpal.numPaletteEntries - 1) {\n throw Error(`Replacement index out of range: numPaletteEntries after deletion: ${cpal.numPaletteEntries - 1}, replacementIndex: ${replacementIndex})`);\n }\n for (let i = 0; i < palettes.length; i++) {\n const palette = palettes[i];\n const updatedPalette = palette.filter((color, index) => index !== colorIndex);\n updatedPalettes.push(updatedPalette);\n }\n const colrTable = this.font.tables.colr;\n if (colrTable) {\n const layerRecords = colrTable.layerRecords;\n for (let i = 0; i < layerRecords.length; i++) {\n const currentIndex = layerRecords[i].paletteIndex;\n if (currentIndex > colorIndex) {\n const shiftAmount = 1;\n layerRecords[i].paletteIndex -= shiftAmount;\n } else if (currentIndex === colorIndex) {\n let replacementShift = 0;\n for (let j = 0; j < palettes.length; j++) {\n if (replacementIndex > colorIndex && replacementIndex <= colorIndex + palettes[j].length) {\n replacementShift++;\n break;\n }\n }\n layerRecords[i].paletteIndex = replacementIndex - replacementShift;\n }\n }\n this.font.tables.colr = {\n ...colrTable,\n layerRecords\n };\n }\n const flattenedPalettes = updatedPalettes.flat();\n for (let i = 0; i < palettes.length; i++) {\n cpal.colorRecordIndices[i] -= i;\n }\n cpal.numPaletteEntries = Math.max(0, cpal.numPaletteEntries - 1);\n cpal.colorRecords = this.toCPALcolor(flattenedPalettes);\n }\n /**\n * Makes sure that the CPAL table exists and is populated with default values.\n * @param {Array} colors (optional) colors to populate on creation\n * @returns {Boolean} true if it was created, false if it already existed.\n */\n ensureCPAL(colors) {\n if (!this.cpal()) {\n if (!colors || !colors.length) {\n colors = [this.defaultValue];\n } else {\n colors = this.toCPALcolor(colors);\n }\n this.font.tables.cpal = {\n version: 0,\n numPaletteEntries: colors.length,\n colorRecords: colors,\n colorRecordIndices: [0]\n };\n return true;\n }\n return false;\n }\n /**\n * Mainly used internally. Recalculates the colorRecordIndices array based on the numPaletteEntries and number of palettes\n */\n updateIndices() {\n const cpal = this.cpal();\n const paletteCount = Math.ceil(cpal.colorRecords.length / cpal.numPaletteEntries);\n cpal.colorRecordIndices = [];\n for (let i = 0; i < paletteCount; i++) {\n cpal.colorRecordIndices.push(i * cpal.numPaletteEntries);\n }\n }\n};\n\n// src/layers.mjs\nvar LayerManager = class {\n // private properties don't work with reify\n // @TODO: refactor once we migrated to ES6 modules, see https://github.com/opentypejs/opentype.js/pull/579\n // #font = null;\n constructor(font) {\n this.font = font;\n }\n /**\n * Mainly used internally. Ensures that the COLR table exists and is populated with default values\n * @returns the LayerManager's font instance for chaining\n */\n ensureCOLR() {\n if (!this.font.tables.colr) {\n this.font.tables.colr = {\n version: 0,\n baseGlyphRecords: [],\n layerRecords: []\n };\n }\n return this.font;\n }\n /**\n * Gets the layers for a specific glyph\n * @param {integer} glyphIndex\n * @returns {Array<Object>} array of layer objects {glyph, paletteIndex}\n */\n get(glyphIndex) {\n const font = this.font;\n const layers = [];\n const colr = font.tables.colr;\n const cpal = font.tables.cpal;\n if (!colr || !cpal) {\n return layers;\n }\n const baseGlyph = binarySearch(colr.baseGlyphRecords, \"glyphID\", glyphIndex);\n if (!baseGlyph) {\n return layers;\n }\n const firstIndex = baseGlyph.firstLayerIndex;\n const numLayers = baseGlyph.numLayers;\n for (let l = 0; l < numLayers; l++) {\n const layer = colr.layerRecords[firstIndex + l];\n layers.push({\n glyph: font.glyphs.get(layer.glyphID),\n paletteIndex: layer.paletteIndex\n });\n }\n return layers;\n }\n /**\n * Adds one or more layers to a glyph, at the end or at a specific position.\n * @param {integer} glyphIndex glyph index to add the layer(s) to.\n * @param {Array|Object} layers layer object {glyph, paletteIndex}/{glyphID, paletteIndex} or array of layer objects.\n * @param {integer?} position position to insert the layers at (will default to adding at the end).\n */\n add(glyphIndex, layers, position) {\n const currentLayers = this.get(glyphIndex);\n layers = Array.isArray(layers) ? layers : [layers];\n if (position === void 0 || position === Infinity || position > currentLayers.length) {\n position = currentLayers.length;\n } else if (position < 0) {\n position = currentLayers.length + 1 + position % (currentLayers.length + 1);\n if (position >= currentLayers.length + 1) {\n position -= currentLayers.length + 1;\n }\n }\n const newLayers = [];\n for (let i = 0; i < position; i++) {\n const glyphID = Number.isInteger(currentLayers[i].glyph) ? currentLayers[i].glyph : currentLayers[i].glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: currentLayers[i].paletteIndex\n });\n }\n for (const layer of layers) {\n const glyphID = Number.isInteger(layer.glyph) ? layer.glyph : layer.glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: layer.paletteIndex\n });\n }\n for (let i = position; i < currentLayers.length; i++) {\n const glyphID = Number.isInteger(currentLayers[i].glyph) ? currentLayers[i].glyph : currentLayers[i].glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: currentLayers[i].paletteIndex\n });\n }\n this.updateColrTable(glyphIndex, newLayers);\n }\n /**\n * Sets a color glyph layer's paletteIndex property to a new index\n * @param {integer} glyphIndex glyph in the font by zero-based glyph index\n * @param {integer} layerIndex layer in the glyph by zero-based layer index\n * @param {integer} paletteIndex new color to set for the layer by zero-based index in any palette\n */\n setPaletteIndex(glyphIndex, layerIndex, paletteIndex) {\n let layers = this.get(glyphIndex);\n if (layers[layerIndex]) {\n layers = layers.map((layer, index) => ({\n glyphID: layer.glyph.index,\n paletteIndex: index === layerIndex ? paletteIndex : layer.paletteIndex\n }));\n this.updateColrTable(glyphIndex, layers);\n } else {\n console.error(\"Invalid layer index\");\n }\n }\n /**\n * Removes one or more layers from a glyph.\n * @param {integer} glyphIndex glyph index to remove the layer(s) from\n * @param {integer} start index to remove the layer at\n * @param {integer?} end (optional) if provided, removes all layers from start index to (and including) end index\n */\n remove(glyphIndex, start, end = start) {\n let currentLayers = this.get(glyphIndex);\n currentLayers = currentLayers.map((layer) => ({\n glyphID: layer.glyph.index,\n paletteIndex: layer.paletteIndex\n }));\n currentLayers.splice(start, end - start + 1);\n this.updateColrTable(glyphIndex, currentLayers);\n }\n /**\n * Mainly used internally. Mainly used internally. Updates the colr table, adding a baseGlyphRecord if needed,\n * ensuring that it's inserted at the correct position, updating numLayers, and adjusting firstLayerIndex values\n * for all baseGlyphRecords according to any deletions or insertions.\n * @param {integer} glyphIndex \n * @param {Array<Object>} layers array of layer objects {glyphID, paletteIndex}\n */\n updateColrTable(glyphIndex, layers) {\n this.ensureCOLR();\n const font = this.font;\n const colr = font.tables.colr;\n let index = binarySearchIndex(colr.baseGlyphRecords, \"glyphID\", glyphIndex);\n const addBaseGlyph = index === -1;\n if (addBaseGlyph) {\n const newBaseGlyphRecord = { glyphID: glyphIndex, firstLayerIndex: colr.layerRecords.length, numLayers: 0 };\n index = binarySearchInsert(colr.baseGlyphRecords, \"glyphID\", newBaseGlyphRecord);\n }\n const baseGlyphRecord = colr.baseGlyphRecords[index];\n const originalNumLayers = baseGlyphRecord.numLayers;\n const newNumLayers = layers.length;\n const layerDiff = newNumLayers - originalNumLayers;\n if (layerDiff > 0) {\n const newLayers = layers.slice(originalNumLayers).map((layer) => ({\n glyphID: layer.glyphID,\n paletteIndex: layer.paletteIndex\n }));\n colr.layerRecords.splice(baseGlyphRecord.firstLayerIndex + originalNumLayers, 0, ...newLayers);\n } else if (layerDiff < 0) {\n colr.layerRecords.splice(baseGlyphRecord.firstLayerIndex + newNumLayers, -layerDiff);\n }\n for (let i = 0; i < Math.min(originalNumLayers, newNumLayers); i++) {\n colr.layerRecords[baseGlyphRecord.firstLayerIndex + i] = {\n glyphID: layers[i].glyphID,\n paletteIndex: layers[i].paletteIndex\n };\n }\n baseGlyphRecord.numLayers = newNumLayers;\n if (layerDiff !== 0) {\n for (let i = 0; i < colr.baseGlyphRecords.length; i++) {\n const sibling = colr.baseGlyphRecords[i];\n if (i === index || sibling.firstLayerIndex < baseGlyphRecord.firstLayerIndex) continue;\n colr.baseGlyphRecords[i].firstLayerIndex += layerDiff;\n }\n }\n }\n};\n\n// src/svgimages.mjs\nvar SVGImageManager = class {\n /**\n * @param {opentype.Font} font\n */\n constructor(font) {\n this.font = font;\n this.cache = /* @__PURE__ */ new WeakMap();\n }\n /**\n * @param {number} glyphIndex\n * @returns {SvgImage | undefined}\n */\n get(glyphIndex) {\n const svgImageCacheEntry = this.getOrCreateSvgImageCacheEntry(glyphIndex);\n return svgImageCacheEntry && svgImageCacheEntry.image;\n }\n /**\n * @param {number} glyphIndex\n * @returns {Promise<SvgImage> | undefined}\n */\n getAsync(glyphIndex) {\n const svgImageCacheEntry = this.getOrCreateSvgImageCacheEntry(glyphIndex);\n return svgImageCacheEntry && svgImageCacheEntry.promise;\n }\n /**\n * @param {number} glyphIndex\n * @returns {SVGImageCacheEntry | undefined}\n */\n getOrCreateSvgImageCacheEntry(glyphIndex) {\n const svg = this.font.tables.svg;\n if (svg === void 0) return;\n const svgBuf = svg.get(glyphIndex);\n if (svgBuf === void 0) return;\n let svgDocCacheEntry = this.cache.get(svgBuf);\n if (svgDocCacheEntry === void 0) {\n svgDocCacheEntry = createSvgDocCacheEntry(svgBuf);\n this.cache.set(svgBuf, svgDocCacheEntry);\n }\n let svgImageCacheEntry = svgDocCacheEntry.images.get(glyphIndex);\n if (svgImageCacheEntry === void 0) {\n svgImageCacheEntry = createSvgImageCacheEntry(this.font, svgDocCacheEntry.template, glyphIndex);\n svgImageCacheEntry.promise.then((svgImage) => {\n svgImageCacheEntry.image = svgImage;\n if (typeof this.font.onGlyphUpdated === \"function\") {\n try {\n this.font.onGlyphUpdated(glyphIndex);\n } catch (error) {\n console.error(\"font.onGlyphUpdated\", glyphIndex, error);\n }\n }\n });\n svgDocCacheEntry.images.set(glyphIndex, svgImageCacheEntry);\n }\n return svgImageCacheEntry;\n }\n};\nfunction createSvgDocCacheEntry(svgBuf) {\n return {\n template: decodeSvgDocument(svgBuf).then(makeSvgTemplate),\n images: /* @__PURE__ */ new Map()\n };\n}\nfunction createSvgImageCacheEntry(font, svgTemplatePromise, glyphIndex) {\n return {\n promise: svgTemplatePromise.then((svgTemplate) => {\n let svgText;\n if (typeof svgTemplate === \"string\") {\n svgText = svgTemplate;\n } else {\n svgTemplate[4] = glyphIndex;\n svgText = svgTemplate.join(\"\");\n }\n const svgImage = makeSvgImage(svgText, font.unitsPerEm);\n return svgImage.image.decode().then(() => svgImage);\n }),\n image: void 0\n };\n}\nvar decodeSvgDocument = typeof DecompressionStream === \"function\" ? decodeSvgDocumentWithDecompressionStream : decodeSvgDocumentWithTinyInflate;\nfunction decodeSvgDocumentWithTinyInflate(buf) {\n try {\n return Promise.resolve(new TextDecoder().decode(isGzip(buf) ? unGzip(buf) : buf));\n } catch (error) {\n return Promise.reject(error);\n }\n}\nfunction decodeSvgDocumentWithDecompressionStream(buf) {\n if (isGzip(buf)) {\n return new Response(new Response(buf).body.pipeThrough(new DecompressionStream(\"gzip\"))).text();\n }\n try {\n return Promise.resolve(new TextDecoder().decode(buf));\n } catch (error) {\n return Promise.reject(error);\n }\n}\nfunction makeSvgTemplate(text) {\n const documentStart = text.indexOf(\"<svg\");\n const contentStart = text.indexOf(\">\", documentStart + 4) + 1;\n if (/ id=['\"]glyph\\d+['\"]/.test(text.substring(documentStart, contentStart))) {\n return text;\n }\n const contentEnd = text.lastIndexOf(\"</svg>\");\n return [\n text.substring(0, contentStart),\n \"<defs>\",\n text.substring(contentStart, contentEnd),\n '</defs><use href=\"#glyph',\n \"\",\n '\"/>',\n text.substring(contentEnd)\n ];\n}\nfunction makeSvgImage(text, unitsPerEm) {\n const svgDocument = new DOMParser().parseFromString(text, \"image/svg+xml\");\n const svg = svgDocument.documentElement;\n const viewBoxVal = svg.viewBox.baseVal;\n const widthVal = svg.width.baseVal;\n const heightVal = svg.height.baseVal;\n let xScale = 1;\n let yScale = 1;\n if (viewBoxVal.width > 0 && viewBoxVal.height > 0) {\n if (widthVal.unitType === 1) {\n xScale = widthVal.valueInSpecifiedUnits / viewBoxVal.width;\n yScale = heightVal.unitType === 1 ? heightVal.valueInSpecifiedUnits / viewBoxVal.height : xScale;\n } else if (heightVal.unitType === 1) {\n yScale = heightVal.valueInSpecifiedUnits / viewBoxVal.height;\n xScale = yScale;\n } else if (unitsPerEm) {\n xScale = unitsPerEm / viewBoxVal.width;\n yScale = unitsPerEm / viewBoxVal.height;\n }\n }\n const div = document.createElement(\"div\");\n div.style.position = \"fixed\";\n div.style.visibility = \"hidden\";\n div.appendChild(svg);\n document.body.appendChild(div);\n const bbox = svg.getBBox();\n document.body.removeChild(div);\n const leftSideBearing = (bbox.x - viewBoxVal.x) * xScale;\n const baseline = (viewBoxVal.y - bbox.y) * yScale;\n const width = bbox.width * xScale;\n const height = bbox.height * yScale;\n svg.setAttribute(\"viewBox\", [bbox.x, bbox.y, bbox.width, bbox.height].join(\" \"));\n if (xScale !== 1) svg.setAttribute(\"width\", width);\n if (yScale !== 1) svg.setAttribute(\"height\", height);\n const image = new Image(width, height);\n image.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(svg.outerHTML);\n return { leftSideBearing, baseline, image };\n}\n\n// src/tables/glyf.mjs\nvar _resolving = /* @__PURE__ */ new WeakMap();\nfunction parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) {\n let v;\n if ((flag & shortVectorBitMask) > 0) {\n v = p.parseByte();\n if ((flag & sameBitMask) === 0) {\n v = -v;\n }\n v = previousValue + v;\n } else {\n if ((flag & sameBitMask) > 0) {\n v = previousValue;\n } else {\n v = previousValue + p.parseShort();\n }\n }\n return v;\n}\nfunction parseGlyph(glyph, data, start) {\n const p = new parse_default.Parser(data, start);\n glyph._numberOfContours = p.parseShort();\n glyph._xMin = p.parseShort();\n glyph._yMin = p.parseShort();\n glyph._xMax = p.parseShort();\n glyph._yMax = p.parseShort();\n let flags;\n let flag;\n if (glyph._numberOfContours > 0) {\n const endPointIndices = glyph.endPointIndices = [];\n for (let i = 0; i < glyph._numberOfContours; i += 1) {\n endPointIndices.push(p.parseUShort());\n }\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (let i = 0; i < glyph.instructionLength; i += 1) {\n glyph.instructions.push(p.parseByte());\n }\n const numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;\n flags = [];\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = p.parseByte();\n flags.push(flag);\n if ((flag & 8) > 0) {\n const repeatCount = p.parseByte();\n for (let j = 0; j < repeatCount; j += 1) {\n flags.push(flag);\n i += 1;\n }\n }\n }\n check_default.argument(flags.length === numberOfCoordinates, \"Bad flags.\");\n if (endPointIndices.length > 0) {\n const points = [];\n let point;\n if (numberOfCoordinates > 0) {\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = {};\n point.onCurve = !!(flag & 1);\n point.lastPointOfContour = endPointIndices.indexOf(i) >= 0;\n points.push(point);\n }\n let px = 0;\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = points[i];\n point.x = parseGlyphCoordinate(p, flag, px, 2, 16);\n px = point.x;\n }\n let py = 0;\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = points[i];\n point.y = parseGlyphCoordinate(p, flag, py, 4, 32);\n py = point.y;\n }\n }\n glyph.points = points;\n } else {\n glyph.points = [];\n }\n } else if (glyph._numberOfContours === 0) {\n glyph.points = [];\n } else {\n glyph.isComposite = true;\n glyph.points = [];\n glyph.components = [];\n let moreComponents = true;\n while (moreComponents) {\n flags = p.parseUShort();\n const component = {\n glyphIndex: p.parseUShort(),\n xScale: 1,\n scale01: 0,\n scale10: 0,\n yScale: 1,\n dx: 0,\n dy: 0\n };\n if ((flags & 1) > 0) {\n if ((flags & 2) > 0) {\n component.dx = p.parseShort();\n component.dy = p.parseShort();\n } else {\n component.matchedPoints = [p.parseUShort(), p.parseUShort()];\n }\n } else {\n if ((flags & 2) > 0) {\n component.dx = p.parseChar();\n component.dy = p.parseChar();\n } else {\n component.matchedPoints = [p.parseByte(), p.parseByte()];\n }\n }\n if ((flags & 8) > 0) {\n component.xScale = component.yScale = p.parseF2Dot14();\n } else if ((flags & 64) > 0) {\n component.xScale = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n } else if ((flags & 128) > 0) {\n component.xScale = p.parseF2Dot14();\n component.scale01 = p.parseF2Dot14();\n component.scale10 = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n }\n glyph.components.push(component);\n moreComponents = !!(flags & 32);\n }\n if (flags & 256) {\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (let i = 0; i < glyph.instructionLength; i += 1) {\n glyph.instructions.push(p.parseByte());\n }\n }\n }\n}\nfunction transformPoints(points, transform) {\n const newPoints = [];\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n const newPt = {\n x: transform.xScale * pt.x + transform.scale10 * pt.y + transform.dx,\n y: transform.scale01 * pt.x + transform.yScale * pt.y + transform.dy,\n onCurve: pt.onCurve,\n lastPointOfContour: pt.lastPointOfContour\n };\n newPoints.push(newPt);\n }\n return newPoints;\n}\nfunction getContours(points) {\n const contours = [];\n let currentContour = [];\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check_default.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n}\nfunction getPath(points) {\n const p = new path_default();\n if (!points) {\n return p;\n }\n const contours = getContours(points);\n for (let contourIndex = 0; contourIndex < contours.length; ++contourIndex) {\n const contour = contours[contourIndex];\n let curr = contour[contour.length - 1];\n let next = contour[0];\n if (curr.onCurve) {\n p.moveTo(curr.x, curr.y);\n } else {\n if (next.onCurve) {\n p.moveTo(next.x, next.y);\n } else {\n const start = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n p.moveTo(start.x, start.y);\n }\n }\n for (let i = 0; i < contour.length; ++i) {\n curr = next;\n next = contour[(i + 1) % contour.length];\n if (curr.onCurve) {\n p.lineTo(curr.x, curr.y);\n } else {\n let next2 = next;\n if (!next.onCurve) {\n next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n }\n p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);\n }\n }\n p.closePath();\n }\n return p;\n}\nfunction buildPath(glyphs, glyph) {\n if (glyph.isComposite) {\n if (!_resolving.has(glyphs)) {\n _resolving.set(glyphs, /* @__PURE__ */ new Set());\n }\n const resolving = _resolving.get(glyphs);\n resolving.add(glyph.index);\n try {\n for (let j = 0; j < glyph.components.length; j += 1) {\n const component = glyph.components[j];\n if (resolving.has(component.glyphIndex)) {\n continue;\n }\n const componentGlyph = glyphs.get(component.glyphIndex);\n componentGlyph.getPath();\n if (componentGlyph.points) {\n let transformedPoints;\n if (component.matchedPoints === void 0) {\n transformedPoints = transformPoints(componentGlyph.points, component);\n } else {\n if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) {\n throw Error(\"Matched points out of range in \" + glyph.name);\n }\n const firstPt = glyph.points[component.matchedPoints[0]];\n let secondPt = componentGlyph.points[component.matchedPoints[1]];\n const transform = {\n xScale: component.xScale,\n scale01: component.scale01,\n scale10: component.scale10,\n yScale: component.yScale,\n dx: 0,\n dy: 0\n };\n secondPt = transformPoints([secondPt], transform)[0];\n transform.dx = firstPt.x - secondPt.x;\n transform.dy = firstPt.y - secondPt.y;\n transformedPoints = transformPoints(componentGlyph.points, transform);\n }\n glyph.points = glyph.points.concat(transformedPoints);\n }\n }\n } finally {\n resolving.delete(glyph.index);\n }\n }\n return getPath(glyph.points);\n}\nfunction parseGlyfTableAll(data, start, loca, font) {\n const glyphs = new glyphset_default.GlyphSet(font);\n for (let i = 0; i < loca.length - 1; i += 1) {\n const offset = loca[i];\n const nextOffset = loca[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset_default.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset_default.glyphLoader(font, i));\n }\n }\n return glyphs;\n}\nfunction parseGlyfTableOnLowMemory(data, start, loca, font) {\n const glyphs = new glyphset_default.GlyphSet(font);\n font._push = function(i) {\n const offset = loca[i];\n const nextOffset = loca[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset_default.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset_default.glyphLoader(font, i));\n }\n };\n return glyphs;\n}\nfunction parseGlyfTable(data, start, loca, font, opt) {\n if (opt.lowMemory)\n return parseGlyfTableOnLowMemory(data, start, loca, font);\n else\n return parseGlyfTableAll(data, start, loca, font);\n}\nvar glyf_default = { getPath, parse: parseGlyfTable };\n\n// src/variationprocessor.mjs\nvar VariationProcessor = class {\n constructor(font) {\n this.font = font;\n }\n /**\n * Modifies a coords object to make sure that tags have a length of 4\n * @param {Object} coords - variation coordinates\n */\n normalizeCoordTags(coords) {\n for (const tag in coords) {\n if (tag.length < 4) {\n const padded = tag.padEnd(4, \" \");\n coords[padded] === void 0 && (coords[padded] = coords[tag]);\n delete coords[tag];\n }\n }\n }\n /**\n * Normalizes the coordinates from the axis ranges to a range of -1 to 1.\n * @param {Object} coords - The coordinates object to normalize.\n * @returns {Array<number>} The normalized coordinates as an array\n */\n getNormalizedCoords(coords) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n let normalized = [];\n this.normalizeCoordTags(coords);\n for (let i = 0; i < this.fvar().axes.length; i++) {\n const axis = this.fvar().axes[i];\n let tagValue = coords[axis.tag];\n if (tagValue === void 0) {\n tagValue = axis.defaultValue;\n }\n if (tagValue < axis.defaultValue) {\n normalized.push((tagValue - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((tagValue - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n if (this.avar()) {\n for (let i = 0; i < this.avar().axisSegmentMaps.length; i++) {\n let segment = this.avar().axisSegmentMaps[i];\n for (let j = 0; j < segment.axisValueMaps.length; j++) {\n let pair = segment.axisValueMaps[j];\n if (j >= 1 && normalized[i] < pair.fromCoordinate) {\n let prev = segment.axisValueMaps[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoordinate) * (pair.toCoordinate - prev.toCoordinate) + Number.EPSILON) / (pair.fromCoordinate - prev.fromCoordinate + Number.EPSILON) + prev.toCoordinate;\n break;\n }\n }\n }\n }\n return normalized;\n }\n /**\n * Interpolates points within a glyph if deltas are not provided for all points.\n * @param {Array<Object>} points - The points to be interpolated.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Object} deltaMap - A map indicating which points have deltas.\n */\n interpolatePoints(points, glyphPoints, deltaMap) {\n if (points.length === 0) {\n return;\n }\n let pointIndex = 0;\n while (pointIndex < points.length) {\n let firstPoint = pointIndex;\n let endPoint = pointIndex;\n let point = points[endPoint];\n while (!point.lastPointOfContour) {\n point = points[++endPoint];\n }\n while (pointIndex <= endPoint && !deltaMap[pointIndex]) {\n pointIndex++;\n }\n if (pointIndex > endPoint) {\n continue;\n }\n let firstDelta = pointIndex;\n let curDelta = pointIndex;\n pointIndex++;\n while (pointIndex <= endPoint) {\n if (deltaMap[pointIndex]) {\n this.deltaInterpolate(curDelta + 1, pointIndex - 1, curDelta, pointIndex, glyphPoints, points);\n curDelta = pointIndex;\n }\n pointIndex++;\n }\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, glyphPoints, points);\n } else {\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, glyphPoints, points);\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, glyphPoints, points);\n }\n }\n pointIndex = endPoint + 1;\n }\n }\n /**\n * Interpolates delta values between two points.\n * @param {number} p1 - Start point index for interpolation.\n * @param {number} p2 - End point index for interpolation.\n * @param {number} ref1 - Reference point index for the start delta.\n * @param {number} ref2 - Reference point index for the end delta.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Array<Object>} points - The points to be adjusted.\n */\n deltaInterpolate(p1, p2, ref1, ref2, glyphPoints, points) {\n if (p1 > p2) {\n return;\n }\n let iterable = [\"x\", \"y\"];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (glyphPoints[ref1][k] > glyphPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n let in1 = glyphPoints[ref1][k];\n let in2 = glyphPoints[ref2][k];\n let out1 = points[ref1][k];\n let out2 = points[ref2][k];\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n for (let p3 = p1; p3 <= p2; p3++) {\n let out = glyphPoints[p3][k];\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 points[p3][k] = out;\n }\n }\n }\n }\n /**\n * Applies a delta shift to a range of points based on a reference point.\n * @param {number} p1 - Start point index for shifting.\n * @param {number} p2 - End point index for shifting.\n * @param {number} ref - Reference point index.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Array<Object>} points - The points to be shifted.\n */\n deltaShift(p1, p2, ref, glyphPoints, points) {\n let deltaX = points[ref].x - glyphPoints[ref].x;\n let deltaY = points[ref].y - glyphPoints[ref].y;\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n points[p].x += deltaX;\n points[p].y += deltaY;\n }\n }\n }\n /**\n * Transforms glyph components based on variation data.\n * @param {Glyph} glyph - The composite glyph to transform.\n * @param {Array<Object>} transformedPoints - Points that are already transformed.\n * @param {Object} coords - Variation coordinates.\n * @param {Array<number>} tuplePoints - Points that are part of the tuple.\n * @param {Object} header - Header information from the variation data.\n * @param {number} factor - The scaling factor for the transformation.\n */\n transformComponents(glyph, transformedPoints, coords, tuplePoints, header, factor) {\n let pointsIndex = 0;\n for (let c = 0; c < glyph.components.length; c++) {\n const component = glyph.components[c];\n const componentGlyph = this.font.glyphs.get(component.glyphIndex);\n const componentTransform = copyComponent(component);\n const deltaIndex = tuplePoints.indexOf(c);\n if (deltaIndex > -1) {\n componentTransform.dx += Math.round(header.deltas[deltaIndex] * factor);\n componentTransform.dy += Math.round(header.deltasY[deltaIndex] * factor);\n }\n const transformedComponentPoints = transformPoints(this.getTransform(componentGlyph, coords).points, componentTransform);\n transformedPoints.splice(pointsIndex, transformedComponentPoints.length, ...transformedComponentPoints);\n pointsIndex += componentGlyph.points.length;\n }\n }\n applyTupleVariationStore(variationData, points, coords, flavor = \"gvar\", args = {}) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n const normalizedCoords = this.getNormalizedCoords(coords);\n const { headers, sharedPoints } = variationData;\n const axisCount = this.fvar().axes.length;\n let transformedPoints;\n if (flavor === \"gvar\") {\n transformedPoints = points.map(copyPoint);\n } else if (flavor === \"cvar\") {\n transformedPoints = [...points];\n }\n for (let h = 0; h < headers.length; h++) {\n const header = headers[h];\n let factor = 1;\n for (let a = 0; a < axisCount; a++) {\n let tupleCoords = [0];\n switch (flavor) {\n case \"gvar\":\n tupleCoords = header.peakTuple ? header.peakTuple : this.gvar().sharedTuples[header.sharedTupleRecordsIndex];\n break;\n case \"cvar\":\n tupleCoords = header.peakTuple;\n break;\n }\n if (tupleCoords[a] === 0) {\n continue;\n }\n if (normalizedCoords[a] === 0) {\n factor = 0;\n break;\n }\n if (!header.intermediateStartTuple) {\n if (normalizedCoords[a] < Math.min(0, tupleCoords[a]) || normalizedCoords[a] > Math.max(0, tupleCoords[a])) {\n factor = 0;\n break;\n }\n factor = (factor * normalizedCoords[a] + Number.EPSILON) / (tupleCoords[a] + Number.EPSILON);\n } else {\n if (normalizedCoords[a] < header.intermediateStartTuple[a] || normalizedCoords[a] > header.intermediateEndTuple[a]) {\n factor = 0;\n break;\n } else if (normalizedCoords[a] < tupleCoords[a]) {\n factor = factor * (normalizedCoords[a] - header.intermediateStartTuple[a] + Number.EPSILON) / (tupleCoords[a] - header.intermediateStartTuple[a] + Number.EPSILON);\n } else {\n factor = factor * (header.intermediateEndTuple[a] - normalizedCoords[a] + Number.EPSILON) / (header.intermediateEndTuple[a] - tupleCoords[a] + Number.EPSILON);\n }\n }\n }\n if (factor === 0) {\n continue;\n }\n const tuplePoints = header.privatePoints.length ? header.privatePoints : sharedPoints;\n if (flavor === \"gvar\" && args.glyph && args.glyph.isComposite) {\n this.transformComponents(args.glyph, transformedPoints, coords, tuplePoints, header, factor);\n } else if (tuplePoints.length === 0) {\n for (let i = 0; i < transformedPoints.length; i++) {\n const point = transformedPoints[i];\n if (flavor === \"gvar\") {\n transformedPoints[i] = {\n x: Math.round(point.x + header.deltas[i] * factor),\n y: Math.round(point.y + header.deltasY[i] * factor),\n onCurve: point.onCurve,\n lastPointOfContour: point.lastPointOfContour\n };\n } else if (flavor === \"cvar\") {\n transformedPoints[i] = Math.round(point + header.deltas[i] * factor);\n }\n }\n } else {\n let interpolatedPoints;\n if (flavor === \"gvar\") {\n interpolatedPoints = transformedPoints.map(copyPoint);\n } else if (flavor === \"cvar\") {\n interpolatedPoints = transformedPoints;\n }\n const deltaMap = Array(points.length).fill(false);\n for (let i = 0; i < tuplePoints.length; i++) {\n let pointIndex = tuplePoints[i];\n if (pointIndex < points.length) {\n let point = interpolatedPoints[pointIndex];\n if (flavor === \"gvar\") {\n deltaMap[pointIndex] = true;\n point.x += header.deltas[i] * factor;\n point.y += header.deltasY[i] * factor;\n } else if (flavor === \"cvar\") {\n transformedPoints[pointIndex] = Math.round(point + header.deltas[i] * factor);\n }\n }\n }\n if (flavor === \"gvar\") {\n this.interpolatePoints(interpolatedPoints, transformedPoints, deltaMap);\n for (let i = 0; i < points.length; i++) {\n let deltaX = interpolatedPoints[i].x - transformedPoints[i].x;\n let deltaY = interpolatedPoints[i].y - transformedPoints[i].y;\n transformedPoints[i].x = Math.round(transformedPoints[i].x + deltaX);\n transformedPoints[i].y = Math.round(transformedPoints[i].y + deltaY);\n }\n }\n }\n }\n return transformedPoints;\n }\n /**\n * Retrieves a transformed copy of a glyph based on the provided variation coordinates, or the glyph itself if no variation was applied\n * @param {opentype.Glyph|number} glyph - Glyph or index of glyph to transform.\n * @param {Object} coords - Variation coords object (will fall back to variation coords in the defaultRenderOptions)\n * @returns {opentype.Glyph} - The transformed glyph.\n */\n getTransform(glyph, coords) {\n if (Number.isInteger(glyph)) {\n glyph = this.font.glyphs.get(glyph);\n }\n const hasBlend = glyph.getBlendPath;\n const hasPoints = !!(glyph.points && glyph.points.length);\n let transformedGlyph = glyph;\n if (hasBlend || hasPoints) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n if (hasPoints) {\n const variationData = this.gvar() && this.gvar().glyphVariations[glyph.index];\n if (variationData) {\n const glyphPoints = glyph.points;\n let transformedPoints = this.applyTupleVariationStore(variationData, glyphPoints, coords, \"gvar\", { glyph });\n transformedGlyph = new glyph_default(Object.assign({}, glyph, { points: transformedPoints, path: getPath(transformedPoints) }));\n }\n } else if (hasBlend) {\n const blendPath = glyph.getBlendPath(coords);\n transformedGlyph = new glyph_default(Object.assign({}, glyph, { path: blendPath }));\n }\n }\n if (this.font.tables.hvar) {\n glyph._advanceWidth = typeof glyph._advanceWidth !== \"undefined\" ? glyph._advanceWidth : glyph.advanceWidth;\n glyph.advanceWidth = transformedGlyph.advanceWidth = Math.round(glyph._advanceWidth + this.getVariableAdjustment(transformedGlyph.index, \"hvar\", \"advanceWidth\", coords));\n glyph._leftSideBearing = typeof glyph._leftSideBearing !== \"undefined\" ? glyph._leftSideBearing : glyph.leftSideBearing;\n glyph.leftSideBearing = transformedGlyph.leftSideBearing = Math.round(glyph._leftSideBearing + this.getVariableAdjustment(transformedGlyph.index, \"hvar\", \"lsb\", coords));\n }\n return transformedGlyph;\n }\n getCvarTransform(coords) {\n const cvt = this.font.tables.cvt;\n const variationData = this.cvar();\n if (!cvt || !cvt.length || !variationData || !variationData.headers.length) return cvt;\n return this.applyTupleVariationStore(variationData, cvt, coords, \"cvar\");\n }\n /**\n * Calculates the variable adjustment for a glyph property from variation data.\n * @param {number} gid - Glyph ID.\n * @param {string} tableName - The name of the variation data table.\n * @param {string} parameter - The property to adjust.\n * @param {Object} coords - Variation coordinates.\n * @returns {number} - The calculated adjustment.\n */\n getVariableAdjustment(gid, tableName, parameter, coords) {\n coords = coords || this.font.variation.get();\n let outerIndex, innerIndex;\n const table = this.font.tables[tableName];\n if (!table) {\n throw Error(`trying to get variation adjustment from non-existent table \"${table}\"`);\n }\n if (!table.itemVariationStore) {\n throw Error(`trying to get variation adjustment from table \"${table}\" which does not have an itemVariationStore`);\n }\n const mapSize = table[parameter] && table[parameter].map.length;\n if (mapSize) {\n let i = gid;\n if (i >= mapSize) {\n i = mapSize - 1;\n }\n ({ outerIndex, innerIndex } = table[parameter].map[i]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex, coords);\n }\n /**\n * Retrieves the delta value from a variation store.\n * @param {Object} itemStore - The item variation store.\n * @param {number} outerIndex - The outer index in the variation subtables.\n * @param {number} innerIndex - The inner index in the delta sets.\n * @param {Object} coords - Variation coordinates.\n * @returns {number} - The delta value.\n */\n getDelta(itemStore, outerIndex, innerIndex, coords) {\n if (outerIndex >= itemStore.itemVariationSubtables.length) {\n return 0;\n }\n let varData = itemStore.itemVariationSubtables[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex, coords);\n let netAdjustment = 0;\n for (let master = 0; master < varData.regionIndexes.length; master++) {\n netAdjustment += deltaSet[master] * blendVector[master];\n }\n return netAdjustment;\n }\n /**\n * Calculates the blend vector for a set of variation coordinates.\n * @param {Object} itemStore - The item variation store.\n * @param {number} itemIndex - Index of the current item in the variation subtables.\n * @param {Object} coords - Variation coordinates.\n * @returns {Array<number>} - The blend vector for the given coordinates.\n */\n getBlendVector(itemStore, itemIndex, coords) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n let varData = itemStore.itemVariationSubtables[itemIndex];\n const normalizedCoords = this.getNormalizedCoords(coords);\n let blendVector = [];\n for (let master = 0; master < varData.regionIndexes.length; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegions[regionIndex].regionAxes;\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\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) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n scalar *= axisScalar;\n }\n blendVector[master] = scalar;\n }\n return blendVector;\n }\n /**\n * Helper method that returns the font's avar table if present\n * @returns {Object|undefined}\n */\n avar() {\n return this.font.tables.avar;\n }\n /**\n * Helper method that returns the font's cvar table if present\n * @returns {Object|undefined}\n */\n cvar() {\n return this.font.tables.cvar;\n }\n /**\n * Helper method that returns the font's fvar table if present\n * @returns {Object|undefined}\n */\n fvar() {\n return this.font.tables.fvar;\n }\n /**\n * Helper method that returns the font's gvar table if present\n * @returns {Object|undefined}\n */\n gvar() {\n return this.font.tables.gvar;\n }\n /**\n * Helper method that returns the font's hvar table if present\n * @returns {Object|undefined}\n */\n hvar() {\n return this.font.tables.hvar;\n }\n};\n\n// src/variation.mjs\nvar VariationManager = class {\n constructor(font) {\n this.font = font;\n this.process = new VariationProcessor(this.font);\n this.activateDefaultVariation();\n this.getTransform = this.process.getTransform.bind(this.process);\n }\n /**\n * Tries to determine the default instance and sets its variation data as the font.defaultRenderOptions.\n * If not defaultInstance can be determined, the default coordinates of all axes are used.\n */\n activateDefaultVariation() {\n const defaultInstance = this.getDefaultInstanceIndex();\n if (defaultInstance > -1) {\n this.set(defaultInstance);\n } else {\n this.set(this.getDefaultCoordinates());\n }\n }\n /**\n * Retrieves the default coordinates for the font's variation axes.\n * @returns {Object} An object mapping axis tags to their default values.\n */\n getDefaultCoordinates() {\n return this.fvar().axes.reduce((acc, axis) => {\n acc[axis.tag] = axis.defaultValue;\n return acc;\n }, {});\n }\n /**\n * Gets the index of the default variation instance or -1 if not able to determine\n * @returns {integer} default index or -1\n */\n getDefaultInstanceIndex() {\n const defaultCoordinates = this.getDefaultCoordinates();\n let defaultInstanceIndex = this.getInstanceIndex(defaultCoordinates);\n if (defaultInstanceIndex < 0) {\n defaultInstanceIndex = this.fvar().instances.findIndex((instance) => instance.name && instance.name.en === \"Regular\");\n }\n return defaultInstanceIndex;\n }\n /**\n * Retrieves the index of the variation instance matching the coordinates object or -1 if not able to determine\n * @param {integer|Object} coordinates An object where keys are axis tags and values are the corresponding variation values.\n * @returns {integer} The index of the matching instance or -1 if no match is found.\n */\n getInstanceIndex(coordinates) {\n return this.fvar().instances.findIndex(\n (instance) => Object.keys(coordinates).every(\n (axis) => instance.coordinates[axis] === coordinates[axis]\n )\n );\n }\n /**\n * Retrieves a variation instance by its zero-based index\n * @param {integer} index - zero-based index of the variation instance\n * @returns {Object} - variation instance or null if the index is invalid.\n */\n getInstance(index) {\n return this.fvar().instances && this.fvar().instances[index];\n }\n /**\n * Set the variation coordinates to use by default for rendering in the font.defaultRenderOptions\n * @param {integer|Object} instanceIdOrObject Either the zero-based index of a variation instance or an object with axis tags as keys and variation values as values\n */\n set(instanceIdOrObject) {\n let variationData;\n if (Number.isInteger(instanceIdOrObject)) {\n const instance = this.getInstance(instanceIdOrObject);\n if (!instance) {\n throw Error(`Invalid instance index ${instanceIdOrObject}`);\n }\n variationData = { ...instance.coordinates };\n } else {\n variationData = instanceIdOrObject;\n this.process.normalizeCoordTags(variationData);\n }\n variationData = Object.assign(\n {},\n this.font.defaultRenderOptions.variation,\n variationData\n );\n this.font.defaultRenderOptions = Object.assign(\n {},\n this.font.defaultRenderOptions,\n { variation: variationData }\n );\n }\n /**\n * Returns the variation coordinates currently set in the font.defaultRenderOptions\n * @returns {Object}\n */\n get() {\n return Object.assign({}, this.font.defaultRenderOptions.variation);\n }\n /**\n * Helper method that returns the font's avar table if present\n * @returns {Object|undefined}\n */\n avar() {\n return this.font.tables.avar;\n }\n /**\n * Helper method that returns the font's cvar table if present\n * @returns {Object|undefined}\n */\n cvar() {\n return this.font.tables.cvar;\n }\n /**\n * Helper method that returns the font's fvar table if present\n * @returns {Object|undefined}\n */\n fvar() {\n return this.font.tables.fvar;\n }\n /**\n * Helper method that returns the font's gvar table if present\n * @returns {Object|undefined}\n */\n gvar() {\n return this.font.tables.gvar;\n }\n /**\n * Helper method that returns the font's hvar table if present\n * @returns {Object|undefined}\n */\n hvar() {\n return this.font.tables.hvar;\n }\n};\n\n// src/hintingtt.mjs\nvar MAX_INSTRUCTIONS = 1e6;\nvar MAX_CALL_DEPTH2 = 64;\nvar MAX_LOOP_COUNT = 1e4;\nvar instructionTable;\nvar exec;\nvar execGlyph;\nvar execComponent;\nfunction Hinting(font) {\n this.font = font;\n this.getCommands = function(hPoints) {\n return glyf_default.getPath(hPoints).commands;\n };\n this._fpgmState = this._prepState = void 0;\n this._errorState = 0;\n}\nfunction roundOff(v) {\n return v;\n}\nfunction roundToGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v));\n}\nfunction roundToDoubleGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;\n}\nfunction roundToHalfGrid(v) {\n return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);\n}\nfunction roundUpToGrid(v) {\n return Math.sign(v) * Math.ceil(Math.abs(v));\n}\nfunction roundDownToGrid(v) {\n return Math.sign(v) * Math.floor(Math.abs(v));\n}\nvar roundSuper = function(v) {\n const period = this.srPeriod;\n let phase = this.srPhase;\n const threshold = this.srThreshold;\n let sign = 1;\n if (v < 0) {\n v = -v;\n sign = -1;\n }\n v += threshold - phase;\n v = Math.trunc(v / period) * period;\n v += phase;\n if (v < 0) return phase * sign;\n return v * sign;\n};\nvar xUnitVector = {\n x: 1,\n y: 0,\n axis: \"x\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dm1;\n let dm2;\n let dt;\n if (!pv || pv === this) {\n do1 = p.xo - rp1.xo;\n do2 = p.xo - rp2.xo;\n dm1 = rp1.x - rp1.xo;\n dm2 = rp2.x - rp2.xo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.x = p.xo + (dm1 + dm2) / 2;\n return;\n }\n p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this\n normalSlope: Number.NEGATIVE_INFINITY,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'.\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.x = (org ? rp.xo : rp.x) + d;\n return;\n }\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n p.x = rpdx + (p.y - rpdy) / pv.normalSlope;\n },\n // Slope of vector line.\n slope: 0,\n // Touches the point p.\n touch: function(p) {\n p.xTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.xTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.xTouched = false;\n }\n};\nvar yUnitVector = {\n x: 0,\n y: 1,\n axis: \"y\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dm1;\n let dm2;\n let dt;\n if (!pv || pv === this) {\n do1 = p.yo - rp1.yo;\n do2 = p.yo - rp2.yo;\n dm1 = rp1.y - rp1.yo;\n dm2 = rp2.y - rp2.yo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.y = p.yo + (dm1 + dm2) / 2;\n return;\n }\n p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this.\n normalSlope: 0,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.y = (org ? rp.yo : rp.y) + d;\n return;\n }\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n p.y = rpdy + pv.normalSlope * (p.x - rpdx);\n },\n // Slope of vector line.\n slope: Number.POSITIVE_INFINITY,\n // Touches the point p.\n touch: function(p) {\n p.yTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.yTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.yTouched = false;\n }\n};\nObject.freeze(xUnitVector);\nObject.freeze(yUnitVector);\nfunction UnitVector(x, y) {\n this.x = x;\n this.y = y;\n this.axis = void 0;\n this.slope = y / x;\n this.normalSlope = -x / y;\n Object.freeze(this);\n}\nUnitVector.prototype.distance = function(p1, p2, o1, o2) {\n return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2);\n};\nUnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {\n let dm1;\n let dm2;\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dt;\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n};\nUnitVector.prototype.setRelative = function(p, rp, d, pv, org) {\n pv = pv || this;\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n const pvns = pv.normalSlope;\n const fvs = this.slope;\n const px = p.x;\n const py = p.y;\n p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);\n p.y = fvs * (p.x - px) + py;\n};\nUnitVector.prototype.touch = function(p) {\n p.xTouched = true;\n p.yTouched = true;\n};\nfunction getUnitVector(x, y) {\n const d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d;\n if (x === 1 && y === 0) return xUnitVector;\n else if (x === 0 && y === 1) return yUnitVector;\n else return new UnitVector(x, y);\n}\nfunction HPoint(x, y, lastPointOfContour, onCurve) {\n this.x = this.xo = Math.round(x * 64) / 64;\n this.y = this.yo = Math.round(y * 64) / 64;\n this.lastPointOfContour = lastPointOfContour;\n this.onCurve = onCurve;\n this.prevPointOnContour = void 0;\n this.nextPointOnContour = void 0;\n this.xTouched = false;\n this.yTouched = false;\n Object.preventExtensions(this);\n}\nHPoint.prototype.nextTouched = function(v) {\n let p = this.nextPointOnContour;\n while (!v.touched(p) && p !== this) p = p.nextPointOnContour;\n return p;\n};\nHPoint.prototype.prevTouched = function(v) {\n let p = this.prevPointOnContour;\n while (!v.touched(p) && p !== this) p = p.prevPointOnContour;\n return p;\n};\nvar HPZero = Object.freeze(new HPoint(0, 0));\nvar defaultState = {\n cvCutIn: 17 / 16,\n // control value cut in\n deltaBase: 9,\n deltaShift: 0.125,\n loop: 1,\n // loops some instructions\n minDis: 1,\n // minimum distance\n autoFlip: true\n};\nfunction State(env, prog) {\n this.env = env;\n this.stack = [];\n this.prog = prog;\n switch (env) {\n case \"glyf\":\n this.zp0 = this.zp1 = this.zp2 = 1;\n this.rp0 = this.rp1 = this.rp2 = 0;\n /* fall through */\n case \"prep\":\n this.fv = this.pv = this.dpv = xUnitVector;\n this.round = roundToGrid;\n }\n}\nHinting.prototype.exec = function(glyph, ppem) {\n if (typeof ppem !== \"number\") {\n throw new Error(\"Point size is not a number!\");\n }\n if (this._errorState > 2) return;\n const font = this.font;\n let prepState = this._prepState;\n if (!prepState || prepState.ppem !== ppem) {\n let fpgmState = this._fpgmState;\n if (!fpgmState) {\n State.prototype = defaultState;\n fpgmState = this._fpgmState = new State(\"fpgm\", font.tables.fpgm);\n fpgmState.funcs = [];\n fpgmState.font = font;\n fpgmState.instructionCount = 0;\n fpgmState.callDepth = 0;\n if (false) {\n console.log(\"---EXEC FPGM---\");\n fpgmState.step = -1;\n }\n try {\n exec(fpgmState);\n } catch (e) {\n console.log(\"Hinting error in FPGM:\" + e);\n this._errorState = 3;\n return;\n }\n }\n State.prototype = fpgmState;\n prepState = this._prepState = new State(\"prep\", font.tables.prep);\n prepState.ppem = ppem;\n prepState.instructionCount = 0;\n prepState.callDepth = 0;\n const oCvt = font.variation && font.variation.process.getCvarTransform() || font.tables.cvt;\n if (oCvt) {\n const cvt = prepState.cvt = new Array(oCvt.length);\n const scale = ppem / font.unitsPerEm;\n for (let c = 0; c < oCvt.length; c++) {\n cvt[c] = oCvt[c] * scale;\n }\n } else {\n prepState.cvt = [];\n }\n if (false) {\n console.log(\"---EXEC PREP---\");\n prepState.step = -1;\n }\n try {\n exec(prepState);\n } catch (e) {\n if (this._errorState < 2) {\n console.log(\"Hinting error in PREP:\" + e);\n }\n this._errorState = 2;\n }\n }\n if (this._errorState > 1) return;\n try {\n return execGlyph(glyph, prepState);\n } catch (e) {\n if (this._errorState < 1) {\n console.log(\"Hinting error:\" + e);\n console.log(\"Note: further hinting errors are silenced\");\n }\n this._errorState = 1;\n return void 0;\n }\n};\nexecGlyph = function(glyph, prepState) {\n const xScale = prepState.ppem / prepState.font.unitsPerEm;\n const yScale = xScale;\n let components = glyph.components;\n let contours;\n let gZone;\n let state;\n State.prototype = prepState;\n if (!components) {\n state = new State(\"glyf\", glyph.instructions);\n state.instructionCount = 0;\n state.callDepth = 0;\n if (false) {\n console.log(\"---EXEC GLYPH---\");\n state.step = -1;\n }\n execComponent(glyph, state, xScale, yScale);\n gZone = state.gZone;\n } else {\n const font = prepState.font;\n gZone = [];\n contours = [];\n for (let i = 0; i < components.length; i++) {\n const c = components[i];\n const cg = font.glyphs.get(c.glyphIndex);\n state = new State(\"glyf\", cg.instructions);\n state.instructionCount = 0;\n state.callDepth = 0;\n if (false) {\n console.log(\"---EXEC COMP \" + i + \"---\");\n state.step = -1;\n }\n execComponent(cg, state, xScale, yScale);\n const dx = Math.round(c.dx * xScale);\n const dy = Math.round(c.dy * yScale);\n const gz = state.gZone;\n const cc = state.contours;\n for (let pi = 0; pi < gz.length; pi++) {\n const p = gz[pi];\n p.xTouched = p.yTouched = false;\n p.xo = p.x = p.x + dx;\n p.yo = p.y = p.y + dy;\n }\n const gLen = gZone.length;\n gZone.push.apply(gZone, gz);\n for (let j = 0; j < cc.length; j++) {\n contours.push(cc[j] + gLen);\n }\n }\n if (glyph.instructions && !state.inhibitGridFit) {\n state = new State(\"glyf\", glyph.instructions);\n state.gZone = state.z0 = state.z1 = state.z2 = gZone;\n state.contours = contours;\n gZone.push(\n new HPoint(0, 0),\n new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n );\n if (false) {\n console.log(\"---EXEC COMPOSITE---\");\n state.step = -1;\n }\n exec(state);\n gZone.length -= 2;\n }\n }\n return gZone;\n};\nexecComponent = function(glyph, state, xScale, yScale) {\n const points = glyph.points || [];\n const pLen = points.length;\n const gZone = state.gZone = state.z0 = state.z1 = state.z2 = [];\n const contours = state.contours = [];\n let cp;\n for (let i = 0; i < pLen; i++) {\n cp = points[i];\n gZone[i] = new HPoint(\n cp.x * xScale,\n cp.y * yScale,\n cp.lastPointOfContour,\n cp.onCurve\n );\n }\n let sp;\n let np;\n for (let i = 0; i < pLen; i++) {\n cp = gZone[i];\n if (!sp) {\n sp = cp;\n contours.push(i);\n }\n if (cp.lastPointOfContour) {\n cp.nextPointOnContour = sp;\n sp.prevPointOnContour = cp;\n sp = void 0;\n } else {\n np = gZone[i + 1];\n cp.nextPointOnContour = np;\n np.prevPointOnContour = cp;\n }\n }\n if (state.inhibitGridFit) return;\n if (false) {\n console.log(\"PROCESSING GLYPH\", state.stack);\n for (let i = 0; i < pLen; i++) {\n console.log(i, gZone[i].x, gZone[i].y);\n }\n }\n gZone.push(\n new HPoint(0, 0),\n new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n );\n exec(state);\n gZone.length -= 2;\n if (false) {\n console.log(\"FINISHED GLYPH\", state.stack);\n for (let i = 0; i < pLen; i++) {\n console.log(i, gZone[i].x, gZone[i].y);\n }\n }\n};\nexec = function(state) {\n let prog = state.prog;\n if (!prog) return;\n const pLen = prog.length;\n let ins;\n for (state.ip = 0; state.ip < pLen; state.ip++) {\n if (++state.instructionCount > MAX_INSTRUCTIONS) {\n throw new Error(\n \"Hinting instructions exceeded maximum of \" + MAX_INSTRUCTIONS\n );\n }\n if (false) state.step++;\n ins = instructionTable[prog[state.ip]];\n if (!ins) {\n throw new Error(\n \"unknown instruction: 0x\" + Number(prog[state.ip]).toString(16)\n );\n }\n ins(state);\n }\n};\nfunction initTZone(state) {\n const tZone = state.tZone = new Array(state.gZone.length);\n for (let i = 0; i < tZone.length; i++) {\n tZone[i] = new HPoint(0, 0);\n }\n}\nfunction skip(state, handleElse) {\n const prog = state.prog;\n let ip = state.ip;\n let nesting = 1;\n let ins;\n do {\n ins = prog[++ip];\n if (ins === 88)\n nesting++;\n else if (ins === 89)\n nesting--;\n else if (ins === 64)\n ip += prog[ip + 1] + 1;\n else if (ins === 65)\n ip += 2 * prog[ip + 1] + 1;\n else if (ins >= 176 && ins <= 183)\n ip += ins - 176 + 1;\n else if (ins >= 184 && ins <= 191)\n ip += (ins - 184 + 1) * 2;\n else if (handleElse && nesting === 1 && ins === 27)\n break;\n } while (nesting > 0);\n state.ip = ip;\n}\nfunction SVTCA(v, state) {\n if (false) console.log(state.step, \"SVTCA[\" + v.axis + \"]\");\n state.fv = state.pv = state.dpv = v;\n}\nfunction SPVTCA(v, state) {\n if (false) console.log(state.step, \"SPVTCA[\" + v.axis + \"]\");\n state.pv = state.dpv = v;\n}\nfunction SFVTCA(v, state) {\n if (false) console.log(state.step, \"SFVTCA[\" + v.axis + \"]\");\n state.fv = v;\n}\nfunction SPVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(\"SPVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.pv = state.dpv = getUnitVector(dx, dy);\n}\nfunction SFVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(\"SFVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.fv = getUnitVector(dx, dy);\n}\nfunction SPVFS(state) {\n const stack = state.stack;\n const y = stack.pop();\n const x = stack.pop();\n if (false) console.log(state.step, \"SPVFS[]\", y, x);\n state.pv = state.dpv = getUnitVector(x, y);\n}\nfunction SFVFS(state) {\n const stack = state.stack;\n const y = stack.pop();\n const x = stack.pop();\n if (false) console.log(state.step, \"SPVFS[]\", y, x);\n state.fv = getUnitVector(x, y);\n}\nfunction GPV(state) {\n const stack = state.stack;\n const pv = state.pv;\n if (false) console.log(state.step, \"GPV[]\");\n stack.push(pv.x * 16384);\n stack.push(pv.y * 16384);\n}\nfunction GFV(state) {\n const stack = state.stack;\n const fv = state.fv;\n if (false) console.log(state.step, \"GFV[]\");\n stack.push(fv.x * 16384);\n stack.push(fv.y * 16384);\n}\nfunction SFVTPV(state) {\n state.fv = state.pv;\n if (false) console.log(state.step, \"SFVTPV[]\");\n}\nfunction ISECT(state) {\n const stack = state.stack;\n const pa0i = stack.pop();\n const pa1i = stack.pop();\n const pb0i = stack.pop();\n const pb1i = stack.pop();\n const pi = stack.pop();\n const z0 = state.z0;\n const z1 = state.z1;\n const pa0 = z0[pa0i];\n const pa1 = z0[pa1i];\n const pb0 = z1[pb0i];\n const pb1 = z1[pb1i];\n const p = state.z2[pi];\n if (false) console.log(\"ISECT[], \", pa0i, pa1i, pb0i, pb1i, pi);\n const x1 = pa0.x;\n const y1 = pa0.y;\n const x2 = pa1.x;\n const y2 = pa1.y;\n const x3 = pb0.x;\n const y3 = pb0.y;\n const x4 = pb1.x;\n const y4 = pb1.y;\n const div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n const f1 = x1 * y2 - y1 * x2;\n const f2 = x3 * y4 - y3 * x4;\n p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;\n p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;\n}\nfunction SRP0(state) {\n state.rp0 = state.stack.pop();\n if (false) console.log(state.step, \"SRP0[]\", state.rp0);\n}\nfunction SRP1(state) {\n state.rp1 = state.stack.pop();\n if (false) console.log(state.step, \"SRP1[]\", state.rp1);\n}\nfunction SRP2(state) {\n state.rp2 = state.stack.pop();\n if (false) console.log(state.step, \"SRP2[]\", state.rp2);\n}\nfunction SZP0(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP0[]\", n);\n state.zp0 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z0 = state.tZone;\n break;\n case 1:\n state.z0 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZP1(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP1[]\", n);\n state.zp1 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z1 = state.tZone;\n break;\n case 1:\n state.z1 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZP2(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP2[]\", n);\n state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z2 = state.tZone;\n break;\n case 1:\n state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZPS(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZPS[]\", n);\n state.zp0 = state.zp1 = state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z0 = state.z1 = state.z2 = state.tZone;\n break;\n case 1:\n state.z0 = state.z1 = state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SLOOP(state) {\n state.loop = state.stack.pop();\n if (state.loop > MAX_LOOP_COUNT) {\n state.loop = MAX_LOOP_COUNT;\n }\n if (false) console.log(state.step, \"SLOOP[]\", state.loop);\n}\nfunction RTG(state) {\n if (false) console.log(state.step, \"RTG[]\");\n state.round = roundToGrid;\n}\nfunction RTHG(state) {\n if (false) console.log(state.step, \"RTHG[]\");\n state.round = roundToHalfGrid;\n}\nfunction SMD(state) {\n const d = state.stack.pop();\n if (false) console.log(state.step, \"SMD[]\", d);\n state.minDis = d / 64;\n}\nfunction ELSE(state) {\n if (false) console.log(state.step, \"ELSE[]\");\n skip(state, false);\n}\nfunction JMPR(state) {\n const o = state.stack.pop();\n if (false) console.log(state.step, \"JMPR[]\", o);\n state.ip += o - 1;\n}\nfunction SCVTCI(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCVTCI[]\", n);\n state.cvCutIn = n / 64;\n}\nfunction DUP(state) {\n const stack = state.stack;\n if (false) console.log(state.step, \"DUP[]\");\n stack.push(stack[stack.length - 1]);\n}\nfunction POP(state) {\n if (false) console.log(state.step, \"POP[]\");\n state.stack.pop();\n}\nfunction CLEAR(state) {\n if (false) console.log(state.step, \"CLEAR[]\");\n state.stack.length = 0;\n}\nfunction SWAP(state) {\n const stack = state.stack;\n const a = stack.pop();\n const b = stack.pop();\n if (false) console.log(state.step, \"SWAP[]\");\n stack.push(a);\n stack.push(b);\n}\nfunction DEPTH(state) {\n const stack = state.stack;\n if (false) console.log(state.step, \"DEPTH[]\");\n stack.push(stack.length);\n}\nfunction LOOPCALL(state) {\n const stack = state.stack;\n const fn = stack.pop();\n let c = stack.pop();\n if (c > MAX_LOOP_COUNT) c = MAX_LOOP_COUNT;\n if (false) console.log(state.step, \"LOOPCALL[]\", fn, c);\n if (++state.callDepth > MAX_CALL_DEPTH2) {\n throw new Error(\"Hinting call depth exceeded maximum of \" + MAX_CALL_DEPTH2);\n }\n const cip = state.ip;\n const cprog = state.prog;\n state.prog = state.funcs[fn];\n for (let i = 0; i < c; i++) {\n exec(state);\n if (false) console.log(\n ++state.step,\n i + 1 < c ? \"next loopcall\" : \"done loopcall\",\n i\n );\n }\n state.ip = cip;\n state.prog = cprog;\n state.callDepth--;\n}\nfunction CALL(state) {\n const fn = state.stack.pop();\n if (false) console.log(state.step, \"CALL[]\", fn);\n if (++state.callDepth > MAX_CALL_DEPTH2) {\n throw new Error(\"Hinting call depth exceeded maximum of \" + MAX_CALL_DEPTH2);\n }\n const cip = state.ip;\n const cprog = state.prog;\n state.prog = state.funcs[fn];\n exec(state);\n state.ip = cip;\n state.prog = cprog;\n state.callDepth--;\n if (false) console.log(++state.step, \"returning from\", fn);\n}\nfunction CINDEX(state) {\n const stack = state.stack;\n const k = stack.pop();\n if (false) console.log(state.step, \"CINDEX[]\", k);\n stack.push(stack[stack.length - k]);\n}\nfunction MINDEX(state) {\n const stack = state.stack;\n const k = stack.pop();\n if (false) console.log(state.step, \"MINDEX[]\", k);\n stack.push(stack.splice(stack.length - k, 1)[0]);\n}\nfunction FDEF(state) {\n if (state.env !== \"fpgm\") throw new Error(\"FDEF not allowed here\");\n const stack = state.stack;\n const prog = state.prog;\n let ip = state.ip;\n const fn = stack.pop();\n const ipBegin = ip;\n if (false) console.log(state.step, \"FDEF[]\", fn);\n while (prog[++ip] !== 45) ;\n state.ip = ip;\n state.funcs[fn] = prog.slice(ipBegin + 1, ip);\n}\nfunction MDAP(round, state) {\n const pi = state.stack.pop();\n const p = state.z0[pi];\n const fv = state.fv;\n const pv = state.pv;\n if (false) console.log(state.step, \"MDAP[\" + round + \"]\", pi);\n let d = pv.distance(p, HPZero);\n if (round) d = state.round(d);\n fv.setRelative(p, HPZero, d, pv);\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n}\nfunction IUP(v, state) {\n const z2 = state.z2;\n const pLen = z2.length - 2;\n let cp;\n let pp;\n let np;\n if (false) console.log(state.step, \"IUP[\" + v.axis + \"]\");\n for (let i = 0; i < pLen; i++) {\n cp = z2[i];\n if (v.touched(cp)) continue;\n pp = cp.prevTouched(v);\n if (pp === cp) continue;\n np = cp.nextTouched(v);\n if (pp === np) {\n v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);\n }\n v.interpolate(cp, pp, np, v);\n }\n}\nfunction SHP(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n let loop = state.loop;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n const d = pv.distance(rp, rp, false, true);\n fv.setRelative(p, p, d, pv);\n fv.touch(p);\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHP[\" + (a ? \"rp1\" : \"rp2\") + \"]\",\n pi\n );\n }\n }\n state.loop = 1;\n}\nfunction SHC(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n const ci = stack.pop();\n const sp = state.z2[state.contours[ci]];\n let p = sp;\n if (false) console.log(state.step, \"SHC[\" + a + \"]\", ci);\n const d = pv.distance(rp, rp, false, true);\n do {\n if (p !== rp) fv.setRelative(p, p, d, pv);\n p = p.nextPointOnContour;\n } while (p !== sp);\n}\nfunction SHZ(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n const e = stack.pop();\n if (false) console.log(state.step, \"SHZ[\" + a + \"]\", e);\n let z;\n switch (e) {\n case 0:\n z = state.tZone;\n break;\n case 1:\n z = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone\");\n }\n let p;\n const d = pv.distance(rp, rp, false, true);\n const pLen = z.length - 2;\n for (let i = 0; i < pLen; i++) {\n p = z[i];\n fv.setRelative(p, p, d, pv);\n }\n}\nfunction SHPIX(state) {\n const stack = state.stack;\n let loop = state.loop;\n const fv = state.fv;\n const d = stack.pop() / 64;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHPIX[]\",\n pi,\n d\n );\n }\n fv.setRelative(p, p, d);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction IP(state) {\n const stack = state.stack;\n const rp1i = state.rp1;\n const rp2i = state.rp2;\n let loop = state.loop;\n const rp1 = state.z0[rp1i];\n const rp2 = state.z1[rp2i];\n const fv = state.fv;\n const pv = state.dpv;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"IP[]\",\n pi,\n rp1i,\n \"<->\",\n rp2i\n );\n }\n fv.interpolate(p, rp1, rp2, pv);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction MSIRP(a, state) {\n const stack = state.stack;\n const d = stack.pop() / 64;\n const pi = stack.pop();\n const p = state.z1[pi];\n const rp0 = state.z0[state.rp0];\n const fv = state.fv;\n const pv = state.pv;\n fv.setRelative(p, rp0, d, pv);\n fv.touch(p);\n if (false) console.log(state.step, \"MSIRP[\" + a + \"]\", d, pi);\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (a) state.rp0 = pi;\n}\nfunction ALIGNRP(state) {\n const stack = state.stack;\n const rp0i = state.rp0;\n const rp0 = state.z0[rp0i];\n let loop = state.loop;\n const fv = state.fv;\n const pv = state.pv;\n const z1 = state.z1;\n while (loop--) {\n const pi = stack.pop();\n const p = z1[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"ALIGNRP[]\",\n pi\n );\n }\n fv.setRelative(p, rp0, 0, pv);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction RTDG(state) {\n if (false) console.log(state.step, \"RTDG[]\");\n state.round = roundToDoubleGrid;\n}\nfunction MIAP(round, state) {\n const stack = state.stack;\n const n = stack.pop();\n const pi = stack.pop();\n const p = state.z0[pi];\n const fv = state.fv;\n const pv = state.pv;\n let cv = state.cvt[n];\n if (false) {\n console.log(\n state.step,\n \"MIAP[\" + round + \"]\",\n n,\n \"(\",\n cv,\n \")\",\n pi\n );\n }\n let d = pv.distance(p, HPZero);\n if (round) {\n if (Math.abs(d - cv) < state.cvCutIn) d = cv;\n d = state.round(d);\n }\n fv.setRelative(p, HPZero, d, pv);\n if (state.zp0 === 0) {\n p.xo = p.x;\n p.yo = p.y;\n }\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n}\nfunction NPUSHB(state) {\n const prog = state.prog;\n let ip = state.ip;\n const stack = state.stack;\n const n = prog[++ip];\n if (false) console.log(state.step, \"NPUSHB[]\", n);\n for (let i = 0; i < n; i++) stack.push(prog[++ip]);\n state.ip = ip;\n}\nfunction NPUSHW(state) {\n let ip = state.ip;\n const prog = state.prog;\n const stack = state.stack;\n const n = prog[++ip];\n if (false) console.log(state.step, \"NPUSHW[]\", n);\n for (let i = 0; i < n; i++) {\n let w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) w = -((w ^ 65535) + 1);\n stack.push(w);\n }\n state.ip = ip;\n}\nfunction WS(state) {\n const stack = state.stack;\n let store = state.store;\n if (!store) store = state.store = [];\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WS\", v, l);\n store[l] = v;\n}\nfunction RS(state) {\n const stack = state.stack;\n const store = state.store;\n const l = stack.pop();\n if (false) console.log(state.step, \"RS\", l);\n const v = store && store[l] || 0;\n stack.push(v);\n}\nfunction WCVTP(state) {\n const stack = state.stack;\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WCVTP\", v, l);\n state.cvt[l] = v / 64;\n}\nfunction RCVT(state) {\n const stack = state.stack;\n const cvte = stack.pop();\n if (false) console.log(state.step, \"RCVT\", cvte);\n stack.push(state.cvt[cvte] * 64);\n}\nfunction GC(a, state) {\n const stack = state.stack;\n const pi = stack.pop();\n const p = state.z2[pi];\n if (false) console.log(state.step, \"GC[\" + a + \"]\", pi);\n stack.push(state.dpv.distance(p, HPZero, a, false) * 64);\n}\nfunction MD(a, state) {\n const stack = state.stack;\n const pi2 = stack.pop();\n const pi1 = stack.pop();\n const p2 = state.z1[pi2];\n const p1 = state.z0[pi1];\n const d = state.dpv.distance(p1, p2, a, a);\n if (false) console.log(state.step, \"MD[\" + a + \"]\", pi2, pi1, \"->\", d);\n state.stack.push(Math.round(d * 64));\n}\nfunction MPPEM(state) {\n if (false) console.log(state.step, \"MPPEM[]\");\n state.stack.push(state.ppem);\n}\nfunction FLIPON(state) {\n if (false) console.log(state.step, \"FLIPON[]\");\n state.autoFlip = true;\n}\nfunction LT(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"LT[]\", e2, e1);\n stack.push(e1 < e2 ? 1 : 0);\n}\nfunction LTEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"LTEQ[]\", e2, e1);\n stack.push(e1 <= e2 ? 1 : 0);\n}\nfunction GT(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"GT[]\", e2, e1);\n stack.push(e1 > e2 ? 1 : 0);\n}\nfunction GTEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"GTEQ[]\", e2, e1);\n stack.push(e1 >= e2 ? 1 : 0);\n}\nfunction EQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"EQ[]\", e2, e1);\n stack.push(e2 === e1 ? 1 : 0);\n}\nfunction NEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"NEQ[]\", e2, e1);\n stack.push(e2 !== e1 ? 1 : 0);\n}\nfunction ODD(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ODD[]\", n);\n stack.push(Math.trunc(n) & 1 ? 1 : 0);\n}\nfunction EVEN(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"EVEN[]\", n);\n stack.push(Math.trunc(n) & 1 ? 0 : 1);\n}\nfunction IF(state) {\n let test = state.stack.pop();\n let ins;\n if (false) console.log(state.step, \"IF[]\", test);\n if (!test) {\n skip(state, true);\n if (false) console.log(state.step, ins === 27 ? \"ELSE[]\" : \"EIF[]\");\n }\n}\nfunction EIF(state) {\n if (false) console.log(state.step, \"EIF[]\");\n}\nfunction AND(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"AND[]\", e2, e1);\n stack.push(e2 && e1 ? 1 : 0);\n}\nfunction OR(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"OR[]\", e2, e1);\n stack.push(e2 || e1 ? 1 : 0);\n}\nfunction NOT(state) {\n const stack = state.stack;\n const e = stack.pop();\n if (false) console.log(state.step, \"NOT[]\", e);\n stack.push(e ? 0 : 1);\n}\nfunction DELTAP123(b, state) {\n const stack = state.stack;\n const n = stack.pop();\n const fv = state.fv;\n const pv = state.pv;\n const ppem = state.ppem;\n const base = state.deltaBase + (b - 1) * 16;\n const ds = state.deltaShift;\n const z0 = state.z0;\n if (false) console.log(state.step, \"DELTAP[\" + b + \"]\", n, stack);\n for (let i = 0; i < n; i++) {\n const pi = stack.pop();\n const arg = stack.pop();\n const appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) continue;\n let mag = (arg & 15) - 8;\n if (mag >= 0) mag++;\n if (false) console.log(state.step, \"DELTAPFIX\", pi, \"by\", mag * ds);\n const p = z0[pi];\n fv.setRelative(p, p, mag * ds, pv);\n }\n}\nfunction SDB(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"SDB[]\", n);\n state.deltaBase = n;\n}\nfunction SDS(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"SDS[]\", n);\n state.deltaShift = Math.pow(0.5, n);\n}\nfunction ADD(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"ADD[]\", n2, n1);\n stack.push(n1 + n2);\n}\nfunction SUB(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"SUB[]\", n2, n1);\n stack.push(n1 - n2);\n}\nfunction DIV(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"DIV[]\", n2, n1);\n stack.push(n1 * 64 / n2);\n}\nfunction MUL(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"MUL[]\", n2, n1);\n stack.push(n1 * n2 / 64);\n}\nfunction ABS(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ABS[]\", n);\n stack.push(Math.abs(n));\n}\nfunction NEG(state) {\n const stack = state.stack;\n let n = stack.pop();\n if (false) console.log(state.step, \"NEG[]\", n);\n stack.push(-n);\n}\nfunction FLOOR(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"FLOOR[]\", n);\n stack.push(Math.floor(n / 64) * 64);\n}\nfunction CEILING(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"CEILING[]\", n);\n stack.push(Math.ceil(n / 64) * 64);\n}\nfunction ROUND(dt, state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ROUND[]\");\n stack.push(state.round(n / 64) * 64);\n}\nfunction WCVTF(state) {\n const stack = state.stack;\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WCVTF[]\", v, l);\n state.cvt[l] = v * state.ppem / state.font.unitsPerEm;\n}\nfunction DELTAC123(b, state) {\n const stack = state.stack;\n const n = stack.pop();\n const ppem = state.ppem;\n const base = state.deltaBase + (b - 1) * 16;\n const ds = state.deltaShift;\n if (false) console.log(state.step, \"DELTAC[\" + b + \"]\", n, stack);\n for (let i = 0; i < n; i++) {\n const c = stack.pop();\n const arg = stack.pop();\n const appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) continue;\n let mag = (arg & 15) - 8;\n if (mag >= 0) mag++;\n const delta = mag * ds;\n if (false) console.log(state.step, \"DELTACFIX\", c, \"by\", delta);\n state.cvt[c] += delta;\n }\n}\nfunction SROUND(state) {\n let n = state.stack.pop();\n if (false) console.log(state.step, \"SROUND[]\", n);\n state.round = roundSuper;\n let period;\n switch (n & 192) {\n case 0:\n period = 0.5;\n break;\n case 64:\n period = 1;\n break;\n case 128:\n period = 2;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n n &= 15;\n if (n === 0) state.srThreshold = 0;\n else state.srThreshold = (n / 8 - 0.5) * period;\n}\nfunction S45ROUND(state) {\n let n = state.stack.pop();\n if (false) console.log(state.step, \"S45ROUND[]\", n);\n state.round = roundSuper;\n let period;\n switch (n & 192) {\n case 0:\n period = Math.sqrt(2) / 2;\n break;\n case 64:\n period = Math.sqrt(2);\n break;\n case 128:\n period = 2 * Math.sqrt(2);\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n n &= 15;\n if (n === 0) state.srThreshold = 0;\n else state.srThreshold = (n / 8 - 0.5) * period;\n}\nfunction ROFF(state) {\n if (false) console.log(state.step, \"ROFF[]\");\n state.round = roundOff;\n}\nfunction RUTG(state) {\n if (false) console.log(state.step, \"RUTG[]\");\n state.round = roundUpToGrid;\n}\nfunction RDTG(state) {\n if (false) console.log(state.step, \"RDTG[]\");\n state.round = roundDownToGrid;\n}\nfunction SCANCTRL(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCANCTRL[]\", n);\n}\nfunction SDPVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(state.step, \"SDPVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.dpv = getUnitVector(dx, dy);\n}\nfunction GETINFO(state) {\n const stack = state.stack;\n const sel = stack.pop();\n let r = 0;\n if (false) console.log(state.step, \"GETINFO[]\", sel);\n if (sel & 1) r = 35;\n if (sel & 32) r |= 4096;\n stack.push(r);\n}\nfunction ROLL(state) {\n const stack = state.stack;\n const a = stack.pop();\n const b = stack.pop();\n const c = stack.pop();\n if (false) console.log(state.step, \"ROLL[]\");\n stack.push(b);\n stack.push(a);\n stack.push(c);\n}\nfunction MAX(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"MAX[]\", e2, e1);\n stack.push(Math.max(e1, e2));\n}\nfunction MIN(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"MIN[]\", e2, e1);\n stack.push(Math.min(e1, e2));\n}\nfunction SCANTYPE(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCANTYPE[]\", n);\n}\nfunction INSTCTRL(state) {\n const s = state.stack.pop();\n let v = state.stack.pop();\n if (false) console.log(state.step, \"INSTCTRL[]\", s, v);\n switch (s) {\n case 1:\n state.inhibitGridFit = !!v;\n return;\n case 2:\n state.ignoreCvt = !!v;\n return;\n default:\n throw new Error(\"invalid INSTCTRL[] selector\");\n }\n}\nfunction PUSHB(n, state) {\n const stack = state.stack;\n const prog = state.prog;\n let ip = state.ip;\n if (false) console.log(state.step, \"PUSHB[\" + n + \"]\");\n for (let i = 0; i < n; i++) stack.push(prog[++ip]);\n state.ip = ip;\n}\nfunction PUSHW(n, state) {\n let ip = state.ip;\n const prog = state.prog;\n const stack = state.stack;\n if (false) console.log(state.ip, \"PUSHW[\" + n + \"]\");\n for (let i = 0; i < n; i++) {\n let w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) w = -((w ^ 65535) + 1);\n stack.push(w);\n }\n state.ip = ip;\n}\nfunction MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {\n const stack = state.stack;\n const cvte = indirect && stack.pop();\n const pi = stack.pop();\n const rp0i = state.rp0;\n const rp = state.z0[rp0i];\n const p = state.z1[pi];\n const md = state.minDis;\n const fv = state.fv;\n const pv = state.dpv;\n let od;\n let d;\n let sign;\n let cv;\n d = od = pv.distance(p, rp, true, true);\n sign = d >= 0 ? 1 : -1;\n d = Math.abs(d);\n if (indirect) {\n cv = state.cvt[cvte];\n if (ro && Math.abs(d - cv) < state.cvCutIn) d = cv;\n }\n if (keepD && d < md) d = md;\n if (ro) d = state.round(d);\n fv.setRelative(p, rp, sign * d, pv);\n fv.touch(p);\n if (false) {\n console.log(\n state.step,\n (indirect ? \"MIRP[\" : \"MDRP[\") + (setRp0 ? \"M\" : \"m\") + (keepD ? \">\" : \"_\") + (ro ? \"R\" : \"_\") + (dt === 0 ? \"Gr\" : dt === 1 ? \"Bl\" : dt === 2 ? \"Wh\" : \"\") + \"]\",\n indirect ? cvte + \"(\" + state.cvt[cvte] + \",\" + cv + \")\" : \"\",\n pi,\n \"(d =\",\n od,\n \"->\",\n sign * d,\n \")\"\n );\n }\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (setRp0) state.rp0 = pi;\n}\ninstructionTable = [\n /* 0x00 */\n SVTCA.bind(void 0, yUnitVector),\n /* 0x01 */\n SVTCA.bind(void 0, xUnitVector),\n /* 0x02 */\n SPVTCA.bind(void 0, yUnitVector),\n /* 0x03 */\n SPVTCA.bind(void 0, xUnitVector),\n /* 0x04 */\n SFVTCA.bind(void 0, yUnitVector),\n /* 0x05 */\n SFVTCA.bind(void 0, xUnitVector),\n /* 0x06 */\n SPVTL.bind(void 0, 0),\n /* 0x07 */\n SPVTL.bind(void 0, 1),\n /* 0x08 */\n SFVTL.bind(void 0, 0),\n /* 0x09 */\n SFVTL.bind(void 0, 1),\n /* 0x0A */\n SPVFS,\n /* 0x0B */\n SFVFS,\n /* 0x0C */\n GPV,\n /* 0x0D */\n GFV,\n /* 0x0E */\n SFVTPV,\n /* 0x0F */\n ISECT,\n /* 0x10 */\n SRP0,\n /* 0x11 */\n SRP1,\n /* 0x12 */\n SRP2,\n /* 0x13 */\n SZP0,\n /* 0x14 */\n SZP1,\n /* 0x15 */\n SZP2,\n /* 0x16 */\n SZPS,\n /* 0x17 */\n SLOOP,\n /* 0x18 */\n RTG,\n /* 0x19 */\n RTHG,\n /* 0x1A */\n SMD,\n /* 0x1B */\n ELSE,\n /* 0x1C */\n JMPR,\n /* 0x1D */\n SCVTCI,\n /* 0x1E */\n void 0,\n // TODO SSWCI\n /* 0x1F */\n void 0,\n // TODO SSW\n /* 0x20 */\n DUP,\n /* 0x21 */\n POP,\n /* 0x22 */\n CLEAR,\n /* 0x23 */\n SWAP,\n /* 0x24 */\n DEPTH,\n /* 0x25 */\n CINDEX,\n /* 0x26 */\n MINDEX,\n /* 0x27 */\n void 0,\n // TODO ALIGNPTS\n /* 0x28 */\n void 0,\n /* 0x29 */\n void 0,\n // TODO UTP\n /* 0x2A */\n LOOPCALL,\n /* 0x2B */\n CALL,\n /* 0x2C */\n FDEF,\n /* 0x2D */\n void 0,\n // ENDF (eaten by FDEF)\n /* 0x2E */\n MDAP.bind(void 0, 0),\n /* 0x2F */\n MDAP.bind(void 0, 1),\n /* 0x30 */\n IUP.bind(void 0, yUnitVector),\n /* 0x31 */\n IUP.bind(void 0, xUnitVector),\n /* 0x32 */\n SHP.bind(void 0, 0),\n /* 0x33 */\n SHP.bind(void 0, 1),\n /* 0x34 */\n SHC.bind(void 0, 0),\n /* 0x35 */\n SHC.bind(void 0, 1),\n /* 0x36 */\n SHZ.bind(void 0, 0),\n /* 0x37 */\n SHZ.bind(void 0, 1),\n /* 0x38 */\n SHPIX,\n /* 0x39 */\n IP,\n /* 0x3A */\n MSIRP.bind(void 0, 0),\n /* 0x3B */\n MSIRP.bind(void 0, 1),\n /* 0x3C */\n ALIGNRP,\n /* 0x3D */\n RTDG,\n /* 0x3E */\n MIAP.bind(void 0, 0),\n /* 0x3F */\n MIAP.bind(void 0, 1),\n /* 0x40 */\n NPUSHB,\n /* 0x41 */\n NPUSHW,\n /* 0x42 */\n WS,\n /* 0x43 */\n RS,\n /* 0x44 */\n WCVTP,\n /* 0x45 */\n RCVT,\n /* 0x46 */\n GC.bind(void 0, 0),\n /* 0x47 */\n GC.bind(void 0, 1),\n /* 0x48 */\n void 0,\n // TODO SCFS\n /* 0x49 */\n MD.bind(void 0, 0),\n /* 0x4A */\n MD.bind(void 0, 1),\n /* 0x4B */\n MPPEM,\n /* 0x4C */\n void 0,\n // TODO MPS\n /* 0x4D */\n FLIPON,\n /* 0x4E */\n void 0,\n // TODO FLIPOFF\n /* 0x4F */\n void 0,\n // TODO DEBUG\n /* 0x50 */\n LT,\n /* 0x51 */\n LTEQ,\n /* 0x52 */\n GT,\n /* 0x53 */\n GTEQ,\n /* 0x54 */\n EQ,\n /* 0x55 */\n NEQ,\n /* 0x56 */\n ODD,\n /* 0x57 */\n EVEN,\n /* 0x58 */\n IF,\n /* 0x59 */\n EIF,\n /* 0x5A */\n AND,\n /* 0x5B */\n OR,\n /* 0x5C */\n NOT,\n /* 0x5D */\n DELTAP123.bind(void 0, 1),\n /* 0x5E */\n SDB,\n /* 0x5F */\n SDS,\n /* 0x60 */\n ADD,\n /* 0x61 */\n SUB,\n /* 0x62 */\n DIV,\n /* 0x63 */\n MUL,\n /* 0x64 */\n ABS,\n /* 0x65 */\n NEG,\n /* 0x66 */\n FLOOR,\n /* 0x67 */\n CEILING,\n /* 0x68 */\n ROUND.bind(void 0, 0),\n /* 0x69 */\n ROUND.bind(void 0, 1),\n /* 0x6A */\n ROUND.bind(void 0, 2),\n /* 0x6B */\n ROUND.bind(void 0, 3),\n /* 0x6C */\n void 0,\n // TODO NROUND[ab]\n /* 0x6D */\n void 0,\n // TODO NROUND[ab]\n /* 0x6E */\n void 0,\n // TODO NROUND[ab]\n /* 0x6F */\n void 0,\n // TODO NROUND[ab]\n /* 0x70 */\n WCVTF,\n /* 0x71 */\n DELTAP123.bind(void 0, 2),\n /* 0x72 */\n DELTAP123.bind(void 0, 3),\n /* 0x73 */\n DELTAC123.bind(void 0, 1),\n /* 0x74 */\n DELTAC123.bind(void 0, 2),\n /* 0x75 */\n DELTAC123.bind(void 0, 3),\n /* 0x76 */\n SROUND,\n /* 0x77 */\n S45ROUND,\n /* 0x78 */\n void 0,\n // TODO JROT[]\n /* 0x79 */\n void 0,\n // TODO JROF[]\n /* 0x7A */\n ROFF,\n /* 0x7B */\n void 0,\n /* 0x7C */\n RUTG,\n /* 0x7D */\n RDTG,\n /* 0x7E */\n POP,\n // actually SANGW, supposed to do only a pop though\n /* 0x7F */\n POP,\n // actually AA, supposed to do only a pop though\n /* 0x80 */\n void 0,\n // TODO FLIPPT\n /* 0x81 */\n void 0,\n // TODO FLIPRGON\n /* 0x82 */\n void 0,\n // TODO FLIPRGOFF\n /* 0x83 */\n void 0,\n /* 0x84 */\n void 0,\n /* 0x85 */\n SCANCTRL,\n /* 0x86 */\n SDPVTL.bind(void 0, 0),\n /* 0x87 */\n SDPVTL.bind(void 0, 1),\n /* 0x88 */\n GETINFO,\n /* 0x89 */\n void 0,\n // TODO IDEF\n /* 0x8A */\n ROLL,\n /* 0x8B */\n MAX,\n /* 0x8C */\n MIN,\n /* 0x8D */\n SCANTYPE,\n /* 0x8E */\n INSTCTRL,\n /* 0x8F */\n void 0,\n /* 0x90 */\n void 0,\n /* 0x91 */\n void 0,\n /* 0x92 */\n void 0,\n /* 0x93 */\n void 0,\n /* 0x94 */\n void 0,\n /* 0x95 */\n void 0,\n /* 0x96 */\n void 0,\n /* 0x97 */\n void 0,\n /* 0x98 */\n void 0,\n /* 0x99 */\n void 0,\n /* 0x9A */\n void 0,\n /* 0x9B */\n void 0,\n /* 0x9C */\n void 0,\n /* 0x9D */\n void 0,\n /* 0x9E */\n void 0,\n /* 0x9F */\n void 0,\n /* 0xA0 */\n void 0,\n /* 0xA1 */\n void 0,\n /* 0xA2 */\n void 0,\n /* 0xA3 */\n void 0,\n /* 0xA4 */\n void 0,\n /* 0xA5 */\n void 0,\n /* 0xA6 */\n void 0,\n /* 0xA7 */\n void 0,\n /* 0xA8 */\n void 0,\n /* 0xA9 */\n void 0,\n /* 0xAA */\n void 0,\n /* 0xAB */\n void 0,\n /* 0xAC */\n void 0,\n /* 0xAD */\n void 0,\n /* 0xAE */\n void 0,\n /* 0xAF */\n void 0,\n /* 0xB0 */\n PUSHB.bind(void 0, 1),\n /* 0xB1 */\n PUSHB.bind(void 0, 2),\n /* 0xB2 */\n PUSHB.bind(void 0, 3),\n /* 0xB3 */\n PUSHB.bind(void 0, 4),\n /* 0xB4 */\n PUSHB.bind(void 0, 5),\n /* 0xB5 */\n PUSHB.bind(void 0, 6),\n /* 0xB6 */\n PUSHB.bind(void 0, 7),\n /* 0xB7 */\n PUSHB.bind(void 0, 8),\n /* 0xB8 */\n PUSHW.bind(void 0, 1),\n /* 0xB9 */\n PUSHW.bind(void 0, 2),\n /* 0xBA */\n PUSHW.bind(void 0, 3),\n /* 0xBB */\n PUSHW.bind(void 0, 4),\n /* 0xBC */\n PUSHW.bind(void 0, 5),\n /* 0xBD */\n PUSHW.bind(void 0, 6),\n /* 0xBE */\n PUSHW.bind(void 0, 7),\n /* 0xBF */\n PUSHW.bind(void 0, 8),\n /* 0xC0 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0),\n /* 0xC1 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1),\n /* 0xC2 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2),\n /* 0xC3 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3),\n /* 0xC4 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0),\n /* 0xC5 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1),\n /* 0xC6 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2),\n /* 0xC7 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3),\n /* 0xC8 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0),\n /* 0xC9 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1),\n /* 0xCA */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2),\n /* 0xCB */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3),\n /* 0xCC */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0),\n /* 0xCD */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1),\n /* 0xCE */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2),\n /* 0xCF */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3),\n /* 0xD0 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0),\n /* 0xD1 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1),\n /* 0xD2 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2),\n /* 0xD3 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3),\n /* 0xD4 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0),\n /* 0xD5 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1),\n /* 0xD6 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2),\n /* 0xD7 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3),\n /* 0xD8 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0),\n /* 0xD9 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1),\n /* 0xDA */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2),\n /* 0xDB */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3),\n /* 0xDC */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0),\n /* 0xDD */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1),\n /* 0xDE */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2),\n /* 0xDF */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3),\n /* 0xE0 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0),\n /* 0xE1 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1),\n /* 0xE2 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2),\n /* 0xE3 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3),\n /* 0xE4 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0),\n /* 0xE5 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1),\n /* 0xE6 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2),\n /* 0xE7 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3),\n /* 0xE8 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0),\n /* 0xE9 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1),\n /* 0xEA */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2),\n /* 0xEB */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3),\n /* 0xEC */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0),\n /* 0xED */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1),\n /* 0xEE */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2),\n /* 0xEF */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3),\n /* 0xF0 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0),\n /* 0xF1 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1),\n /* 0xF2 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2),\n /* 0xF3 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3),\n /* 0xF4 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0),\n /* 0xF5 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1),\n /* 0xF6 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2),\n /* 0xF7 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3),\n /* 0xF8 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0),\n /* 0xF9 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1),\n /* 0xFA */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2),\n /* 0xFB */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3),\n /* 0xFC */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0),\n /* 0xFD */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1),\n /* 0xFE */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2),\n /* 0xFF */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3)\n];\nvar hintingtt_default = Hinting;\n\n// src/tokenizer.mjs\nfunction Token(char) {\n this.char = char;\n this.state = {};\n this.activeState = null;\n}\nfunction ContextRange(startIndex, endOffset, contextName) {\n this.contextName = contextName;\n this.startIndex = startIndex;\n this.endOffset = endOffset;\n}\nfunction ContextChecker(contextName, checkStart, checkEnd) {\n this.contextName = contextName;\n this.openRange = null;\n this.ranges = [];\n this.checkStart = checkStart;\n this.checkEnd = checkEnd;\n}\nfunction ContextParams(context, currentIndex) {\n this.context = context;\n this.index = currentIndex;\n this.length = context.length;\n this.current = context[currentIndex];\n this.backtrack = context.slice(0, currentIndex);\n this.lookahead = context.slice(currentIndex + 1);\n}\nfunction Event(eventId) {\n this.eventId = eventId;\n this.subscribers = [];\n}\nfunction initializeCoreEvents(events) {\n const coreEvents = [\n \"start\",\n \"end\",\n \"next\",\n \"newToken\",\n \"contextStart\",\n \"contextEnd\",\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\",\n \"updateContextsRanges\"\n ];\n for (let i = 0; i < coreEvents.length; i++) {\n const eventId = coreEvents[i];\n Object.defineProperty(this.events, eventId, {\n value: new Event(eventId)\n });\n }\n if (events) {\n for (let i = 0; i < coreEvents.length; i++) {\n const eventId = coreEvents[i];\n const event = events[eventId];\n if (typeof event === \"function\") {\n this.events[eventId].subscribe(event);\n }\n }\n }\n const requiresContextUpdate = [\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\"\n ];\n for (let i = 0; i < requiresContextUpdate.length; i++) {\n const eventId = requiresContextUpdate[i];\n this.events[eventId].subscribe(\n this.updateContextsRanges\n );\n }\n}\nfunction Tokenizer(events) {\n this.tokens = [];\n this.registeredContexts = {};\n this.contextCheckers = [];\n this.events = {};\n this.registeredModifiers = [];\n initializeCoreEvents.call(this, events);\n}\nToken.prototype.setState = function(key, value) {\n this.state[key] = value;\n this.activeState = { key, value: this.state[key] };\n return this.activeState;\n};\nToken.prototype.getState = function(stateId) {\n return this.state[stateId] || null;\n};\nTokenizer.prototype.inboundIndex = function(index) {\n return index >= 0 && index < this.tokens.length;\n};\nTokenizer.prototype.composeRUD = function(RUDs) {\n const silent = true;\n const state = RUDs.map((RUD) => this[RUD[0]].apply(this, RUD.slice(1).concat(silent)));\n const hasFAILObject = (obj) => typeof obj === \"object\" && Object.prototype.hasOwnProperty.call(obj, \"FAIL\");\n if (state.every(hasFAILObject)) {\n return {\n FAIL: \"composeRUD: one or more operations hasn't completed successfully\",\n report: state.filter(hasFAILObject)\n };\n }\n this.dispatch(\"composeRUD\", [state.filter((op) => !hasFAILObject(op))]);\n};\nTokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) {\n offset = offset !== null ? offset : this.tokens.length;\n const isTokenType = tokens.every((token) => token instanceof Token);\n if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) {\n const replaced = this.tokens.splice.apply(\n this.tokens,\n [startIndex, offset].concat(tokens)\n );\n if (!silent) this.dispatch(\"replaceToken\", [startIndex, offset, tokens]);\n return [replaced, tokens];\n } else {\n return { FAIL: \"replaceRange: invalid tokens or startIndex.\" };\n }\n};\nTokenizer.prototype.replaceToken = function(index, token, silent) {\n if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) {\n const replaced = this.tokens.splice(index, 1, token);\n if (!silent) this.dispatch(\"replaceToken\", [index, token]);\n return [replaced[0], token];\n } else {\n return { FAIL: \"replaceToken: invalid token or index.\" };\n }\n};\nTokenizer.prototype.removeRange = function(startIndex, offset, silent) {\n offset = !isNaN(offset) ? offset : this.tokens.length;\n const tokens = this.tokens.splice(startIndex, offset);\n if (!silent) this.dispatch(\"removeRange\", [tokens, startIndex, offset]);\n return tokens;\n};\nTokenizer.prototype.removeToken = function(index, silent) {\n if (!isNaN(index) && this.inboundIndex(index)) {\n const token = this.tokens.splice(index, 1);\n if (!silent) this.dispatch(\"removeToken\", [token, index]);\n return token;\n } else {\n return { FAIL: \"removeToken: invalid token index.\" };\n }\n};\nTokenizer.prototype.insertToken = function(tokens, index, silent) {\n const tokenType = tokens.every(\n (token) => token instanceof Token\n );\n if (tokenType) {\n this.tokens.splice.apply(\n this.tokens,\n [index, 0].concat(tokens)\n );\n if (!silent) this.dispatch(\"insertToken\", [tokens, index]);\n return tokens;\n } else {\n return { FAIL: \"insertToken: invalid token(s).\" };\n }\n};\nTokenizer.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.events.newToken.subscribe(function(token, contextParams) {\n const conditionParams = [token, contextParams];\n const canApplyModifier = condition === null || condition.apply(this, conditionParams) === true;\n const modifierParams = [token, contextParams];\n if (canApplyModifier) {\n let newStateValue = modifier.apply(this, modifierParams);\n token.setState(modifierId, newStateValue);\n }\n });\n this.registeredModifiers.push(modifierId);\n};\nEvent.prototype.subscribe = function(eventHandler) {\n if (typeof eventHandler === \"function\") {\n return this.subscribers.push(eventHandler) - 1;\n } else {\n return { FAIL: `invalid '${this.eventId}' event handler` };\n }\n};\nEvent.prototype.unsubscribe = function(subsId) {\n this.subscribers.splice(subsId, 1);\n};\nContextParams.prototype.setCurrentIndex = function(index) {\n this.index = index;\n this.current = this.context[index];\n this.backtrack = this.context.slice(0, index);\n this.lookahead = this.context.slice(index + 1);\n};\nContextParams.prototype.get = function(offset) {\n switch (true) {\n case offset === 0:\n return this.current;\n case (offset < 0 && Math.abs(offset) <= this.backtrack.length):\n return this.backtrack.slice(offset)[0];\n case (offset > 0 && offset <= this.lookahead.length):\n return this.lookahead[offset - 1];\n default:\n return null;\n }\n};\nTokenizer.prototype.rangeToText = function(range) {\n if (range instanceof ContextRange) {\n return this.getRangeTokens(range).map((token) => token.char).join(\"\");\n }\n};\nTokenizer.prototype.getText = function() {\n return this.tokens.map((token) => token.char).join(\"\");\n};\nTokenizer.prototype.getContext = function(contextName) {\n let context = this.registeredContexts[contextName];\n return context ? context : null;\n};\nTokenizer.prototype.on = function(eventName, eventHandler) {\n const event = this.events[eventName];\n if (event) {\n return event.subscribe(eventHandler);\n } else {\n return null;\n }\n};\nTokenizer.prototype.dispatch = function(eventName, args) {\n const event = this.events[eventName];\n if (event instanceof Event) {\n for (let i = 0; i < event.subscribers.length; i++) {\n const subscriber = event.subscribers[i];\n subscriber.apply(this, args || []);\n }\n }\n};\nTokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) {\n if (this.getContext(contextName)) return {\n FAIL: `context name '${contextName}' is already registered.`\n };\n if (typeof contextStartCheck !== \"function\") return {\n FAIL: \"missing context start check.\"\n };\n if (typeof contextEndCheck !== \"function\") return {\n FAIL: \"missing context end check.\"\n };\n const contextCheckers = new ContextChecker(\n contextName,\n contextStartCheck,\n contextEndCheck\n );\n this.registeredContexts[contextName] = contextCheckers;\n this.contextCheckers.push(contextCheckers);\n return contextCheckers;\n};\nTokenizer.prototype.getRangeTokens = function(range) {\n const endIndex = range.startIndex + range.endOffset;\n return [].concat(\n this.tokens.slice(range.startIndex, endIndex)\n );\n};\nTokenizer.prototype.getContextRanges = function(contextName) {\n const context = this.getContext(contextName);\n if (context) {\n return context.ranges;\n } else {\n return { FAIL: `context checker '${contextName}' is not registered.` };\n }\n};\nTokenizer.prototype.resetContextsRanges = function() {\n const registeredContexts = this.registeredContexts;\n for (const contextName in registeredContexts) {\n if (Object.prototype.hasOwnProperty.call(registeredContexts, contextName)) {\n const context = registeredContexts[contextName];\n context.ranges = [];\n }\n }\n};\nTokenizer.prototype.updateContextsRanges = function() {\n this.resetContextsRanges();\n const chars = this.tokens.map((token) => token.char);\n for (let i = 0; i < chars.length; i++) {\n const contextParams = new ContextParams(chars, i);\n this.runContextCheck(contextParams);\n }\n this.dispatch(\"updateContextsRanges\", [this.registeredContexts]);\n};\nTokenizer.prototype.setEndOffset = function(offset, contextName) {\n const startIndex = this.getContext(contextName).openRange.startIndex;\n let range = new ContextRange(startIndex, offset, contextName);\n const ranges = this.getContext(contextName).ranges;\n range.rangeId = `${contextName}.${ranges.length}`;\n ranges.push(range);\n this.getContext(contextName).openRange = null;\n return range;\n};\nTokenizer.prototype.runContextCheck = function(contextParams) {\n const index = contextParams.index;\n for (let i = 0; i < this.contextCheckers.length; i++) {\n const contextChecker = this.contextCheckers[i];\n let contextName = contextChecker.contextName;\n let openRange = this.getContext(contextName).openRange;\n if (!openRange && contextChecker.checkStart(contextParams)) {\n openRange = new ContextRange(index, null, contextName);\n this.getContext(contextName).openRange = openRange;\n this.dispatch(\"contextStart\", [contextName, index]);\n }\n if (!!openRange && contextChecker.checkEnd(contextParams)) {\n const offset = index - openRange.startIndex + 1;\n const range = this.setEndOffset(offset, contextName);\n this.dispatch(\"contextEnd\", [contextName, range]);\n }\n }\n};\nTokenizer.prototype.tokenize = function(text) {\n this.tokens = [];\n this.resetContextsRanges();\n let chars = Array.from(text);\n this.dispatch(\"start\");\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const contextParams = new ContextParams(chars, i);\n this.dispatch(\"next\", [contextParams]);\n this.runContextCheck(contextParams);\n let token = new Token(char);\n this.tokens.push(token);\n this.dispatch(\"newToken\", [token, contextParams]);\n }\n this.dispatch(\"end\", [this.tokens]);\n return this.tokens;\n};\nvar tokenizer_default = Tokenizer;\n\n// src/char.mjs\nfunction isArabicChar(c) {\n return /[\\u0600-\\u065F\\u066A-\\u06D2\\u06FA-\\u06FF]/.test(c);\n}\nfunction isIsolatedArabicChar(char) {\n return /[\\u0630\\u0690\\u0621\\u0631\\u0661\\u0671\\u0622\\u0632\\u0672\\u0692\\u06C2\\u0623\\u0673\\u0693\\u06C3\\u0624\\u0694\\u06C4\\u0625\\u0675\\u0695\\u06C5\\u06E5\\u0676\\u0696\\u06C6\\u0627\\u0677\\u0697\\u06C7\\u0648\\u0688\\u0698\\u06C8\\u0689\\u0699\\u06C9\\u068A\\u06CA\\u066B\\u068B\\u06CB\\u068C\\u068D\\u06CD\\u06FD\\u068E\\u06EE\\u06FE\\u062F\\u068F\\u06CF\\u06EF]/.test(char);\n}\nfunction isTashkeelArabicChar(char) {\n return /[\\u0600-\\u0605\\u060C-\\u060E\\u0610-\\u061B\\u061E\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED]/.test(char);\n}\nfunction isThaiChar(c) {\n return /[\\u0E00-\\u0E7F]/.test(c);\n}\nfunction isLatinChar(c) {\n return /[A-z]/.test(c);\n}\nfunction isWhiteSpace(c) {\n return /\\s/.test(c);\n}\n\n// src/features/featureQuery.mjs\nfunction FeatureQuery(font) {\n this.font = font;\n this.features = {};\n}\nfunction SubstitutionAction(action) {\n this.id = action.id;\n this.tag = action.tag;\n this.substitution = action.substitution;\n}\nfunction lookupCoverage(glyphIndex, coverage) {\n if (!glyphIndex) return -1;\n switch (coverage.format) {\n case 1:\n return coverage.glyphs.indexOf(glyphIndex);\n case 2: {\n let ranges = coverage.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\n let offset = glyphIndex - range.start;\n return range.index + offset;\n }\n }\n break;\n }\n default:\n return -1;\n }\n return -1;\n}\nfunction singleSubstitutionFormat1(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return glyphIndex + subtable.deltaGlyphId;\n}\nfunction singleSubstitutionFormat2(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return subtable.substitute[substituteIndex];\n}\nfunction lookupCoverageList(coverageList, contextParams) {\n let lookupList = [];\n for (let i = 0; i < coverageList.length; i++) {\n const coverage = coverageList[i];\n let glyphIndex = contextParams.current;\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n const lookupIndex = lookupCoverage(glyphIndex, coverage);\n if (lookupIndex !== -1) {\n lookupList.push(lookupIndex);\n }\n }\n if (lookupList.length !== coverageList.length) return -1;\n return lookupList;\n}\nfunction chainingSubstitutionFormat3(contextParams, subtable) {\n const lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length;\n if (contextParams.context.length < lookupsCount) return [];\n let inputLookups = lookupCoverageList(\n subtable.inputCoverage,\n contextParams\n );\n if (inputLookups === -1) return [];\n const lookaheadOffset = subtable.inputCoverage.length - 1;\n if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) return [];\n let lookaheadContext = contextParams.lookahead.slice(lookaheadOffset);\n while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) {\n lookaheadContext.shift();\n }\n const lookaheadParams = new ContextParams(lookaheadContext, 0);\n let lookaheadLookups = lookupCoverageList(\n subtable.lookaheadCoverage,\n lookaheadParams\n );\n let backtrackContext = [].concat(contextParams.backtrack);\n backtrackContext.reverse();\n while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) {\n backtrackContext.shift();\n }\n if (backtrackContext.length < subtable.backtrackCoverage.length) return [];\n const backtrackParams = new ContextParams(backtrackContext, 0);\n let backtrackLookups = lookupCoverageList(\n subtable.backtrackCoverage,\n backtrackParams\n );\n const contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length;\n let substitutions = [];\n if (contextRulesMatch) {\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const lookupRecord = subtable.lookupRecords[i];\n const lookupListIndex = lookupRecord.lookupListIndex;\n const lookupTable = this.getLookupByIndex(lookupListIndex);\n for (let s = 0; s < lookupTable.subtables.length; s++) {\n let subtable2 = lookupTable.subtables[s];\n let lookup;\n let substitutionType = this.getSubstitutionType(lookupTable, subtable2);\n if (substitutionType === \"71\") {\n substitutionType = this.getSubstitutionType(subtable2, subtable2.extension);\n lookup = this.getLookupMethod(subtable2, subtable2.extension);\n subtable2 = subtable2.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable2);\n }\n if (substitutionType === \"12\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else if (substitutionType === \"21\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else {\n throw new Error(`Substitution type ${substitutionType} is not supported in chaining substitution`);\n }\n }\n }\n }\n return substitutions;\n}\nfunction ligatureSubstitutionFormat1(contextParams, subtable) {\n let glyphIndex = contextParams.current;\n let ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (ligSetIndex === -1) return null;\n let ligature;\n let ligatureSet = subtable.ligatureSets[ligSetIndex];\n for (let s = 0; s < ligatureSet.length; s++) {\n ligature = ligatureSet[s];\n for (let l = 0; l < ligature.components.length; l++) {\n const lookaheadItem = contextParams.lookahead[l];\n const component = ligature.components[l];\n if (lookaheadItem !== component) break;\n if (l === ligature.components.length - 1) return ligature;\n }\n }\n return null;\n}\nfunction contextSubstitutionFormat1(contextParams, subtable) {\n let glyphId = contextParams.current;\n let ligSetIndex = lookupCoverage(glyphId, subtable.coverage);\n if (ligSetIndex === -1)\n return null;\n for (const ruleSet of subtable.ruleSets) {\n for (const rule of ruleSet) {\n let matched = true;\n for (let i = 0; i < rule.input.length; i++) {\n if (contextParams.lookahead[i] !== rule.input[i]) {\n matched = false;\n break;\n }\n }\n if (matched) {\n let substitutions = [];\n substitutions.push(glyphId);\n for (let i = 0; i < rule.input.length; i++) {\n substitutions.push(rule.input[i]);\n }\n const parser = (substitutions2, lookupRecord) => {\n const { lookupListIndex, sequenceIndex } = lookupRecord;\n const { subtables } = this.getLookupByIndex(lookupListIndex);\n for (const subtable2 of subtables) {\n let ligSetIndex2 = lookupCoverage(substitutions2[sequenceIndex], subtable2.coverage);\n if (ligSetIndex2 !== -1) {\n substitutions2[sequenceIndex] = subtable2.deltaGlyphId;\n }\n }\n };\n for (let i = 0; i < rule.lookupRecords.length; i++) {\n const lookupRecord = rule.lookupRecords[i];\n parser(substitutions, lookupRecord);\n }\n return substitutions;\n }\n }\n }\n return null;\n}\nfunction contextSubstitutionFormat3(contextParams, subtable) {\n if (contextParams.context.length < subtable.coverages.length) {\n return [];\n }\n for (let i = 0; i < subtable.coverages.length; i++) {\n let glyphIndex = contextParams.get(i);\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n if (lookupCoverage(glyphIndex, subtable.coverages[i]) === -1) {\n return [];\n }\n }\n let substitutions = [];\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const lookupRecord = subtable.lookupRecords[i];\n const lookupListIndex = lookupRecord.lookupListIndex;\n const lookupTable = this.getLookupByIndex(lookupListIndex);\n for (let s = 0; s < lookupTable.subtables.length; s++) {\n let subtable2 = lookupTable.subtables[s];\n let lookup;\n let substitutionType = this.getSubstitutionType(lookupTable, subtable2);\n if (substitutionType === \"71\") {\n substitutionType = this.getSubstitutionType(subtable2, subtable2.extension);\n lookup = this.getLookupMethod(subtable2, subtable2.extension);\n subtable2 = subtable2.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable2);\n }\n if (substitutionType === \"12\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else if (substitutionType === \"21\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n }\n }\n }\n return substitutions;\n}\nfunction decompositionSubstitutionFormat1(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return subtable.sequences[substituteIndex];\n}\nFeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() {\n const scripts = this.font.tables.gsub.scripts;\n for (let s = 0; s < scripts.length; s++) {\n const script = scripts[s];\n if (script.tag === \"DFLT\") return script.script.defaultLangSys.featureIndexes;\n }\n return [];\n};\nFeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) {\n const tables = this.font.tables;\n if (!tables.gsub) return [];\n if (!scriptTag) return this.getDefaultScriptFeaturesIndexes();\n const scripts = this.font.tables.gsub.scripts;\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.tag === scriptTag && script.script.defaultLangSys) {\n return script.script.defaultLangSys.featureIndexes;\n } else {\n let langSysRecords = script.langSysRecords;\n if (langSysRecords) {\n for (let j = 0; j < langSysRecords.length; j++) {\n const langSysRecord = langSysRecords[j];\n if (langSysRecord.tag === scriptTag) {\n let langSys = langSysRecord.langSys;\n return langSys.featureIndexes;\n }\n }\n }\n }\n }\n return this.getDefaultScriptFeaturesIndexes();\n};\nFeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) {\n let tags = {};\n for (let i = 0; i < features.length; i++) {\n const tag = features[i].tag;\n const feature = features[i].feature;\n tags[tag] = feature;\n }\n this.features[scriptTag].tags = tags;\n};\nFeatureQuery.prototype.getScriptFeatures = function(scriptTag) {\n let features = this.features[scriptTag];\n if (Object.prototype.hasOwnProperty.call(this.features, scriptTag)) return features;\n const featuresIndexes = this.getScriptFeaturesIndexes(scriptTag);\n if (!featuresIndexes) return null;\n const gsub = this.font.tables.gsub;\n features = featuresIndexes.map((index) => gsub.features[index]);\n this.features[scriptTag] = features;\n this.mapTagsToFeatures(features, scriptTag);\n return features;\n};\nFeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) {\n const lookupType = lookupTable.lookupType.toString();\n const substFormat = subtable.substFormat.toString();\n return lookupType + substFormat;\n};\nFeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) {\n let substitutionType = this.getSubstitutionType(lookupTable, subtable);\n switch (substitutionType) {\n case \"11\":\n return (glyphIndex) => singleSubstitutionFormat1.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"12\":\n return (glyphIndex) => singleSubstitutionFormat2.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"63\":\n return (contextParams) => chainingSubstitutionFormat3.apply(\n this,\n [contextParams, subtable]\n );\n case \"41\":\n return (contextParams) => ligatureSubstitutionFormat1.apply(\n this,\n [contextParams, subtable]\n );\n case \"21\":\n return (glyphIndex) => decompositionSubstitutionFormat1.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"51\":\n return (contextParams) => contextSubstitutionFormat1.apply(\n this,\n [contextParams, subtable]\n );\n case \"53\":\n return (contextParams) => contextSubstitutionFormat3.apply(\n this,\n [contextParams, subtable]\n );\n default:\n throw new Error(\n `substitutionType : ${substitutionType} lookupType: ${lookupTable.lookupType} - substFormat: ${subtable.substFormat} is not yet supported`\n );\n }\n};\nFeatureQuery.prototype.lookupFeature = function(query) {\n let contextParams = query.contextParams;\n let currentIndex = contextParams.index;\n const feature = this.getFeature({\n tag: query.tag,\n script: query.script\n });\n if (!feature) return new Error(\n `font '${(this.font.names.unicode || this.font.names.windows || this.font.names.macintosh).fullName.en}' doesn't support feature '${query.tag}' for script '${query.script}'.`\n );\n const lookups = this.getFeatureLookups(feature);\n const substitutions = [].concat(contextParams.context);\n for (let l = 0; l < lookups.length; l++) {\n const lookupTable = lookups[l];\n const subtables = this.getLookupSubtables(lookupTable);\n for (let s = 0; s < subtables.length; s++) {\n let subtable = subtables[s];\n let substType = this.getSubstitutionType(lookupTable, subtable);\n let lookup;\n if (substType === \"71\") {\n substType = this.getSubstitutionType(subtable, subtable.extension);\n lookup = this.getLookupMethod(subtable, subtable.extension);\n subtable = subtable.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable);\n }\n let substitution;\n switch (substType) {\n case \"11\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 11,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"12\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 12,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"63\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 63,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"41\":\n substitution = lookup(contextParams);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 41,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"21\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 21,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"51\":\n case \"53\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: parseInt(substType),\n tag: query.tag,\n substitution\n }));\n }\n break;\n }\n contextParams = new ContextParams(substitutions, currentIndex);\n if (Array.isArray(substitution) && !substitution.length) continue;\n substitution = null;\n }\n }\n return substitutions.length ? substitutions : null;\n};\nFeatureQuery.prototype.supports = function(query) {\n if (!query.script) return false;\n this.getScriptFeatures(query.script);\n const supportedScript = Object.prototype.hasOwnProperty.call(this.features, query.script);\n if (!query.tag) return supportedScript;\n const supportedFeature = this.features[query.script].some((feature) => feature.tag === query.tag);\n return supportedScript && supportedFeature;\n};\nFeatureQuery.prototype.getLookupSubtables = function(lookupTable) {\n return lookupTable.subtables || null;\n};\nFeatureQuery.prototype.getLookupByIndex = function(index) {\n const lookups = this.font.tables.gsub.lookups;\n return lookups[index] || null;\n};\nFeatureQuery.prototype.getFeatureLookups = function(feature) {\n return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this));\n};\nFeatureQuery.prototype.getFeature = function getFeature(query) {\n if (!this.font) return { FAIL: \"No font was found\" };\n if (!Object.prototype.hasOwnProperty.call(this.features, query.script)) {\n this.getScriptFeatures(query.script);\n }\n const scriptFeatures = this.features[query.script];\n if (!scriptFeatures) return { FAIL: `No feature for script ${query.script}` };\n if (!scriptFeatures.tags[query.tag]) return null;\n return this.features[query.script].tags[query.tag];\n};\nvar featureQuery_default = FeatureQuery;\n\n// src/features/arab/contextCheck/arabicWord.mjs\nfunction arabicWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? arabic first char\n prevChar === null && isArabicChar(char) || // ? arabic char preceded with a non arabic char\n !isArabicChar(prevChar) && isArabicChar(char)\n );\n}\nfunction arabicWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last arabic char\n nextChar === null || // ? next char is not arabic\n !isArabicChar(nextChar)\n );\n}\nvar arabicWord_default = {\n startCheck: arabicWordStartCheck,\n endCheck: arabicWordEndCheck\n};\n\n// src/features/arab/contextCheck/arabicSentence.mjs\nfunction arabicSentenceStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? an arabic char preceded with a non arabic char\n (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar)\n );\n}\nfunction arabicSentenceEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n switch (true) {\n case nextChar === null:\n return true;\n case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)): {\n const nextIsWhitespace = isWhiteSpace(nextChar);\n if (!nextIsWhitespace) return true;\n if (nextIsWhitespace) {\n let arabicCharAhead = false;\n arabicCharAhead = contextParams.lookahead.some(\n (c) => isArabicChar(c) || isTashkeelArabicChar(c)\n );\n if (!arabicCharAhead) return true;\n }\n break;\n }\n default:\n return false;\n }\n}\nvar arabicSentence_default = {\n startCheck: arabicSentenceStartCheck,\n endCheck: arabicSentenceEndCheck\n};\n\n// src/features/applySubstitution.mjs\nfunction singleSubstitutionFormat12(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n}\nfunction singleSubstitutionFormat22(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n}\nfunction chainingSubstitutionFormat32(action, tokens, index) {\n for (let i = 0; i < action.substitution.length; i++) {\n const subst = action.substitution[i];\n const token = tokens[index + i];\n if (Array.isArray(subst)) {\n if (subst.length) {\n token.setState(action.tag, subst[0]);\n } else {\n token.setState(\"deleted\", true);\n }\n continue;\n }\n token.setState(action.tag, subst);\n }\n}\nfunction ligatureSubstitutionFormat12(action, tokens, index) {\n let token = tokens[index];\n token.setState(action.tag, action.substitution.ligGlyph);\n const compsCount = action.substitution.components.length;\n for (let i = 0; i < compsCount; i++) {\n token = tokens[index + i + 1];\n token.setState(\"deleted\", true);\n }\n}\nvar SUBSTITUTIONS = {\n 11: singleSubstitutionFormat12,\n 12: singleSubstitutionFormat22,\n 63: chainingSubstitutionFormat32,\n 41: ligatureSubstitutionFormat12,\n 51: chainingSubstitutionFormat32,\n 53: chainingSubstitutionFormat32\n};\nfunction applySubstitution(action, tokens, index) {\n if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {\n SUBSTITUTIONS[action.id](action, tokens, index);\n }\n}\nvar applySubstitution_default = applySubstitution;\n\n// src/features/arab/arabicPresentationForms.mjs\nfunction willConnectPrev(charContextParams) {\n let backtrack = [].concat(charContextParams.backtrack);\n for (let i = backtrack.length - 1; i >= 0; i--) {\n const prevChar = backtrack[i];\n const isolated = isIsolatedArabicChar(prevChar);\n const tashkeel = isTashkeelArabicChar(prevChar);\n if (!isolated && !tashkeel) return true;\n if (isolated) return false;\n }\n return false;\n}\nfunction willConnectNext(charContextParams) {\n if (isIsolatedArabicChar(charContextParams.current)) return false;\n for (let i = 0; i < charContextParams.lookahead.length; i++) {\n const nextChar = charContextParams.lookahead[i];\n const tashkeel = isTashkeelArabicChar(nextChar);\n if (!tashkeel) return true;\n }\n return false;\n}\nfunction arabicPresentationForms(range) {\n const script = \"arab\";\n const tags = this.featuresTags[script];\n const tokens = this.tokenizer.getRangeTokens(range);\n if (tokens.length === 1) return;\n let contextParams = new ContextParams(\n tokens.map(\n (token) => token.getState(\"glyphIndex\")\n ),\n 0\n );\n const charContextParams = new ContextParams(\n tokens.map(\n (token) => token.char\n ),\n 0\n );\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (isTashkeelArabicChar(token.char)) continue;\n contextParams.setCurrentIndex(i);\n charContextParams.setCurrentIndex(i);\n let CONNECT = 0;\n if (willConnectPrev(charContextParams)) CONNECT |= 1;\n if (willConnectNext(charContextParams)) CONNECT |= 2;\n let tag;\n switch (CONNECT) {\n case 1:\n tag = \"fina\";\n break;\n case 2:\n tag = \"init\";\n break;\n case 3:\n tag = \"medi\";\n break;\n }\n if (tags.indexOf(tag) === -1) continue;\n let substitutions = this.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions instanceof Error) {\n console.info(substitutions.message);\n continue;\n }\n for (let j = 0; j < substitutions.length; j++) {\n const action = substitutions[j];\n if (action instanceof SubstitutionAction) {\n applySubstitution_default(action, tokens, j);\n contextParams.context[j] = action.substitution;\n }\n }\n }\n}\nvar arabicPresentationForms_default = arabicPresentationForms;\n\n// src/features/arab/arabicRequiredLigatures.mjs\nfunction getContextParams(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction arabicRequiredLigatures(range) {\n const script = \"arab\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams(tokens);\n }\n }\n}\nvar arabicRequiredLigatures_default = arabicRequiredLigatures;\n\n// src/features/ccmp/contextCheck/ccmpReplacement.mjs\nfunction ccmpReplacementStartCheck(contextParams) {\n return contextParams.index === 0 && contextParams.context.length > 1;\n}\nfunction ccmpReplacementEndCheck(contextParams) {\n return contextParams.index === contextParams.context.length - 1;\n}\nvar ccmpReplacement_default = {\n startCheck: ccmpReplacementStartCheck,\n endCheck: ccmpReplacementEndCheck\n};\n\n// src/features/ccmp/ccmpReplacementLigatures.mjs\nfunction getContextParams2(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction ccmpReplacementLigatures(range) {\n const script = \"delf\";\n const tag = \"ccmp\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams2(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n if (!this.query.getFeature({ tag, script, contextParams })) {\n continue;\n }\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams2(tokens);\n }\n }\n}\nvar ccmpReplacementLigatures_default = ccmpReplacementLigatures;\n\n// src/features/latn/contextCheck/latinWord.mjs\nfunction latinWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? latin first char\n prevChar === null && isLatinChar(char) || // ? latin char preceded with a non latin char\n !isLatinChar(prevChar) && isLatinChar(char)\n );\n}\nfunction latinWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last latin char\n nextChar === null || // ? next char is not latin\n !isLatinChar(nextChar)\n );\n}\nvar latinWord_default = {\n startCheck: latinWordStartCheck,\n endCheck: latinWordEndCheck\n};\n\n// src/features/latn/latinLigatures.mjs\nfunction getContextParams3(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction latinLigature(range) {\n const script = \"latn\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams3(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams3(tokens);\n }\n }\n}\nvar latinLigatures_default = latinLigature;\n\n// src/features/thai/contextCheck/thaiWord.mjs\nfunction thaiWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? thai first char\n prevChar === null && isThaiChar(char) || // ? thai char preceded with a non thai char\n !isThaiChar(prevChar) && isThaiChar(char)\n );\n}\nfunction thaiWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last thai char\n nextChar === null || // ? next char is not thai\n !isThaiChar(nextChar)\n );\n}\nvar thaiWord_default = {\n startCheck: thaiWordStartCheck,\n endCheck: thaiWordEndCheck\n};\n\n// src/features/thai/thaiGlyphComposition.mjs\nfunction getContextParams4(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiGlyphComposition(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams4(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"ccmp\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams4(tokens, index);\n }\n }\n}\nvar thaiGlyphComposition_default = thaiGlyphComposition;\n\n// src/features/thai/thaiLigatures.mjs\nfunction getContextParams5(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiLigatures(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams5(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams5(tokens, index);\n }\n }\n}\nvar thaiLigatures_default = thaiLigatures;\n\n// src/features/thai/thaiRequiredLigatures.mjs\nfunction getContextParams6(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiRequiredLigatures(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams6(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams6(tokens, index);\n }\n }\n}\nvar thaiRequiredLigatures_default = thaiRequiredLigatures;\n\n// src/features/unicode/contextCheck/variationSequenceCheck.mjs\nfunction isVariationSequenceSelector(char) {\n if (char === null) return false;\n const charCode = char.codePointAt(0);\n return (\n // Mongolian Variation Selectors\n charCode >= 6155 && charCode <= 6157 || // Generic Variation Selectors\n charCode >= 65024 && charCode <= 65039 || // Ideographic Variation Sequences\n charCode >= 917760 && charCode <= 917999\n );\n}\nfunction unicodeVariationSequenceStartCheck(contextParams) {\n const char = contextParams.current;\n const nextChar = contextParams.get(1);\n return nextChar === null && isVariationSequenceSelector(char) || isVariationSequenceSelector(nextChar);\n}\nfunction unicodeVariationSequenceEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return nextChar === null || !isVariationSequenceSelector(nextChar);\n}\nvar variationSequenceCheck_default = {\n startCheck: unicodeVariationSequenceStartCheck,\n endCheck: unicodeVariationSequenceEndCheck\n};\n\n// src/features/unicode/variationSequences.mjs\nfunction unicodeVariationSequence(range) {\n const font = this.query.font;\n const tokens = this.tokenizer.getRangeTokens(range);\n tokens[1].setState(\"deleted\", true);\n if (font.tables.cmap && font.tables.cmap.varSelectorList) {\n const baseCodePoint = tokens[0].char.codePointAt(0);\n const vsCodePoint = tokens[1].char.codePointAt(0);\n const selectorLookup = font.tables.cmap.varSelectorList[vsCodePoint];\n if (selectorLookup !== void 0) {\n if (selectorLookup.nonDefaultUVS) {\n const mappings = selectorLookup.nonDefaultUVS.uvsMappings;\n if (mappings[baseCodePoint]) {\n const replacementGlyphId = mappings[baseCodePoint].glyphID;\n if (font.glyphs.glyphs[replacementGlyphId] !== void 0) {\n tokens[0].setState(\"glyphIndex\", replacementGlyphId);\n }\n }\n }\n }\n }\n}\nvar variationSequences_default = unicodeVariationSequence;\n\n// src/bidi.mjs\nfunction Bidi(baseDir) {\n this.baseDir = baseDir || \"ltr\";\n this.tokenizer = new tokenizer_default();\n this.featuresTags = {};\n}\nBidi.prototype.setText = function(text) {\n this.text = text;\n};\nBidi.prototype.contextChecks = {\n ccmpReplacementCheck: ccmpReplacement_default,\n latinWordCheck: latinWord_default,\n arabicWordCheck: arabicWord_default,\n arabicSentenceCheck: arabicSentence_default,\n thaiWordCheck: thaiWord_default,\n unicodeVariationSequenceCheck: variationSequenceCheck_default\n};\nfunction registerContextChecker(checkId) {\n const check = this.contextChecks[`${checkId}Check`];\n return this.tokenizer.registerContextChecker(\n checkId,\n check.startCheck,\n check.endCheck\n );\n}\nfunction tokenizeText() {\n registerContextChecker.call(this, \"ccmpReplacement\");\n registerContextChecker.call(this, \"latinWord\");\n registerContextChecker.call(this, \"arabicWord\");\n registerContextChecker.call(this, \"arabicSentence\");\n registerContextChecker.call(this, \"thaiWord\");\n registerContextChecker.call(this, \"unicodeVariationSequence\");\n return this.tokenizer.tokenize(this.text);\n}\nfunction reverseArabicSentences() {\n const ranges = this.tokenizer.getContextRanges(\"arabicSentence\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n let rangeTokens = this.tokenizer.getRangeTokens(range);\n this.tokenizer.replaceRange(\n range.startIndex,\n range.endOffset,\n rangeTokens.reverse()\n );\n }\n}\nBidi.prototype.registerFeatures = function(script, tags) {\n const supportedTags = tags.filter(\n (tag) => this.query.supports({ script, tag })\n );\n if (!Object.prototype.hasOwnProperty.call(this.featuresTags, script)) {\n this.featuresTags[script] = supportedTags;\n } else {\n this.featuresTags[script] = this.featuresTags[script].concat(supportedTags);\n }\n};\nBidi.prototype.applyFeatures = function(font, features) {\n if (!font) throw new Error(\n \"No valid font was provided to apply features\"\n );\n if (!this.query) this.query = new featureQuery_default(font);\n for (let f = 0; f < features.length; f++) {\n const feature = features[f];\n if (!this.query.supports({ script: feature.script })) continue;\n this.registerFeatures(feature.script, feature.tags);\n }\n};\nBidi.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.tokenizer.registerModifier(modifierId, condition, modifier);\n};\nfunction checkGlyphIndexStatus() {\n if (this.tokenizer.registeredModifiers.indexOf(\"glyphIndex\") === -1) {\n throw new Error(\n \"glyphIndex modifier is required to apply arabic presentation features.\"\n );\n }\n}\nfunction applyArabicPresentationForms() {\n const script = \"arab\";\n if (!Object.prototype.hasOwnProperty.call(this.featuresTags, script)) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n arabicPresentationForms_default.call(this, range);\n }\n}\nfunction applyCcmpReplacement() {\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"ccmpReplacement\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n ccmpReplacementLigatures_default.call(this, range);\n }\n}\nfunction applyArabicRequireLigatures() {\n if (!this.hasFeatureEnabled(\"arab\", \"rlig\")) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n arabicRequiredLigatures_default.call(this, range);\n }\n}\nfunction applyLatinLigatures() {\n if (!this.hasFeatureEnabled(\"latn\", \"liga\")) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"latinWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n latinLigatures_default.call(this, range);\n }\n}\nfunction applyUnicodeVariationSequences() {\n const ranges = this.tokenizer.getContextRanges(\"unicodeVariationSequence\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n variationSequences_default.call(this, range);\n }\n}\nfunction applyThaiFeatures() {\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"thaiWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (this.hasFeatureEnabled(\"thai\", \"liga\")) thaiLigatures_default.call(this, range);\n if (this.hasFeatureEnabled(\"thai\", \"rlig\")) thaiRequiredLigatures_default.call(this, range);\n if (this.hasFeatureEnabled(\"thai\", \"ccmp\")) thaiGlyphComposition_default.call(this, range);\n }\n}\nBidi.prototype.checkContextReady = function(contextId) {\n return !!this.tokenizer.getContext(contextId);\n};\nBidi.prototype.applyFeaturesToContexts = function() {\n if (this.checkContextReady(\"ccmpReplacement\")) {\n applyCcmpReplacement.call(this);\n }\n if (this.checkContextReady(\"arabicWord\")) {\n applyArabicPresentationForms.call(this);\n applyArabicRequireLigatures.call(this);\n }\n if (this.checkContextReady(\"latinWord\")) {\n applyLatinLigatures.call(this);\n }\n if (this.checkContextReady(\"arabicSentence\")) {\n reverseArabicSentences.call(this);\n }\n if (this.checkContextReady(\"thaiWord\")) {\n applyThaiFeatures.call(this);\n }\n if (this.checkContextReady(\"unicodeVariationSequence\")) {\n applyUnicodeVariationSequences.call(this);\n }\n};\nBidi.prototype.hasFeatureEnabled = function(script, tag) {\n return (this.featuresTags[script] || []).indexOf(tag) !== -1;\n};\nBidi.prototype.processText = function(text) {\n if (!this.text || this.text !== text) {\n this.setText(text);\n tokenizeText.call(this);\n this.applyFeaturesToContexts();\n }\n};\nBidi.prototype.getBidiText = function(text) {\n this.processText(text);\n return this.tokenizer.getText();\n};\nBidi.prototype.getTextGlyphs = function(text) {\n this.processText(text);\n let indexes = [];\n for (let i = 0; i < this.tokenizer.tokens.length; i++) {\n const token = this.tokenizer.tokens[i];\n if (token.state.deleted) continue;\n const index = token.activeState.value;\n indexes.push(Array.isArray(index) ? index[0] : index);\n }\n return indexes;\n};\nvar bidi_default = Bidi;\n\n// src/font.mjs\nfunction createDefaultNamesInfo(options) {\n return {\n fontFamily: { en: options.familyName || \" \" },\n fontSubfamily: { en: options.styleName || \" \" },\n fullName: { en: options.fullName || options.familyName + \" \" + options.styleName },\n // postScriptName may not contain any whitespace\n postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\\s/g, \"\") },\n designer: { en: options.designer || \" \" },\n designerURL: { en: options.designerURL || \" \" },\n manufacturer: { en: options.manufacturer || \" \" },\n manufacturerURL: { en: options.manufacturerURL || \" \" },\n license: { en: options.license || \" \" },\n licenseURL: { en: options.licenseURL || \" \" },\n version: { en: options.version || \"Version 0.1\" },\n description: { en: options.description || \" \" },\n copyright: { en: options.copyright || \" \" },\n trademark: { en: options.trademark || \" \" }\n };\n}\nfunction Font(options) {\n options = options || {};\n options.tables = options.tables || {};\n if (!options.empty) {\n if (!options.familyName) throw new Error(\"When creating a new Font object, familyName is required.\");\n if (!options.styleName) throw new Error(\"When creating a new Font object, styleName is required.\");\n if (!options.unitsPerEm) throw new Error(\"When creating a new Font object, unitsPerEm is required.\");\n if (!options.ascender) throw new Error(\"When creating a new Font object, ascender is required.\");\n if (options.descender > 0) throw new Error(\"When creating a new Font object, negative descender value is required.\");\n this.names = {};\n this.names.unicode = createDefaultNamesInfo(options);\n this.names.macintosh = createDefaultNamesInfo(options);\n this.names.windows = createDefaultNamesInfo(options);\n this.unitsPerEm = options.unitsPerEm || 1e3;\n this.ascender = options.ascender;\n this.descender = options.descender;\n this.createdTimestamp = options.createdTimestamp;\n this.italicAngle = options.italicAngle || 0;\n this.weightClass = options.weightClass || 0;\n let selection = 0;\n if (options.fsSelection) {\n selection = options.fsSelection;\n } else {\n if (this.italicAngle < 0) {\n selection |= this.fsSelectionValues.ITALIC;\n } else if (this.italicAngle > 0) {\n selection |= this.fsSelectionValues.OBLIQUE;\n }\n if (this.weightClass >= 600) {\n selection |= this.fsSelectionValues.BOLD;\n }\n if (selection === 0) {\n selection = this.fsSelectionValues.REGULAR;\n }\n }\n if (!options.panose || !Array.isArray(options.panose)) {\n options.panose = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n this.tables = Object.assign(options.tables, {\n os2: Object.assign({\n usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,\n usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,\n bFamilyType: options.panose[0] || 0,\n bSerifStyle: options.panose[1] || 0,\n bWeight: options.panose[2] || 0,\n bProportion: options.panose[3] || 0,\n bContrast: options.panose[4] || 0,\n bStrokeVariation: options.panose[5] || 0,\n bArmStyle: options.panose[6] || 0,\n bLetterform: options.panose[7] || 0,\n bMidline: options.panose[8] || 0,\n bXHeight: options.panose[9] || 0,\n fsSelection: selection\n }, options.tables.os2)\n });\n }\n this.supported = true;\n this.glyphs = new glyphset_default.GlyphSet(this, options.glyphs || []);\n this.encoding = new DefaultEncoding(this);\n this.position = new position_default(this);\n this.substitution = new substitution_default(this);\n this.tables = this.tables || {};\n this.tables = new Proxy(this.tables, {\n set: (tables, tableName, tableData) => {\n tables[tableName] = tableData;\n if (tables.fvar && (tables.gvar || tables.cff2) && !this.variation) {\n this.variation = new VariationManager(this);\n }\n return true;\n }\n });\n this.palettes = new PaletteManager(this);\n this.layers = new LayerManager(this);\n this.svgImages = new SVGImageManager(this);\n this._push = null;\n this._hmtxTableData = {};\n Object.defineProperty(this, \"hinting\", {\n get: function() {\n if (this._hinting) return this._hinting;\n if (this.outlinesFormat === \"truetype\") {\n return this._hinting = new hintingtt_default(this);\n }\n return null;\n }\n });\n}\nFont.prototype.hasChar = function(c) {\n return this.encoding.charToGlyphIndex(c) > 0;\n};\nFont.prototype.charToGlyphIndex = function(s) {\n return this.encoding.charToGlyphIndex(s);\n};\nFont.prototype.charToGlyph = function(c) {\n const glyphIndex = this.charToGlyphIndex(c);\n let glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n};\nFont.prototype.updateFeatures = function(options) {\n return this.defaultRenderOptions.features.map((feature) => {\n if (feature.script === \"latn\") {\n return {\n script: \"latn\",\n tags: feature.tags.filter((tag) => options[tag])\n };\n } else {\n return feature;\n }\n });\n};\nFont.prototype.stringToGlyphIndexes = function(s, options) {\n const bidi = new bidi_default();\n const charToGlyphIndexMod = (token) => this.charToGlyphIndex(token.char);\n bidi.registerModifier(\"glyphIndex\", null, charToGlyphIndexMod);\n let features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features;\n bidi.applyFeatures(this, features);\n return bidi.getTextGlyphs(s);\n};\nFont.prototype.stringToGlyphs = function(s, options) {\n const indexes = this.stringToGlyphIndexes(s, options);\n let length = indexes.length;\n const glyphs = new Array(length);\n const notdef = this.glyphs.get(0);\n for (let i = 0; i < length; i += 1) {\n glyphs[i] = this.glyphs.get(indexes[i]) || notdef;\n }\n return glyphs;\n};\nFont.prototype.nameToGlyphIndex = function(name) {\n return this.glyphNames.nameToGlyphIndex(name);\n};\nFont.prototype.nameToGlyph = function(name) {\n const glyphIndex = this.nameToGlyphIndex(name);\n let glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n};\nFont.prototype.glyphIndexToName = function(gid) {\n if (!this.glyphNames.glyphIndexToName) {\n return \"\";\n }\n return this.glyphNames.glyphIndexToName(gid);\n};\nFont.prototype.getKerningValue = function(leftGlyph, rightGlyph) {\n leftGlyph = leftGlyph.index || leftGlyph;\n rightGlyph = rightGlyph.index || rightGlyph;\n const gposKerning = this.position.defaultKerningTables;\n if (gposKerning) {\n return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);\n }\n return this.kerningPairs[leftGlyph + \",\" + rightGlyph] || 0;\n};\nFont.prototype.defaultRenderOptions = {\n kerning: true,\n features: [\n /**\n * these 4 features are required to render Arabic text properly\n * and shouldn't be turned off when rendering arabic text.\n */\n { script: \"arab\", tags: [\"init\", \"medi\", \"fina\", \"rlig\"] },\n { script: \"latn\", tags: [\"liga\", \"rlig\"] },\n { script: \"thai\", tags: [\"liga\", \"rlig\", \"ccmp\"] }\n ],\n hinting: false,\n usePalette: 0,\n drawLayers: true,\n drawSVG: true\n};\nFont.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, this.defaultRenderOptions, options);\n const fontScale = 1 / this.unitsPerEm * fontSize;\n const glyphs = this.stringToGlyphs(text, options);\n let kerningLookups;\n if (options.kerning) {\n const script = options.script || this.position.getDefaultScriptName();\n kerningLookups = this.position.getKerningTables(script, options.language);\n }\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs[i];\n callback.call(this, glyph, x, y, fontSize, options);\n if (glyph.advanceWidth) {\n x += glyph.advanceWidth * fontScale;\n }\n if (options.kerning && i < glyphs.length - 1) {\n const kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]);\n x += kerningValue * fontScale;\n }\n if (options.letterSpacing) {\n x += options.letterSpacing * fontSize;\n } else if (options.tracking) {\n x += options.tracking / 1e3 * fontSize;\n }\n }\n return x;\n};\nFont.prototype.getPath = function(text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n const fullPath = new path_default();\n fullPath._layers = [];\n applyPaintType(this, fullPath, fontSize);\n if (fullPath.stroke) {\n const scale = 1 / (fullPath.unitsPerEm || 1e3) * fontSize;\n fullPath.strokeWidth *= scale;\n }\n this.forEachGlyph(text, x, y, fontSize, options, (glyph, gX, gY, gFontSize) => {\n const glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n if (options.drawSVG || options.drawLayers) {\n const layers = glyphPath._layers;\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l++) {\n const layer = layers[l];\n fullPath._layers.push(layer);\n }\n return;\n }\n }\n fullPath.extend(glyphPath);\n });\n return fullPath;\n};\nFont.prototype.getPaths = function(text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n const glyphPaths = [];\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n const glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n glyphPaths.push(glyphPath);\n });\n return glyphPaths;\n};\nFont.prototype.getAdvanceWidth = function(text, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n return this.forEachGlyph(text, 0, 0, fontSize, options, function() {\n });\n};\nFont.prototype.draw = function(ctx, text, x, y, fontSize, options) {\n const path = this.getPath(text, x, y, fontSize, options);\n path.draw(ctx);\n};\nFont.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawPoints(ctx, gX, gY, gFontSize, options, this);\n });\n};\nFont.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawMetrics(ctx, gX, gY, gFontSize);\n });\n};\nFont.prototype.getEnglishName = function(name) {\n const translations = (this.names.unicode || this.names.macintosh || this.names.windows)[name];\n if (translations) {\n return translations.en;\n }\n};\nFont.prototype.validate = function() {\n const warnings = [];\n const _this = this;\n function assert(predicate, message) {\n if (!predicate) {\n console.warn(`[opentype.js] ${message}`);\n warnings.push(message);\n }\n }\n function assertNamePresent(name) {\n const englishName = _this.getEnglishName(name);\n assert(\n englishName && englishName.trim().length > 0,\n \"No English \" + name + \" specified.\"\n );\n }\n assertNamePresent(\"fontFamily\");\n assertNamePresent(\"weightName\");\n assertNamePresent(\"manufacturer\");\n assertNamePresent(\"copyright\");\n assertNamePresent(\"version\");\n assert(this.unitsPerEm > 0, \"No unitsPerEm specified.\");\n if (this.tables.colr) {\n const baseGlyphs = this.tables.colr.baseGlyphRecords;\n let previousID = -1;\n for (let b = 0; b < baseGlyphs.length; b++) {\n const currentGlyphID = baseGlyphs[b].glyphID;\n assert(previousID < baseGlyphs[b].glyphID, `baseGlyphs must be sorted by GlyphID in ascending order, but glyphID ${currentGlyphID} comes after ${previousID}`);\n if (previousID > baseGlyphs[b].glyphID) {\n break;\n }\n previousID = currentGlyphID;\n }\n }\n return warnings;\n};\nFont.prototype.toTables = function() {\n return sfnt_default.fontToTable(this);\n};\nFont.prototype.toBuffer = function() {\n console.warn(\"Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.\");\n return this.toArrayBuffer();\n};\nFont.prototype.toArrayBuffer = function() {\n const sfntTable = this.toTables();\n const bytes = sfntTable.encode();\n const buffer = new ArrayBuffer(bytes.length);\n const intArray = new Uint8Array(buffer);\n for (let i = 0; i < bytes.length; i++) {\n intArray[i] = bytes[i];\n }\n return buffer;\n};\nFont.prototype.download = function() {\n console.error(\"DEPRECATED: platform-specific actions are to be implemented on user-side\");\n};\nFont.prototype.fsSelectionValues = {\n ITALIC: 1,\n //1\n UNDERSCORE: 2,\n //2\n NEGATIVE: 4,\n //4\n OUTLINED: 8,\n //8\n STRIKEOUT: 16,\n //16\n BOLD: 32,\n //32\n REGULAR: 64,\n //64\n USER_TYPO_METRICS: 128,\n //128\n WWS: 256,\n //256\n OBLIQUE: 512\n //512\n};\nFont.prototype.macStyleValues = {\n BOLD: 1,\n //1\n ITALIC: 2,\n //2\n UNDERLINE: 4,\n //4\n OUTLINED: 8,\n //8\n SHADOW: 16,\n //16\n CONDENSED: 32,\n //32\n EXTENDED: 64\n //64\n};\nFont.prototype.usWidthClasses = {\n ULTRA_CONDENSED: 1,\n EXTRA_CONDENSED: 2,\n CONDENSED: 3,\n SEMI_CONDENSED: 4,\n MEDIUM: 5,\n SEMI_EXPANDED: 6,\n EXPANDED: 7,\n EXTRA_EXPANDED: 8,\n ULTRA_EXPANDED: 9\n};\nFont.prototype.usWeightClasses = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900\n};\nvar font_default = Font;\n\n// src/tables/hvar.mjs\nfunction parseHvarTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported hvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const version = [\n tableVersionMajor,\n tableVersionMinor\n ];\n const itemVariationStore = p.parsePointer32(function() {\n return this.parseItemVariationStore();\n });\n const advanceWidth = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n const lsb = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n const rsb = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n return {\n version,\n itemVariationStore,\n advanceWidth,\n lsb,\n rsb\n };\n}\nfunction makeHvarTable() {\n console.warn(\"Writing of hvar tables is not yet supported.\");\n}\nvar hvar_default = { make: makeHvarTable, parse: parseHvarTable };\n\n// src/tables/gdef.mjs\nvar attachList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n attachPoints: this.parseList(Parser.pointer(Parser.uShortList))\n };\n};\nvar caretValue = function() {\n var format = this.parseUShort();\n check_default.argument(\n format === 1 || format === 2 || format === 3,\n \"Unsupported CaretValue table version.\"\n );\n if (format === 1) {\n return { coordinate: this.parseShort() };\n } else if (format === 2) {\n return { pointindex: this.parseShort() };\n } else if (format === 3) {\n return { coordinate: this.parseShort() };\n }\n};\nvar ligGlyph = function() {\n return this.parseList(Parser.pointer(caretValue));\n};\nvar ligCaretList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n ligGlyphs: this.parseList(Parser.pointer(ligGlyph))\n };\n};\nvar markGlyphSets = function() {\n this.parseUShort();\n return this.parseList(Parser.pointer(Parser.coverage));\n};\nfunction parseGDEFTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(\n tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,\n \"Unsupported GDEF table version.\"\n );\n var gdef = {\n version: tableVersion,\n classDef: p.parsePointer(Parser.classDef),\n attachList: p.parsePointer(attachList),\n ligCaretList: p.parsePointer(ligCaretList),\n markAttachClassDef: p.parsePointer(Parser.classDef)\n };\n if (tableVersion >= 1.2) {\n gdef.markGlyphSets = p.parsePointer(markGlyphSets);\n }\n return gdef;\n}\nvar gdef_default = { parse: parseGDEFTable };\n\n// src/tables/gpos.mjs\nvar subtableParsers2 = new Array(10);\nsubtableParsers2[1] = function parseLookup12() {\n const start = this.offset + this.relativeOffset;\n const posformat = this.parseUShort();\n if (posformat === 1) {\n return {\n posFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n value: this.parseValueRecord()\n };\n } else if (posformat === 2) {\n return {\n posFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n values: this.parseValueRecordList()\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": GPOS lookup type 1 format must be 1 or 2.\");\n};\nsubtableParsers2[2] = function parseLookup22() {\n const start = this.offset + this.relativeOffset;\n const posFormat = this.parseUShort();\n check_default.assert(posFormat === 1 || posFormat === 2, \"0x\" + start.toString(16) + \": GPOS lookup type 2 format must be 1 or 2.\");\n const coverage = this.parsePointer(Parser.coverage);\n const valueFormat1 = this.parseUShort();\n const valueFormat2 = this.parseUShort();\n if (posFormat === 1) {\n return {\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n pairSets: this.parseList(Parser.pointer(Parser.list(function() {\n return {\n // pairValueRecord\n secondGlyph: this.parseUShort(),\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n })))\n };\n } else if (posFormat === 2) {\n const classDef1 = this.parsePointer(Parser.classDef);\n const classDef2 = this.parsePointer(Parser.classDef);\n const class1Count = this.parseUShort();\n const class2Count = this.parseUShort();\n return {\n // Class Pair Adjustment\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n classDef1,\n classDef2,\n class1Count,\n class2Count,\n classRecords: this.parseList(class1Count, Parser.list(class2Count, function() {\n return {\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n }))\n };\n }\n};\nsubtableParsers2[3] = function parseLookup32() {\n return { error: \"GPOS Lookup 3 not supported\" };\n};\nsubtableParsers2[4] = function parseLookup42() {\n return { error: \"GPOS Lookup 4 not supported\" };\n};\nsubtableParsers2[5] = function parseLookup52() {\n return { error: \"GPOS Lookup 5 not supported\" };\n};\nsubtableParsers2[6] = function parseLookup62() {\n return { error: \"GPOS Lookup 6 not supported\" };\n};\nsubtableParsers2[7] = function parseLookup72() {\n return { error: \"GPOS Lookup 7 not supported\" };\n};\nsubtableParsers2[8] = function parseLookup82() {\n return { error: \"GPOS Lookup 8 not supported\" };\n};\nsubtableParsers2[9] = function parseLookup9() {\n return { error: \"GPOS Lookup 9 not supported\" };\n};\nfunction parseGposTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GPOS table version \" + tableVersion);\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers2)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers2),\n variations: p.parseFeatureVariationsList()\n };\n }\n}\nvar subtableMakers2 = new Array(10);\nfunction makeGposTable(gpos) {\n return new table_default.Table(\"GPOS\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table_default.ScriptList(gpos.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table_default.FeatureList(gpos.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table_default.LookupList(gpos.lookups, subtableMakers2) }\n ]);\n}\nvar gpos_default = { parse: parseGposTable, make: makeGposTable };\n\n// src/tables/kern.mjs\nfunction parseWindowsKernTable(p) {\n const pairs = {};\n p.skip(\"uShort\");\n const subtableVersion = p.parseUShort();\n check_default.argument(subtableVersion === 0, \"Unsupported kern sub-table version.\");\n p.skip(\"uShort\", 2);\n const nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (let i = 0; i < nPairs; i += 1) {\n const leftIndex = p.parseUShort();\n const rightIndex = p.parseUShort();\n const value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n return pairs;\n}\nfunction parseMacKernTable(p) {\n const pairs = {};\n p.skip(\"uShort\");\n const nTables = p.parseULong();\n if (nTables > 1) {\n console.warn(\"Only the first kern subtable is supported.\");\n }\n p.skip(\"uLong\");\n const coverage = p.parseUShort();\n const subtableVersion = coverage & 255;\n p.skip(\"uShort\");\n if (subtableVersion === 0) {\n const nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (let i = 0; i < nPairs; i += 1) {\n const leftIndex = p.parseUShort();\n const rightIndex = p.parseUShort();\n const value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n }\n return pairs;\n}\nfunction parseKernTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseUShort();\n if (tableVersion === 0) {\n return parseWindowsKernTable(p);\n } else if (tableVersion === 1) {\n return parseMacKernTable(p);\n } else {\n throw new Error(\"Unsupported kern table version (\" + tableVersion + \").\");\n }\n}\nvar kern_default = { parse: parseKernTable };\n\n// src/tables/loca.mjs\nfunction parseLocaTable(data, start, numGlyphs, shortVersion) {\n const p = new parse_default.Parser(data, start);\n const parseFn = shortVersion ? p.parseUShort : p.parseULong;\n const glyphOffsets = [];\n for (let i = 0; i < numGlyphs + 1; i += 1) {\n let glyphOffset = parseFn.call(p);\n if (shortVersion) {\n glyphOffset *= 2;\n }\n glyphOffsets.push(glyphOffset);\n }\n return glyphOffsets;\n}\nvar loca_default = { parse: parseLocaTable };\n\n// src/opentype.mjs\nfunction parseOpenTypeTableEntries(data, numTables) {\n const tableEntries = [];\n let p = 12;\n for (let i = 0; i < numTables; i += 1) {\n const tag = parse_default.getTag(data, p);\n const checksum = parse_default.getULong(data, p + 4);\n const offset = parse_default.getULong(data, p + 8);\n const length = parse_default.getULong(data, p + 12);\n tableEntries.push({ tag, checksum, offset, length, compression: false });\n p += 16;\n }\n return tableEntries;\n}\nfunction parseWOFFTableEntries(data, numTables) {\n const tableEntries = [];\n let p = 44;\n for (let i = 0; i < numTables; i += 1) {\n const tag = parse_default.getTag(data, p);\n const offset = parse_default.getULong(data, p + 4);\n const compLength = parse_default.getULong(data, p + 8);\n const origLength = parse_default.getULong(data, p + 12);\n let compression;\n if (compLength < origLength) {\n compression = \"WOFF\";\n } else {\n compression = false;\n }\n tableEntries.push({\n tag,\n offset,\n compression,\n compressedLength: compLength,\n length: origLength\n });\n p += 20;\n }\n return tableEntries;\n}\nfunction uncompressTable(data, tableEntry) {\n if (tableEntry.compression === \"WOFF\") {\n const inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2);\n const outBuffer = new Uint8Array(tableEntry.length);\n tinf_uncompress(inBuffer, outBuffer);\n if (outBuffer.byteLength !== tableEntry.length) {\n throw new Error(\"Decompression error: \" + tableEntry.tag + \" decompressed length doesn't match recorded length\");\n }\n const view = new DataView(outBuffer.buffer, 0);\n return { data: view, offset: 0 };\n } else {\n return { data, offset: tableEntry.offset };\n }\n}\nfunction parseBuffer(buffer, opt = {}) {\n let indexToLocFormat;\n let ltagTable;\n const font = new font_default({ empty: true });\n if (buffer.constructor !== ArrayBuffer) {\n buffer = new Uint8Array(buffer).buffer;\n }\n const data = new DataView(buffer, 0);\n let numTables;\n let tableEntries = [];\n const signature = parse_default.getTag(data, 0);\n if (signature === String.fromCharCode(0, 1, 0, 0) || signature === \"true\" || signature === \"typ1\") {\n font.outlinesFormat = \"truetype\";\n numTables = parse_default.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n numTables = parse_default.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"wOFF\") {\n const flavor = parse_default.getTag(data, 4);\n if (flavor === String.fromCharCode(0, 1, 0, 0)) {\n font.outlinesFormat = \"truetype\";\n } else if (flavor === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n } else {\n throw new Error(\"Unsupported OpenType flavor \" + signature);\n }\n numTables = parse_default.getUShort(data, 12);\n tableEntries = parseWOFFTableEntries(data, numTables);\n } else if (signature === \"wOF2\") {\n const issue = \"https://github.com/opentypejs/opentype.js/issues/183#issuecomment-1147228025\";\n throw new Error(\"WOFF2 require an external decompressor library, see examples at: \" + issue);\n } else {\n throw new Error(\"Unsupported OpenType signature \" + signature);\n }\n let cffTableEntry;\n let cff2TableEntry;\n let fvarTableEntry;\n let statTableEntry;\n let gvarTableEntry;\n let cvarTableEntry;\n let avarTableEntry;\n let glyfTableEntry;\n let gdefTableEntry;\n let gposTableEntry;\n let gsubTableEntry;\n let hmtxTableEntry;\n let hvarTableEntry;\n let kernTableEntry;\n let locaTableEntry;\n let nameTableEntry;\n let metaTableEntry;\n let p;\n for (let i = 0; i < numTables; i += 1) {\n const tableEntry = tableEntries[i];\n let table;\n switch (tableEntry.tag) {\n case \"avar\":\n avarTableEntry = tableEntry;\n break;\n case \"cmap\":\n table = uncompressTable(data, tableEntry);\n font.tables.cmap = cmap_default.parse(table.data, table.offset);\n font.encoding = new CmapEncoding(font.tables.cmap);\n break;\n case \"cvt \":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.cvt = p.parseShortList(tableEntry.length / 2);\n break;\n case \"fvar\":\n fvarTableEntry = tableEntry;\n break;\n case \"STAT\":\n statTableEntry = tableEntry;\n break;\n case \"gvar\":\n gvarTableEntry = tableEntry;\n break;\n case \"cvar\":\n cvarTableEntry = tableEntry;\n break;\n case \"fpgm\":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.fpgm = p.parseByteList(tableEntry.length);\n break;\n case \"head\":\n table = uncompressTable(data, tableEntry);\n font.tables.head = head_default.parse(table.data, table.offset);\n font.unitsPerEm = font.tables.head.unitsPerEm;\n indexToLocFormat = font.tables.head.indexToLocFormat;\n break;\n case \"hhea\":\n table = uncompressTable(data, tableEntry);\n font.tables.hhea = hhea_default.parse(table.data, table.offset);\n font.ascender = font.tables.hhea.ascender;\n font.descender = font.tables.hhea.descender;\n font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;\n break;\n case \"HVAR\":\n hvarTableEntry = tableEntry;\n break;\n case \"hmtx\":\n hmtxTableEntry = tableEntry;\n break;\n case \"ltag\":\n table = uncompressTable(data, tableEntry);\n ltagTable = ltag_default.parse(table.data, table.offset);\n break;\n case \"COLR\":\n table = uncompressTable(data, tableEntry);\n font.tables.colr = colr_default.parse(table.data, table.offset);\n break;\n case \"CPAL\":\n table = uncompressTable(data, tableEntry);\n font.tables.cpal = cpal_default.parse(table.data, table.offset);\n break;\n case \"maxp\":\n table = uncompressTable(data, tableEntry);\n font.tables.maxp = maxp_default.parse(table.data, table.offset);\n font.numGlyphs = font.tables.maxp.numGlyphs;\n break;\n case \"name\":\n nameTableEntry = tableEntry;\n break;\n case \"OS/2\":\n table = uncompressTable(data, tableEntry);\n font.tables.os2 = os2_default.parse(table.data, table.offset);\n break;\n case \"post\":\n table = uncompressTable(data, tableEntry);\n font.tables.post = post_default.parse(table.data, table.offset);\n font.glyphNames = new GlyphNames(font.tables.post);\n break;\n case \"prep\":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.prep = p.parseByteList(tableEntry.length);\n break;\n case \"glyf\":\n glyfTableEntry = tableEntry;\n break;\n case \"loca\":\n locaTableEntry = tableEntry;\n break;\n case \"CFF \":\n cffTableEntry = tableEntry;\n break;\n case \"CFF2\":\n cff2TableEntry = tableEntry;\n break;\n case \"kern\":\n kernTableEntry = tableEntry;\n break;\n case \"GDEF\":\n gdefTableEntry = tableEntry;\n break;\n case \"GPOS\":\n gposTableEntry = tableEntry;\n break;\n case \"GSUB\":\n gsubTableEntry = tableEntry;\n break;\n case \"meta\":\n metaTableEntry = tableEntry;\n break;\n case \"gasp\":\n try {\n table = uncompressTable(data, tableEntry);\n font.tables.gasp = gasp_default.parse(table.data, table.offset);\n } catch (e) {\n console.warn(\"Failed to parse gasp table, skipping.\");\n console.warn(e);\n }\n break;\n case \"SVG \":\n table = uncompressTable(data, tableEntry);\n font.tables.svg = svg_default.parse(table.data, table.offset);\n break;\n default:\n break;\n }\n }\n const nameTable = uncompressTable(data, nameTableEntry);\n font.tables.name = name_default.parse(nameTable.data, nameTable.offset, ltagTable);\n font.names = font.tables.name;\n if (glyfTableEntry && locaTableEntry) {\n const shortVersion = indexToLocFormat === 0;\n const locaTable = uncompressTable(data, locaTableEntry);\n const locaOffsets = loca_default.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion);\n const glyfTable = uncompressTable(data, glyfTableEntry);\n font.glyphs = glyf_default.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt);\n } else if (cffTableEntry) {\n const cffTable = uncompressTable(data, cffTableEntry);\n cff_default.parse(cffTable.data, cffTable.offset, font, opt);\n } else if (cff2TableEntry) {\n const cffTable2 = uncompressTable(data, cff2TableEntry);\n cff_default.parse(cffTable2.data, cffTable2.offset, font, opt);\n } else {\n throw new Error(\"Font doesn't contain TrueType, CFF or CFF2 outlines.\");\n }\n const hmtxTable = uncompressTable(data, hmtxTableEntry);\n hmtx_default.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt);\n addGlyphNames(font, opt);\n if (kernTableEntry) {\n const kernTable = uncompressTable(data, kernTableEntry);\n font.kerningPairs = kern_default.parse(kernTable.data, kernTable.offset);\n } else {\n font.kerningPairs = {};\n }\n if (gdefTableEntry) {\n const gdefTable = uncompressTable(data, gdefTableEntry);\n font.tables.gdef = gdef_default.parse(gdefTable.data, gdefTable.offset);\n }\n if (gposTableEntry) {\n const gposTable = uncompressTable(data, gposTableEntry);\n font.tables.gpos = gpos_default.parse(gposTable.data, gposTable.offset);\n font.position.init();\n }\n if (gsubTableEntry) {\n const gsubTable = uncompressTable(data, gsubTableEntry);\n font.tables.gsub = gsub_default.parse(gsubTable.data, gsubTable.offset);\n }\n if (fvarTableEntry) {\n const fvarTable = uncompressTable(data, fvarTableEntry);\n font.tables.fvar = fvar_default.parse(fvarTable.data, fvarTable.offset, font.names);\n }\n if (statTableEntry) {\n const statTable = uncompressTable(data, statTableEntry);\n font.tables.stat = stat_default.parse(statTable.data, statTable.offset, font.tables.fvar);\n }\n if (gvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides a gvar table, but no fvar table, which is required for variable fonts.\");\n }\n if (!glyfTableEntry) {\n console.warn(\"This font provides a gvar table, but no glyf table. Glyph variation only works with TrueType outlines.\");\n }\n const gvarTable = uncompressTable(data, gvarTableEntry);\n font.tables.gvar = gvar_default.parse(gvarTable.data, gvarTable.offset, font.tables.fvar, font.glyphs);\n }\n if (cvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides a cvar table, but no fvar table, which is required for variable fonts.\");\n }\n if (!font.tables.cvt) {\n console.warn(\"This font provides a cvar table, but no cvt table which could be made variable.\");\n }\n if (!glyfTableEntry) {\n console.warn(\"This font provides a gvar table, but no glyf table. Glyph variation only works with TrueType outlines.\");\n }\n const cvarTable = uncompressTable(data, cvarTableEntry);\n font.tables.cvar = cvar_default.parse(cvarTable.data, cvarTable.offset, font.tables.fvar, font.tables.cvt || []);\n }\n if (avarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides an avar table, but no fvar table, which is required for variable fonts.\");\n }\n const avarTable = uncompressTable(data, avarTableEntry);\n font.tables.avar = avar_default.parse(avarTable.data, avarTable.offset, font.tables.fvar);\n }\n if (hvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides an HVAR table, but no fvar table, which is required for variable fonts.\");\n }\n if (!hmtxTableEntry) {\n console.warn(\"This font provides an HVAR table, but no hmtx table to vary.\");\n }\n const hvarTable = uncompressTable(data, hvarTableEntry);\n font.tables.hvar = hvar_default.parse(hvarTable.data, hvarTable.offset, font.tables.fvar);\n }\n if (metaTableEntry) {\n const metaTable = uncompressTable(data, metaTableEntry);\n font.tables.meta = meta_default.parse(metaTable.data, metaTable.offset);\n font.metas = font.tables.meta;\n }\n font.palettes = new PaletteManager(font);\n return font;\n}\nfunction load() {\n console.error(\"DEPRECATED! migrate to: opentype.parse(buffer, opt) See: https://github.com/opentypejs/opentype.js/issues/675\");\n}\nfunction loadSync() {\n console.error('DEPRECATED! migrate to: opentype.parse(require(\"fs\").readFileSync(url), opt)');\n}\nexport {\n bbox_default as BoundingBox,\n font_default as Font,\n glyph_default as Glyph,\n path_default as Path,\n parse_default as _parse,\n load,\n loadSync,\n parseBuffer as parse\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { parse } from 'opentype.js';\nimport type { Font as OpentypeFont } from 'opentype.js';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useResolvedTheme } from '../../ThemeContext';\nimport { RendererError } from '../RendererError';\n\n// 字体文件魔数:用首 4 字节判断格式,比扩展名更可靠\nconst MAGIC_WOFF2 = 0x774f4632; // 'wOF2'\nconst MAGIC_WOFF = 0x774f4646; // 'wOFF'\nconst MAGIC_OTTO = 0x4f54544f; // 'OTTO' (OTF/CFF)\nconst MAGIC_TTF1 = 0x00010000; // TTF\nconst MAGIC_TRUE = 0x74727565; // 'true' (TTF on macOS)\n\ntype DetectedFormat = 'woff2' | 'woff' | 'otf' | 'ttf' | 'unknown';\n\nconst detectMagic = (buf: ArrayBuffer): DetectedFormat => {\n if (buf.byteLength < 4) return 'unknown';\n const m = new DataView(buf).getUint32(0);\n if (m === MAGIC_WOFF2) return 'woff2';\n if (m === MAGIC_WOFF) return 'woff';\n if (m === MAGIC_OTTO) return 'otf';\n if (m === MAGIC_TTF1 || m === MAGIC_TRUE) return 'ttf';\n return 'unknown';\n};\n\nexport interface FontRendererProps {\n url: string;\n}\n\ninterface FontMetadata {\n family: string;\n subfamily: string;\n version: string;\n designer: string;\n glyphCount: number;\n format: string;\n}\n\nconst DEFAULT_SAMPLES = {\n latin: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ\\nabcdefghijklmnopqrstuvwxyz\\n0123456789 .,;:!?@#$%&*()[]{}',\n chinese: '春夏秋冬东南西北天地人和风雨雷电山水日月',\n mixed: 'The Quick Brown Fox Jumps Over The Lazy Dog\\n敏捷的棕色狐狸跳过了懒狗',\n};\n\nconst SIZES = [72, 48, 36, 24, 18];\n\n// 渲染模式:FontFace 用原生字体渲染,Canvas 用 opentype.js 软渲染(兼容浏览器拒绝的字体)\ntype RenderMode = 'fontface' | 'canvas';\n\n// 元数据状态:loading(解析中)/ ready(成功)/ unavailable(不支持解析或解析失败)\ntype MetadataStatus = 'loading' | 'ready' | 'unavailable';\n\nexport const FontRenderer: React.FC<FontRendererProps> = ({ url }) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const resolvedTheme = useResolvedTheme();\n const [font, setFont] = useState<OpentypeFont | null>(null);\n const [metadata, setMetadata] = useState<FontMetadata | null>(null);\n const [metadataStatus, setMetadataStatus] = useState<MetadataStatus>('loading');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [customText, setCustomText] = useState('');\n const [renderMode, setRenderMode] = useState<RenderMode>('fontface');\n const fontFaceRef = useRef<FontFace | null>(null);\n\n useEffect(() => {\n if (!url) return;\n\n let mounted = true;\n\n const detectFormat = (url: string): string => {\n const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n const formatMap: Record<string, string> = {\n ttf: 'TrueType (TTF)',\n otf: 'OpenType (OTF)',\n woff: 'Web Open Font Format (WOFF)',\n woff2: 'Web Open Font Format 2 (WOFF2)',\n };\n return formatMap[ext] || 'TTF';\n };\n\n const formatLabel = (magic: DetectedFormat, url: string): string => {\n const labels: Record<DetectedFormat, string | null> = {\n woff2: 'Web Open Font Format 2 (WOFF2)',\n woff: 'Web Open Font Format (WOFF)',\n otf: 'OpenType (OTF)',\n ttf: 'TrueType (TTF)',\n unknown: null,\n };\n return labels[magic] ?? detectFormat(url);\n };\n\n // 任务 A:FontFace 原生加载(浏览器对 WOFF2 原生支持,无需 wawoff2 解压)\n const loadFontFace = async (faceBuffer: ArrayBuffer): Promise<void> => {\n try {\n const face = new FontFace('PreviewFont', faceBuffer);\n await face.load();\n if (!mounted) return;\n document.fonts.add(face);\n fontFaceRef.current = face;\n setRenderMode('fontface');\n } catch (faceErr) {\n console.warn('[FontRenderer] FontFace API rejected, fallback to Canvas:', faceErr);\n if (!mounted) return;\n setRenderMode('canvas');\n throw faceErr;\n }\n };\n\n // 任务 B:opentype 元数据解析。WOFF2 由浏览器原生渲染即可,不解析元数据\n // (opentype.js 不支持 Brotli;独立解压链路引入 emscripten wasm 与挂死风险,代价过大)\n const loadMetadata = async (\n arrayBuffer: ArrayBuffer,\n magic: DetectedFormat,\n ): Promise<void> => {\n if (magic === 'woff2') {\n // 直接标记为不可用,但保留 format 信息\n throw new Error('WOFF2 metadata parsing intentionally skipped');\n }\n\n const fontData = parse(arrayBuffer) as unknown as OpentypeFont;\n if (!fontData) {\n throw new Error('Font data is invalid');\n }\n\n // opentype.js 2.x 的 names 嵌在 platform 表下,优先 windows / macintosh / unicode,再回退 1.x 平铺\n const rawNames = (fontData.names || {}) as unknown as Record<string, unknown>;\n const platformTables = ['windows', 'macintosh', 'unicode']\n .map((k) => rawNames[k])\n .filter((t): t is Record<string, { en?: string; 'zh-Hans'?: string }> => !!t && typeof t === 'object');\n const pickName = (key: string): string => {\n for (const table of platformTables) {\n const entry = table[key];\n const val = entry?.en || entry?.['zh-Hans'];\n if (val) return val;\n }\n const flat = rawNames[key] as { en?: string; 'zh-Hans'?: string } | undefined;\n return flat?.en || flat?.['zh-Hans'] || '';\n };\n\n const meta: FontMetadata = {\n family: pickName('fontFamily') || pickName('postScriptName') || 'Unknown',\n subfamily: pickName('fontSubfamily'),\n version: pickName('version'),\n designer: pickName('designer'),\n glyphCount: fontData.numGlyphs || 0,\n format: formatLabel(magic, url),\n };\n\n if (!mounted) return;\n setFont(fontData);\n setMetadata(meta);\n setMetadataStatus('ready');\n };\n\n const run = async () => {\n try {\n setLoading(true);\n setError(null);\n setMetadataStatus('loading');\n\n const response = await fetcher(url);\n if (!response.ok) {\n throw new Error('Failed to load font file');\n }\n const arrayBuffer = await response.arrayBuffer();\n if (!mounted) return;\n\n const faceBuffer = arrayBuffer.slice(0);\n const magic = detectMagic(arrayBuffer);\n\n // 并行启动 FontFace 与 opentype 解析\n const facePromise = loadFontFace(faceBuffer);\n const metadataPromise = loadMetadata(arrayBuffer, magic);\n\n await facePromise.catch(() => {\n // FontFace 失败由 metadata 兜底\n });\n if (!mounted) return;\n setLoading(false);\n\n try {\n await metadataPromise;\n } catch (metaErr) {\n if (!mounted) return;\n // WOFF2 是“按设计跳过”,其他格式失败才需要 warn\n if (magic !== 'woff2') {\n console.warn(\n '[FontRenderer] Metadata parse failed, font is still rendered via FontFace:',\n metaErr instanceof Error ? metaErr.message : String(metaErr),\n );\n }\n setMetadataStatus('unavailable');\n setMetadata({\n family: 'Unknown',\n subfamily: '',\n version: '',\n designer: '',\n glyphCount: 0,\n format: formatLabel(magic, url),\n });\n }\n } catch (err) {\n if (!mounted) return;\n console.warn(\n '[FontRenderer] Failed to load font:',\n err instanceof Error ? err.message : String(err),\n );\n setError(t('font.load_failed'));\n setLoading(false);\n setMetadataStatus('unavailable');\n }\n };\n\n run();\n\n return () => {\n mounted = false;\n if (fontFaceRef.current) {\n document.fonts.delete(fontFaceRef.current);\n fontFaceRef.current = null;\n }\n };\n }, [url, fetcher, t]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-fg-secondary\">{t('font.loading')}</div>\n </div>\n );\n }\n\n if (error || !metadata) {\n return <RendererError message={error || t('font.parse_failed')} />;\n }\n\n const displayText = customText || DEFAULT_SAMPLES.mixed;\n const metadataLoadingLabel = t('font.metadata_loading');\n const metadataUnavailableLabel = t('font.metadata_unavailable');\n const showMetaPlaceholder = metadataStatus !== 'ready';\n const metaPlaceholder = metadataStatus === 'loading' ? metadataLoadingLabel : metadataUnavailableLabel;\n // Canvas 模式必须有 font 才能绘制;没有 font(如 WOFF2 跳过解析)只能保留 FontFace 路径\n const canRenderCanvas = renderMode === 'canvas' && !!font;\n\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-w-full rfp-h-full rfp-overflow-hidden rfp-min-w-0\">\n {/* 元数据区 */}\n <div className=\"rfp-flex-shrink-0 rfp-px-6 rfp-py-4 rfp-bg-surface-1 rfp-border-b rfp-border-line-weak rfp-min-w-0\">\n <div className=\"rfp-grid rfp-grid-cols-2 rfp-gap-x-6 rfp-gap-y-2 rfp-text-sm rfp-min-w-0\">\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.family')}:</span>\n <span className=\"rfp-text-fg-primary rfp-font-semibold rfp-truncate\">\n {showMetaPlaceholder ? metaPlaceholder : metadata.family}\n </span>\n </div>\n {metadata.subfamily && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.subfamily')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.subfamily}</span>\n </div>\n )}\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.format')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.format}</span>\n </div>\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.glyphs')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">\n {showMetaPlaceholder ? metaPlaceholder : metadata.glyphCount}\n </span>\n </div>\n {metadata.designer && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.designer')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.designer}</span>\n </div>\n )}\n {metadata.version && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.version')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.version}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* 预览区 */}\n <div className=\"rfp-flex-1 rfp-overflow-auto rfp-min-w-0\">\n <div className=\"rfp-px-6 rfp-py-6 rfp-space-y-8 rfp-min-w-0\">\n {/* 自定义输入框 */}\n <div className=\"rfp-min-w-0\">\n <label className=\"rfp-block rfp-text-xs rfp-text-fg-tertiary rfp-mb-2\">\n {t('font.sample_text_placeholder')}\n </label>\n <textarea\n className=\"rfp-block rfp-w-full rfp-box-border rfp-px-3 rfp-py-2.5 rfp-bg-surface-2 rfp-text-fg-primary rfp-text-sm rfp-leading-relaxed rfp-border rfp-border-line rfp-rounded-md rfp-resize-y focus:rfp-outline-none focus:rfp-border-line-strong\"\n rows={2}\n placeholder={t('font.sample_text_placeholder')}\n value={customText}\n onChange={(e) => setCustomText(e.target.value)}\n style={{ minHeight: '64px', maxHeight: '160px' }}\n />\n </div>\n\n {/* 多字号展示 */}\n <div className=\"rfp-space-y-6 rfp-min-w-0\">\n {SIZES.map((size) => (\n <div key={size} className=\"rfp-space-y-2 rfp-min-w-0\">\n <div className=\"rfp-text-xs rfp-text-fg-tertiary\">{size}px</div>\n <FontPreviewLine\n font={font}\n text={displayText}\n fontSize={size}\n renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n theme={resolvedTheme}\n />\n </div>\n ))}\n </div>\n\n {/* 字符集样例 */}\n <div className=\"rfp-space-y-6 rfp-pt-6 rfp-border-t rfp-border-line-weak rfp-min-w-0\">\n <div className=\"rfp-min-w-0\">\n <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Latin Alphabet</div>\n <FontPreviewLine\n font={font}\n text={DEFAULT_SAMPLES.latin}\n fontSize={24}\n renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n theme={resolvedTheme}\n />\n </div>\n\n <div className=\"rfp-min-w-0\">\n <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Chinese Characters</div>\n <FontPreviewLine\n font={font}\n text={DEFAULT_SAMPLES.chinese}\n fontSize={24}\n renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n theme={resolvedTheme}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\ninterface FontPreviewLineProps {\n font: OpentypeFont | null;\n text: string;\n fontSize: number;\n renderMode: RenderMode;\n theme: 'dark' | 'light';\n}\n\nconst FontPreviewLine: React.FC<FontPreviewLineProps> = ({ font, text, fontSize, renderMode, theme }) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const drawCanvas = useCallback(() => {\n const wrapper = wrapperRef.current;\n const canvas = canvasRef.current;\n if (!wrapper || !canvas || renderMode !== 'canvas' || !font) return;\n\n const containerWidth = wrapper.clientWidth || 600;\n const dpr = window.devicePixelRatio || 1;\n const lineHeight = fontSize * 1.4;\n const fillColor = theme === 'light' ? '#1f2937' : '#f3f4f6';\n\n const wrapLine = (line: string): string[] => {\n if (!line) return [''];\n const result: string[] = [];\n let buf = '';\n for (const ch of Array.from(line)) {\n const next = buf + ch;\n const w = font.getAdvanceWidth(next, fontSize);\n if (w > containerWidth && buf) {\n result.push(buf);\n buf = ch;\n } else {\n buf = next;\n }\n }\n if (buf) result.push(buf);\n return result;\n };\n\n const wrappedLines: string[] = [];\n text.split('\\n').forEach((seg) => {\n wrapLine(seg).forEach((l) => wrappedLines.push(l));\n });\n\n const width = containerWidth;\n const height = lineHeight * wrappedLines.length + 4;\n\n canvas.width = Math.max(1, Math.floor(width * dpr));\n canvas.height = Math.max(1, Math.floor(height * dpr));\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n wrappedLines.forEach((line, idx) => {\n const path = font.getPath(line, 0, fontSize + idx * lineHeight, fontSize);\n path.fill = fillColor;\n path.draw(ctx);\n });\n }, [font, text, fontSize, renderMode, theme]);\n\n useEffect(() => {\n if (renderMode !== 'canvas') return;\n drawCanvas();\n const wrapper = wrapperRef.current;\n if (!wrapper || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => drawCanvas());\n observer.observe(wrapper);\n return () => observer.disconnect();\n }, [drawCanvas, renderMode]);\n\n if (renderMode === 'canvas') {\n return (\n <div ref={wrapperRef} className=\"rfp-w-full\">\n <canvas ref={canvasRef} className=\"rfp-block\" />\n </div>\n );\n }\n\n return (\n <div\n ref={wrapperRef}\n className=\"rfp-w-full rfp-text-fg-primary rfp-whitespace-pre-wrap rfp-break-words\"\n style={{\n fontFamily: 'PreviewFont, sans-serif',\n fontSize: `${fontSize}px`,\n lineHeight: 1.4,\n }}\n >\n {text}\n </div>\n );\n};\n"],"names":["TINF_OK","TINF_DATA_ERROR","Tree","Data","source","dest","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","bits","base","delta","first","i","sum","tinf_build_fixed_trees","lt","dt","offs","tinf_build_tree","t","lengths2","off","num","tinf_getbit","d","bit","tinf_read_bits","val","tinf_decode_symbol","cur","len","tag","tinf_decode_trees","hlit","hdist","hclen","length","clen","sym","prev","tinf_inflate_block_data","dist","offs2","tinf_inflate_uncompressed_block","invlength","tinf_uncompress","bfinal","btype","res","derive","v0","v1","v2","v3","BoundingBox","x","y","x0","y0","x1","y1","x2","y2","p0","p1","p2","p3","b","a","c","b2ac","t1","t2","cp1x","cp1y","cp2x","cp2y","bbox_default","Path","decimalRoundingCache","roundDecimal","float","places","integerPart","decimalPart","roundedDecimalPart2","roundedDecimalPart","optimizeCommands","commands","subpaths","startX","startY","subpath","cmd","firstCommand","secondCommand","previousCommand","nextCommand","createSVGParsingOptions","options","createSVGOutputOptions","pathData","number","supportedCommands","unsupportedCommands","sign","command","buffer","isUnexpected","parseBuffer2","buffer2","makeRelative","lastCommand","applyCommand","commandType","relative","parsedBuffer","currentX","currentY","offset","prop","token","lastBuffer","flipY","flipYBase","boundingBox","path","pathOrCommands","box","prevX","prevY","ctx","layers","l","image","floatToString","v","rounded","packValues","s","commandsCopy","tempPath","svg","newPath","path_default","fail","message","argument","predicate","check_default","LIMIT16","LIMIT32","MIN_16_16","MAX_16_16","decode","encode","sizeOf","constant","fixedValue","value","m","epsilon","nibbles","ii","out","data","numBytes","codePoints","numChars","j","codepoint","eightBitMacEncodings","dataView","dataLength","encoding","table","result","macEncodingTableCache","macEncodingCacheKeys","getMacEncodingTable","e","cacheKey","cachedTable","decodingTable","encodingTable","str","isByteEncodable","encodeVarDeltaRunAsZeroes","deltas","pos","runLength","numDeltas","encodeVarDeltaRunAsBytes","encodeVarDeltaRunAsWords","offsets","encodedOffsets","offSize","offsetEncoder","encodedOffset","keys","k","enc1","enc2","type","wmm","ops","cachedValue","op","encodingFunction","sizeOfFunction","subtables","subtableOffsets","field","bytes","Table","tableName","fields","optionKeys","ushortList","itemName","list","count","tableList","records","itemCallback","recordList","Coverage","coverageTable","RangeRecord","ScriptList","scriptListTable","scriptRecord","script","defaultLangSys","langSysRecord","i2","langSys","FeatureList","featureListTable","featureRecord","feature","LookupList","lookupListTable","subtableMakers3","lookupTable","subtableCallback","ClassDef","classDefTable","table_default","getByte","getUShort","getShort","getUInt24","getULong","getLong","getFixed","decimal","fraction","getTag","getOffset","getBytes","startOffset","endOffset","bytesToString","typeOffsets","masks","Parser","string","minorBase","major","minor","amount","recordDescription","rec","fieldName","fieldType","tupleCount","axisCount","tuples","tuple","axisIndex","description","struct","valueFormat","valueRecord","valueCount","values","structOffset","relativeOffset","start","subOffsets","subList","format","ranges","langSysTable","lookupTableParsers","lookupType","lookupFlag","useMarkFilteringSet","majorVersion","minorVersion","vsOffset","variationStore","itemStoreOffset","iVStore","variationRegionListOffset","itemVariationDataCount","itemVariationDataOffsets","subtableOffset","regionCount","itemCount","wordDeltaCount","regionIndexes","regionIndexCount","entryFormat","map","mapCount","bitCount","entrySize","n","entry","outerIndex","innerIndex","longFlag","wordCount","wordParser","restParser","flavor","glyphs","glyphCount","offsetSizeIs32Bit","glyphVariationDataArrayOffset","parseOffset","glyphVariations","currentOffset","nextOffset","tableOffset","glyphIndex","tupleVariationCount","hasSharedPoints","dataOffset","headers","sharedPoints","headerData","serializedDataOffset","header","deltasOffset","deltasRelativeOffset","defineDeltas","propertyName","_deltas","_deltasY","parseDeltas","pointsCount","glyph","variationDataSize","tupleIndex","embeddedPeakTuple","intermediateRegion","privatePointNumbers","sharedTupleRecordsIndex","peakTuple","intermediateStartTuple","intermediateEndTuple","countByte1","points","totalPointCount","countByte2","lastPoint","controlByte","numbersAre16Bit","runCount","pointDelta","expectedCount","zeroData","deltaWords","parse_default","nameTableNames","macLanguages","macLanguageToScript","windowsLanguages","getLanguageCode","platformID","languageID","ltag","utf16","macScriptEncodings","macLanguageEncodings","getEncoding","encodingID","platforms","getPlatform","parseNameTable","name","p","stringOffset","nameID","property","byteLength","language","platformName","text","platform","translations","reverseDict","dict","key","makeNameRecord","findSubArray","needle","haystack","needleLength","limit","loop","addStringToPool","pool","makeNameTable","names","platformNameIds","macLanguageIds","windowsLanguageIds","nameRecords","stringPool","nameIDs","namesWithNumericKeys","nameTableIds","id","lang","macLanguage","macScript","macEncoding","macName","macNameOffset","winLanguage","winName","winNameOffset","r","getNameByID","allowedStandardIDs","nameKey","name_default","parseCmapTableFormat0","cmap","indexMap","glyphIndexMap","parseCmapTableFormat12or13","groupCount","startCharCode","endCharCode","startGlyphId","parseCmapTableFormat4","segCount","endCountParser","startCountParser","idDeltaParser","idRangeOffsetParser","glyphIndexOffset","endCount","startCount","idDelta","idRangeOffset","parseCmapTableFormat14","varSelectorList","numVarSelectorRecords","varSelector","varSelectorRecord","defaultUVSOffset","nonDefaultUVSOffset","parseCmapTable","format14Parser","format14offset","platformId","encodingId","platform0Encodings","platform3Encodings","addSegment","code","addTerminatorSegment","mergeSegments","segments","merged","curr","makeCmapTable","isPlan0Only","cmapTable","segCountToRemove","endCounts","startCounts","idDeltas","idRangeOffsets","glyphIds","cmap12Groups","segment","cmap12Length","cmap_default","cffStandardStrings","cffISOAdobeStrings","cffIExpertStrings","cffExpertSubsetStrings","cffStandardEncoding","cffExpertEncoding","standardNames","DefaultEncoding","font","CmapEncoding","CffEncoding","charset","charName","GlyphNames","post","gid","addGlyphNamesAll","charCodes","addGlyphNamesToUnicodeMap","addGlyphNames","opt","line","draw_default","parseCpalTable","version","numPaletteEntries","numPalettes","numColorRecords","colorRecordsArrayOffset","colorRecordIndices","colorRecords","makeCpalTable","palette","color","parseCPALColor","bgra","g","getPaletteColor","index","colorFormat","cpalTable","lookupIndex","formatColor","toHex","rgbToHSL","max","min","h","hslToRGB","hsla","bgraToRaw","parseColor","targetFormat","returnRaw","isRaw","validFormat","detectedColor","rgbaRegex","matches","hslaRegex","hsl","cpal_default","getPathDefinition","_path","Glyph","unicode","fontSize","hPoints","xScale","yScale","scale","useGlyph","svgImage","layer","transformedPoints","contours","currentContour","pt","xCoords","yCoords","metrics","drawCircles","scale2","blueCircles","redCircles","xMin","yMin","xMax","yMax","advanceWidth","usePath","glyph_default","defineDependentProperty","externalName","internalName","newValue","GlyphSet","done","unicodeObj","loader","glyphLoader","ttfGlyphLoader","parseGlyph2","position","buildPath2","cffGlyphLoader","parseCFFCharstring2","charstring","glyphset_default","equals","MAX_CALL_DEPTH","calcCFFSubroutineBias","subrs","bias","parseCFFIndex","conversionFn","objects","countLength","objectOffset","offsetSize","parseCFFIndexLowMemory","getCffIndexObject","parseFloatOperand","parser","lookup","n1","n2","parseOperand","b0","b1","b2","b3","b4","entriesToObject","entries","o","parseCFFDict","size","operands","operandsStart","parseBlend","getCFFString","strings","interpretDict","meta","newDict","parseCFFHeader","TOP_DICT_META","TOP_DICT_META_CFF2","PRIVATE_DICT_META","PRIVATE_DICT_META_CFF2","FONT_DICT_META","parseCFFTopDict","parseCFFPrivateDict","parseFontDict","gatherCFF2FontDicts","fdArray","fontDictArray","fontDictData","fontDict","privateSize","privateOffset","privateDict","subrOffset","subrIndex","gatherCFFTopDicts","cffIndex","topDictArray","iTopDict","topDictData","topDict","parseCFFCharset","nGlyphs","isCIDFont","sid","parseCFFEncoding","nCodes","nRanges","nLeft","numberOfBlends","applyPaintType","paintType","parseCFFCharstring","coords","c1x","c1y","c2x","c2y","stack","nStems","haveWidth","open","subrsBias","defaultWidthX","nominalWidthX","vsindex","vstore","blendVector","callDepth","cffTable","variationCoords","fdIndex","fdDict","width","newContour","parseStems","hasWidthArg","parse","code2","codeIndex","subrCode","jpx","jpy","c3x","c3y","c4x","c4y","acharName","bcharName","ady","adx","acharGlyphIndex","bcharGlyphIndex","acharGlyph","shiftedCommands","deltaSetCount","deltaSetIndex","parseCFFFDSelect","fdArrayCount","fdSelect","iGid","next","iRange","parseCFFTable","resultTable","nameIndex","topDictIndex","stringIndex","globalSubrIndex","topDictOffset","fdArrayIndexOffset","fdSelectOffset","fdArrayIndex","fdArrayOffset","privateDictOffset","charStringsIndex","charString","encodeString","makeHeader","makeNameIndex","fontNames","makeDict","attrs","makeTopDict","makeTopDictIndex","makeStringIndex","makeGlobalSubrIndex","makeCharsets","glyphNames","glyphName","glyphSID","glyphToOps","dx","dy","_13","_23","dx1","dy1","dx2","dy2","makeCharStringsIndex","makePrivateDict","makeCFFTable","fontScale","topDictOptions","privateAttrs","cff_default","parseHeadTable","head","makeHeadTable","timestamp","createdTimestamp","macStyle","head_default","parseHheaTable","hhea","makeHheaTable","hhea_default","parseHmtxTableAll","numMetrics","numGlyphs","leftSideBearing","parseHmtxTableOnLowMemory","parseHmtxTable","makeHmtxTable","hmtx_default","makeLtagTable","tags","stringPoolOffset","parseLtagTable","tableVersion","numTags","ltag_default","parseMaxpTable","maxp","makeMaxpTable","maxp_default","unicodeRanges","getUnicodeRange","range","parseOS2Table","os2","makeOS2Table","os2_default","parsePostTable","nameLength","makePostTable","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","post_default","subtableParsers","substFormat","lookupRecordDesc","substCount","extensionLookupType","extensionParser","parseGsubTable","subtableMakers","subtable","sequenceSet","alternateSet","ligatureSet","ligature","sequenceRuleSet","sequenceRule","tableData","record","classSeqRuleSet","classSeqRule","coverage","chainRuleSet","chainRule","makeGsubTable","gsub","gsub_default","parseMetaTable","numDataMaps","makeMetaTable","meta_default","parseColrTable","numBaseGlyphRecords","baseGlyphRecordsOffset","layerRecordsOffset","numLayerRecords","baseGlyphRecords","layerRecords","makeColrTable","colr_default","makeFvarAxis","axis","parseFvarAxis","axisNameID","makeFvarInstance","inst","axes","optionalFields","axisTag","parseFvarInstance","instanceSize","subfamilyNameID","postScriptNameID","makeFvarTable","fvar","parseFvarTable","offsetToData","axisSize","instanceCount","instances","instanceStart","fvar_default","axisRecordStruct","axisValueParsers","parseSTATAxisValue","valueTableFormat","axisValueParser","formatStub","parseSTATTable","tableVersionMajor","tableVersionMinor","designAxisSize","designAxisCount","designAxesOffset","axisValueCount","offsetToAxisValueOffsets","elidedFallbackNameID","valueOffsets","axisValueMakers","returnFields","makeSTATAxisRecord","makeSTATValueTable","axisValueMaker","makeSTATTable","STAT","axisRecord","axisValueOffsets","axisValueTables","axisValueTableOffset","axisValueTable","stat_default","makeAvarAxisValueMap","axisValueMap","makeAvarSegmentMap","returnTable","axisValueMaps","valueMap","makeAvarTable","avar","parseAvarTable","axisSegmentMaps","positionMapCount","fromCoordinate","toCoordinate","avar_default","parseCvarTable","cvt","cvtVariations","makeCvarTable","cvar_default","parseGvarTable","sharedTupleCount","sharedTuples","makeGvarTable","gvar_default","parseGaspTable","gasp","makeGaspTable","gasp_default","parseSvgTable","svgTable","buf","svgDocumentListOffset","numEntries","svgDocMap","startGlyphID","endGlyphID","svgDocOffset","svgDocLength","svgDoc","makeSvgTable","documentRecords","documentBuffers","documentOffsets","nextSvgDocOffset","glyphId","numDocuments","documentsOffset","fieldIndex","namePrefix","svg_default","log2","computeCheckSum","makeTableRecord","checkSum","makeSfntTable","tables","sfnt","highestPowerOf2","recordFields","tableFields","tableLength","tableRecord","r1","r2","metricsForChar","chars","notFoundMetrics","average","vs","fontToSfntTable","xMins","yMins","xMaxs","yMaxs","advanceWidths","leftSideBearings","rightSideBearings","firstCharIndex","lastCharIndex","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","globals","headTable","hheaTable","maxpTable","os2Table","hmtxTable","englishFamilyName","englishStyleName","englishFullName","postScriptName","fontNamesUnicode","fontNamesMacintosh","fontNamesWindows","manufacturer","languageTags","nameTable","ltagTable","postTable","metaTable","optionalTables","optionalTableArgs","sfntTable","checkSumAdjusted","sfnt_default","searchTag","arr","imin","imax","imid","binSearch","searchRange","Layout","create","layout","hasLatn","scripts","scr","scriptTable","langSysTable2","featIndexes","allFeatures","featureTable","lookupListIndexes","allLookups","end","layout_default","Position","kerningLookups","leftIndex","rightIndex","covIndex","pairSet","pair","class1","class2","position_default","arraysEqual","ar1","ar2","binarySearch","array","low","high","mid","recordValue","binarySearchIndex","element","binarySearchInsert","compare","isGzip","unGzip","gzip","flg","isize","copyPoint","copyComponent","Substitution","getSubstFormat","defaultSubtable","substitutions","lookupTables","idx","substitute","replacements","alternates","alternateSets","ligatures","ligatureSets","startGlyph","ligSet","lig","substitution","coverageGlyph","ligComponents","ligatureTable","sub","substitution_default","PaletteManager","palettes","cpal","startIndex","paletteColors","color2","colors","_colorCount","newCount","paletteIndex","colorCount","colorIndex","replacementIndex","updatedPalettes","updatedPalette","colrTable","currentIndex","replacementShift","flattenedPalettes","paletteCount","LayerManager","colr","baseGlyph","firstIndex","numLayers","currentLayers","newLayers","glyphID","layerIndex","newBaseGlyphRecord","baseGlyphRecord","originalNumLayers","newNumLayers","layerDiff","sibling","SVGImageManager","svgImageCacheEntry","svgBuf","svgDocCacheEntry","createSvgDocCacheEntry","createSvgImageCacheEntry","error","decodeSvgDocument","makeSvgTemplate","svgTemplatePromise","svgTemplate","svgText","makeSvgImage","decodeSvgDocumentWithDecompressionStream","decodeSvgDocumentWithTinyInflate","documentStart","contentStart","contentEnd","unitsPerEm","viewBoxVal","widthVal","heightVal","div","bbox","baseline","height","_resolving","parseGlyphCoordinate","flag","previousValue","shortVectorBitMask","sameBitMask","parseGlyph","flags","endPointIndices","numberOfCoordinates","repeatCount","point","px","py","moreComponents","component","transformPoints","transform","newPoints","newPt","getContours","getPath","contourIndex","contour","next2","buildPath","resolving","componentGlyph","firstPt","secondPt","parseGlyfTableAll","loca","parseGlyfTableOnLowMemory","parseGlyfTable","glyf_default","VariationProcessor","padded","normalized","tagValue","glyphPoints","deltaMap","pointIndex","firstPoint","endPoint","firstDelta","curDelta","ref1","ref2","iterable","in1","in2","out1","out2","ref","deltaX","deltaY","tuplePoints","factor","pointsIndex","componentTransform","deltaIndex","transformedComponentPoints","variationData","args","normalizedCoords","tupleCoords","interpolatedPoints","hasBlend","hasPoints","transformedGlyph","blendPath","parameter","mapSize","itemStore","varData","deltaSet","netAdjustment","master","itemIndex","scalar","regionIndex","axisScalar","VariationManager","defaultInstance","acc","defaultCoordinates","defaultInstanceIndex","instance","coordinates","instanceIdOrObject","MAX_INSTRUCTIONS","MAX_CALL_DEPTH2","MAX_LOOP_COUNT","instructionTable","exec","execGlyph","execComponent","Hinting","roundOff","roundToGrid","roundToDoubleGrid","roundToHalfGrid","roundUpToGrid","roundDownToGrid","roundSuper","period","phase","threshold","xUnitVector","o1","o2","rp1","rp2","pv","do1","do2","doa1","doa2","dm1","dm2","rp","org","rpx","rpy","rpdx","rpdy","yUnitVector","UnitVector","pvns","fvs","getUnitVector","HPoint","lastPointOfContour","onCurve","HPZero","defaultState","State","env","prog","ppem","prepState","fpgmState","oCvt","components","gZone","state","cg","gz","cc","pi","gLen","pLen","cp","sp","np","ins","initTZone","tZone","skip","handleElse","ip","nesting","SVTCA","SPVTCA","SFVTCA","SPVTL","p2i","p1i","SFVTL","SPVFS","SFVFS","GPV","GFV","fv","SFVTPV","ISECT","pa0i","pa1i","pb0i","pb1i","z0","z1","pa0","pa1","pb0","pb1","x3","y3","x4","y4","f1","f2","SRP0","SRP1","SRP2","SZP0","SZP1","SZP2","SZPS","SLOOP","RTG","RTHG","SMD","ELSE","JMPR","SCVTCI","DUP","POP","CLEAR","SWAP","DEPTH","LOOPCALL","fn","cip","cprog","CALL","CINDEX","MINDEX","FDEF","ipBegin","MDAP","round","IUP","z2","pp","SHP","rpi","SHC","ci","SHZ","z","SHPIX","IP","rp1i","rp2i","MSIRP","rp0","ALIGNRP","rp0i","RTDG","MIAP","cv","NPUSHB","NPUSHW","w","WS","store","RS","WCVTP","RCVT","cvte","GC","MD","pi2","pi1","MPPEM","FLIPON","LT","e2","e1","LTEQ","GT","GTEQ","EQ","NEQ","ODD","EVEN","IF","EIF","AND","OR","NOT","DELTAP123","ds","arg","mag","SDB","SDS","ADD","SUB","DIV","MUL","ABS","NEG","FLOOR","CEILING","ROUND","WCVTF","DELTAC123","SROUND","S45ROUND","ROFF","RUTG","RDTG","SCANCTRL","SDPVTL","GETINFO","sel","ROLL","MAX","MIN","SCANTYPE","INSTCTRL","PUSHB","PUSHW","MDRP_MIRP","indirect","setRp0","keepD","ro","md","hintingtt_default","Token","char","ContextRange","contextName","ContextChecker","checkStart","checkEnd","ContextParams","context","Event","eventId","initializeCoreEvents","events","coreEvents","event","requiresContextUpdate","Tokenizer","stateId","RUDs","RUD","hasFAILObject","obj","tokens","silent","isTokenType","replaced","modifierId","condition","modifier","contextParams","conditionParams","canApplyModifier","modifierParams","newStateValue","eventHandler","subsId","eventName","contextStartCheck","contextEndCheck","contextCheckers","endIndex","registeredContexts","contextChecker","openRange","tokenizer_default","isArabicChar","isIsolatedArabicChar","isTashkeelArabicChar","isThaiChar","isLatinChar","isWhiteSpace","FeatureQuery","SubstitutionAction","action","lookupCoverage","singleSubstitutionFormat1","singleSubstitutionFormat2","substituteIndex","lookupCoverageList","coverageList","lookupList","chainingSubstitutionFormat3","lookupsCount","inputLookups","lookaheadOffset","lookaheadContext","lookaheadParams","lookaheadLookups","backtrackContext","backtrackParams","backtrackLookups","contextRulesMatch","lookupRecord","lookupListIndex","subtable2","substitutionType","ligatureSubstitutionFormat1","ligSetIndex","lookaheadItem","contextSubstitutionFormat1","ruleSet","rule","matched","substitutions2","sequenceIndex","contextSubstitutionFormat3","decompositionSubstitutionFormat1","scriptTag","langSysRecords","features","featuresIndexes","query","lookups","substType","supportedScript","supportedFeature","scriptFeatures","featureQuery_default","arabicWordStartCheck","prevChar","arabicWordEndCheck","nextChar","arabicWord_default","arabicSentenceStartCheck","arabicSentenceEndCheck","nextIsWhitespace","arabicCharAhead","arabicSentence_default","singleSubstitutionFormat12","singleSubstitutionFormat22","chainingSubstitutionFormat32","subst","ligatureSubstitutionFormat12","compsCount","SUBSTITUTIONS","applySubstitution","applySubstitution_default","willConnectPrev","charContextParams","backtrack","isolated","tashkeel","willConnectNext","arabicPresentationForms","CONNECT","arabicPresentationForms_default","getContextParams","arabicRequiredLigatures","arabicRequiredLigatures_default","ccmpReplacementStartCheck","ccmpReplacementEndCheck","ccmpReplacement_default","getContextParams2","ccmpReplacementLigatures","ccmpReplacementLigatures_default","latinWordStartCheck","latinWordEndCheck","latinWord_default","getContextParams3","latinLigature","latinLigatures_default","thaiWordStartCheck","thaiWordEndCheck","thaiWord_default","getContextParams4","thaiGlyphComposition","thaiGlyphComposition_default","getContextParams5","thaiLigatures","thaiLigatures_default","getContextParams6","thaiRequiredLigatures","thaiRequiredLigatures_default","isVariationSequenceSelector","charCode","unicodeVariationSequenceStartCheck","unicodeVariationSequenceEndCheck","variationSequenceCheck_default","unicodeVariationSequence","baseCodePoint","vsCodePoint","selectorLookup","mappings","replacementGlyphId","variationSequences_default","Bidi","baseDir","registerContextChecker","checkId","check","tokenizeText","reverseArabicSentences","rangeTokens","supportedTags","f","checkGlyphIndexStatus","applyArabicPresentationForms","applyCcmpReplacement","applyArabicRequireLigatures","applyLatinLigatures","applyUnicodeVariationSequences","applyThaiFeatures","contextId","indexes","bidi_default","createDefaultNamesInfo","Font","selection","bidi","charToGlyphIndexMod","notdef","leftGlyph","rightGlyph","gposKerning","callback","kerningValue","fullPath","gX","gY","gFontSize","glyphPath","glyphPaths","warnings","_this","assert","assertNamePresent","englishName","baseGlyphs","previousID","currentGlyphID","intArray","font_default","parseHvarTable","itemVariationStore","lsb","rsb","makeHvarTable","hvar_default","attachList","caretValue","ligGlyph","ligCaretList","markGlyphSets","parseGDEFTable","gdef","gdef_default","subtableParsers2","posformat","posFormat","valueFormat1","valueFormat2","classDef1","classDef2","class1Count","class2Count","parseGposTable","subtableMakers2","makeGposTable","gpos","gpos_default","parseWindowsKernTable","pairs","subtableVersion","nPairs","parseMacKernTable","parseKernTable","kern_default","parseLocaTable","shortVersion","parseFn","glyphOffsets","glyphOffset","loca_default","parseOpenTypeTableEntries","numTables","tableEntries","checksum","parseWOFFTableEntries","compLength","origLength","compression","uncompressTable","tableEntry","inBuffer","outBuffer","parseBuffer","indexToLocFormat","signature","issue","cffTableEntry","cff2TableEntry","fvarTableEntry","statTableEntry","gvarTableEntry","cvarTableEntry","avarTableEntry","glyfTableEntry","gdefTableEntry","gposTableEntry","gsubTableEntry","hmtxTableEntry","hvarTableEntry","kernTableEntry","locaTableEntry","nameTableEntry","metaTableEntry","locaTable","locaOffsets","glyfTable","cffTable2","kernTable","gdefTable","gposTable","gsubTable","fvarTable","statTable","gvarTable","cvarTable","avarTable","hvarTable","MAGIC_WOFF2","MAGIC_WOFF","MAGIC_OTTO","MAGIC_TTF1","MAGIC_TRUE","detectMagic","DEFAULT_SAMPLES","SIZES","FontRenderer","url","useTranslator","fetcher","useFetcher","resolvedTheme","useResolvedTheme","setFont","useState","metadata","setMetadata","metadataStatus","setMetadataStatus","loading","setLoading","setError","customText","setCustomText","renderMode","setRenderMode","fontFaceRef","useRef","useEffect","mounted","detectFormat","ext","formatLabel","magic","loadFontFace","faceBuffer","face","faceErr","loadMetadata","arrayBuffer","fontData","rawNames","platformTables","pickName","flat","response","facePromise","metadataPromise","metaErr","err","jsx","RendererError","displayText","metadataLoadingLabel","metadataUnavailableLabel","showMetaPlaceholder","metaPlaceholder","canRenderCanvas","jsxs","FontPreviewLine","theme","wrapperRef","canvasRef","drawCanvas","useCallback","wrapper","canvas","containerWidth","dpr","lineHeight","fillColor","wrapLine","ch","wrappedLines","seg","observer"],"mappings":"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AAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP,GACIC,KAAsB;AAAA,EACxB,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAEP,GACIC,KAAmB;AAAA,EACrB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAqB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAyB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAsB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAgB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAgBC,GAAM;AAC7B,OAAK,OAAOA;AACd;AACAD,GAAgB,UAAU,mBAAmB,SAASjb,GAAG;AACvD,QAAMuZ,IAAOvZ,EAAE,YAAY,CAAC,GACtBm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AA,EAE1B,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EA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pCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EA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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index-Dta7iGov.mjs","sources":["../../../../node_modules/.pnpm/opentype.js@2.0.0/node_modules/opentype.js/dist/opentype.mjs","../../src/renderers/Font/index.tsx"],"sourcesContent":["// src/tiny-inflate@1.0.3.esm.mjs\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\nfunction Tree() {\n this.table = new Uint16Array(16);\n this.trans = new Uint16Array(288);\n}\nfunction Data(source, dest) {\n this.source = source;\n this.sourceIndex = 0;\n this.tag = 0;\n this.bitcount = 0;\n this.dest = dest;\n this.destLen = 0;\n this.ltree = new Tree();\n this.dtree = new Tree();\n}\nvar sltree = new Tree();\nvar sdtree = new Tree();\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\nvar clcidx = new Uint8Array([\n 16,\n 17,\n 18,\n 0,\n 8,\n 7,\n 9,\n 6,\n 10,\n 5,\n 11,\n 4,\n 12,\n 3,\n 13,\n 2,\n 14,\n 1,\n 15\n]);\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\nfunction tinf_build_bits_base(bits, base, delta, first) {\n var i, sum;\n for (i = 0; i < delta; ++i) bits[i] = 0;\n for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n for (sum = first, i = 0; i < 30; ++i) {\n base[i] = sum;\n sum += 1 << bits[i];\n }\n}\nfunction tinf_build_fixed_trees(lt, dt) {\n var i;\n for (i = 0; i < 7; ++i) lt.table[i] = 0;\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n for (i = 0; i < 5; ++i) dt.table[i] = 0;\n dt.table[5] = 32;\n for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\nvar offs = new Uint16Array(16);\nfunction tinf_build_tree(t, lengths2, off, num) {\n var i, sum;\n for (i = 0; i < 16; ++i) t.table[i] = 0;\n for (i = 0; i < num; ++i) t.table[lengths2[off + i]]++;\n t.table[0] = 0;\n for (sum = 0, i = 0; i < 16; ++i) {\n offs[i] = sum;\n sum += t.table[i];\n }\n for (i = 0; i < num; ++i) {\n if (lengths2[off + i]) t.trans[offs[lengths2[off + i]]++] = i;\n }\n}\nfunction tinf_getbit(d) {\n if (!d.bitcount--) {\n d.tag = d.source[d.sourceIndex++];\n d.bitcount = 7;\n }\n var bit = d.tag & 1;\n d.tag >>>= 1;\n return bit;\n}\nfunction tinf_read_bits(d, num, base) {\n if (!num)\n return base;\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var val = d.tag & 65535 >>> 16 - num;\n d.tag >>>= num;\n d.bitcount -= num;\n return val + base;\n}\nfunction tinf_decode_symbol(d, t) {\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var sum = 0, cur = 0, len = 0;\n var tag = d.tag;\n do {\n cur = 2 * cur + (tag & 1);\n tag >>>= 1;\n ++len;\n sum += t.table[len];\n cur -= t.table[len];\n } while (cur >= 0);\n d.tag = tag;\n d.bitcount -= len;\n return t.trans[sum + cur];\n}\nfunction tinf_decode_trees(d, lt, dt) {\n var hlit, hdist, hclen;\n var i, num, length;\n hlit = tinf_read_bits(d, 5, 257);\n hdist = tinf_read_bits(d, 5, 1);\n hclen = tinf_read_bits(d, 4, 4);\n for (i = 0; i < 19; ++i) lengths[i] = 0;\n for (i = 0; i < hclen; ++i) {\n var clen = tinf_read_bits(d, 3, 0);\n lengths[clcidx[i]] = clen;\n }\n tinf_build_tree(code_tree, lengths, 0, 19);\n for (num = 0; num < hlit + hdist; ) {\n var sym = tinf_decode_symbol(d, code_tree);\n switch (sym) {\n case 16:\n var prev = lengths[num - 1];\n for (length = tinf_read_bits(d, 2, 3); length; --length) {\n lengths[num++] = prev;\n }\n break;\n case 17:\n for (length = tinf_read_bits(d, 3, 3); length; --length) {\n lengths[num++] = 0;\n }\n break;\n case 18:\n for (length = tinf_read_bits(d, 7, 11); length; --length) {\n lengths[num++] = 0;\n }\n break;\n default:\n lengths[num++] = sym;\n break;\n }\n }\n tinf_build_tree(lt, lengths, 0, hlit);\n tinf_build_tree(dt, lengths, hlit, hdist);\n}\nfunction tinf_inflate_block_data(d, lt, dt) {\n for (; ; ) {\n var sym = tinf_decode_symbol(d, lt);\n if (sym === 256) {\n return TINF_OK;\n }\n if (sym < 256) {\n d.dest[d.destLen++] = sym;\n } else {\n var length, dist, offs2;\n var i;\n sym -= 257;\n length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n dist = tinf_decode_symbol(d, dt);\n offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n for (i = offs2; i < offs2 + length; ++i) {\n d.dest[d.destLen++] = d.dest[i];\n }\n }\n }\n}\nfunction tinf_inflate_uncompressed_block(d) {\n var length, invlength;\n var i;\n while (d.bitcount > 8) {\n d.sourceIndex--;\n d.bitcount -= 8;\n }\n length = d.source[d.sourceIndex + 1];\n length = 256 * length + d.source[d.sourceIndex];\n invlength = d.source[d.sourceIndex + 3];\n invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n if (length !== (~invlength & 65535))\n return TINF_DATA_ERROR;\n d.sourceIndex += 4;\n for (i = length; i; --i)\n d.dest[d.destLen++] = d.source[d.sourceIndex++];\n d.bitcount = 0;\n return TINF_OK;\n}\nfunction tinf_uncompress(source, dest) {\n var d = new Data(source, dest);\n var bfinal, btype, res;\n do {\n bfinal = tinf_getbit(d);\n btype = tinf_read_bits(d, 2, 0);\n switch (btype) {\n case 0:\n res = tinf_inflate_uncompressed_block(d);\n break;\n case 1:\n res = tinf_inflate_block_data(d, sltree, sdtree);\n break;\n case 2:\n tinf_decode_trees(d, d.ltree, d.dtree);\n res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n break;\n default:\n res = TINF_DATA_ERROR;\n }\n if (res !== TINF_OK)\n throw new Error(\"Data error\");\n } while (!bfinal);\n if (d.destLen < d.dest.length) {\n if (typeof d.dest.slice === \"function\")\n return d.dest.slice(0, d.destLen);\n else\n return d.dest.subarray(0, d.destLen);\n }\n return d.dest;\n}\ntinf_build_fixed_trees(sltree, sdtree);\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\n// src/bbox.mjs\nfunction derive(v0, v1, v2, v3, t) {\n return Math.pow(1 - t, 3) * v0 + 3 * Math.pow(1 - t, 2) * t * v1 + 3 * (1 - t) * Math.pow(t, 2) * v2 + Math.pow(t, 3) * v3;\n}\nfunction BoundingBox() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n}\nBoundingBox.prototype.isEmpty = function() {\n return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);\n};\nBoundingBox.prototype.addPoint = function(x, y) {\n if (typeof x === \"number\") {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n if (x < this.x1) {\n this.x1 = x;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n }\n if (typeof y === \"number\") {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n }\n};\nBoundingBox.prototype.addX = function(x) {\n this.addPoint(x, null);\n};\nBoundingBox.prototype.addY = function(y) {\n this.addPoint(null, y);\n};\nBoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {\n const p0 = [x0, y0];\n const p1 = [x1, y1];\n const p2 = [x2, y2];\n const p3 = [x, y];\n this.addPoint(x0, y0);\n this.addPoint(x, y);\n for (let i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0) continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2));\n }\n }\n};\nBoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {\n const cp1x = x0 + 2 / 3 * (x1 - x0);\n const cp1y = y0 + 2 / 3 * (y1 - y0);\n const cp2x = cp1x + 1 / 3 * (x - x0);\n const cp2y = cp1y + 1 / 3 * (y - y0);\n this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);\n};\nvar bbox_default = BoundingBox;\n\n// src/path.mjs\nfunction Path() {\n this.commands = [];\n this.fill = \"black\";\n this.stroke = null;\n this.strokeWidth = 1;\n}\nvar decimalRoundingCache = {};\nfunction roundDecimal(float, places) {\n const integerPart = Math.floor(float);\n const decimalPart = float - integerPart;\n if (!decimalRoundingCache[places]) {\n decimalRoundingCache[places] = {};\n }\n if (decimalRoundingCache[places][decimalPart] !== void 0) {\n const roundedDecimalPart2 = decimalRoundingCache[places][decimalPart];\n return integerPart + roundedDecimalPart2;\n }\n const roundedDecimalPart = +(Math.round(decimalPart + \"e+\" + places) + \"e-\" + places);\n decimalRoundingCache[places][decimalPart] = roundedDecimalPart;\n return integerPart + roundedDecimalPart;\n}\nfunction optimizeCommands(commands) {\n let subpaths = [[]];\n let startX = 0, startY = 0;\n for (let i = 0; i < commands.length; i += 1) {\n const subpath = subpaths[subpaths.length - 1];\n const cmd = commands[i];\n const firstCommand = subpath[0];\n const secondCommand = subpath[1];\n const previousCommand = subpath[subpath.length - 1];\n const nextCommand = commands[i + 1];\n subpath.push(cmd);\n if (cmd.type === \"M\") {\n startX = cmd.x;\n startY = cmd.y;\n } else if (cmd.type === \"L\" && (!nextCommand || nextCommand.type === \"Z\")) {\n if (!(Math.abs(cmd.x - startX) > 1 || Math.abs(cmd.y - startY) > 1)) {\n subpath.pop();\n }\n } else if (cmd.type === \"L\" && previousCommand && previousCommand.x === cmd.x && previousCommand.y === cmd.y) {\n subpath.pop();\n } else if (cmd.type === \"Z\") {\n if (firstCommand && secondCommand && previousCommand && firstCommand.type === \"M\" && secondCommand.type === \"L\" && previousCommand.type === \"L\" && previousCommand.x === firstCommand.x && previousCommand.y === firstCommand.y) {\n subpath.shift();\n subpath[0].type = \"M\";\n }\n if (i + 1 < commands.length) {\n subpaths.push([]);\n }\n }\n }\n commands = [].concat.apply([], subpaths);\n return commands;\n}\nfunction createSVGParsingOptions(options) {\n const defaultOptions = {\n decimalPlaces: 2,\n optimize: true,\n flipY: true,\n flipYBase: void 0,\n scale: 1,\n x: 0,\n y: 0\n };\n const newOptions = Object.assign({}, defaultOptions, options);\n return newOptions;\n}\nfunction createSVGOutputOptions(options) {\n if (parseInt(options) === options) {\n options = { decimalPlaces: options, flipY: false };\n }\n const defaultOptions = {\n decimalPlaces: 2,\n optimize: true,\n flipY: true,\n flipYBase: void 0\n };\n const newOptions = Object.assign({}, defaultOptions, options);\n return newOptions;\n}\nPath.prototype.fromSVG = function(pathData, options = {}) {\n if (typeof SVGPathElement !== \"undefined\" && pathData instanceof SVGPathElement) {\n pathData = pathData.getAttribute(\"d\");\n }\n options = createSVGParsingOptions(options);\n this.commands = [];\n const number = \"0123456789\";\n const supportedCommands = \"MmLlQqCcZzHhVv\";\n const unsupportedCommands = \"SsTtAa\";\n const sign = \"-+\";\n let command = {};\n let buffer = [\"\"];\n let isUnexpected = false;\n function parseBuffer2(buffer2) {\n return buffer2.filter((b) => b.length).map((b) => {\n let float = parseFloat(b);\n if (options.decimalPlaces || options.decimalPlaces === 0) {\n float = roundDecimal(float, options.decimalPlaces);\n }\n return float;\n });\n }\n function makeRelative(buffer2) {\n if (!this.commands.length) {\n return buffer2;\n }\n const lastCommand = this.commands[this.commands.length - 1];\n for (let i = 0; i < buffer2.length; i++) {\n buffer2[i] += lastCommand[i & 1 ? \"y\" : \"x\"];\n }\n return buffer2;\n }\n function applyCommand() {\n if (command.type === void 0) {\n return;\n }\n const commandType = command.type.toUpperCase();\n const relative = commandType !== \"Z\" && command.type.toUpperCase() !== command.type;\n let parsedBuffer = parseBuffer2(buffer);\n buffer = [\"\"];\n if (!parsedBuffer.length && commandType !== \"Z\") {\n return;\n }\n if (relative && commandType !== \"H\" && commandType !== \"V\") {\n parsedBuffer = makeRelative.apply(this, [parsedBuffer]);\n }\n const currentX = this.commands.length ? this.commands[this.commands.length - 1].x || 0 : 0;\n const currentY = this.commands.length ? this.commands[this.commands.length - 1].y || 0 : 0;\n switch (commandType) {\n case \"M\":\n this.moveTo(...parsedBuffer);\n break;\n case \"L\":\n this.lineTo(...parsedBuffer);\n break;\n case \"V\":\n for (let i = 0; i < parsedBuffer.length; i++) {\n let offset = 0;\n if (relative) {\n offset = this.commands.length ? this.commands[this.commands.length - 1].y || 0 : 0;\n }\n this.lineTo(currentX, parsedBuffer[i] + offset);\n }\n break;\n case \"H\":\n for (let i = 0; i < parsedBuffer.length; i++) {\n let offset = 0;\n if (relative) {\n offset = this.commands.length ? this.commands[this.commands.length - 1].x || 0 : 0;\n }\n this.lineTo(parsedBuffer[i] + offset, currentY);\n }\n break;\n case \"C\":\n this.bezierCurveTo(...parsedBuffer);\n break;\n case \"Q\":\n this.quadraticCurveTo(...parsedBuffer);\n break;\n case \"Z\":\n if (this.commands.length < 1 || this.commands[this.commands.length - 1].type !== \"Z\") {\n this.close();\n }\n break;\n }\n if (this.commands.length) {\n for (const prop in this.commands[this.commands.length - 1]) {\n if (this.commands[this.commands.length - 1][prop] === void 0) {\n this.commands[this.commands.length - 1][prop] = 0;\n }\n }\n }\n }\n for (let i = 0; i < pathData.length; i++) {\n const token = pathData.charAt(i);\n const lastBuffer = buffer[buffer.length - 1];\n if (number.indexOf(token) > -1) {\n buffer[buffer.length - 1] += token;\n } else if (sign.indexOf(token) > -1) {\n if (!command.type && !this.commands.length) {\n command.type = \"L\";\n }\n if (token === \"-\") {\n if (!command.type || lastBuffer.indexOf(\"-\") > 0) {\n isUnexpected = true;\n } else if (lastBuffer.length) {\n buffer.push(\"-\");\n } else {\n buffer[buffer.length - 1] = token;\n }\n } else {\n if (!command.type || lastBuffer.length > 0) {\n isUnexpected = true;\n } else {\n continue;\n }\n }\n } else if (supportedCommands.indexOf(token) > -1) {\n if (command.type) {\n applyCommand.apply(this);\n command = { type: token };\n } else {\n command.type = token;\n }\n } else if (unsupportedCommands.indexOf(token) > -1) {\n throw new Error(\"Unsupported path command: \" + token + \". Currently supported commands are \" + supportedCommands.split(\"\").join(\", \") + \".\");\n } else if (\" ,\t\\n\\r\\f\\v\".indexOf(token) > -1) {\n buffer.push(\"\");\n } else if (token === \".\") {\n if (!command.type || lastBuffer.indexOf(token) > -1) {\n isUnexpected = true;\n } else {\n buffer[buffer.length - 1] += token;\n }\n } else {\n isUnexpected = true;\n }\n if (isUnexpected) {\n throw new Error(\"Unexpected character: \" + token + \" at offset \" + i);\n }\n }\n applyCommand.apply(this);\n if (options.optimize) {\n this.commands = optimizeCommands(this.commands);\n }\n const flipY = options.flipY;\n let flipYBase = options.flipYBase;\n if (flipY === true && options.flipYBase === void 0) {\n const boundingBox = this.getBoundingBox();\n flipYBase = boundingBox.y1 + boundingBox.y2;\n }\n for (const i in this.commands) {\n const cmd = this.commands[i];\n for (const prop in cmd) {\n if ([\"x\", \"x1\", \"x2\"].includes(prop)) {\n this.commands[i][prop] = options.x + cmd[prop] * options.scale;\n } else if ([\"y\", \"y1\", \"y2\"].includes(prop)) {\n this.commands[i][prop] = options.y + (flipY ? flipYBase - cmd[prop] : cmd[prop]) * options.scale;\n }\n }\n }\n return this;\n};\nPath.fromSVG = function(path, options) {\n const newPath = new Path();\n return newPath.fromSVG(path, options);\n};\nPath.prototype.moveTo = function(x, y) {\n this.commands.push({\n type: \"M\",\n x,\n y\n });\n};\nPath.prototype.lineTo = function(x, y) {\n this.commands.push({\n type: \"L\",\n x,\n y\n });\n};\nPath.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) {\n this.commands.push({\n type: \"C\",\n x1,\n y1,\n x2,\n y2,\n x,\n y\n });\n};\nPath.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) {\n this.commands.push({\n type: \"Q\",\n x1,\n y1,\n x,\n y\n });\n};\nPath.prototype.close = Path.prototype.closePath = function() {\n this.commands.push({\n type: \"Z\"\n });\n};\nPath.prototype.extend = function(pathOrCommands) {\n if (pathOrCommands.commands) {\n pathOrCommands = pathOrCommands.commands;\n } else if (pathOrCommands instanceof bbox_default) {\n const box = pathOrCommands;\n this.moveTo(box.x1, box.y1);\n this.lineTo(box.x2, box.y1);\n this.lineTo(box.x2, box.y2);\n this.lineTo(box.x1, box.y2);\n this.close();\n return;\n }\n Array.prototype.push.apply(this.commands, pathOrCommands);\n};\nPath.prototype.getBoundingBox = function() {\n const box = new bbox_default();\n let startX = 0;\n let startY = 0;\n let prevX = 0;\n let prevY = 0;\n for (let i = 0; i < this.commands.length; i++) {\n const cmd = this.commands[i];\n switch (cmd.type) {\n case \"M\":\n box.addPoint(cmd.x, cmd.y);\n startX = prevX = cmd.x;\n startY = prevY = cmd.y;\n break;\n case \"L\":\n box.addPoint(cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Q\":\n box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"C\":\n box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Z\":\n prevX = startX;\n prevY = startY;\n break;\n default:\n throw new Error(\"Unexpected path command \" + cmd.type);\n }\n }\n if (box.isEmpty()) {\n box.addPoint(0, 0);\n }\n return box;\n};\nPath.prototype.draw = function(ctx) {\n const layers = this._layers;\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l++) {\n this.draw.call(layers[l], ctx);\n }\n return;\n }\n const image = this._image;\n if (image) {\n ctx.drawImage(image.image, image.x, image.y, image.width, image.height);\n return;\n }\n ctx.beginPath();\n for (let i = 0; i < this.commands.length; i += 1) {\n const cmd = this.commands[i];\n if (cmd.type === \"M\") {\n ctx.moveTo(cmd.x, cmd.y);\n } else if (cmd.type === \"L\") {\n ctx.lineTo(cmd.x, cmd.y);\n } else if (cmd.type === \"C\") {\n ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n } else if (cmd.type === \"Q\") {\n ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);\n } else if (cmd.type === \"Z\" && this.stroke && this.strokeWidth) {\n ctx.closePath();\n }\n }\n if (this.fill) {\n ctx.fillStyle = this.fill;\n ctx.fill();\n }\n if (this.stroke) {\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n ctx.stroke();\n }\n};\nPath.prototype.toPathData = function(options) {\n options = createSVGOutputOptions(options);\n function floatToString(v) {\n const rounded = roundDecimal(v, options.decimalPlaces);\n if (Math.round(v) === rounded) {\n return \"\" + rounded;\n } else {\n return rounded.toFixed(options.decimalPlaces);\n }\n }\n function packValues() {\n let s = \"\";\n for (let i = 0; i < arguments.length; i += 1) {\n const v = arguments[i];\n if (v >= 0 && i > 0) {\n s += \" \";\n }\n s += floatToString(v);\n }\n return s;\n }\n let commandsCopy = this.commands;\n if (options.optimize) {\n commandsCopy = JSON.parse(JSON.stringify(this.commands));\n commandsCopy = optimizeCommands(commandsCopy);\n }\n const flipY = options.flipY;\n let flipYBase = options.flipYBase;\n if (flipY === true && flipYBase === void 0) {\n const tempPath = new Path();\n tempPath.extend(commandsCopy);\n const boundingBox = tempPath.getBoundingBox();\n flipYBase = boundingBox.y1 + boundingBox.y2;\n }\n let d = \"\";\n for (let i = 0; i < commandsCopy.length; i += 1) {\n const cmd = commandsCopy[i];\n if (cmd.type === \"M\") {\n d += \"M\" + packValues(\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"L\") {\n d += \"L\" + packValues(\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"C\") {\n d += \"C\" + packValues(\n cmd.x1,\n flipY ? flipYBase - cmd.y1 : cmd.y1,\n cmd.x2,\n flipY ? flipYBase - cmd.y2 : cmd.y2,\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"Q\") {\n d += \"Q\" + packValues(\n cmd.x1,\n flipY ? flipYBase - cmd.y1 : cmd.y1,\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"Z\") {\n d += \"Z\";\n }\n }\n return d;\n};\nPath.prototype.toSVG = function(options, pathData) {\n if (this._layers && this._layers.length) {\n console.warn(\"toSVG() does not support colr font layers yet\");\n }\n if (this._image) {\n console.warn(\"toSVG() does not support SVG glyphs yet\");\n }\n if (!pathData) {\n pathData = this.toPathData(options);\n }\n let svg = '<path d=\"';\n svg += pathData;\n svg += '\"';\n if (this.fill !== void 0 && this.fill !== \"black\") {\n if (this.fill === null) {\n svg += ' fill=\"none\"';\n } else {\n svg += ' fill=\"' + this.fill + '\"';\n }\n }\n if (this.stroke) {\n svg += ' stroke=\"' + this.stroke + '\" stroke-width=\"' + this.strokeWidth + '\"';\n }\n svg += \"/>\";\n return svg;\n};\nPath.prototype.toDOMElement = function(options, pathData) {\n if (this._layers && this._layers.length) {\n console.warn(\"toDOMElement() does not support colr font layers yet\");\n }\n if (!pathData) {\n pathData = this.toPathData(options);\n }\n const newPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n newPath.setAttribute(\"d\", pathData);\n if (this.fill !== void 0 && this.fill !== \"black\") {\n if (this.fill === null) {\n newPath.setAttribute(\"fill\", \"none\");\n } else {\n newPath.setAttribute(\"fill\", this.fill);\n }\n }\n if (this.stroke) {\n newPath.setAttribute(\"stroke\", this.stroke);\n newPath.setAttribute(\"stroke-width\", this.strokeWidth);\n }\n return newPath;\n};\nvar path_default = Path;\n\n// src/check.mjs\nfunction fail(message) {\n throw new Error(message);\n}\nfunction argument(predicate, message) {\n if (!predicate) {\n fail(message);\n }\n}\nvar check_default = { fail, argument, assert: argument };\n\n// src/types.mjs\nvar LIMIT16 = 32768;\nvar LIMIT32 = 2147483648;\nvar MIN_16_16 = -(1 << 15);\nvar MAX_16_16 = (1 << 15) - 1 + 1 / (1 << 16);\nvar decode = {};\nvar encode = {};\nvar sizeOf = {};\nfunction constant(v) {\n return function() {\n return v;\n };\n}\nencode.BYTE = function(v) {\n check_default.argument(v >= 0 && v <= 255, \"Byte value should be between 0 and 255.\");\n return [v];\n};\nsizeOf.BYTE = constant(1);\nencode.CHAR = function(v) {\n return [v.charCodeAt(0)];\n};\nsizeOf.CHAR = constant(1);\nencode.CHARARRAY = function(v) {\n if (v === null || typeof v === \"undefined\") {\n v = \"\";\n console.warn(\"CHARARRAY with undefined or null value encountered and treated as an empty string. This is probably caused by a missing glyph name.\");\n }\n const b = [];\n for (let i = 0; i < v.length; i += 1) {\n b[i] = v.charCodeAt(i);\n }\n return b;\n};\nsizeOf.CHARARRAY = function(v) {\n if (typeof v === \"undefined\") {\n return 0;\n }\n return v.length;\n};\nencode.USHORT = function(v) {\n return [v >> 8 & 255, v & 255];\n};\nsizeOf.USHORT = constant(2);\nencode.SHORT = function(v) {\n if (v >= LIMIT16) {\n v = -(2 * LIMIT16 - v);\n }\n return [v >> 8 & 255, v & 255];\n};\nsizeOf.SHORT = constant(2);\nencode.UINT24 = function(v) {\n return [v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.UINT24 = constant(3);\nencode.ULONG = function(v) {\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.ULONG = constant(4);\nencode.LONG = function(v) {\n if (v >= LIMIT32) {\n v = -(2 * LIMIT32 - v);\n }\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.LONG = constant(4);\nencode.FLOAT = function(v) {\n if (v > MAX_16_16 || v < MIN_16_16) {\n throw new Error(`Value ${v} is outside the range of representable values in 16.16 format`);\n }\n const fixedValue = Math.round(v * (1 << 16)) << 0;\n return encode.ULONG(fixedValue);\n};\nsizeOf.FLOAT = sizeOf.ULONG;\nencode.FIXED = encode.ULONG;\nsizeOf.FIXED = sizeOf.ULONG;\nencode.FWORD = encode.SHORT;\nsizeOf.FWORD = sizeOf.SHORT;\nencode.UFWORD = encode.USHORT;\nsizeOf.UFWORD = sizeOf.USHORT;\nencode.F2DOT14 = function(v) {\n return encode.USHORT(v * 16384);\n};\nsizeOf.F2DOT14 = sizeOf.USHORT;\nencode.LONGDATETIME = function(v) {\n return [0, 0, 0, 0, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.LONGDATETIME = constant(8);\nencode.TAG = function(v) {\n check_default.argument(v.length === 4, \"Tag should be exactly 4 ASCII characters.\");\n return [\n v.charCodeAt(0),\n v.charCodeAt(1),\n v.charCodeAt(2),\n v.charCodeAt(3)\n ];\n};\nsizeOf.TAG = constant(4);\nencode.Card8 = encode.BYTE;\nsizeOf.Card8 = sizeOf.BYTE;\nencode.Card16 = encode.USHORT;\nsizeOf.Card16 = sizeOf.USHORT;\nencode.OffSize = encode.BYTE;\nsizeOf.OffSize = sizeOf.BYTE;\nencode.SID = encode.USHORT;\nsizeOf.SID = sizeOf.USHORT;\nencode.NUMBER = function(v) {\n if (v >= -107 && v <= 107) {\n return [v + 139];\n } else if (v >= 108 && v <= 1131) {\n v = v - 108;\n return [(v >> 8) + 247, v & 255];\n } else if (v >= -1131 && v <= -108) {\n v = -v - 108;\n return [(v >> 8) + 251, v & 255];\n } else if (v >= -32768 && v <= 32767) {\n return encode.NUMBER16(v);\n } else {\n return encode.NUMBER32(v);\n }\n};\nsizeOf.NUMBER = function(v) {\n return encode.NUMBER(v).length;\n};\nencode.NUMBER16 = function(v) {\n return [28, v >> 8 & 255, v & 255];\n};\nsizeOf.NUMBER16 = constant(3);\nencode.NUMBER32 = function(v) {\n return [29, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.NUMBER32 = constant(5);\nencode.REAL = function(v) {\n let value = v.toString();\n const m = /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(value);\n if (m) {\n const epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n value = (Math.round(v * epsilon) / epsilon).toString();\n }\n let nibbles = \"\";\n for (let i = 0, ii = value.length; i < ii; i += 1) {\n const c = value[i];\n if (c === \"e\") {\n nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n } else if (c === \".\") {\n nibbles += \"a\";\n } else if (c === \"-\") {\n nibbles += \"e\";\n } else {\n nibbles += c;\n }\n }\n nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n const out = [30];\n for (let i = 0, ii = nibbles.length; i < ii; i += 2) {\n out.push(parseInt(nibbles.substr(i, 2), 16));\n }\n return out;\n};\nsizeOf.REAL = function(v) {\n return encode.REAL(v).length;\n};\nencode.NAME = encode.CHARARRAY;\nsizeOf.NAME = sizeOf.CHARARRAY;\nencode.STRING = encode.CHARARRAY;\nsizeOf.STRING = sizeOf.CHARARRAY;\ndecode.UTF8 = function(data, offset, numBytes) {\n const codePoints = [];\n const numChars = numBytes;\n for (let j = 0; j < numChars; j++, offset += 1) {\n codePoints[j] = data.getUint8(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n};\ndecode.UTF16 = function(data, offset, numBytes) {\n const codePoints = [];\n const numChars = numBytes / 2;\n for (let j = 0; j < numChars; j++, offset += 2) {\n codePoints[j] = data.getUint16(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n};\nencode.UTF16 = function(v) {\n const b = [];\n for (let i = 0; i < v.length; i += 1) {\n const codepoint = v.charCodeAt(i);\n b[b.length] = codepoint >> 8 & 255;\n b[b.length] = codepoint & 255;\n }\n return b;\n};\nsizeOf.UTF16 = function(v) {\n return v.length * 2;\n};\nvar eightBitMacEncodings = {\n \"x-mac-croatian\": (\n // Python: 'mac_croatian'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\u0160\\u2122\\xB4\\xA8\\u2260\\u017D\\xD8\\u221E\\xB1\\u2264\\u2265\\u2206\\xB5\\u2202\\u2211\\u220F\\u0161\\u222B\\xAA\\xBA\\u03A9\\u017E\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u0106\\xAB\\u010C\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u0110\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\uF8FF\\xA9\\u2044\\u20AC\\u2039\\u203A\\xC6\\xBB\\u2013\\xB7\\u201A\\u201E\\u2030\\xC2\\u0107\\xC1\\u010D\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\u0111\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u03C0\\xCB\\u02DA\\xB8\\xCA\\xE6\\u02C7\"\n ),\n \"x-mac-cyrillic\": (\n // Python: 'mac_cyrillic'\n \"\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041A\\u041B\\u041C\\u041D\\u041E\\u041F\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042A\\u042B\\u042C\\u042D\\u042E\\u042F\\u2020\\xB0\\u0490\\xA3\\xA7\\u2022\\xB6\\u0406\\xAE\\xA9\\u2122\\u0402\\u0452\\u2260\\u0403\\u0453\\u221E\\xB1\\u2264\\u2265\\u0456\\xB5\\u0491\\u0408\\u0404\\u0454\\u0407\\u0457\\u0409\\u0459\\u040A\\u045A\\u0458\\u0405\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\u040B\\u045B\\u040C\\u045C\\u0455\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u201E\\u040E\\u045E\\u040F\\u045F\\u2116\\u0401\\u0451\\u044F\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043A\\u043B\\u043C\\u043D\\u043E\\u043F\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044A\\u044B\\u044C\\u044D\\u044E\"\n ),\n \"x-mac-gaelic\": (\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u1E02\\xB1\\u2264\\u2265\\u1E03\\u010A\\u010B\\u1E0A\\u1E0B\\u1E1E\\u1E1F\\u0120\\u0121\\u1E40\\xE6\\xF8\\u1E41\\u1E56\\u1E57\\u027C\\u0192\\u017F\\u1E60\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\u1E61\\u1E9B\\xFF\\u0178\\u1E6A\\u20AC\\u2039\\u203A\\u0176\\u0177\\u1E6B\\xB7\\u1EF2\\u1EF3\\u204A\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\u2663\\xD2\\xDA\\xDB\\xD9\\u0131\\xDD\\xFD\\u0174\\u0175\\u1E84\\u1E85\\u1E80\\u1E81\\u1E82\\u1E83\"\n ),\n \"x-mac-greek\": (\n // Python: 'mac_greek'\n \"\\xC4\\xB9\\xB2\\xC9\\xB3\\xD6\\xDC\\u0385\\xE0\\xE2\\xE4\\u0384\\xA8\\xE7\\xE9\\xE8\\xEA\\xEB\\xA3\\u2122\\xEE\\xEF\\u2022\\xBD\\u2030\\xF4\\xF6\\xA6\\u20AC\\xF9\\xFB\\xFC\\u2020\\u0393\\u0394\\u0398\\u039B\\u039E\\u03A0\\xDF\\xAE\\xA9\\u03A3\\u03AA\\xA7\\u2260\\xB0\\xB7\\u0391\\xB1\\u2264\\u2265\\xA5\\u0392\\u0395\\u0396\\u0397\\u0399\\u039A\\u039C\\u03A6\\u03AB\\u03A8\\u03A9\\u03AC\\u039D\\xAC\\u039F\\u03A1\\u2248\\u03A4\\xAB\\xBB\\u2026\\xA0\\u03A5\\u03A7\\u0386\\u0388\\u0153\\u2013\\u2015\\u201C\\u201D\\u2018\\u2019\\xF7\\u0389\\u038A\\u038C\\u038E\\u03AD\\u03AE\\u03AF\\u03CC\\u038F\\u03CD\\u03B1\\u03B2\\u03C8\\u03B4\\u03B5\\u03C6\\u03B3\\u03B7\\u03B9\\u03BE\\u03BA\\u03BB\\u03BC\\u03BD\\u03BF\\u03C0\\u03CE\\u03C1\\u03C3\\u03C4\\u03B8\\u03C9\\u03C2\\u03C7\\u03C5\\u03B6\\u03CA\\u03CB\\u0390\\u03B0\\xAD\"\n ),\n \"x-mac-icelandic\": (\n // Python: 'mac_iceland'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\xDD\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\xD0\\xF0\\xDE\\xFE\\xFD\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-inuit\": (\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT\n \"\\u1403\\u1404\\u1405\\u1406\\u140A\\u140B\\u1431\\u1432\\u1433\\u1434\\u1438\\u1439\\u1449\\u144E\\u144F\\u1450\\u1451\\u1455\\u1456\\u1466\\u146D\\u146E\\u146F\\u1470\\u1472\\u1473\\u1483\\u148B\\u148C\\u148D\\u148E\\u1490\\u1491\\xB0\\u14A1\\u14A5\\u14A6\\u2022\\xB6\\u14A7\\xAE\\xA9\\u2122\\u14A8\\u14AA\\u14AB\\u14BB\\u14C2\\u14C3\\u14C4\\u14C5\\u14C7\\u14C8\\u14D0\\u14EF\\u14F0\\u14F1\\u14F2\\u14F4\\u14F5\\u1505\\u14D5\\u14D6\\u14D7\\u14D8\\u14DA\\u14DB\\u14EA\\u1528\\u1529\\u152A\\u152B\\u152D\\u2026\\xA0\\u152E\\u153E\\u1555\\u1556\\u1557\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\u1558\\u1559\\u155A\\u155D\\u1546\\u1547\\u1548\\u1549\\u154B\\u154C\\u1550\\u157F\\u1580\\u1581\\u1582\\u1583\\u1584\\u1585\\u158F\\u1590\\u1591\\u1592\\u1593\\u1594\\u1595\\u1671\\u1672\\u1673\\u1674\\u1675\\u1676\\u1596\\u15A0\\u15A1\\u15A2\\u15A3\\u15A4\\u15A5\\u15A6\\u157C\\u0141\\u0142\"\n ),\n \"x-mac-ce\": (\n // Python: 'mac_latin2'\n \"\\xC4\\u0100\\u0101\\xC9\\u0104\\xD6\\xDC\\xE1\\u0105\\u010C\\xE4\\u010D\\u0106\\u0107\\xE9\\u0179\\u017A\\u010E\\xED\\u010F\\u0112\\u0113\\u0116\\xF3\\u0117\\xF4\\xF6\\xF5\\xFA\\u011A\\u011B\\xFC\\u2020\\xB0\\u0118\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\u0119\\xA8\\u2260\\u0123\\u012E\\u012F\\u012A\\u2264\\u2265\\u012B\\u0136\\u2202\\u2211\\u0142\\u013B\\u013C\\u013D\\u013E\\u0139\\u013A\\u0145\\u0146\\u0143\\xAC\\u221A\\u0144\\u0147\\u2206\\xAB\\xBB\\u2026\\xA0\\u0148\\u0150\\xD5\\u0151\\u014C\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\u014D\\u0154\\u0155\\u0158\\u2039\\u203A\\u0159\\u0156\\u0157\\u0160\\u201A\\u201E\\u0161\\u015A\\u015B\\xC1\\u0164\\u0165\\xCD\\u017D\\u017E\\u016A\\xD3\\xD4\\u016B\\u016E\\xDA\\u016F\\u0170\\u0171\\u0172\\u0173\\xDD\\xFD\\u0137\\u017B\\u0141\\u017C\\u0122\\u02C7\"\n ),\n macintosh: (\n // Python: 'mac_roman'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\u2039\\u203A\\uFB01\\uFB02\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-romanian\": (\n // Python: 'mac_romanian'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\u0102\\u0218\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\u0103\\u0219\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\u2039\\u203A\\u021A\\u021B\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-turkish\": (\n // Python: 'mac_turkish'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u011E\\u011F\\u0130\\u0131\\u015E\\u015F\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\uF8A0\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n )\n};\ndecode.MACSTRING = function(dataView, offset, dataLength, encoding) {\n const table = eightBitMacEncodings[encoding];\n if (table === void 0) {\n return void 0;\n }\n let result = \"\";\n for (let i = 0; i < dataLength; i++) {\n const c = dataView.getUint8(offset + i);\n if (c <= 127) {\n result += String.fromCharCode(c);\n } else {\n result += table[c & 127];\n }\n }\n return result;\n};\nvar macEncodingTableCache = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\nvar macEncodingCacheKeys;\nvar getMacEncodingTable = function(encoding) {\n if (!macEncodingCacheKeys) {\n macEncodingCacheKeys = {};\n for (let e in eightBitMacEncodings) {\n macEncodingCacheKeys[e] = new String(e);\n }\n }\n const cacheKey = macEncodingCacheKeys[encoding];\n if (cacheKey === void 0) {\n return void 0;\n }\n if (macEncodingTableCache) {\n const cachedTable = macEncodingTableCache.get(cacheKey);\n if (cachedTable !== void 0) {\n return cachedTable;\n }\n }\n const decodingTable = eightBitMacEncodings[encoding];\n if (decodingTable === void 0) {\n return void 0;\n }\n const encodingTable = {};\n for (let i = 0; i < decodingTable.length; i++) {\n encodingTable[decodingTable.charCodeAt(i)] = i + 128;\n }\n if (macEncodingTableCache) {\n macEncodingTableCache.set(cacheKey, encodingTable);\n }\n return encodingTable;\n};\nencode.MACSTRING = function(str, encoding) {\n const table = getMacEncodingTable(encoding);\n if (table === void 0) {\n return void 0;\n }\n const result = [];\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c >= 128) {\n c = table[c];\n if (c === void 0) {\n return void 0;\n }\n }\n result[i] = c;\n }\n return result;\n};\nsizeOf.MACSTRING = function(str, encoding) {\n const b = encode.MACSTRING(str, encoding);\n if (b !== void 0) {\n return b.length;\n } else {\n return 0;\n }\n};\nfunction isByteEncodable(value) {\n return value >= -128 && value <= 127;\n}\nfunction encodeVarDeltaRunAsZeroes(deltas, pos, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {\n ++pos;\n ++runLength;\n }\n result.push(128 | runLength - 1);\n return pos;\n}\nfunction encodeVarDeltaRunAsBytes(deltas, offset, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n let pos = offset;\n while (pos < numDeltas && runLength < 64) {\n const value = deltas[pos];\n if (!isByteEncodable(value)) {\n break;\n }\n if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(runLength - 1);\n for (let i = offset; i < pos; ++i) {\n result.push(deltas[i] + 256 & 255);\n }\n return pos;\n}\nfunction encodeVarDeltaRunAsWords(deltas, offset, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n let pos = offset;\n while (pos < numDeltas && runLength < 64) {\n const value = deltas[pos];\n if (value === 0) {\n break;\n }\n if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(64 | runLength - 1);\n for (let i = offset; i < pos; ++i) {\n const val = deltas[i];\n result.push(val + 65536 >> 8 & 255, val + 256 & 255);\n }\n return pos;\n}\nencode.VARDELTAS = function(deltas) {\n let pos = 0;\n const result = [];\n while (pos < deltas.length) {\n const value = deltas[pos];\n if (value === 0) {\n pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);\n } else if (value >= -128 && value <= 127) {\n pos = encodeVarDeltaRunAsBytes(deltas, pos, result);\n } else {\n pos = encodeVarDeltaRunAsWords(deltas, pos, result);\n }\n }\n return result;\n};\nencode.INDEX = function(l) {\n let offset = 1;\n const offsets = [offset];\n const data = [];\n for (let i = 0; i < l.length; i += 1) {\n const v = encode.OBJECT(l[i]);\n Array.prototype.push.apply(data, v);\n offset += v.length;\n offsets.push(offset);\n }\n if (data.length === 0) {\n return [0, 0];\n }\n const encodedOffsets = [];\n const offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0;\n const offsetEncoder = [void 0, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize];\n for (let i = 0; i < offsets.length; i += 1) {\n const encodedOffset = offsetEncoder(offsets[i]);\n Array.prototype.push.apply(encodedOffsets, encodedOffset);\n }\n return Array.prototype.concat(\n encode.Card16(l.length),\n encode.OffSize(offSize),\n encodedOffsets,\n data\n );\n};\nsizeOf.INDEX = function(v) {\n return encode.INDEX(v).length;\n};\nencode.DICT = function(m) {\n let d = [];\n const keys = Object.keys(m);\n const length = keys.length;\n for (let i = 0; i < length; i += 1) {\n const k = parseInt(keys[i], 0);\n const v = m[k];\n const enc1 = encode.OPERAND(v.value, v.type);\n const enc2 = encode.OPERATOR(k);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n for (let j = 0; j < enc2.length; j++) {\n d.push(enc2[j]);\n }\n }\n return d;\n};\nsizeOf.DICT = function(m) {\n return encode.DICT(m).length;\n};\nencode.OPERATOR = function(v) {\n if (v < 1200) {\n return [v];\n } else {\n return [12, v - 1200];\n }\n};\nencode.OPERAND = function(v, type) {\n let d = [];\n if (Array.isArray(type)) {\n for (let i = 0; i < type.length; i += 1) {\n check_default.argument(v.length === type.length, \"Not enough arguments given for type\" + type);\n const enc1 = encode.OPERAND(v[i], type[i]);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n }\n } else {\n if (type === \"SID\") {\n const enc1 = encode.NUMBER(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"offset\") {\n const enc1 = encode.NUMBER32(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"number\") {\n const enc1 = encode.NUMBER(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"real\") {\n const enc1 = encode.REAL(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else {\n throw new Error(\"Unknown operand type \" + type);\n }\n }\n return d;\n};\nencode.OP = encode.BYTE;\nsizeOf.OP = sizeOf.BYTE;\nvar wmm = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\nencode.CHARSTRING = function(ops) {\n if (wmm) {\n const cachedValue = wmm.get(ops);\n if (cachedValue !== void 0) {\n return cachedValue;\n }\n }\n let d = [];\n const length = ops.length;\n for (let i = 0; i < length; i += 1) {\n const op = ops[i];\n const enc1 = encode[op.type](op.value);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n }\n if (wmm) {\n wmm.set(ops, d);\n }\n return d;\n};\nsizeOf.CHARSTRING = function(ops) {\n return encode.CHARSTRING(ops).length;\n};\nencode.OBJECT = function(v) {\n const encodingFunction = encode[v.type];\n check_default.argument(encodingFunction !== void 0, \"No encoding function for type \" + v.type);\n return encodingFunction(v.value);\n};\nsizeOf.OBJECT = function(v) {\n const sizeOfFunction = sizeOf[v.type];\n check_default.argument(sizeOfFunction !== void 0, \"No sizeOf function for type \" + v.type);\n return sizeOfFunction(v.value);\n};\nencode.TABLE = function(table) {\n let d = [];\n const length = (table.fields || []).length;\n const subtables = [];\n const subtableOffsets = [];\n for (let i = 0; i < length; i += 1) {\n const field = table.fields[i];\n const encodingFunction = encode[field.type];\n check_default.argument(encodingFunction !== void 0, \"No encoding function for field type \" + field.type + \" (\" + field.name + \")\");\n let value = table[field.name];\n if (value === void 0) {\n value = field.value;\n }\n const bytes = encodingFunction(value);\n if (field.type === \"TABLE\") {\n if (value.fields !== null) {\n subtableOffsets.push(d.length);\n subtables.push(bytes);\n }\n d.push(...[0, 0]);\n } else {\n for (let j = 0; j < bytes.length; j++) {\n d.push(bytes[j]);\n }\n }\n }\n for (let i = 0; i < subtables.length; i += 1) {\n const o = subtableOffsets[i];\n const offset = d.length;\n check_default.argument(offset < 65536, \"Table \" + table.tableName + \" too big.\");\n d[o] = offset >> 8;\n d[o + 1] = offset & 255;\n for (let j = 0; j < subtables[i].length; j++) {\n d.push(subtables[i][j]);\n }\n }\n return d;\n};\nsizeOf.TABLE = function(table) {\n let numBytes = 0;\n const length = (table.fields || []).length;\n for (let i = 0; i < length; i += 1) {\n const field = table.fields[i];\n const sizeOfFunction = sizeOf[field.type];\n check_default.argument(sizeOfFunction !== void 0, \"No sizeOf function for field type \" + field.type + \" (\" + field.name + \")\");\n let value = table[field.name];\n if (value === void 0) {\n value = field.value;\n }\n numBytes += sizeOfFunction(value);\n if (field.type === \"TABLE\") {\n numBytes += 2;\n }\n }\n return numBytes;\n};\nencode.RECORD = encode.TABLE;\nsizeOf.RECORD = sizeOf.TABLE;\nencode.LITERAL = function(v) {\n return v;\n};\nsizeOf.LITERAL = function(v) {\n return v.length;\n};\n\n// src/table.mjs\nfunction Table(tableName, fields, options) {\n if (fields && fields.length) {\n for (let i = 0; i < fields.length; i += 1) {\n const field = fields[i];\n this[field.name] = field.value;\n }\n }\n this.tableName = tableName;\n this.fields = fields;\n if (options) {\n const optionKeys = Object.keys(options);\n for (let i = 0; i < optionKeys.length; i += 1) {\n const k = optionKeys[i];\n const v = options[k];\n if (this[k] !== void 0) {\n this[k] = v;\n }\n }\n }\n}\nTable.prototype.encode = function() {\n return encode.TABLE(this);\n};\nTable.prototype.sizeOf = function() {\n return sizeOf.TABLE(this);\n};\nfunction ushortList(itemName, list, count) {\n if (count === void 0) {\n count = list.length;\n }\n const fields = new Array(list.length + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < list.length; i++) {\n fields[i + 1] = { name: itemName + i, type: \"USHORT\", value: list[i] };\n }\n return fields;\n}\nfunction tableList(itemName, records, itemCallback) {\n const count = records.length;\n const fields = new Array(count + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < count; i++) {\n fields[i + 1] = { name: itemName + i, type: \"TABLE\", value: itemCallback(records[i], i) };\n }\n return fields;\n}\nfunction recordList(itemName, records, itemCallback) {\n const count = records.length;\n let fields = [];\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < count; i++) {\n fields = fields.concat(itemCallback(records[i], i));\n }\n return fields;\n}\nfunction Coverage(coverageTable) {\n if (coverageTable.format === 1) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 1 }].concat(ushortList(\"glyph\", coverageTable.glyphs))\n );\n } else if (coverageTable.format === 2) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 2 }].concat(recordList(\"rangeRecord\", coverageTable.ranges, function(RangeRecord, i) {\n return [\n { name: \"startGlyphID\" + i, type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\" + i, type: \"USHORT\", value: RangeRecord.end },\n { name: \"startCoverageIndex\" + i, type: \"USHORT\", value: RangeRecord.index }\n ];\n }))\n );\n } else {\n check_default.assert(false, \"Coverage format must be 1 or 2.\");\n }\n}\nCoverage.prototype = Object.create(Table.prototype);\nCoverage.prototype.constructor = Coverage;\nfunction ScriptList(scriptListTable) {\n Table.call(\n this,\n \"scriptListTable\",\n recordList(\"scriptRecord\", scriptListTable, function(scriptRecord, i) {\n const script = scriptRecord.script;\n let defaultLangSys = script.defaultLangSys;\n check_default.assert(!!defaultLangSys, \"Unable to write GSUB: script \" + scriptRecord.tag + \" has no default language system.\");\n return [\n { name: \"scriptTag\" + i, type: \"TAG\", value: scriptRecord.tag },\n { name: \"script\" + i, type: \"TABLE\", value: new Table(\"scriptTable\", [\n { name: \"defaultLangSys\", type: \"TABLE\", value: new Table(\"defaultLangSys\", [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: defaultLangSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", defaultLangSys.featureIndexes))) }\n ].concat(recordList(\"langSys\", script.langSysRecords, function(langSysRecord, i2) {\n const langSys = langSysRecord.langSys;\n return [\n { name: \"langSysTag\" + i2, type: \"TAG\", value: langSysRecord.tag },\n { name: \"langSys\" + i2, type: \"TABLE\", value: new Table(\"langSys\", [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: langSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", langSys.featureIndexes))) }\n ];\n }))) }\n ];\n })\n );\n}\nScriptList.prototype = Object.create(Table.prototype);\nScriptList.prototype.constructor = ScriptList;\nfunction FeatureList(featureListTable) {\n Table.call(\n this,\n \"featureListTable\",\n recordList(\"featureRecord\", featureListTable, function(featureRecord, i) {\n const feature = featureRecord.feature;\n return [\n { name: \"featureTag\" + i, type: \"TAG\", value: featureRecord.tag },\n { name: \"feature\" + i, type: \"TABLE\", value: new Table(\"featureTable\", [\n { name: \"featureParams\", type: \"USHORT\", value: feature.featureParams }\n ].concat(ushortList(\"lookupListIndex\", feature.lookupListIndexes))) }\n ];\n })\n );\n}\nFeatureList.prototype = Object.create(Table.prototype);\nFeatureList.prototype.constructor = FeatureList;\nfunction LookupList(lookupListTable, subtableMakers3) {\n Table.call(this, \"lookupListTable\", tableList(\"lookup\", lookupListTable, function(lookupTable) {\n let subtableCallback = subtableMakers3[lookupTable.lookupType];\n check_default.assert(!!subtableCallback, \"Unable to write GSUB lookup type \" + lookupTable.lookupType + \" tables.\");\n return new Table(\"lookupTable\", [\n { name: \"lookupType\", type: \"USHORT\", value: lookupTable.lookupType },\n { name: \"lookupFlag\", type: \"USHORT\", value: lookupTable.lookupFlag }\n ].concat(tableList(\"subtable\", lookupTable.subtables, subtableCallback)));\n }));\n}\nLookupList.prototype = Object.create(Table.prototype);\nLookupList.prototype.constructor = LookupList;\nfunction ClassDef(classDefTable) {\n if (classDefTable.format === 1) {\n Table.call(\n this,\n \"classDefTable\",\n [\n { name: \"classFormat\", type: \"USHORT\", value: 1 },\n { name: \"startGlyphID\", type: \"USHORT\", value: classDefTable.startGlyph }\n ].concat(ushortList(\"glyph\", classDefTable.classes))\n );\n } else if (classDefTable.format === 2) {\n Table.call(\n this,\n \"classDefTable\",\n [{ name: \"classFormat\", type: \"USHORT\", value: 2 }].concat(recordList(\"rangeRecord\", classDefTable.ranges, function(RangeRecord, i) {\n return [\n { name: \"startGlyphID\" + i, type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\" + i, type: \"USHORT\", value: RangeRecord.end },\n { name: \"class\" + i, type: \"USHORT\", value: RangeRecord.classId }\n ];\n }))\n );\n } else {\n check_default.assert(false, \"Class format must be 1 or 2.\");\n }\n}\nClassDef.prototype = Object.create(Table.prototype);\nClassDef.prototype.constructor = ClassDef;\nvar table_default = {\n Table,\n Record: Table,\n Coverage,\n ClassDef,\n ScriptList,\n FeatureList,\n LookupList,\n ushortList,\n tableList,\n recordList\n};\n\n// src/parse.mjs\nfunction getByte(dataView, offset) {\n return dataView.getUint8(offset);\n}\nfunction getUShort(dataView, offset) {\n return dataView.getUint16(offset, false);\n}\nfunction getShort(dataView, offset) {\n return dataView.getInt16(offset, false);\n}\nfunction getUInt24(dataView, offset) {\n return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n}\nfunction getULong(dataView, offset) {\n return dataView.getUint32(offset, false);\n}\nfunction getLong(dataView, offset) {\n return dataView.getInt32(offset, false);\n}\nfunction getFixed(dataView, offset) {\n const decimal = dataView.getInt16(offset, false);\n const fraction = dataView.getUint16(offset + 2, false);\n return decimal + fraction / 65535;\n}\nfunction getTag(dataView, offset) {\n let tag = \"\";\n for (let i = offset; i < offset + 4; i += 1) {\n tag += String.fromCharCode(dataView.getInt8(i));\n }\n return tag;\n}\nfunction getOffset(dataView, offset, offSize) {\n let v = 0;\n for (let i = 0; i < offSize; i += 1) {\n v <<= 8;\n v += dataView.getUint8(offset + i);\n }\n return v;\n}\nfunction getBytes(dataView, startOffset, endOffset) {\n const bytes = [];\n for (let i = startOffset; i < endOffset; i += 1) {\n bytes.push(dataView.getUint8(i));\n }\n return bytes;\n}\nfunction bytesToString(bytes) {\n let s = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n s += String.fromCharCode(bytes[i]);\n }\n return s;\n}\nvar typeOffsets = {\n byte: 1,\n uShort: 2,\n f2dot14: 2,\n short: 2,\n uInt24: 3,\n uLong: 4,\n fixed: 4,\n longDateTime: 8,\n tag: 4\n};\nvar masks = {\n LONG_WORDS: 32768,\n WORD_DELTA_COUNT_MASK: 32767,\n SHARED_POINT_NUMBERS: 32768,\n COUNT_MASK: 4095,\n EMBEDDED_PEAK_TUPLE: 32768,\n INTERMEDIATE_REGION: 16384,\n PRIVATE_POINT_NUMBERS: 8192,\n TUPLE_INDEX_MASK: 4095,\n POINTS_ARE_WORDS: 128,\n POINT_RUN_COUNT_MASK: 127,\n DELTAS_ARE_ZERO: 128,\n DELTAS_ARE_WORDS: 64,\n DELTA_RUN_COUNT_MASK: 63,\n INNER_INDEX_BIT_COUNT_MASK: 15,\n MAP_ENTRY_SIZE_MASK: 48\n};\nfunction Parser(data, offset) {\n this.data = data;\n this.offset = offset;\n this.relativeOffset = 0;\n}\nParser.prototype.parseByte = function() {\n const v = this.data.getUint8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n};\nParser.prototype.parseChar = function() {\n const v = this.data.getInt8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n};\nParser.prototype.parseCard8 = Parser.prototype.parseByte;\nParser.prototype.parseUShort = function() {\n const v = this.data.getUint16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseCard16 = Parser.prototype.parseUShort;\nParser.prototype.parseSID = Parser.prototype.parseUShort;\nParser.prototype.parseOffset16 = Parser.prototype.parseUShort;\nParser.prototype.parseShort = function() {\n const v = this.data.getInt16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseF2Dot14 = function() {\n const v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseUInt24 = function() {\n const v = getUInt24(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 3;\n return v;\n};\nParser.prototype.parseULong = function() {\n const v = getULong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseLong = function() {\n const v = getLong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseOffset32 = Parser.prototype.parseULong;\nParser.prototype.parseFixed = function() {\n const v = getFixed(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseString = function(length) {\n const dataView = this.data;\n const offset = this.offset + this.relativeOffset;\n let string = \"\";\n this.relativeOffset += length;\n for (let i = 0; i < length; i++) {\n string += String.fromCharCode(dataView.getUint8(offset + i));\n }\n return string;\n};\nParser.prototype.parseTag = function() {\n return this.parseString(4);\n};\nParser.prototype.parseLongDateTime = function() {\n let v = getULong(this.data, this.offset + this.relativeOffset + 4);\n v -= 2082844800;\n this.relativeOffset += 8;\n return v;\n};\nParser.prototype.parseVersion = function(minorBase) {\n const major = getUShort(this.data, this.offset + this.relativeOffset);\n const minor = getUShort(this.data, this.offset + this.relativeOffset + 2);\n this.relativeOffset += 4;\n if (minorBase === void 0) minorBase = 4096;\n return major + minor / minorBase / 10;\n};\nParser.prototype.skip = function(type, amount) {\n if (amount === void 0) {\n amount = 1;\n }\n this.relativeOffset += typeOffsets[type] * amount;\n};\nParser.prototype.parseULongList = function(count) {\n if (count === void 0) {\n count = this.parseULong();\n }\n const offsets = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n offsets[i] = dataView.getUint32(offset);\n offset += 4;\n }\n this.relativeOffset += count * 4;\n return offsets;\n};\nParser.prototype.parseOffset16List = Parser.prototype.parseUShortList = function(count) {\n if (count === void 0) {\n count = this.parseUShort();\n }\n const offsets = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n offsets[i] = dataView.getUint16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return offsets;\n};\nParser.prototype.parseShortList = function(count) {\n const list = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n list[i] = dataView.getInt16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return list;\n};\nParser.prototype.parseByteList = function(count) {\n const list = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n list[i] = dataView.getUint8(offset++);\n }\n this.relativeOffset += count;\n return list;\n};\nParser.prototype.parseList = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseUShort();\n }\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n};\nParser.prototype.parseList32 = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseULong();\n }\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n};\nParser.prototype.parseRecordList = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseUShort();\n }\n const records = new Array(count);\n const fields = Object.keys(recordDescription);\n for (let i = 0; i < count; i++) {\n const rec = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n};\nParser.prototype.parseRecordList32 = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseULong();\n }\n const records = new Array(count);\n const fields = Object.keys(recordDescription);\n for (let i = 0; i < count; i++) {\n const rec = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n};\nParser.prototype.parseTupleRecords = function(tupleCount, axisCount) {\n let tuples = [];\n for (let i = 0; i < tupleCount; i++) {\n let tuple = [];\n for (let axisIndex = 0; axisIndex < axisCount; axisIndex++) {\n tuple.push(this.parseF2Dot14());\n }\n tuples.push(tuple);\n }\n return tuples;\n};\nParser.prototype.parseStruct = function(description) {\n if (typeof description === \"function\") {\n return description.call(this);\n } else {\n const fields = Object.keys(description);\n const struct = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = description[fieldName];\n struct[fieldName] = fieldType.call(this);\n }\n return struct;\n }\n};\nParser.prototype.parseValueRecord = function(valueFormat) {\n if (valueFormat === void 0) {\n valueFormat = this.parseUShort();\n }\n if (valueFormat === 0) {\n return;\n }\n const valueRecord = {};\n if (valueFormat & 1) {\n valueRecord.xPlacement = this.parseShort();\n }\n if (valueFormat & 2) {\n valueRecord.yPlacement = this.parseShort();\n }\n if (valueFormat & 4) {\n valueRecord.xAdvance = this.parseShort();\n }\n if (valueFormat & 8) {\n valueRecord.yAdvance = this.parseShort();\n }\n if (valueFormat & 16) {\n valueRecord.xPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 32) {\n valueRecord.yPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 64) {\n valueRecord.xAdvDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 128) {\n valueRecord.yAdvDevice = void 0;\n this.parseShort();\n }\n return valueRecord;\n};\nParser.prototype.parseValueRecordList = function() {\n const valueFormat = this.parseUShort();\n const valueCount = this.parseUShort();\n const values = new Array(valueCount);\n for (let i = 0; i < valueCount; i++) {\n values[i] = this.parseValueRecord(valueFormat);\n }\n return values;\n};\nParser.prototype.parsePointer = function(description) {\n const structOffset = this.parseOffset16();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n};\nParser.prototype.parsePointer32 = function(description) {\n const structOffset = this.parseOffset32();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n};\nParser.prototype.parseListOfLists = function(itemCallback) {\n const offsets = this.parseOffset16List();\n const count = offsets.length;\n const relativeOffset = this.relativeOffset;\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n const start = offsets[i];\n if (start === 0) {\n list[i] = void 0;\n continue;\n }\n this.relativeOffset = start;\n if (itemCallback) {\n const subOffsets = this.parseOffset16List();\n const subList = new Array(subOffsets.length);\n for (let j = 0; j < subOffsets.length; j++) {\n this.relativeOffset = start + subOffsets[j];\n subList[j] = itemCallback.call(this);\n }\n list[i] = subList;\n } else {\n list[i] = this.parseUShortList();\n }\n }\n this.relativeOffset = relativeOffset;\n return list;\n};\nParser.prototype.parseCoverage = function() {\n const startOffset = this.offset + this.relativeOffset;\n const format = this.parseUShort();\n const count = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n glyphs: this.parseUShortList(count)\n };\n } else if (format === 2) {\n const ranges = new Array(count);\n for (let i = 0; i < count; i++) {\n ranges[i] = {\n start: this.parseUShort(),\n end: this.parseUShort(),\n index: this.parseUShort()\n };\n }\n return {\n format: 2,\n ranges\n };\n }\n throw new Error(\"0x\" + startOffset.toString(16) + \": Coverage format must be 1 or 2.\");\n};\nParser.prototype.parseClassDef = function() {\n const startOffset = this.offset + this.relativeOffset;\n const format = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n startGlyph: this.parseUShort(),\n classes: this.parseUShortList()\n };\n } else if (format === 2) {\n return {\n format: 2,\n ranges: this.parseRecordList({\n start: Parser.uShort,\n end: Parser.uShort,\n classId: Parser.uShort\n })\n };\n }\n console.warn(`0x${startOffset.toString(16)}: This font file uses an invalid ClassDef format of ${format}. It might be corrupted and should be reacquired if it doesn't display as intended.`);\n return {\n format\n };\n};\nParser.list = function(count, itemCallback) {\n return function() {\n return this.parseList(count, itemCallback);\n };\n};\nParser.list32 = function(count, itemCallback) {\n return function() {\n return this.parseList32(count, itemCallback);\n };\n};\nParser.recordList = function(count, recordDescription) {\n return function() {\n return this.parseRecordList(count, recordDescription);\n };\n};\nParser.recordList32 = function(count, recordDescription) {\n return function() {\n return this.parseRecordList32(count, recordDescription);\n };\n};\nParser.pointer = function(description) {\n return function() {\n return this.parsePointer(description);\n };\n};\nParser.pointer32 = function(description) {\n return function() {\n return this.parsePointer32(description);\n };\n};\nParser.tag = Parser.prototype.parseTag;\nParser.byte = Parser.prototype.parseByte;\nParser.uShort = Parser.offset16 = Parser.prototype.parseUShort;\nParser.uShortList = Parser.prototype.parseUShortList;\nParser.uInt24 = Parser.prototype.parseUInt24;\nParser.uLong = Parser.offset32 = Parser.prototype.parseULong;\nParser.uLongList = Parser.prototype.parseULongList;\nParser.fixed = Parser.prototype.parseFixed;\nParser.f2Dot14 = Parser.prototype.parseF2Dot14;\nParser.struct = Parser.prototype.parseStruct;\nParser.coverage = Parser.prototype.parseCoverage;\nParser.classDef = Parser.prototype.parseClassDef;\nvar langSysTable = {\n reserved: Parser.uShort,\n reqFeatureIndex: Parser.uShort,\n featureIndexes: Parser.uShortList\n};\nParser.prototype.parseScriptList = function() {\n return this.parsePointer(Parser.recordList({\n tag: Parser.tag,\n script: Parser.pointer({\n defaultLangSys: Parser.pointer(langSysTable),\n langSysRecords: Parser.recordList({\n tag: Parser.tag,\n langSys: Parser.pointer(langSysTable)\n })\n })\n })) || [];\n};\nParser.prototype.parseFeatureList = function() {\n return this.parsePointer(Parser.recordList({\n tag: Parser.tag,\n feature: Parser.pointer({\n featureParams: Parser.offset16,\n lookupListIndexes: Parser.uShortList\n })\n })) || [];\n};\nParser.prototype.parseLookupList = function(lookupTableParsers) {\n return this.parsePointer(Parser.list(Parser.pointer(function() {\n const lookupType = this.parseUShort();\n check_default.argument(1 <= lookupType && lookupType <= 9, \"GPOS/GSUB lookup type \" + lookupType + \" unknown.\");\n const lookupFlag = this.parseUShort();\n const useMarkFilteringSet = lookupFlag & 16;\n return {\n lookupType,\n lookupFlag,\n subtables: this.parseList(Parser.pointer(lookupTableParsers[lookupType])),\n markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0\n };\n }))) || [];\n};\nParser.prototype.parseFeatureVariationsList = function() {\n return this.parsePointer32(function() {\n const majorVersion = this.parseUShort();\n const minorVersion = this.parseUShort();\n check_default.argument(majorVersion === 1 && minorVersion < 1, \"GPOS/GSUB feature variations table unknown.\");\n const featureVariations = this.parseRecordList32({\n conditionSetOffset: Parser.offset32,\n featureTableSubstitutionOffset: Parser.offset32\n });\n return featureVariations;\n }) || [];\n};\nParser.prototype.parseVariationStore = function() {\n const vsOffset = this.relativeOffset;\n const length = this.parseUShort();\n const variationStore = {\n itemVariationStore: this.parseItemVariationStore()\n };\n this.relativeOffset = vsOffset + length + 2;\n return variationStore;\n};\nParser.prototype.parseItemVariationStore = function() {\n const itemStoreOffset = this.relativeOffset;\n const iVStore = {\n format: this.parseUShort(),\n variationRegions: [],\n itemVariationSubtables: []\n };\n const variationRegionListOffset = this.parseOffset32();\n const itemVariationDataCount = this.parseUShort();\n const itemVariationDataOffsets = this.parseULongList(itemVariationDataCount);\n this.relativeOffset = itemStoreOffset + variationRegionListOffset;\n iVStore.variationRegions = this.parseVariationRegionList();\n for (let i = 0; i < itemVariationDataCount; i++) {\n const subtableOffset = itemVariationDataOffsets[i];\n this.relativeOffset = itemStoreOffset + subtableOffset;\n iVStore.itemVariationSubtables.push(this.parseItemVariationSubtable());\n }\n return iVStore;\n};\nParser.prototype.parseVariationRegionList = function() {\n const axisCount = this.parseUShort();\n const regionCount = this.parseUShort();\n return this.parseRecordList(regionCount, {\n regionAxes: Parser.recordList(axisCount, {\n startCoord: Parser.f2Dot14,\n peakCoord: Parser.f2Dot14,\n endCoord: Parser.f2Dot14\n })\n });\n};\nParser.prototype.parseItemVariationSubtable = function() {\n const itemCount = this.parseUShort();\n const wordDeltaCount = this.parseUShort();\n const regionIndexes = this.parseUShortList();\n const regionIndexCount = regionIndexes.length;\n const subtable = {\n regionIndexes,\n deltaSets: itemCount && regionIndexCount ? this.parseDeltaSets(itemCount, wordDeltaCount, regionIndexCount) : []\n };\n return subtable;\n};\nParser.prototype.parseDeltaSetIndexMap = function() {\n const format = this.parseByte();\n const entryFormat = this.parseByte();\n const map = [];\n let mapCount = 0;\n switch (format) {\n case 0:\n mapCount = this.parseUShort();\n break;\n case 1:\n mapCount = this.parseULong();\n break;\n default:\n console.error(`unsupported DeltaSetIndexMap format ${format}`);\n }\n if (!mapCount) return {\n format,\n entryFormat\n };\n const bitCount = (entryFormat & masks.INNER_INDEX_BIT_COUNT_MASK) + 1;\n const entrySize = ((entryFormat & masks.MAP_ENTRY_SIZE_MASK) >> 4) + 1;\n for (let n = 0; n < mapCount; n++) {\n let entry;\n if (entrySize === 1) {\n entry = this.parseByte();\n } else if (entrySize === 2) {\n entry = this.parseUShort();\n } else if (entrySize === 3) {\n entry = this.parseUInt24();\n } else if (entrySize === 4) {\n entry = this.parseULong();\n } else {\n throw new Error(`Invalid entry size of ${entrySize}`);\n }\n const outerIndex = entry >> bitCount;\n const innerIndex = entry & (1 << bitCount) - 1;\n map.push({ outerIndex, innerIndex });\n }\n return {\n format,\n entryFormat,\n map\n };\n};\nParser.prototype.parseDeltaSets = function(itemCount, wordDeltaCount, regionIndexCount) {\n const deltas = Array.from({ length: itemCount }, () => []);\n const longFlag = wordDeltaCount & masks.LONG_WORDS;\n const wordCount = wordDeltaCount & masks.WORD_DELTA_COUNT_MASK;\n if (wordCount > regionIndexCount) {\n throw Error(\"wordCount must be less than or equal to regionIndexCount\");\n }\n const wordParser = (longFlag ? this.parseLong : this.parseShort).bind(this);\n const restParser = (longFlag ? this.parseShort : this.parseChar).bind(this);\n for (let i = 0; i < itemCount; i++) {\n for (let j = 0; j < regionIndexCount; j++) {\n if (j < wordCount) {\n deltas[i].push(wordParser());\n } else {\n deltas[i].push(restParser());\n }\n }\n }\n return deltas;\n};\nParser.prototype.parseTupleVariationStoreList = function(axisCount, flavor, glyphs) {\n const glyphCount = this.parseUShort();\n const flags = this.parseUShort();\n const offsetSizeIs32Bit = flags & 1;\n const glyphVariationDataArrayOffset = this.parseOffset32();\n const parseOffset = (offsetSizeIs32Bit ? this.parseULong : this.parseUShort).bind(this);\n const glyphVariations = {};\n let currentOffset = parseOffset();\n if (!offsetSizeIs32Bit) currentOffset *= 2;\n let nextOffset;\n for (let i = 0; i < glyphCount; i++) {\n nextOffset = parseOffset();\n if (!offsetSizeIs32Bit) nextOffset *= 2;\n const length = nextOffset - currentOffset;\n glyphVariations[i] = length ? this.parseTupleVariationStore(\n glyphVariationDataArrayOffset + currentOffset,\n axisCount,\n flavor,\n glyphs,\n i\n ) : void 0;\n currentOffset = nextOffset;\n }\n return glyphVariations;\n};\nParser.prototype.parseTupleVariationStore = function(tableOffset, axisCount, flavor, glyphs, glyphIndex) {\n const relativeOffset = this.relativeOffset;\n this.relativeOffset = tableOffset;\n if (flavor === \"cvar\") {\n this.relativeOffset += 4;\n }\n const tupleVariationCount = this.parseUShort();\n const hasSharedPoints = !!(tupleVariationCount & masks.SHARED_POINT_NUMBERS);\n const count = tupleVariationCount & masks.COUNT_MASK;\n let dataOffset = this.parseOffset16();\n const headers = [];\n let sharedPoints = [];\n for (let h = 0; h < count; h++) {\n const headerData = this.parseTupleVariationHeader(axisCount, flavor);\n headers.push(headerData);\n }\n if (this.relativeOffset !== tableOffset + dataOffset) {\n console.warn(`Unexpected offset after parsing tuple variation headers! Expected ${tableOffset + dataOffset}, actually ${this.relativeOffset}`);\n this.relativeOffset = tableOffset + dataOffset;\n }\n if (hasSharedPoints) {\n sharedPoints = this.parsePackedPointNumbers();\n }\n let serializedDataOffset = this.relativeOffset;\n for (let h = 0; h < count; h++) {\n const header = headers[h];\n header.privatePoints = [];\n this.relativeOffset = serializedDataOffset;\n if (flavor === \"cvar\" && !header.peakTuple) {\n console.warn(\"An embedded peak tuple is required in TupleVariationHeaders for the cvar table.\");\n }\n if (header.flags.privatePointNumbers) {\n header.privatePoints = this.parsePackedPointNumbers();\n }\n delete header.flags;\n const deltasOffset = this.offset;\n const deltasRelativeOffset = this.relativeOffset;\n const defineDeltas = (propertyName) => {\n let _deltas = void 0;\n let _deltasY = void 0;\n const parseDeltas = () => {\n let pointsCount = 0;\n if (flavor === \"gvar\") {\n pointsCount = header.privatePoints.length || sharedPoints.length;\n if (!pointsCount) {\n const glyph = glyphs.get(glyphIndex);\n glyph.path;\n pointsCount = glyph.points.length;\n pointsCount += 4;\n }\n } else if (flavor === \"cvar\") {\n pointsCount = glyphs.length;\n }\n this.offset = deltasOffset;\n this.relativeOffset = deltasRelativeOffset;\n _deltas = this.parsePackedDeltas(pointsCount);\n if (flavor === \"gvar\") {\n _deltasY = this.parsePackedDeltas(pointsCount);\n }\n };\n return {\n configurable: true,\n get: function() {\n if (_deltas === void 0) parseDeltas();\n return propertyName === \"deltasY\" ? _deltasY : _deltas;\n },\n set: function(deltas) {\n if (_deltas === void 0) parseDeltas();\n if (propertyName === \"deltasY\") {\n _deltasY = deltas;\n } else {\n _deltas = deltas;\n }\n }\n };\n };\n Object.defineProperty(header, \"deltas\", defineDeltas.call(this, \"deltas\"));\n if (flavor === \"gvar\") {\n Object.defineProperty(header, \"deltasY\", defineDeltas.call(this, \"deltasY\"));\n }\n serializedDataOffset += header.variationDataSize;\n delete header.variationDataSize;\n }\n this.relativeOffset = relativeOffset;\n const result = {\n headers\n };\n result.sharedPoints = sharedPoints;\n return result;\n};\nParser.prototype.parseTupleVariationHeader = function(axisCount, flavor) {\n const variationDataSize = this.parseUShort();\n const tupleIndex = this.parseUShort();\n const embeddedPeakTuple = !!(tupleIndex & masks.EMBEDDED_PEAK_TUPLE);\n const intermediateRegion = !!(tupleIndex & masks.INTERMEDIATE_REGION);\n const privatePointNumbers = !!(tupleIndex & masks.PRIVATE_POINT_NUMBERS);\n const sharedTupleRecordsIndex = embeddedPeakTuple ? void 0 : tupleIndex & masks.TUPLE_INDEX_MASK;\n const peakTuple = embeddedPeakTuple ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const intermediateStartTuple = intermediateRegion ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const intermediateEndTuple = intermediateRegion ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const result = {\n variationDataSize,\n peakTuple,\n intermediateStartTuple,\n intermediateEndTuple,\n flags: {\n embeddedPeakTuple,\n intermediateRegion,\n privatePointNumbers\n }\n };\n if (flavor === \"gvar\") {\n result.sharedTupleRecordsIndex = sharedTupleRecordsIndex;\n }\n return result;\n};\nParser.prototype.parsePackedPointNumbers = function() {\n const countByte1 = this.parseByte();\n const points = [];\n let totalPointCount = countByte1;\n if (countByte1 >= 128) {\n const countByte2 = this.parseByte();\n totalPointCount = (countByte1 & masks.POINT_RUN_COUNT_MASK) << 8 | countByte2;\n }\n let lastPoint = 0;\n while (points.length < totalPointCount) {\n const controlByte = this.parseByte();\n const numbersAre16Bit = !!(controlByte & masks.POINTS_ARE_WORDS);\n let runCount = (controlByte & masks.POINT_RUN_COUNT_MASK) + 1;\n for (let i = 0; i < runCount && points.length < totalPointCount; i++) {\n let pointDelta;\n if (numbersAre16Bit) {\n pointDelta = this.parseUShort();\n } else {\n pointDelta = this.parseByte();\n }\n lastPoint = lastPoint + pointDelta;\n points.push(lastPoint);\n }\n }\n return points;\n};\nParser.prototype.parsePackedDeltas = function(expectedCount) {\n const deltas = [];\n while (deltas.length < expectedCount) {\n const controlByte = this.parseByte();\n const zeroData = !!(controlByte & masks.DELTAS_ARE_ZERO);\n const deltaWords = !!(controlByte & masks.DELTAS_ARE_WORDS);\n const runCount = (controlByte & masks.DELTA_RUN_COUNT_MASK) + 1;\n for (let i = 0; i < runCount && deltas.length < expectedCount; i++) {\n if (zeroData) {\n deltas.push(0);\n } else if (deltaWords) {\n deltas.push(this.parseShort());\n } else {\n deltas.push(this.parseChar());\n }\n }\n }\n return deltas;\n};\nvar parse_default = {\n getByte,\n getCard8: getByte,\n getUShort,\n getCard16: getUShort,\n getShort,\n getUInt24,\n getULong,\n getFixed,\n getTag,\n getOffset,\n getBytes,\n bytesToString,\n Parser\n};\n\n// src/tables/name.mjs\nvar nameTableNames = [\n \"copyright\",\n // 0\n \"fontFamily\",\n // 1\n \"fontSubfamily\",\n // 2\n \"uniqueID\",\n // 3\n \"fullName\",\n // 4\n \"version\",\n // 5\n \"postScriptName\",\n // 6\n \"trademark\",\n // 7\n \"manufacturer\",\n // 8\n \"designer\",\n // 9\n \"description\",\n // 10\n \"manufacturerURL\",\n // 11\n \"designerURL\",\n // 12\n \"license\",\n // 13\n \"licenseURL\",\n // 14\n \"reserved\",\n // 15\n \"preferredFamily\",\n // 16\n \"preferredSubfamily\",\n // 17\n \"compatibleFullName\",\n // 18\n \"sampleText\",\n // 19\n \"postScriptFindFontName\",\n // 20\n \"wwsFamily\",\n // 21\n \"wwsSubfamily\"\n // 22\n];\nvar macLanguages = {\n 0: \"en\",\n 1: \"fr\",\n 2: \"de\",\n 3: \"it\",\n 4: \"nl\",\n 5: \"sv\",\n 6: \"es\",\n 7: \"da\",\n 8: \"pt\",\n 9: \"no\",\n 10: \"he\",\n 11: \"ja\",\n 12: \"ar\",\n 13: \"fi\",\n 14: \"el\",\n 15: \"is\",\n 16: \"mt\",\n 17: \"tr\",\n 18: \"hr\",\n 19: \"zh-Hant\",\n 20: \"ur\",\n 21: \"hi\",\n 22: \"th\",\n 23: \"ko\",\n 24: \"lt\",\n 25: \"pl\",\n 26: \"hu\",\n 27: \"es\",\n 28: \"lv\",\n 29: \"se\",\n 30: \"fo\",\n 31: \"fa\",\n 32: \"ru\",\n 33: \"zh\",\n 34: \"nl-BE\",\n 35: \"ga\",\n 36: \"sq\",\n 37: \"ro\",\n 38: \"cz\",\n 39: \"sk\",\n 40: \"si\",\n 41: \"yi\",\n 42: \"sr\",\n 43: \"mk\",\n 44: \"bg\",\n 45: \"uk\",\n 46: \"be\",\n 47: \"uz\",\n 48: \"kk\",\n 49: \"az-Cyrl\",\n 50: \"az-Arab\",\n 51: \"hy\",\n 52: \"ka\",\n 53: \"mo\",\n 54: \"ky\",\n 55: \"tg\",\n 56: \"tk\",\n 57: \"mn-CN\",\n 58: \"mn\",\n 59: \"ps\",\n 60: \"ks\",\n 61: \"ku\",\n 62: \"sd\",\n 63: \"bo\",\n 64: \"ne\",\n 65: \"sa\",\n 66: \"mr\",\n 67: \"bn\",\n 68: \"as\",\n 69: \"gu\",\n 70: \"pa\",\n 71: \"or\",\n 72: \"ml\",\n 73: \"kn\",\n 74: \"ta\",\n 75: \"te\",\n 76: \"si\",\n 77: \"my\",\n 78: \"km\",\n 79: \"lo\",\n 80: \"vi\",\n 81: \"id\",\n 82: \"tl\",\n 83: \"ms\",\n 84: \"ms-Arab\",\n 85: \"am\",\n 86: \"ti\",\n 87: \"om\",\n 88: \"so\",\n 89: \"sw\",\n 90: \"rw\",\n 91: \"rn\",\n 92: \"ny\",\n 93: \"mg\",\n 94: \"eo\",\n 128: \"cy\",\n 129: \"eu\",\n 130: \"ca\",\n 131: \"la\",\n 132: \"qu\",\n 133: \"gn\",\n 134: \"ay\",\n 135: \"tt\",\n 136: \"ug\",\n 137: \"dz\",\n 138: \"jv\",\n 139: \"su\",\n 140: \"gl\",\n 141: \"af\",\n 142: \"br\",\n 143: \"iu\",\n 144: \"gd\",\n 145: \"gv\",\n 146: \"ga\",\n 147: \"to\",\n 148: \"el-polyton\",\n 149: \"kl\",\n 150: \"az\",\n 151: \"nn\"\n};\nvar macLanguageToScript = {\n 0: 0,\n // langEnglish → smRoman\n 1: 0,\n // langFrench → smRoman\n 2: 0,\n // langGerman → smRoman\n 3: 0,\n // langItalian → smRoman\n 4: 0,\n // langDutch → smRoman\n 5: 0,\n // langSwedish → smRoman\n 6: 0,\n // langSpanish → smRoman\n 7: 0,\n // langDanish → smRoman\n 8: 0,\n // langPortuguese → smRoman\n 9: 0,\n // langNorwegian → smRoman\n 10: 5,\n // langHebrew → smHebrew\n 11: 1,\n // langJapanese → smJapanese\n 12: 4,\n // langArabic → smArabic\n 13: 0,\n // langFinnish → smRoman\n 14: 6,\n // langGreek → smGreek\n 15: 0,\n // langIcelandic → smRoman (modified)\n 16: 0,\n // langMaltese → smRoman\n 17: 0,\n // langTurkish → smRoman (modified)\n 18: 0,\n // langCroatian → smRoman (modified)\n 19: 2,\n // langTradChinese → smTradChinese\n 20: 4,\n // langUrdu → smArabic\n 21: 9,\n // langHindi → smDevanagari\n 22: 21,\n // langThai → smThai\n 23: 3,\n // langKorean → smKorean\n 24: 29,\n // langLithuanian → smCentralEuroRoman\n 25: 29,\n // langPolish → smCentralEuroRoman\n 26: 29,\n // langHungarian → smCentralEuroRoman\n 27: 29,\n // langEstonian → smCentralEuroRoman\n 28: 29,\n // langLatvian → smCentralEuroRoman\n 29: 0,\n // langSami → smRoman\n 30: 0,\n // langFaroese → smRoman (modified)\n 31: 4,\n // langFarsi → smArabic (modified)\n 32: 7,\n // langRussian → smCyrillic\n 33: 25,\n // langSimpChinese → smSimpChinese\n 34: 0,\n // langFlemish → smRoman\n 35: 0,\n // langIrishGaelic → smRoman (modified)\n 36: 0,\n // langAlbanian → smRoman\n 37: 0,\n // langRomanian → smRoman (modified)\n 38: 29,\n // langCzech → smCentralEuroRoman\n 39: 29,\n // langSlovak → smCentralEuroRoman\n 40: 0,\n // langSlovenian → smRoman (modified)\n 41: 5,\n // langYiddish → smHebrew\n 42: 7,\n // langSerbian → smCyrillic\n 43: 7,\n // langMacedonian → smCyrillic\n 44: 7,\n // langBulgarian → smCyrillic\n 45: 7,\n // langUkrainian → smCyrillic (modified)\n 46: 7,\n // langByelorussian → smCyrillic\n 47: 7,\n // langUzbek → smCyrillic\n 48: 7,\n // langKazakh → smCyrillic\n 49: 7,\n // langAzerbaijani → smCyrillic\n 50: 4,\n // langAzerbaijanAr → smArabic\n 51: 24,\n // langArmenian → smArmenian\n 52: 23,\n // langGeorgian → smGeorgian\n 53: 7,\n // langMoldavian → smCyrillic\n 54: 7,\n // langKirghiz → smCyrillic\n 55: 7,\n // langTajiki → smCyrillic\n 56: 7,\n // langTurkmen → smCyrillic\n 57: 27,\n // langMongolian → smMongolian\n 58: 7,\n // langMongolianCyr → smCyrillic\n 59: 4,\n // langPashto → smArabic\n 60: 4,\n // langKurdish → smArabic\n 61: 4,\n // langKashmiri → smArabic\n 62: 4,\n // langSindhi → smArabic\n 63: 26,\n // langTibetan → smTibetan\n 64: 9,\n // langNepali → smDevanagari\n 65: 9,\n // langSanskrit → smDevanagari\n 66: 9,\n // langMarathi → smDevanagari\n 67: 13,\n // langBengali → smBengali\n 68: 13,\n // langAssamese → smBengali\n 69: 11,\n // langGujarati → smGujarati\n 70: 10,\n // langPunjabi → smGurmukhi\n 71: 12,\n // langOriya → smOriya\n 72: 17,\n // langMalayalam → smMalayalam\n 73: 16,\n // langKannada → smKannada\n 74: 14,\n // langTamil → smTamil\n 75: 15,\n // langTelugu → smTelugu\n 76: 18,\n // langSinhalese → smSinhalese\n 77: 19,\n // langBurmese → smBurmese\n 78: 20,\n // langKhmer → smKhmer\n 79: 22,\n // langLao → smLao\n 80: 30,\n // langVietnamese → smVietnamese\n 81: 0,\n // langIndonesian → smRoman\n 82: 0,\n // langTagalog → smRoman\n 83: 0,\n // langMalayRoman → smRoman\n 84: 4,\n // langMalayArabic → smArabic\n 85: 28,\n // langAmharic → smEthiopic\n 86: 28,\n // langTigrinya → smEthiopic\n 87: 28,\n // langOromo → smEthiopic\n 88: 0,\n // langSomali → smRoman\n 89: 0,\n // langSwahili → smRoman\n 90: 0,\n // langKinyarwanda → smRoman\n 91: 0,\n // langRundi → smRoman\n 92: 0,\n // langNyanja → smRoman\n 93: 0,\n // langMalagasy → smRoman\n 94: 0,\n // langEsperanto → smRoman\n 128: 0,\n // langWelsh → smRoman (modified)\n 129: 0,\n // langBasque → smRoman\n 130: 0,\n // langCatalan → smRoman\n 131: 0,\n // langLatin → smRoman\n 132: 0,\n // langQuechua → smRoman\n 133: 0,\n // langGuarani → smRoman\n 134: 0,\n // langAymara → smRoman\n 135: 7,\n // langTatar → smCyrillic\n 136: 4,\n // langUighur → smArabic\n 137: 26,\n // langDzongkha → smTibetan\n 138: 0,\n // langJavaneseRom → smRoman\n 139: 0,\n // langSundaneseRom → smRoman\n 140: 0,\n // langGalician → smRoman\n 141: 0,\n // langAfrikaans → smRoman\n 142: 0,\n // langBreton → smRoman (modified)\n 143: 28,\n // langInuktitut → smEthiopic (modified)\n 144: 0,\n // langScottishGaelic → smRoman (modified)\n 145: 0,\n // langManxGaelic → smRoman (modified)\n 146: 0,\n // langIrishGaelicScript → smRoman (modified)\n 147: 0,\n // langTongan → smRoman\n 148: 6,\n // langGreekAncient → smRoman\n 149: 0,\n // langGreenlandic → smRoman\n 150: 0,\n // langAzerbaijanRoman → smRoman\n 151: 0\n // langNynorsk → smRoman\n};\nvar windowsLanguages = {\n 1078: \"af\",\n 1052: \"sq\",\n 1156: \"gsw\",\n 1118: \"am\",\n 5121: \"ar-DZ\",\n 15361: \"ar-BH\",\n 3073: \"ar\",\n 2049: \"ar-IQ\",\n 11265: \"ar-JO\",\n 13313: \"ar-KW\",\n 12289: \"ar-LB\",\n 4097: \"ar-LY\",\n 6145: \"ary\",\n 8193: \"ar-OM\",\n 16385: \"ar-QA\",\n 1025: \"ar-SA\",\n 10241: \"ar-SY\",\n 7169: \"aeb\",\n 14337: \"ar-AE\",\n 9217: \"ar-YE\",\n 1067: \"hy\",\n 1101: \"as\",\n 2092: \"az-Cyrl\",\n 1068: \"az\",\n 1133: \"ba\",\n 1069: \"eu\",\n 1059: \"be\",\n 2117: \"bn\",\n 1093: \"bn-IN\",\n 8218: \"bs-Cyrl\",\n 5146: \"bs\",\n 1150: \"br\",\n 1026: \"bg\",\n 1027: \"ca\",\n 3076: \"zh-HK\",\n 5124: \"zh-MO\",\n 2052: \"zh\",\n 4100: \"zh-SG\",\n 1028: \"zh-TW\",\n 1155: \"co\",\n 1050: \"hr\",\n 4122: \"hr-BA\",\n 1029: \"cs\",\n 1030: \"da\",\n 1164: \"prs\",\n 1125: \"dv\",\n 2067: \"nl-BE\",\n 1043: \"nl\",\n 3081: \"en-AU\",\n 10249: \"en-BZ\",\n 4105: \"en-CA\",\n 9225: \"en-029\",\n 16393: \"en-IN\",\n 6153: \"en-IE\",\n 8201: \"en-JM\",\n 17417: \"en-MY\",\n 5129: \"en-NZ\",\n 13321: \"en-PH\",\n 18441: \"en-SG\",\n 7177: \"en-ZA\",\n 11273: \"en-TT\",\n 2057: \"en-GB\",\n 1033: \"en\",\n 12297: \"en-ZW\",\n 1061: \"et\",\n 1080: \"fo\",\n 1124: \"fil\",\n 1035: \"fi\",\n 2060: \"fr-BE\",\n 3084: \"fr-CA\",\n 1036: \"fr\",\n 5132: \"fr-LU\",\n 6156: \"fr-MC\",\n 4108: \"fr-CH\",\n 1122: \"fy\",\n 1110: \"gl\",\n 1079: \"ka\",\n 3079: \"de-AT\",\n 1031: \"de\",\n 5127: \"de-LI\",\n 4103: \"de-LU\",\n 2055: \"de-CH\",\n 1032: \"el\",\n 1135: \"kl\",\n 1095: \"gu\",\n 1128: \"ha\",\n 1037: \"he\",\n 1081: \"hi\",\n 1038: \"hu\",\n 1039: \"is\",\n 1136: \"ig\",\n 1057: \"id\",\n 1117: \"iu\",\n 2141: \"iu-Latn\",\n 2108: \"ga\",\n 1076: \"xh\",\n 1077: \"zu\",\n 1040: \"it\",\n 2064: \"it-CH\",\n 1041: \"ja\",\n 1099: \"kn\",\n 1087: \"kk\",\n 1107: \"km\",\n 1158: \"quc\",\n 1159: \"rw\",\n 1089: \"sw\",\n 1111: \"kok\",\n 1042: \"ko\",\n 1088: \"ky\",\n 1108: \"lo\",\n 1062: \"lv\",\n 1063: \"lt\",\n 2094: \"dsb\",\n 1134: \"lb\",\n 1071: \"mk\",\n 2110: \"ms-BN\",\n 1086: \"ms\",\n 1100: \"ml\",\n 1082: \"mt\",\n 1153: \"mi\",\n 1146: \"arn\",\n 1102: \"mr\",\n 1148: \"moh\",\n 1104: \"mn\",\n 2128: \"mn-CN\",\n 1121: \"ne\",\n 1044: \"nb\",\n 2068: \"nn\",\n 1154: \"oc\",\n 1096: \"or\",\n 1123: \"ps\",\n 1045: \"pl\",\n 1046: \"pt\",\n 2070: \"pt-PT\",\n 1094: \"pa\",\n 1131: \"qu-BO\",\n 2155: \"qu-EC\",\n 3179: \"qu\",\n 1048: \"ro\",\n 1047: \"rm\",\n 1049: \"ru\",\n 9275: \"smn\",\n 4155: \"smj-NO\",\n 5179: \"smj\",\n 3131: \"se-FI\",\n 1083: \"se\",\n 2107: \"se-SE\",\n 8251: \"sms\",\n 6203: \"sma-NO\",\n 7227: \"sms\",\n 1103: \"sa\",\n 7194: \"sr-Cyrl-BA\",\n 3098: \"sr\",\n 6170: \"sr-Latn-BA\",\n 2074: \"sr-Latn\",\n 1132: \"nso\",\n 1074: \"tn\",\n 1115: \"si\",\n 1051: \"sk\",\n 1060: \"sl\",\n 11274: \"es-AR\",\n 16394: \"es-BO\",\n 13322: \"es-CL\",\n 9226: \"es-CO\",\n 5130: \"es-CR\",\n 7178: \"es-DO\",\n 12298: \"es-EC\",\n 17418: \"es-SV\",\n 4106: \"es-GT\",\n 18442: \"es-HN\",\n 2058: \"es-MX\",\n 19466: \"es-NI\",\n 6154: \"es-PA\",\n 15370: \"es-PY\",\n 10250: \"es-PE\",\n 20490: \"es-PR\",\n // Microsoft has defined two different language codes for\n // “Spanish with modern sorting” and “Spanish with traditional\n // sorting”. This makes sense for collation APIs, and it would be\n // possible to express this in BCP 47 language tags via Unicode\n // extensions (eg., es-u-co-trad is Spanish with traditional\n // sorting). However, for storing names in fonts, the distinction\n // does not make sense, so we give “es” in both cases.\n 3082: \"es\",\n 1034: \"es\",\n 21514: \"es-US\",\n 14346: \"es-UY\",\n 8202: \"es-VE\",\n 2077: \"sv-FI\",\n 1053: \"sv\",\n 1114: \"syr\",\n 1064: \"tg\",\n 2143: \"tzm\",\n 1097: \"ta\",\n 1092: \"tt\",\n 1098: \"te\",\n 1054: \"th\",\n 1105: \"bo\",\n 1055: \"tr\",\n 1090: \"tk\",\n 1152: \"ug\",\n 1058: \"uk\",\n 1070: \"hsb\",\n 1056: \"ur\",\n 2115: \"uz-Cyrl\",\n 1091: \"uz\",\n 1066: \"vi\",\n 1106: \"cy\",\n 1160: \"wo\",\n 1157: \"sah\",\n 1144: \"ii\",\n 1130: \"yo\"\n};\nfunction getLanguageCode(platformID, languageID, ltag) {\n switch (platformID) {\n case 0:\n if (languageID === 65535) {\n return \"und\";\n } else if (ltag) {\n return ltag[languageID];\n }\n break;\n case 1:\n return macLanguages[languageID];\n case 3:\n return windowsLanguages[languageID];\n }\n return void 0;\n}\nvar utf16 = \"utf-16\";\nvar macScriptEncodings = {\n 0: \"macintosh\",\n // smRoman\n 1: \"x-mac-japanese\",\n // smJapanese\n 2: \"x-mac-chinesetrad\",\n // smTradChinese\n 3: \"x-mac-korean\",\n // smKorean\n 6: \"x-mac-greek\",\n // smGreek\n 7: \"x-mac-cyrillic\",\n // smCyrillic\n 9: \"x-mac-devanagai\",\n // smDevanagari\n 10: \"x-mac-gurmukhi\",\n // smGurmukhi\n 11: \"x-mac-gujarati\",\n // smGujarati\n 12: \"x-mac-oriya\",\n // smOriya\n 13: \"x-mac-bengali\",\n // smBengali\n 14: \"x-mac-tamil\",\n // smTamil\n 15: \"x-mac-telugu\",\n // smTelugu\n 16: \"x-mac-kannada\",\n // smKannada\n 17: \"x-mac-malayalam\",\n // smMalayalam\n 18: \"x-mac-sinhalese\",\n // smSinhalese\n 19: \"x-mac-burmese\",\n // smBurmese\n 20: \"x-mac-khmer\",\n // smKhmer\n 21: \"x-mac-thai\",\n // smThai\n 22: \"x-mac-lao\",\n // smLao\n 23: \"x-mac-georgian\",\n // smGeorgian\n 24: \"x-mac-armenian\",\n // smArmenian\n 25: \"x-mac-chinesesimp\",\n // smSimpChinese\n 26: \"x-mac-tibetan\",\n // smTibetan\n 27: \"x-mac-mongolian\",\n // smMongolian\n 28: \"x-mac-ethiopic\",\n // smEthiopic\n 29: \"x-mac-ce\",\n // smCentralEuroRoman\n 30: \"x-mac-vietnamese\",\n // smVietnamese\n 31: \"x-mac-extarabic\"\n // smExtArabic\n};\nvar macLanguageEncodings = {\n 15: \"x-mac-icelandic\",\n // langIcelandic\n 17: \"x-mac-turkish\",\n // langTurkish\n 18: \"x-mac-croatian\",\n // langCroatian\n 24: \"x-mac-ce\",\n // langLithuanian\n 25: \"x-mac-ce\",\n // langPolish\n 26: \"x-mac-ce\",\n // langHungarian\n 27: \"x-mac-ce\",\n // langEstonian\n 28: \"x-mac-ce\",\n // langLatvian\n 30: \"x-mac-icelandic\",\n // langFaroese\n 37: \"x-mac-romanian\",\n // langRomanian\n 38: \"x-mac-ce\",\n // langCzech\n 39: \"x-mac-ce\",\n // langSlovak\n 40: \"x-mac-ce\",\n // langSlovenian\n 143: \"x-mac-inuit\",\n // langInuktitut\n 146: \"x-mac-gaelic\"\n // langIrishGaelicScript\n};\nfunction getEncoding(platformID, encodingID, languageID) {\n switch (platformID) {\n case 0:\n return utf16;\n case 1:\n return macLanguageEncodings[languageID] || macScriptEncodings[encodingID];\n case 3:\n if (encodingID === 1 || encodingID === 10) {\n return utf16;\n }\n break;\n }\n return void 0;\n}\nvar platforms = {\n 0: \"unicode\",\n 1: \"macintosh\",\n 2: \"reserved\",\n 3: \"windows\"\n};\nfunction getPlatform(platformID) {\n return platforms[platformID];\n}\nfunction parseNameTable(data, start, ltag) {\n const name = {};\n const p = new parse_default.Parser(data, start);\n const format = p.parseUShort();\n const count = p.parseUShort();\n const stringOffset = p.offset + p.parseUShort();\n for (let i = 0; i < count; i++) {\n const platformID = p.parseUShort();\n const encodingID = p.parseUShort();\n const languageID = p.parseUShort();\n const nameID = p.parseUShort();\n const property = nameTableNames[nameID] || nameID;\n const byteLength = p.parseUShort();\n const offset = p.parseUShort();\n const language = getLanguageCode(platformID, languageID, ltag);\n const encoding = getEncoding(platformID, encodingID, languageID);\n const platformName = getPlatform(platformID);\n if (encoding !== void 0 && language !== void 0 && platformName !== void 0) {\n let text;\n if (encoding === utf16) {\n text = decode.UTF16(data, stringOffset + offset, byteLength);\n } else {\n text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding);\n }\n if (text) {\n let platform = name[platformName];\n if (platform === void 0) {\n platform = name[platformName] = {};\n }\n let translations = platform[property];\n if (translations === void 0) {\n translations = platform[property] = {};\n }\n translations[language] = text;\n }\n }\n }\n if (format === 1) {\n p.parseUShort();\n }\n return name;\n}\nfunction reverseDict(dict) {\n const result = {};\n for (let key in dict) {\n result[dict[key]] = parseInt(key);\n }\n return result;\n}\nfunction makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) {\n return new table_default.Record(\"NameRecord\", [\n { name: \"platformID\", type: \"USHORT\", value: platformID },\n { name: \"encodingID\", type: \"USHORT\", value: encodingID },\n { name: \"languageID\", type: \"USHORT\", value: languageID },\n { name: \"nameID\", type: \"USHORT\", value: nameID },\n { name: \"length\", type: \"USHORT\", value: length },\n { name: \"offset\", type: \"USHORT\", value: offset }\n ]);\n}\nfunction findSubArray(needle, haystack) {\n const needleLength = needle.length;\n const limit = haystack.length - needleLength + 1;\n loop:\n for (let pos = 0; pos < limit; pos++) {\n for (; pos < limit; pos++) {\n for (let k = 0; k < needleLength; k++) {\n if (haystack[pos + k] !== needle[k]) {\n continue loop;\n }\n }\n return pos;\n }\n }\n return -1;\n}\nfunction addStringToPool(s, pool) {\n let offset = findSubArray(s, pool);\n if (offset < 0) {\n offset = pool.length;\n let i = 0;\n const len = s.length;\n for (; i < len; ++i) {\n pool.push(s[i]);\n }\n }\n return offset;\n}\nfunction makeNameTable(names, ltag) {\n const platformNameIds = reverseDict(platforms);\n const macLanguageIds = reverseDict(macLanguages);\n const windowsLanguageIds = reverseDict(windowsLanguages);\n const nameRecords = [];\n const stringPool = [];\n for (let platform in names) {\n let nameID;\n const nameIDs = [];\n const namesWithNumericKeys = {};\n const nameTableIds = reverseDict(nameTableNames);\n const platformID = platformNameIds[platform];\n for (let key in names[platform]) {\n let id = nameTableIds[key];\n if (id === void 0) {\n id = key;\n }\n nameID = parseInt(id);\n if (isNaN(nameID)) {\n throw new Error('Name table entry \"' + key + '\" does not exist, see nameTableNames for complete list.');\n }\n namesWithNumericKeys[nameID] = names[platform][key];\n nameIDs.push(nameID);\n }\n for (let i = 0; i < nameIDs.length; i++) {\n nameID = nameIDs[i];\n const translations = namesWithNumericKeys[nameID];\n for (let lang in translations) {\n const text = translations[lang];\n if (platformID === 1 || platformID === 0) {\n let macLanguage = macLanguageIds[lang];\n let macScript = macLanguageToScript[macLanguage];\n const macEncoding = getEncoding(platformID, macScript, macLanguage);\n let macName = encode.MACSTRING(text, macEncoding);\n if (platformID === 0) {\n macLanguage = ltag.indexOf(lang);\n if (macLanguage < 0) {\n macLanguage = ltag.length;\n ltag.push(lang);\n }\n macScript = 4;\n macName = encode.UTF16(text);\n }\n if (macName !== void 0) {\n const macNameOffset = addStringToPool(macName, stringPool);\n nameRecords.push(makeNameRecord(\n platformID,\n macScript,\n macLanguage,\n nameID,\n macName.length,\n macNameOffset\n ));\n }\n }\n if (platformID === 3) {\n const winLanguage = windowsLanguageIds[lang];\n if (winLanguage !== void 0) {\n const winName = encode.UTF16(text);\n const winNameOffset = addStringToPool(winName, stringPool);\n nameRecords.push(makeNameRecord(\n 3,\n 1,\n winLanguage,\n nameID,\n winName.length,\n winNameOffset\n ));\n }\n }\n }\n }\n }\n nameRecords.sort(function(a, b) {\n return a.platformID - b.platformID || a.encodingID - b.encodingID || a.languageID - b.languageID || a.nameID - b.nameID;\n });\n const t = new table_default.Table(\"name\", [\n { name: \"format\", type: \"USHORT\", value: 0 },\n { name: \"count\", type: \"USHORT\", value: nameRecords.length },\n { name: \"stringOffset\", type: \"USHORT\", value: 6 + nameRecords.length * 12 }\n ]);\n for (let r = 0; r < nameRecords.length; r++) {\n t.fields.push({ name: \"record_\" + r, type: \"RECORD\", value: nameRecords[r] });\n }\n t.fields.push({ name: \"strings\", type: \"LITERAL\", value: stringPool });\n return t;\n}\nfunction getNameByID(names, nameID, allowedStandardIDs = []) {\n if (nameID < 256 && nameID in nameTableNames) {\n if (allowedStandardIDs.length && !allowedStandardIDs.includes(parseInt(nameID))) {\n return void 0;\n }\n nameID = nameTableNames[nameID];\n }\n for (let platform in names) {\n for (let nameKey in names[platform]) {\n if (nameKey === nameID || parseInt(nameKey) === nameID) {\n return names[platform][nameKey];\n }\n }\n }\n return void 0;\n}\nvar name_default = { parse: parseNameTable, make: makeNameTable, getNameByID };\n\n// src/tables/cmap.mjs\nfunction parseCmapTableFormat0(cmap, p, platformID, encodingID) {\n cmap.length = p.parseUShort();\n cmap.language = p.parseUShort() - 1;\n const indexMap = p.parseByteList(cmap.length);\n const glyphIndexMap = Object.assign({}, indexMap);\n const encoding = getEncoding(platformID, encodingID, cmap.language);\n const decodingTable = eightBitMacEncodings[encoding];\n for (let i = 0; i < decodingTable.length; i++) {\n glyphIndexMap[decodingTable.charCodeAt(i)] = indexMap[128 + i];\n }\n cmap.glyphIndexMap = glyphIndexMap;\n}\nfunction parseCmapTableFormat12or13(cmap, p, format) {\n p.parseUShort();\n cmap.length = p.parseULong();\n cmap.language = p.parseULong();\n let groupCount;\n cmap.groupCount = groupCount = p.parseULong();\n cmap.glyphIndexMap = {};\n for (let i = 0; i < groupCount; i += 1) {\n const startCharCode = p.parseULong();\n const endCharCode = p.parseULong();\n let startGlyphId = p.parseULong();\n for (let c = startCharCode; c <= endCharCode; c += 1) {\n cmap.glyphIndexMap[c] = startGlyphId;\n if (format === 12) {\n startGlyphId++;\n }\n }\n }\n}\nfunction parseCmapTableFormat4(cmap, p, data, start, offset) {\n cmap.length = p.parseUShort();\n cmap.language = p.parseUShort();\n let segCount;\n cmap.segCount = segCount = p.parseUShort() >> 1;\n p.skip(\"uShort\", 3);\n cmap.glyphIndexMap = {};\n const endCountParser = new parse_default.Parser(data, start + offset + 14);\n const startCountParser = new parse_default.Parser(data, start + offset + 16 + segCount * 2);\n const idDeltaParser = new parse_default.Parser(data, start + offset + 16 + segCount * 4);\n const idRangeOffsetParser = new parse_default.Parser(data, start + offset + 16 + segCount * 6);\n let glyphIndexOffset = start + offset + 16 + segCount * 8;\n for (let i = 0; i < segCount - 1; i += 1) {\n let glyphIndex;\n const endCount = endCountParser.parseUShort();\n const startCount = startCountParser.parseUShort();\n const idDelta = idDeltaParser.parseShort();\n const idRangeOffset = idRangeOffsetParser.parseUShort();\n for (let c = startCount; c <= endCount; c += 1) {\n if (idRangeOffset !== 0) {\n glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2;\n glyphIndexOffset += idRangeOffset;\n glyphIndexOffset += (c - startCount) * 2;\n glyphIndex = parse_default.getUShort(data, glyphIndexOffset);\n if (glyphIndex !== 0) {\n glyphIndex = glyphIndex + idDelta & 65535;\n }\n } else {\n glyphIndex = c + idDelta & 65535;\n }\n cmap.glyphIndexMap[c] = glyphIndex;\n }\n }\n}\nfunction parseCmapTableFormat14(cmap, p) {\n const varSelectorList = {};\n p.skip(\"uLong\");\n const numVarSelectorRecords = p.parseULong();\n for (let i = 0; i < numVarSelectorRecords; i += 1) {\n const varSelector = p.parseUInt24();\n const varSelectorRecord = {\n varSelector\n };\n const defaultUVSOffset = p.parseOffset32();\n const nonDefaultUVSOffset = p.parseOffset32();\n const currentOffset = p.relativeOffset;\n if (defaultUVSOffset) {\n p.relativeOffset = defaultUVSOffset;\n varSelectorRecord.defaultUVS = p.parseStruct({\n ranges: function() {\n return p.parseRecordList32({\n startUnicodeValue: p.parseUInt24,\n additionalCount: p.parseByte\n });\n }\n });\n }\n if (nonDefaultUVSOffset) {\n p.relativeOffset = nonDefaultUVSOffset;\n varSelectorRecord.nonDefaultUVS = p.parseStruct({\n uvsMappings: function() {\n const map = {};\n const list = p.parseRecordList32({\n unicodeValue: p.parseUInt24,\n glyphID: p.parseUShort\n });\n for (let i2 = 0; i2 < list.length; i2 += 1) {\n map[list[i2].unicodeValue] = list[i2];\n }\n return map;\n }\n });\n }\n varSelectorList[varSelector] = varSelectorRecord;\n p.relativeOffset = currentOffset;\n }\n cmap.varSelectorList = varSelectorList;\n}\nfunction parseCmapTable(data, start) {\n const cmap = {};\n cmap.version = parse_default.getUShort(data, start);\n check_default.argument(cmap.version === 0, \"cmap table version should be 0.\");\n cmap.numTables = parse_default.getUShort(data, start + 2);\n let format14Parser = null;\n let format14offset = -1;\n let offset = -1;\n let platformId = null;\n let encodingId = null;\n const platform0Encodings = [0, 1, 2, 3, 4, 6];\n const platform3Encodings = [0, 1, 10];\n for (let i = cmap.numTables - 1; i >= 0; i -= 1) {\n platformId = parse_default.getUShort(data, start + 4 + i * 8);\n encodingId = parse_default.getUShort(data, start + 4 + i * 8 + 2);\n if (platformId === 3 && platform3Encodings.includes(encodingId) || platformId === 0 && platform0Encodings.includes(encodingId) || platformId === 1 && encodingId === 0) {\n if (offset > 0) continue;\n offset = parse_default.getULong(data, start + 4 + i * 8 + 4);\n if (format14Parser) {\n break;\n }\n } else if (platformId === 0 && encodingId === 5) {\n format14offset = parse_default.getULong(data, start + 4 + i * 8 + 4);\n format14Parser = new parse_default.Parser(data, start + format14offset);\n if (format14Parser.parseUShort() !== 14) {\n format14offset = -1;\n format14Parser = null;\n } else if (offset > 0) {\n break;\n }\n }\n }\n if (offset === -1) {\n throw new Error(\"No valid cmap sub-tables found.\");\n }\n const p = new parse_default.Parser(data, start + offset);\n cmap.format = p.parseUShort();\n if (cmap.format === 0) {\n parseCmapTableFormat0(cmap, p, platformId, encodingId);\n } else if (cmap.format === 12 || cmap.format === 13) {\n parseCmapTableFormat12or13(cmap, p, cmap.format);\n } else if (cmap.format === 4) {\n parseCmapTableFormat4(cmap, p, data, start, offset);\n } else {\n throw new Error(\n \"Only format 0 (platformId 1, encodingId 0), 4, 12 and 14 cmap tables are supported (found format \" + cmap.format + \", platformId \" + platformId + \", encodingId \" + encodingId + \").\"\n );\n }\n if (format14Parser) {\n parseCmapTableFormat14(cmap, format14Parser);\n }\n return cmap;\n}\nfunction addSegment(t, code, glyphIndex) {\n t.segments.push({\n end: code,\n start: code,\n delta: -(code - glyphIndex),\n offset: 0,\n glyphIndex\n });\n}\nfunction addTerminatorSegment(t) {\n t.segments.push({\n end: 65535,\n start: 65535,\n delta: 1,\n offset: 0\n });\n}\nfunction mergeSegments(segments) {\n if (segments.length === 0) return segments;\n const merged = [segments[0]];\n for (let i = 1; i < segments.length; i++) {\n const prev = merged[merged.length - 1];\n const curr = segments[i];\n if (prev.end + 1 === curr.start && prev.delta === curr.delta && curr.end !== 65535) {\n prev.end = curr.end;\n } else {\n merged.push(curr);\n }\n }\n return merged;\n}\nfunction makeCmapTable(glyphs) {\n let isPlan0Only = true;\n let i;\n for (i = glyphs.length - 1; i > 0; i -= 1) {\n const g = glyphs.get(i);\n if (g.unicode > 65535) {\n isPlan0Only = false;\n break;\n }\n }\n let cmapTable = [\n { name: \"version\", type: \"USHORT\", value: 0 },\n { name: \"numTables\", type: \"USHORT\", value: isPlan0Only ? 1 : 2 },\n // CMAP 4 header\n { name: \"platformID\", type: \"USHORT\", value: 3 },\n { name: \"encodingID\", type: \"USHORT\", value: 1 },\n { name: \"offset\", type: \"ULONG\", value: isPlan0Only ? 12 : 12 + 8 }\n ];\n if (!isPlan0Only)\n cmapTable.push(...[\n // CMAP 12 header\n { name: \"cmap12PlatformID\", type: \"USHORT\", value: 3 },\n // We encode only for PlatformID = 3 (Windows) because it is supported everywhere\n { name: \"cmap12EncodingID\", type: \"USHORT\", value: 10 },\n { name: \"cmap12Offset\", type: \"ULONG\", value: 0 }\n ]);\n cmapTable.push(...[\n // CMAP 4 Subtable\n { name: \"format\", type: \"USHORT\", value: 4 },\n { name: \"cmap4Length\", type: \"USHORT\", value: 0 },\n { name: \"language\", type: \"USHORT\", value: 0 },\n { name: \"segCountX2\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n const t = new table_default.Table(\"cmap\", cmapTable);\n t.segments = [];\n for (i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n for (let j = 0; j < glyph.unicodes.length; j += 1) {\n addSegment(t, glyph.unicodes[j], i);\n }\n }\n t.segments.sort(function(a, b) {\n return a.start - b.start;\n });\n t.segments = mergeSegments(t.segments);\n addTerminatorSegment(t);\n const segCount = t.segments.length;\n let segCountToRemove = 0;\n let endCounts = [];\n let startCounts = [];\n let idDeltas = [];\n let idRangeOffsets = [];\n let glyphIds = [];\n let cmap12Groups = [];\n for (i = 0; i < segCount; i += 1) {\n const segment = t.segments[i];\n if (segment.end <= 65535 && segment.start <= 65535) {\n endCounts.push({ name: \"end_\" + i, type: \"USHORT\", value: segment.end });\n startCounts.push({ name: \"start_\" + i, type: \"USHORT\", value: segment.start });\n idDeltas.push({ name: \"idDelta_\" + i, type: \"SHORT\", value: segment.delta });\n idRangeOffsets.push({ name: \"idRangeOffset_\" + i, type: \"USHORT\", value: segment.offset });\n if (segment.glyphId !== void 0) {\n glyphIds.push({ name: \"glyph_\" + i, type: \"USHORT\", value: segment.glyphId });\n }\n } else {\n segCountToRemove += 1;\n }\n if (!isPlan0Only && segment.glyphIndex !== void 0) {\n cmap12Groups.push({ name: \"cmap12Start_\" + i, type: \"ULONG\", value: segment.start });\n cmap12Groups.push({ name: \"cmap12End_\" + i, type: \"ULONG\", value: segment.end });\n cmap12Groups.push({ name: \"cmap12Glyph_\" + i, type: \"ULONG\", value: segment.glyphIndex });\n }\n }\n t.segCountX2 = (segCount - segCountToRemove) * 2;\n t.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2;\n t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);\n t.rangeShift = t.segCountX2 - t.searchRange;\n for (let i2 = 0; i2 < endCounts.length; i2++) {\n t.fields.push(endCounts[i2]);\n }\n t.fields.push({ name: \"reservedPad\", type: \"USHORT\", value: 0 });\n for (let i2 = 0; i2 < startCounts.length; i2++) {\n t.fields.push(startCounts[i2]);\n }\n for (let i2 = 0; i2 < idDeltas.length; i2++) {\n t.fields.push(idDeltas[i2]);\n }\n for (let i2 = 0; i2 < idRangeOffsets.length; i2++) {\n t.fields.push(idRangeOffsets[i2]);\n }\n for (let i2 = 0; i2 < glyphIds.length; i2++) {\n t.fields.push(glyphIds[i2]);\n }\n t.cmap4Length = 14 + // Subtable header\n endCounts.length * 2 + 2 + // reservedPad\n startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2;\n if (!isPlan0Only) {\n const cmap12Length = 16 + // Subtable header\n cmap12Groups.length * 4;\n t.cmap12Offset = 12 + 2 * 2 + 4 + t.cmap4Length;\n t.fields.push(...[\n { name: \"cmap12Format\", type: \"USHORT\", value: 12 },\n { name: \"cmap12Reserved\", type: \"USHORT\", value: 0 },\n { name: \"cmap12Length\", type: \"ULONG\", value: cmap12Length },\n { name: \"cmap12Language\", type: \"ULONG\", value: 0 },\n { name: \"cmap12nGroups\", type: \"ULONG\", value: cmap12Groups.length / 3 }\n ]);\n for (let i2 = 0; i2 < cmap12Groups.length; i2++) {\n t.fields.push(cmap12Groups[i2]);\n }\n }\n return t;\n}\nvar cmap_default = { parse: parseCmapTable, make: makeCmapTable };\n\n// src/encoding.mjs\nvar cffStandardStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"266 ff\",\n \"onedotenleader\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\",\n \"001.000\",\n \"001.001\",\n \"001.002\",\n \"001.003\",\n \"Black\",\n \"Bold\",\n \"Book\",\n \"Light\",\n \"Medium\",\n \"Regular\",\n \"Roman\",\n \"Semibold\"\n];\nvar cffISOAdobeStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\"\n];\nvar cffIExpertStrings = [\n \".notdef\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n];\nvar cffExpertSubsetStrings = [\n \".notdef\",\n \"space\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"hyphensuperior\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"centoldstyle\",\n \"figuredash\",\n \"hypheninferior\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\"\n];\nvar cffStandardEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"\",\n \"questiondown\",\n \"\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"\",\n \"ring\",\n \"cedilla\",\n \"\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"AE\",\n \"\",\n \"ordfeminine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"ae\",\n \"\",\n \"\",\n \"\",\n \"dotlessi\",\n \"\",\n \"\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\"\n];\nvar cffExpertEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"\",\n \"\",\n \"isuperior\",\n \"\",\n \"\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"\",\n \"\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"\",\n \"\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"\",\n \"Dotaccentsmall\",\n \"\",\n \"\",\n \"Macronsmall\",\n \"\",\n \"\",\n \"figuredash\",\n \"hypheninferior\",\n \"\",\n \"\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"\",\n \"\",\n \"\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"\",\n \"\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n];\nvar standardNames = [\n \".notdef\",\n \".null\",\n \"nonmarkingreturn\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quotesingle\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"grave\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"Adieresis\",\n \"Aring\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ntilde\",\n \"Odieresis\",\n \"Udieresis\",\n \"aacute\",\n \"agrave\",\n \"acircumflex\",\n \"adieresis\",\n \"atilde\",\n \"aring\",\n \"ccedilla\",\n \"eacute\",\n \"egrave\",\n \"ecircumflex\",\n \"edieresis\",\n \"iacute\",\n \"igrave\",\n \"icircumflex\",\n \"idieresis\",\n \"ntilde\",\n \"oacute\",\n \"ograve\",\n \"ocircumflex\",\n \"odieresis\",\n \"otilde\",\n \"uacute\",\n \"ugrave\",\n \"ucircumflex\",\n \"udieresis\",\n \"dagger\",\n \"degree\",\n \"cent\",\n \"sterling\",\n \"section\",\n \"bullet\",\n \"paragraph\",\n \"germandbls\",\n \"registered\",\n \"copyright\",\n \"trademark\",\n \"acute\",\n \"dieresis\",\n \"notequal\",\n \"AE\",\n \"Oslash\",\n \"infinity\",\n \"plusminus\",\n \"lessequal\",\n \"greaterequal\",\n \"yen\",\n \"mu\",\n \"partialdiff\",\n \"summation\",\n \"product\",\n \"pi\",\n \"integral\",\n \"ordfeminine\",\n \"ordmasculine\",\n \"Omega\",\n \"ae\",\n \"oslash\",\n \"questiondown\",\n \"exclamdown\",\n \"logicalnot\",\n \"radical\",\n \"florin\",\n \"approxequal\",\n \"Delta\",\n \"guillemotleft\",\n \"guillemotright\",\n \"ellipsis\",\n \"nonbreakingspace\",\n \"Agrave\",\n \"Atilde\",\n \"Otilde\",\n \"OE\",\n \"oe\",\n \"endash\",\n \"emdash\",\n \"quotedblleft\",\n \"quotedblright\",\n \"quoteleft\",\n \"quoteright\",\n \"divide\",\n \"lozenge\",\n \"ydieresis\",\n \"Ydieresis\",\n \"fraction\",\n \"currency\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"daggerdbl\",\n \"periodcentered\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"perthousand\",\n \"Acircumflex\",\n \"Ecircumflex\",\n \"Aacute\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Oacute\",\n \"Ocircumflex\",\n \"apple\",\n \"Ograve\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Ugrave\",\n \"dotlessi\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"Lslash\",\n \"lslash\",\n \"Scaron\",\n \"scaron\",\n \"Zcaron\",\n \"zcaron\",\n \"brokenbar\",\n \"Eth\",\n \"eth\",\n \"Yacute\",\n \"yacute\",\n \"Thorn\",\n \"thorn\",\n \"minus\",\n \"multiply\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"onehalf\",\n \"onequarter\",\n \"threequarters\",\n \"franc\",\n \"Gbreve\",\n \"gbreve\",\n \"Idotaccent\",\n \"Scedilla\",\n \"scedilla\",\n \"Cacute\",\n \"cacute\",\n \"Ccaron\",\n \"ccaron\",\n \"dcroat\"\n];\nfunction DefaultEncoding(font) {\n this.font = font;\n}\nDefaultEncoding.prototype.charToGlyphIndex = function(c) {\n const code = c.codePointAt(0);\n const glyphs = this.font.glyphs;\n if (glyphs) {\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n for (let j = 0; j < glyph.unicodes.length; j += 1) {\n if (glyph.unicodes[j] === code) {\n return i;\n }\n }\n }\n }\n return null;\n};\nfunction CmapEncoding(cmap) {\n this.cmap = cmap;\n}\nCmapEncoding.prototype.charToGlyphIndex = function(c) {\n return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;\n};\nfunction CffEncoding(encoding, charset) {\n this.encoding = encoding;\n this.charset = charset;\n}\nCffEncoding.prototype.charToGlyphIndex = function(s) {\n const code = s.codePointAt(0);\n const charName = this.encoding[code];\n return this.charset.indexOf(charName);\n};\nfunction GlyphNames(post) {\n switch (post.version) {\n case 1:\n this.names = standardNames.slice();\n break;\n case 2:\n this.names = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n if (post.glyphNameIndex[i] < standardNames.length) {\n this.names[i] = standardNames[post.glyphNameIndex[i]];\n } else {\n this.names[i] = post.names[post.glyphNameIndex[i] - standardNames.length];\n }\n }\n break;\n case 2.5:\n this.names = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n this.names[i] = standardNames[i + post.glyphNameIndex[i]];\n }\n break;\n case 3:\n this.names = [];\n break;\n default:\n this.names = [];\n break;\n }\n}\nGlyphNames.prototype.nameToGlyphIndex = function(name) {\n return this.names.indexOf(name);\n};\nGlyphNames.prototype.glyphIndexToName = function(gid) {\n return this.names[gid];\n};\nfunction addGlyphNamesAll(font) {\n let glyph;\n const glyphIndexMap = font.tables.cmap.glyphIndexMap;\n const charCodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < charCodes.length; i += 1) {\n const c = charCodes[i];\n const glyphIndex = glyphIndexMap[c];\n glyph = font.glyphs.get(glyphIndex);\n glyph.addUnicode(parseInt(c));\n }\n for (let i = 0; i < font.glyphs.length; i += 1) {\n glyph = font.glyphs.get(i);\n if (font.cffEncoding) {\n glyph.name = font.cffEncoding.charset[i];\n } else if (font.glyphNames.names) {\n glyph.name = font.glyphNames.glyphIndexToName(i);\n }\n }\n}\nfunction addGlyphNamesToUnicodeMap(font) {\n font._IndexToUnicodeMap = {};\n const glyphIndexMap = font.tables.cmap.glyphIndexMap;\n const charCodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < charCodes.length; i += 1) {\n const c = charCodes[i];\n let glyphIndex = glyphIndexMap[c];\n if (font._IndexToUnicodeMap[glyphIndex] === void 0) {\n font._IndexToUnicodeMap[glyphIndex] = {\n unicodes: [parseInt(c)]\n };\n } else {\n font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c));\n }\n }\n}\nfunction addGlyphNames(font, opt) {\n if (opt.lowMemory) {\n addGlyphNamesToUnicodeMap(font);\n } else {\n addGlyphNamesAll(font);\n }\n}\n\n// src/draw.mjs\nfunction line(ctx, x1, y1, x2, y2) {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n}\nvar draw_default = { line };\n\n// src/tables/cpal.mjs\nfunction parseCpalTable(data, start) {\n const p = new Parser(data, start);\n const version = p.parseShort();\n if (version !== 0) {\n console.warn(\"Only CPALv0 is currently fully supported.\");\n }\n const numPaletteEntries = p.parseShort();\n const numPalettes = p.parseShort();\n const numColorRecords = p.parseShort();\n const colorRecordsArrayOffset = p.parseOffset32();\n const colorRecordIndices = p.parseUShortList(numPalettes);\n p.relativeOffset = colorRecordsArrayOffset;\n const colorRecords = p.parseULongList(numColorRecords);\n p.relativeOffset = colorRecordsArrayOffset;\n return {\n version,\n numPaletteEntries,\n colorRecords,\n colorRecordIndices\n };\n}\nfunction makeCpalTable({ version = 0, numPaletteEntries = 0, colorRecords = [], colorRecordIndices = [0] }) {\n check_default.argument(version === 0, \"Only CPALv0 are supported.\");\n check_default.argument(colorRecords.length, \"No colorRecords given.\");\n check_default.argument(colorRecordIndices.length, \"No colorRecordIndices given.\");\n if (colorRecordIndices.length > 1) {\n check_default.argument(numPaletteEntries, \"Can't infer numPaletteEntries on multiple colorRecordIndices\");\n }\n return new table_default.Table(\"CPAL\", [\n { name: \"version\", type: \"USHORT\", value: version },\n { name: \"numPaletteEntries\", type: \"USHORT\", value: numPaletteEntries || colorRecords.length },\n { name: \"numPalettes\", type: \"USHORT\", value: colorRecordIndices.length },\n { name: \"numColorRecords\", type: \"USHORT\", value: colorRecords.length },\n { name: \"colorRecordsArrayOffset\", type: \"ULONG\", value: 12 + 2 * colorRecordIndices.length },\n ...colorRecordIndices.map((palette, i) => ({ name: \"colorRecordIndices_\" + i, type: \"USHORT\", value: palette })),\n ...colorRecords.map((color, i) => ({ name: \"colorRecords_\" + i, type: \"ULONG\", value: color }))\n ]);\n}\nfunction parseCPALColor(bgra) {\n var b = (bgra & 4278190080) >> 24;\n var g = (bgra & 16711680) >> 16;\n var r = (bgra & 65280) >> 8;\n var a = bgra & 255;\n b = b + 256 & 255;\n g = g + 256 & 255;\n r = r + 256 & 255;\n a = (a + 256 & 255) / 255;\n return { b, g, r, a };\n}\nfunction getPaletteColor(font, index, palette = 0, colorFormat = \"hexa\") {\n if (index == 65535) {\n return \"currentColor\";\n }\n const cpalTable = font && font.tables && font.tables.cpal;\n if (!cpalTable) return \"currentColor\";\n if (palette > cpalTable.colorRecordIndices.length - 1) {\n throw new Error(`Palette index out of range (colorRecordIndices.length: ${cpalTable.colorRecordIndices.length}, index: ${index})`);\n }\n if (index > cpalTable.numPaletteEntries) {\n throw new Error(`Color index out of range (numPaletteEntries: ${cpalTable.numPaletteEntries}, index: ${index})`);\n }\n const lookupIndex = cpalTable.colorRecordIndices[palette] + index;\n if (lookupIndex > cpalTable.colorRecords) {\n throw new Error(`Color index out of range (colorRecords.length: ${cpalTable.colorRecords.length}, lookupIndex: ${lookupIndex})`);\n }\n const color = parseCPALColor(cpalTable.colorRecords[lookupIndex]);\n if (colorFormat === \"bgra\") {\n return color;\n }\n return formatColor(color, colorFormat);\n}\nfunction toHex(d) {\n return (\"0\" + parseInt(d).toString(16)).slice(-2);\n}\nfunction rgbToHSL(bgra) {\n const r = bgra.r / 255;\n const g = bgra.g / 255;\n const b = bgra.b / 255;\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h * 360,\n s: s * 100,\n l: l * 100\n };\n}\nfunction hslToRGB(hsla) {\n let { h, s, l, a } = hsla;\n h = h % 360;\n s /= 100;\n l /= 100;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0, g = 0, b = 0;\n if (0 <= h && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= h && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= h && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= h && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= h && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= h && h <= 360) {\n r = c;\n g = 0;\n b = x;\n }\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n a\n };\n}\nfunction bgraToRaw(color) {\n return parseInt(`0x${toHex(color.b)}${toHex(color.g)}${toHex(color.r)}${toHex(color.a * 255)}`, 16);\n}\nfunction parseColor(color, targetFormat = \"hexa\") {\n const returnRaw = targetFormat == \"raw\" || targetFormat == \"cpal\";\n const isRaw = Number.isInteger(color);\n let validFormat = true;\n if (isRaw && returnRaw || color === \"currentColor\") {\n return color;\n } else if (typeof color === \"object\") {\n if (targetFormat == \"bgra\") {\n return color;\n }\n if (returnRaw) {\n return bgraToRaw(color);\n }\n } else if (!isRaw && /^#([a-f0-9]{3}|[a-f0-9]{4}|[a-f0-9]{6}|[a-f0-9]{8})$/i.test(color.trim())) {\n color = color.trim().substring(1);\n switch (color.length) {\n case 3:\n color = {\n r: parseInt(color[0].repeat(2), 16),\n g: parseInt(color[1].repeat(2), 16),\n b: parseInt(color[2].repeat(2), 16),\n a: 1\n };\n break;\n case 4:\n color = {\n r: parseInt(color[0].repeat(2), 16),\n g: parseInt(color[1].repeat(2), 16),\n b: parseInt(color[2].repeat(2), 16),\n a: parseInt(color[3].repeat(2), 16) / 255\n };\n break;\n case 6:\n color = {\n r: parseInt(color[0] + color[1], 16),\n g: parseInt(color[2] + color[3], 16),\n b: parseInt(color[4] + color[5], 16),\n a: 1\n };\n break;\n case 8:\n color = {\n r: parseInt(color[0] + color[1], 16),\n g: parseInt(color[2] + color[3], 16),\n b: parseInt(color[4] + color[5], 16),\n a: parseInt(color[6] + color[7], 16) / 255\n };\n break;\n }\n if (targetFormat == \"bgra\") {\n return color;\n }\n } else if (typeof document !== \"undefined\" && /^[a-z]+$/i.test(color)) {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n ctx.fillStyle = color;\n const detectedColor = formatColor(ctx.fillStyle, \"hexa\");\n if (detectedColor === \"#000000ff\" && color.toLowerCase() !== \"black\") {\n validFormat = false;\n } else {\n color = detectedColor;\n }\n } else {\n color = color.trim();\n const rgbaRegex = /rgba?\\(\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:(?:,|\\s|\\/)\\s*(?:(0*(?:\\.\\d+)?()|0*1(?:\\.0+)?())|(?:\\.\\d+)|(\\d+)(%)|(\\d*\\.\\d+)(%)))?\\s*\\)/;\n if (rgbaRegex.test(color)) {\n const matches = color.match(rgbaRegex).filter((i) => typeof i !== \"undefined\");\n color = {\n r: Math.round(parseFloat(matches[1]) / (matches[2] ? 100 / 255 : 1)),\n g: Math.round(parseFloat(matches[3]) / (matches[4] ? 100 / 255 : 1)),\n b: Math.round(parseFloat(matches[5]) / (matches[6] ? 100 / 255 : 1)),\n a: !matches[7] ? 1 : parseFloat(matches[7]) / (matches[8] ? 100 : 1)\n };\n } else {\n const hslaRegex = /hsla?\\(\\s*(?:(\\d*\\.\\d+|\\d+)(deg|turn|))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)%?|(\\d+)%?)\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)%?|(\\d+)%?)\\s*(?:(?:,|\\s|\\/)\\s*(?:(0*(?:\\.\\d+)?()|0*1(?:\\.0+)?())|(?:\\.\\d+)|(\\d+)(%)|(\\d*\\.\\d+)(%)))?\\s*\\)/;\n if (hslaRegex.test(color)) {\n const matches = color.match(hslaRegex).filter((i) => typeof i !== \"undefined\");\n color = hslToRGB({\n h: parseFloat(matches[1]) * (matches[2] === \"turn\" ? 360 : 1),\n s: parseFloat(matches[3]),\n l: parseFloat(matches[4]),\n a: !matches[5] ? 1 : parseFloat(matches[5]) / (matches[6] ? 100 : 1)\n });\n } else {\n validFormat = false;\n }\n }\n }\n if (!validFormat) {\n throw new Error(`Invalid color format: ${color}`);\n }\n return formatColor(color, targetFormat);\n}\nfunction formatColor(bgra, format = \"hexa\") {\n if (bgra === \"currentColor\") return bgra;\n if (Number.isInteger(bgra)) {\n if (format == \"raw\" || format == \"cpal\") {\n return bgra;\n }\n bgra = parseCPALColor(bgra);\n } else if (typeof bgra !== \"object\") {\n bgra = parseColor(bgra, \"bgra\");\n }\n let hsl = [\"hsl\", \"hsla\"].includes(format) ? rgbToHSL(bgra) : null;\n switch (format) {\n case \"rgba\":\n return `rgba(${bgra.r}, ${bgra.g}, ${bgra.b}, ${parseFloat(bgra.a.toFixed(3))})`;\n case \"rgb\":\n return `rgb(${bgra.r}, ${bgra.g}, ${bgra.b})`;\n case \"hex\":\n case \"hex6\":\n case \"hex-6\":\n return `#${toHex(bgra.r)}${toHex(bgra.g)}${toHex(bgra.b)}`;\n case \"hexa\":\n case \"hex8\":\n case \"hex-8\":\n return `#${toHex(bgra.r)}${toHex(bgra.g)}${toHex(bgra.b)}${toHex(bgra.a * 255)}`;\n case \"hsl\":\n return `hsl(${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}%, ${hsl.l.toFixed(2)}%)`;\n case \"hsla\":\n return `hsla(${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}%, ${hsl.l.toFixed(2)}%, ${parseFloat(bgra.a.toFixed(3))})`;\n case \"bgra\":\n return bgra;\n case \"raw\":\n case \"cpal\":\n return bgraToRaw(bgra);\n default:\n throw new Error(\"Unknown color format: \" + format);\n }\n}\nvar cpal_default = { parse: parseCpalTable, make: makeCpalTable, getPaletteColor, parseColor, formatColor };\n\n// src/glyph.mjs\nfunction getPathDefinition(glyph, path) {\n let _path = path || new path_default();\n return {\n configurable: true,\n get: function() {\n if (typeof _path === \"function\") {\n _path = _path();\n }\n return _path;\n },\n set: function(p) {\n _path = p;\n }\n };\n}\nfunction Glyph(options) {\n this.bindConstructorValues(options);\n}\nGlyph.prototype.bindConstructorValues = function(options) {\n this.index = options.index || 0;\n if (options.name === \".notdef\") {\n options.unicode = void 0;\n } else if (options.name === \".null\") {\n options.unicode = 0;\n }\n if (options.unicode === 0 && options.name !== \".null\") {\n throw new Error('The unicode value \"0\" is reserved for the glyph name \".null\" and cannot be used by any other glyph.');\n }\n this.name = options.name || null;\n this.unicode = options.unicode;\n this.unicodes = options.unicodes || (options.unicode !== void 0 ? [options.unicode] : []);\n if (\"xMin\" in options) {\n this.xMin = options.xMin;\n }\n if (\"yMin\" in options) {\n this.yMin = options.yMin;\n }\n if (\"xMax\" in options) {\n this.xMax = options.xMax;\n }\n if (\"yMax\" in options) {\n this.yMax = options.yMax;\n }\n if (\"advanceWidth\" in options) {\n this.advanceWidth = options.advanceWidth;\n }\n if (\"leftSideBearing\" in options) {\n this.leftSideBearing = options.leftSideBearing;\n }\n if (\"points\" in options) {\n this.points = options.points;\n }\n Object.defineProperty(this, \"path\", getPathDefinition(this, options.path));\n};\nGlyph.prototype.addUnicode = function(unicode) {\n if (this.unicodes.length === 0) {\n this.unicode = unicode;\n }\n this.unicodes.push(unicode);\n};\nGlyph.prototype.getBoundingBox = function() {\n return this.path.getBoundingBox();\n};\nGlyph.prototype.getPath = function(x, y, fontSize, options, font) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n let commands;\n let hPoints;\n let xScale = options.xScale;\n let yScale = options.yScale;\n const scale = 1 / (this.path.unitsPerEm || 1e3) * fontSize;\n let useGlyph = this;\n if (font && font.variation) {\n useGlyph = font.variation.getTransform(this, options.variation);\n commands = useGlyph.path.commands;\n }\n if (options.hinting && font && font.hinting) {\n hPoints = useGlyph.path && font.hinting.exec(useGlyph, fontSize, options);\n }\n if (hPoints) {\n commands = font.hinting.getCommands(hPoints);\n x = Math.round(x);\n y = Math.round(y);\n xScale = yScale = 1;\n } else {\n commands = useGlyph.path.commands;\n if (xScale === void 0) xScale = scale;\n if (yScale === void 0) yScale = scale;\n }\n const p = new path_default();\n if (options.drawSVG) {\n const svgImage = this.getSvgImage(font);\n if (svgImage) {\n const layer = new path_default();\n layer._image = {\n image: svgImage.image,\n x: x + svgImage.leftSideBearing * scale,\n y: y - svgImage.baseline * scale,\n width: svgImage.image.width * scale,\n height: svgImage.image.height * scale\n };\n p._layers = [layer];\n return p;\n }\n }\n if (options.drawLayers) {\n const layers = this.getLayers(font);\n if (layers && layers.length) {\n p._layers = [];\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n let color = getPaletteColor(font, layer.paletteIndex, options.usePalette);\n if (color === \"currentColor\") {\n color = options.fill || \"black\";\n } else {\n color = formatColor(color, options.colorFormat || \"rgba\");\n }\n options = Object.assign({}, options, { fill: color });\n p._layers.push(this.getPath.call(layer.glyph, x, y, fontSize, options, font));\n }\n return p;\n }\n }\n p.fill = options.fill || this.path.fill;\n p.stroke = this.path.stroke;\n p.strokeWidth = this.path.strokeWidth * scale;\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.type === \"M\") {\n p.moveTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"L\") {\n p.lineTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"Q\") {\n p.quadraticCurveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"C\") {\n p.curveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x2 * xScale,\n y + -cmd.y2 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"Z\" && p.stroke && p.strokeWidth) {\n p.closePath();\n }\n }\n return p;\n};\nGlyph.prototype.getLayers = function(font) {\n if (!font) {\n throw new Error(\"The font object is required to read the colr/cpal tables in order to get the layers.\");\n }\n return font.layers.get(this.index);\n};\nGlyph.prototype.getSvgImage = function(font) {\n if (!font) {\n throw new Error(\"The font object is required to read the svg table in order to get the image.\");\n }\n return font.svgImages.get(this.index);\n};\nGlyph.prototype.getContours = function(transformedPoints = null) {\n if (this.points === void 0 && !transformedPoints) {\n return [];\n }\n const contours = [];\n let currentContour = [];\n let points = transformedPoints ? transformedPoints : this.points;\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check_default.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n};\nGlyph.prototype.getMetrics = function() {\n const commands = this.path.commands;\n const xCoords = [];\n const yCoords = [];\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.type !== \"Z\") {\n xCoords.push(cmd.x);\n yCoords.push(cmd.y);\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n xCoords.push(cmd.x1);\n yCoords.push(cmd.y1);\n }\n if (cmd.type === \"C\") {\n xCoords.push(cmd.x2);\n yCoords.push(cmd.y2);\n }\n }\n const metrics = {\n xMin: Math.min.apply(null, xCoords),\n yMin: Math.min.apply(null, yCoords),\n xMax: Math.max.apply(null, xCoords),\n yMax: Math.max.apply(null, yCoords),\n leftSideBearing: this.leftSideBearing\n };\n if (!isFinite(metrics.xMin)) {\n metrics.xMin = 0;\n }\n if (!isFinite(metrics.xMax)) {\n metrics.xMax = this.advanceWidth;\n }\n if (!isFinite(metrics.yMin)) {\n metrics.yMin = 0;\n }\n if (!isFinite(metrics.yMax)) {\n metrics.yMax = 0;\n }\n metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin);\n return metrics;\n};\nGlyph.prototype.draw = function(ctx, x, y, fontSize, options, font) {\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n const path = this.getPath(x, y, fontSize, options, font);\n path.draw(ctx);\n};\nGlyph.prototype.drawPoints = function(ctx, x, y, fontSize, options, font) {\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n if (options.drawLayers) {\n const layers = this.getLayers(font);\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l += 1) {\n if (layers[l].glyph.index !== this.index) {\n this.drawPoints.call(layers[l].glyph, ctx, x, y, fontSize);\n }\n }\n return;\n }\n }\n function drawCircles(l, x2, y2, scale2) {\n ctx.beginPath();\n for (let j = 0; j < l.length; j += 1) {\n ctx.moveTo(x2 + l[j].x * scale2, y2 + l[j].y * scale2);\n ctx.arc(x2 + l[j].x * scale2, y2 + l[j].y * scale2, 2, 0, Math.PI * 2, false);\n }\n ctx.fill();\n }\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n const scale = 1 / this.path.unitsPerEm * fontSize;\n const blueCircles = [];\n const redCircles = [];\n const path = this.path;\n let commands = path.commands;\n if (font && font.variation) {\n commands = font.variation.getTransform(this, options.variation).path.commands;\n }\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.x !== void 0) {\n blueCircles.push({ x: cmd.x, y: -cmd.y });\n }\n if (cmd.x1 !== void 0) {\n redCircles.push({ x: cmd.x1, y: -cmd.y1 });\n }\n if (cmd.x2 !== void 0) {\n redCircles.push({ x: cmd.x2, y: -cmd.y2 });\n }\n }\n ctx.fillStyle = \"blue\";\n drawCircles(blueCircles, x, y, scale);\n ctx.fillStyle = \"red\";\n drawCircles(redCircles, x, y, scale);\n};\nGlyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {\n let scale;\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n scale = 1 / this.path.unitsPerEm * fontSize;\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"black\";\n draw_default.line(ctx, x, -1e4, x, 1e4);\n draw_default.line(ctx, -1e4, y, 1e4, y);\n const xMin = this.xMin || 0;\n let yMin = this.yMin || 0;\n const xMax = this.xMax || 0;\n let yMax = this.yMax || 0;\n const advanceWidth = this.advanceWidth || 0;\n ctx.strokeStyle = \"blue\";\n draw_default.line(ctx, x + xMin * scale, -1e4, x + xMin * scale, 1e4);\n draw_default.line(ctx, x + xMax * scale, -1e4, x + xMax * scale, 1e4);\n draw_default.line(ctx, -1e4, y + -yMin * scale, 1e4, y + -yMin * scale);\n draw_default.line(ctx, -1e4, y + -yMax * scale, 1e4, y + -yMax * scale);\n ctx.strokeStyle = \"green\";\n draw_default.line(ctx, x + advanceWidth * scale, -1e4, x + advanceWidth * scale, 1e4);\n};\nGlyph.prototype.toPathData = function(options, font) {\n options = Object.assign({}, { variation: font && font.defaultRenderOptions.variation }, options);\n let useGlyph = this;\n if (font && font.variation) {\n useGlyph = font.variation.getTransform(this, options.variation);\n }\n let usePath = useGlyph.points && options.pointsTransform ? options.pointsTransform(useGlyph.points) : useGlyph.path;\n if (options.pathTransform) {\n usePath = options.pathTransform(usePath);\n }\n return usePath.toPathData(options);\n};\nGlyph.prototype.fromSVG = function(pathData, options = {}) {\n return this.path.fromSVG(pathData, options);\n};\nGlyph.prototype.toSVG = function(options, font) {\n const pathData = this.toPathData.apply(this, [options, font]);\n return this.path.toSVG(options, pathData);\n};\nGlyph.prototype.toDOMElement = function(options, font) {\n options = Object.assign({}, { variation: font && font.defaultRenderOptions.variation }, options);\n let usePath = this.path;\n if (font && font.variation) {\n usePath = font.variation.getTransform(this, options.variation).path;\n }\n return usePath.toDOMElement(options);\n};\nvar glyph_default = Glyph;\n\n// src/glyphset.mjs\nfunction defineDependentProperty(glyph, externalName, internalName) {\n Object.defineProperty(glyph, externalName, {\n get: function() {\n typeof glyph[internalName] === \"undefined\" && glyph.path;\n return glyph[internalName];\n },\n set: function(newValue) {\n glyph[internalName] = newValue;\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction GlyphSet(font, glyphs) {\n this.font = font;\n this.glyphs = {};\n if (Array.isArray(glyphs)) {\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n glyph.path.unitsPerEm = font.unitsPerEm;\n this.glyphs[i] = glyph;\n }\n }\n this.length = glyphs && glyphs.length || 0;\n}\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n GlyphSet.prototype[Symbol.iterator] = function() {\n let n = -1;\n return {\n next: function() {\n n++;\n const done = n >= this.length - 1;\n return { value: this.get(n), done };\n }.bind(this)\n };\n };\n}\nGlyphSet.prototype.get = function(index) {\n if (this.font._push && this.glyphs[index] === void 0) {\n this.font._push(index);\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n let glyph = this.glyphs[index];\n let unicodeObj = this.font._IndexToUnicodeMap[index];\n if (unicodeObj) {\n for (let j = 0; j < unicodeObj.unicodes.length; j++)\n glyph.addUnicode(unicodeObj.unicodes[j]);\n }\n if (this.font.cffEncoding) {\n glyph.name = this.font.cffEncoding.charset[index];\n } else if (this.font.glyphNames.names) {\n glyph.name = this.font.glyphNames.glyphIndexToName(index);\n }\n this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth;\n this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing;\n } else {\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n }\n return this.glyphs[index];\n};\nGlyphSet.prototype.push = function(index, loader) {\n this.glyphs[index] = loader;\n this.length++;\n};\nfunction glyphLoader(font, index) {\n return new glyph_default({ index, font });\n}\nfunction ttfGlyphLoader(font, index, parseGlyph2, data, position, buildPath2) {\n return function() {\n const glyph = new glyph_default({ index, font });\n glyph.path = function() {\n parseGlyph2(glyph, data, position);\n const path = buildPath2(font.glyphs, glyph);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n defineDependentProperty(glyph, \"numberOfContours\", \"_numberOfContours\");\n defineDependentProperty(glyph, \"xMin\", \"_xMin\");\n defineDependentProperty(glyph, \"xMax\", \"_xMax\");\n defineDependentProperty(glyph, \"yMin\", \"_yMin\");\n defineDependentProperty(glyph, \"yMax\", \"_yMax\");\n defineDependentProperty(glyph, \"points\", \"_points\");\n return glyph;\n };\n}\nfunction cffGlyphLoader(font, index, parseCFFCharstring2, charstring, version) {\n return function() {\n const glyph = new glyph_default({ index, font });\n glyph.path = function() {\n const path = parseCFFCharstring2(font, glyph, charstring, version);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n return glyph;\n };\n}\nvar glyphset_default = { GlyphSet, glyphLoader, ttfGlyphLoader, cffGlyphLoader };\n\n// src/tables/cff.mjs\nfunction equals(a, b) {\n if (a === b) {\n return true;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i += 1) {\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nvar MAX_CALL_DEPTH = 10;\nfunction calcCFFSubroutineBias(subrs) {\n let bias;\n if (subrs.length < 1240) {\n bias = 107;\n } else if (subrs.length < 33900) {\n bias = 1131;\n } else {\n bias = 32768;\n }\n return bias;\n}\nfunction parseCFFIndex(data, start, conversionFn, version) {\n const offsets = [];\n const objects = [];\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset;\n let endOffset;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n let pos = start + countLength + 1;\n for (let i = 0; i < count + 1; i += 1) {\n offsets.push(parse_default.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + countLength;\n }\n for (let i = 0; i < offsets.length - 1; i += 1) {\n let value = parse_default.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value, data, start, version);\n }\n objects.push(value);\n }\n return { objects, startOffset: start, endOffset };\n}\nfunction parseCFFIndexLowMemory(data, start, version) {\n const offsets = [];\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset;\n let endOffset;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n let pos = start + countLength + 1;\n for (let i = 0; i < count + 1; i += 1) {\n offsets.push(parse_default.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + countLength;\n }\n return { offsets, startOffset: start, endOffset };\n}\nfunction getCffIndexObject(i, offsets, data, start, conversionFn, version) {\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset = 0;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n }\n let value = parse_default.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value);\n }\n return value;\n}\nfunction parseFloatOperand(parser) {\n let s = \"\";\n const eof = 15;\n const lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n for (; ; ) {\n const b = parser.parseByte();\n const n1 = b >> 4;\n const n2 = b & 15;\n if (n1 === eof) {\n break;\n }\n s += lookup[n1];\n if (n2 === eof) {\n break;\n }\n s += lookup[n2];\n }\n return parseFloat(s);\n}\nfunction parseOperand(parser, b0) {\n let b1;\n let b2;\n let b3;\n let b4;\n if (b0 === 28) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n return b1 << 8 | b2;\n }\n if (b0 === 29) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n b3 = parser.parseByte();\n b4 = parser.parseByte();\n return b1 << 24 | b2 << 16 | b3 << 8 | b4;\n }\n if (b0 === 30) {\n return parseFloatOperand(parser);\n }\n if (b0 >= 32 && b0 <= 246) {\n return b0 - 139;\n }\n if (b0 >= 247 && b0 <= 250) {\n b1 = parser.parseByte();\n return (b0 - 247) * 256 + b1 + 108;\n }\n if (b0 >= 251 && b0 <= 254) {\n b1 = parser.parseByte();\n return -(b0 - 251) * 256 - b1 - 108;\n }\n throw new Error(\"Invalid b0 \" + b0);\n}\nfunction entriesToObject(entries) {\n const o = {};\n for (let i = 0; i < entries.length; i += 1) {\n const key = entries[i][0];\n const values = entries[i][1];\n let value;\n if (values.length === 1) {\n value = values[0];\n } else {\n value = values;\n }\n if (Object.prototype.hasOwnProperty.call(o, key) && !isNaN(o[key])) {\n throw new Error(\"Object \" + o + \" already has key \" + key);\n }\n o[key] = value;\n }\n return o;\n}\nfunction parseCFFDict(data, start, size, version) {\n start = start !== void 0 ? start : 0;\n const parser = new parse_default.Parser(data, start);\n const entries = [];\n let operands = [];\n size = size !== void 0 ? size : data.byteLength;\n let operandsStart = version < 2 ? 22 : 28;\n while (parser.relativeOffset < size) {\n let op = parser.parseByte();\n if (op < operandsStart) {\n if (op === 12) {\n op = 1200 + parser.parseByte();\n }\n if (version > 1 && op === 23) {\n parseBlend(operands);\n continue;\n }\n entries.push([op, operands]);\n operands = [];\n } else {\n operands.push(parseOperand(parser, op, version));\n }\n }\n return entriesToObject(entries);\n}\nfunction getCFFString(strings, index) {\n if (index <= 390) {\n index = cffStandardStrings[index];\n } else if (strings) {\n index = strings[index - 391];\n } else {\n index = void 0;\n }\n return index;\n}\nfunction interpretDict(dict, meta, strings) {\n const newDict = {};\n let value;\n for (let i = 0; i < meta.length; i += 1) {\n const m = meta[i];\n if (Array.isArray(m.type)) {\n const values = [];\n values.length = m.type.length;\n for (let j = 0; j < m.type.length; j++) {\n value = dict[m.op] !== void 0 ? dict[m.op][j] : void 0;\n if (value === void 0) {\n value = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null;\n }\n if (m.type[j] === \"SID\") {\n value = getCFFString(strings, value);\n }\n values[j] = value;\n }\n newDict[m.name] = values;\n } else {\n value = dict[m.op];\n if (value === void 0) {\n value = m.value !== void 0 ? m.value : null;\n }\n if (m.type === \"SID\") {\n value = getCFFString(strings, value);\n }\n newDict[m.name] = value;\n }\n }\n return newDict;\n}\nfunction parseCFFHeader(data, start) {\n const header = {};\n header.formatMajor = parse_default.getCard8(data, start);\n header.formatMinor = parse_default.getCard8(data, start + 1);\n if (header.formatMajor > 2) {\n throw new Error(`Unsupported CFF table version ${header.formatMajor}.${header.formatMinor}`);\n }\n header.size = parse_default.getCard8(data, start + 2);\n if (header.formatMajor < 2) {\n header.offsetSize = parse_default.getCard8(data, start + 3);\n header.startOffset = start;\n header.endOffset = start + 4;\n } else {\n header.topDictLength = parse_default.getCard16(data, start + 3);\n header.endOffset = start + 8;\n }\n return header;\n}\nvar TOP_DICT_META = [\n { name: \"version\", op: 0, type: \"SID\" },\n { name: \"notice\", op: 1, type: \"SID\" },\n { name: \"copyright\", op: 1200, type: \"SID\" },\n { name: \"fullName\", op: 2, type: \"SID\" },\n { name: \"familyName\", op: 3, type: \"SID\" },\n { name: \"weight\", op: 4, type: \"SID\" },\n { name: \"isFixedPitch\", op: 1201, type: \"number\", value: 0 },\n { name: \"italicAngle\", op: 1202, type: \"number\", value: 0 },\n { name: \"underlinePosition\", op: 1203, type: \"number\", value: -100 },\n { name: \"underlineThickness\", op: 1204, type: \"number\", value: 50 },\n { name: \"paintType\", op: 1205, type: \"number\", value: 0 },\n { name: \"charstringType\", op: 1206, type: \"number\", value: 2 },\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"uniqueId\", op: 13, type: \"number\" },\n { name: \"fontBBox\", op: 5, type: [\"number\", \"number\", \"number\", \"number\"], value: [0, 0, 0, 0] },\n { name: \"strokeWidth\", op: 1208, type: \"number\", value: 0 },\n { name: \"xuid\", op: 14, type: [], value: null },\n { name: \"charset\", op: 15, type: \"offset\", value: 0 },\n { name: \"encoding\", op: 16, type: \"offset\", value: 0 },\n { name: \"charStrings\", op: 17, type: \"offset\", value: 0 },\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] },\n { name: \"ros\", op: 1230, type: [\"SID\", \"SID\", \"number\"] },\n { name: \"cidFontVersion\", op: 1231, type: \"number\", value: 0 },\n { name: \"cidFontRevision\", op: 1232, type: \"number\", value: 0 },\n { name: \"cidFontType\", op: 1233, type: \"number\", value: 0 },\n { name: \"cidCount\", op: 1234, type: \"number\", value: 8720 },\n { name: \"uidBase\", op: 1235, type: \"number\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"fontName\", op: 1238, type: \"SID\" }\n];\nvar TOP_DICT_META_CFF2 = [\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"charStrings\", op: 17, type: \"offset\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"vstore\", op: 24, type: \"offset\" }\n];\nvar PRIVATE_DICT_META = [\n { name: \"subrs\", op: 19, type: \"offset\", value: 0 },\n { name: \"defaultWidthX\", op: 20, type: \"number\", value: 0 },\n { name: \"nominalWidthX\", op: 21, type: \"number\", value: 0 }\n];\nvar PRIVATE_DICT_META_CFF2 = [\n { name: \"blueValues\", op: 6, type: \"delta\" },\n { name: \"otherBlues\", op: 7, type: \"delta\" },\n { name: \"familyBlues\", op: 7, type: \"delta\" },\n { name: \"familyBlues\", op: 8, type: \"delta\" },\n { name: \"familyOtherBlues\", op: 9, type: \"delta\" },\n { name: \"blueScale\", op: 1209, type: \"number\", value: 0.039625 },\n { name: \"blueShift\", op: 1210, type: \"number\", value: 7 },\n { name: \"blueFuzz\", op: 1211, type: \"number\", value: 1 },\n { name: \"stdHW\", op: 10, type: \"number\" },\n { name: \"stdVW\", op: 11, type: \"number\" },\n { name: \"stemSnapH\", op: 1212, type: \"number\" },\n { name: \"stemSnapV\", op: 1213, type: \"number\" },\n { name: \"languageGroup\", op: 1217, type: \"number\", value: 0 },\n { name: \"expansionFactor\", op: 1218, type: \"number\", value: 0.06 },\n { name: \"vsindex\", op: 22, type: \"number\", value: 0 },\n { name: \"subrs\", op: 19, type: \"offset\" }\n];\nvar FONT_DICT_META = [\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] }\n];\nfunction parseCFFTopDict(data, start, strings, version) {\n const dict = parseCFFDict(data, start, data.byteLength, version);\n return interpretDict(dict, version > 1 ? TOP_DICT_META_CFF2 : TOP_DICT_META, strings);\n}\nfunction parseCFFPrivateDict(data, start, size, strings, version) {\n const dict = parseCFFDict(data, start, size, version);\n return interpretDict(dict, version > 1 ? PRIVATE_DICT_META_CFF2 : PRIVATE_DICT_META, strings);\n}\nfunction parseFontDict(data, start, version) {\n const dict = parseCFFDict(data, start, void 0, version);\n return interpretDict(dict, FONT_DICT_META);\n}\nfunction gatherCFF2FontDicts(data, start, fdArray) {\n const fontDictArray = [];\n for (let i = 0; i < fdArray.length; i++) {\n const fontDictData = new DataView(new Uint8Array(fdArray[i]).buffer);\n const fontDict = parseFontDict(fontDictData, 0, 2);\n const privateSize = fontDict.private[0];\n const privateOffset = fontDict.private[1];\n if (privateSize !== 0 && privateOffset !== 0) {\n const privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, [], 2);\n if (privateDict.subrs) {\n const subrOffset = privateOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset + start, void 0, 2);\n fontDict._subrs = subrIndex.objects;\n fontDict._subrsBias = calcCFFSubroutineBias(fontDict._subrs);\n }\n fontDict._privateDict = privateDict;\n }\n fontDictArray.push(fontDict);\n }\n return fontDictArray;\n}\nfunction gatherCFFTopDicts(data, start, cffIndex, strings, version) {\n const topDictArray = [];\n for (let iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {\n const topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);\n const topDict = parseCFFTopDict(topDictData, 0, strings, version);\n topDict._subrs = [];\n topDict._subrsBias = 0;\n topDict._defaultWidthX = 0;\n topDict._nominalWidthX = 0;\n const privateSize = version < 2 ? topDict.private[0] : 0;\n const privateOffset = version < 2 ? topDict.private[1] : 0;\n if (privateSize !== 0 && privateOffset !== 0) {\n const privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings, version);\n topDict._defaultWidthX = privateDict.defaultWidthX;\n topDict._nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n const subrOffset = privateOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset + start, void 0, version);\n topDict._subrs = subrIndex.objects;\n topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);\n }\n topDict._privateDict = privateDict;\n }\n topDictArray.push(topDict);\n }\n return topDictArray;\n}\nfunction parseCFFCharset(data, start, nGlyphs, strings, isCIDFont) {\n let sid;\n let count;\n const parser = new parse_default.Parser(data, start);\n nGlyphs -= 1;\n const charset = [\".notdef\"];\n const format = parser.parseCard8();\n if (format === 0) {\n for (let i = 0; i < nGlyphs; i += 1) {\n sid = parser.parseSID();\n if (isCIDFont) {\n charset.push(sid);\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n }\n } else if (format === 1) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard8();\n for (let i = 0; i <= count; i += 1) {\n if (isCIDFont) {\n charset.push(\"cid\" + (\"00000\" + sid).slice(-5));\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n sid += 1;\n }\n }\n } else if (format === 2) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard16();\n for (let i = 0; i <= count; i += 1) {\n if (isCIDFont) {\n charset.push(\"cid\" + (\"00000\" + sid).slice(-5));\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n sid += 1;\n }\n }\n } else {\n throw new Error(\"Unknown charset format \" + format);\n }\n return charset;\n}\nfunction parseCFFEncoding(data, start) {\n let code;\n const encoding = {};\n const parser = new parse_default.Parser(data, start);\n const format = parser.parseCard8();\n if (format === 0) {\n const nCodes = parser.parseCard8();\n for (let i = 0; i < nCodes; i += 1) {\n code = parser.parseCard8();\n encoding[code] = i;\n }\n } else if (format === 1) {\n const nRanges = parser.parseCard8();\n code = 1;\n for (let i = 0; i < nRanges; i += 1) {\n const first = parser.parseCard8();\n const nLeft = parser.parseCard8();\n for (let j = first; j <= first + nLeft; j += 1) {\n encoding[j] = code;\n code += 1;\n }\n }\n } else {\n throw new Error(\"Unknown encoding format \" + format);\n }\n return encoding;\n}\nfunction parseBlend(operands) {\n let numberOfBlends = operands.pop();\n while (operands.length > numberOfBlends) {\n operands.pop();\n }\n}\nfunction applyPaintType(font, path) {\n const paintType = font.tables.cff && font.tables.cff.topDict && font.tables.cff.topDict.paintType || 0;\n if (paintType === 2) {\n path.fill = null;\n path.stroke = \"black\";\n path.strokeWidth = font.tables.cff.topDict.strokeWidth || 0;\n }\n return paintType;\n}\nfunction parseCFFCharstring(font, glyph, code, version, coords) {\n let c1x;\n let c1y;\n let c2x;\n let c2y;\n const p = new path_default();\n const stack = [];\n let nStems = 0;\n let haveWidth = false;\n let open = false;\n let x = 0;\n let y = 0;\n let subrs;\n let subrsBias;\n let defaultWidthX;\n let nominalWidthX;\n let vsindex = 0;\n let vstore = [];\n let blendVector;\n let callDepth = 0;\n const cffTable = font.tables.cff2 || font.tables.cff;\n defaultWidthX = cffTable.topDict._defaultWidthX;\n nominalWidthX = cffTable.topDict._nominalWidthX;\n coords = coords || font.variation && font.variation.get();\n if (!glyph.getBlendPath) {\n glyph.getBlendPath = function(variationCoords) {\n return parseCFFCharstring(font, glyph, code, version, variationCoords);\n };\n }\n if (font.isCIDFont || version > 1) {\n const fdIndex = cffTable.topDict._fdSelect ? cffTable.topDict._fdSelect[glyph.index] : 0;\n const fdDict = cffTable.topDict._fdArray[fdIndex];\n subrs = fdDict._subrs;\n subrsBias = fdDict._subrsBias;\n if (version > 1) {\n vstore = cffTable.topDict._vstore.itemVariationStore;\n vsindex = fdDict._privateDict.vsindex;\n } else {\n defaultWidthX = fdDict._defaultWidthX;\n nominalWidthX = fdDict._nominalWidthX;\n }\n } else {\n subrs = cffTable.topDict._subrs;\n subrsBias = cffTable.topDict._subrsBias;\n }\n const paintType = applyPaintType(font, p);\n let width = defaultWidthX;\n function newContour(x2, y2) {\n if (open && paintType !== 2) {\n p.closePath();\n }\n p.moveTo(x2, y2);\n open = true;\n }\n function parseStems() {\n let hasWidthArg;\n hasWidthArg = (stack.length & 1) !== 0;\n if (hasWidthArg && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n }\n nStems += stack.length >> 1;\n stack.length = 0;\n haveWidth = true;\n }\n function parse(code2) {\n let b1;\n let b2;\n let b3;\n let b4;\n let codeIndex;\n let subrCode;\n let jpx;\n let jpy;\n let c3x;\n let c3y;\n let c4x;\n let c4y;\n let i = 0;\n while (i < code2.length) {\n let v = code2[i];\n i += 1;\n switch (v) {\n case 1:\n parseStems();\n break;\n case 3:\n parseStems();\n break;\n case 4:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n newContour(x, y);\n break;\n case 5:\n while (stack.length > 0) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 6:\n while (stack.length > 0) {\n x += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 7:\n while (stack.length > 0) {\n y += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n x += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 8:\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 10:\n codeIndex = stack.pop() + subrsBias;\n subrCode = subrs[codeIndex];\n if (subrCode) {\n if (callDepth >= MAX_CALL_DEPTH) {\n console.warn(\"CFF charstring subroutine call depth exceeded, skipping callsubr\");\n break;\n }\n callDepth++;\n parse(subrCode);\n callDepth--;\n }\n break;\n case 11:\n if (version > 1) {\n console.error(\"CFF CharString operator return (11) is not supported in CFF2\");\n break;\n }\n return;\n case 12:\n v = code2[i];\n i += 1;\n switch (v) {\n case 35:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n y = c4y + stack.shift();\n stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 34:\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = y;\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 36:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 37:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n if (Math.abs(c4x - x) > Math.abs(c4y - y)) {\n x = c4x + stack.shift();\n } else {\n y = c4y + stack.shift();\n }\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n default:\n console.log(\"Glyph \" + glyph.index + \": unknown operator 1200\" + v);\n stack.length = 0;\n }\n break;\n case 14:\n if (version > 1) {\n console.error(\"CFF CharString operator endchar (14) is not supported in CFF2\");\n break;\n }\n if (stack.length >= 4) {\n const acharName = cffStandardEncoding[stack.pop()];\n const bcharName = cffStandardEncoding[stack.pop()];\n const ady = stack.pop();\n const adx = stack.pop();\n if (acharName && bcharName) {\n glyph.isComposite = true;\n glyph.components = [];\n const acharGlyphIndex = font.cffEncoding.charset.indexOf(acharName);\n const bcharGlyphIndex = font.cffEncoding.charset.indexOf(bcharName);\n glyph.components.push({\n glyphIndex: bcharGlyphIndex,\n dx: 0,\n dy: 0\n });\n glyph.components.push({\n glyphIndex: acharGlyphIndex,\n dx: adx,\n dy: ady\n });\n p.extend(font.glyphs.get(bcharGlyphIndex).path);\n const acharGlyph = font.glyphs.get(acharGlyphIndex);\n const shiftedCommands = JSON.parse(JSON.stringify(acharGlyph.path.commands));\n for (let i2 = 0; i2 < shiftedCommands.length; i2 += 1) {\n const cmd = shiftedCommands[i2];\n if (cmd.type !== \"Z\") {\n cmd.x += adx;\n cmd.y += ady;\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n cmd.x1 += adx;\n cmd.y1 += ady;\n }\n if (cmd.type === \"C\") {\n cmd.x2 += adx;\n cmd.y2 += ady;\n }\n }\n p.extend(shiftedCommands);\n }\n } else if (stack.length > 0 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n if (open && paintType !== 2) {\n p.closePath();\n open = false;\n }\n break;\n case 15:\n if (version < 2) {\n console.error(\"CFF2 CharString operator vsindex (15) is not supported in CFF\");\n break;\n }\n vsindex = stack.pop();\n break;\n case 16:\n if (version < 2) {\n console.error(\"CFF2 CharString operator blend (16) is not supported in CFF\");\n break;\n }\n if (!blendVector) {\n blendVector = font.variation && coords && font.variation.process.getBlendVector(vstore, vsindex, coords);\n }\n var n = stack.pop();\n var axisCount = blendVector ? blendVector.length : vstore.itemVariationSubtables[vsindex].regionIndexes.length;\n var deltaSetCount = n * axisCount;\n var delta = stack.length - deltaSetCount;\n var deltaSetIndex = delta - n;\n if (blendVector) {\n for (let i2 = 0; i2 < n; i2++) {\n var sum = stack[deltaSetIndex + i2];\n for (let j = 0; j < axisCount; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n stack[deltaSetIndex + i2] = sum;\n }\n }\n while (deltaSetCount--) {\n stack.pop();\n }\n break;\n case 18:\n parseStems();\n break;\n case 19:\n // hintmask\n case 20:\n parseStems();\n i += nStems + 7 >> 3;\n break;\n case 21:\n if (stack.length > 2 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n x += stack.pop();\n newContour(x, y);\n break;\n case 22:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n x += stack.pop();\n newContour(x, y);\n break;\n case 23:\n parseStems();\n break;\n case 24:\n while (stack.length > 2) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n break;\n case 25:\n while (stack.length > 6) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n case 26:\n if (stack.length & 1) {\n x += stack.shift();\n }\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 27:\n if (stack.length & 1) {\n y += stack.shift();\n }\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 28:\n b1 = code2[i];\n b2 = code2[i + 1];\n stack.push((b1 << 24 | b2 << 16) >> 16);\n i += 2;\n break;\n case 29:\n codeIndex = stack.pop() + font.gsubrsBias;\n subrCode = font.gsubrs[codeIndex];\n if (subrCode) {\n if (callDepth >= MAX_CALL_DEPTH) {\n console.warn(\"CFF charstring subroutine call depth exceeded, skipping callgsubr\");\n break;\n }\n callDepth++;\n parse(subrCode);\n callDepth--;\n }\n break;\n case 30:\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 31:\n while (stack.length > 0) {\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\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 p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n default:\n if (v < 32) {\n console.log(\"Glyph \" + glyph.index + \": unknown operator \" + v);\n } else if (v < 247) {\n stack.push(v - 139);\n } else if (v < 251) {\n b1 = code2[i];\n i += 1;\n stack.push((v - 247) * 256 + b1 + 108);\n } else if (v < 255) {\n b1 = code2[i];\n i += 1;\n stack.push(-(v - 251) * 256 - b1 - 108);\n } else {\n b1 = code2[i];\n b2 = code2[i + 1];\n b3 = code2[i + 2];\n b4 = code2[i + 3];\n i += 4;\n stack.push((b1 << 24 | b2 << 16 | b3 << 8 | b4) / 65536);\n }\n }\n }\n }\n parse(code);\n if (font.variation && coords) {\n p.commands = p.commands.map((c) => {\n const keys = Object.keys(c);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === \"type\") continue;\n c[key] = Math.round(c[key]);\n }\n return c;\n });\n }\n if (haveWidth) {\n glyph.advanceWidth = width;\n }\n return p;\n}\nfunction parseCFFFDSelect(data, start, nGlyphs, fdArrayCount, version) {\n const fdSelect = [];\n let fdIndex;\n const parser = new parse_default.Parser(data, start);\n const format = parser.parseCard8();\n if (format === 0) {\n for (let iGid = 0; iGid < nGlyphs; iGid++) {\n fdIndex = parser.parseCard8();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\");\n }\n fdSelect.push(fdIndex);\n }\n } else if (format === 3 || version > 1 && format === 4) {\n const nRanges = format === 4 ? parser.parseULong() : parser.parseCard16();\n let first = format === 4 ? parser.parseULong() : parser.parseCard16();\n if (first !== 0) {\n throw new Error(`CFF Table CID Font FDSelect format ${format} range has bad initial GID ${first}`);\n }\n let next;\n for (let iRange = 0; iRange < nRanges; iRange++) {\n fdIndex = format === 4 ? parser.parseUShort() : parser.parseCard8();\n next = format === 4 ? parser.parseULong() : parser.parseCard16();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\");\n }\n if (next > nGlyphs) {\n throw new Error(`CFF Table CID Font FDSelect format ${version} range has bad GID ${next}`);\n }\n for (; first < next; first++) {\n fdSelect.push(fdIndex);\n }\n first = next;\n }\n if (next !== nGlyphs) {\n throw new Error(\"CFF Table CID Font FDSelect format 3 range has bad final (Sentinal) GID \" + next);\n }\n } else {\n throw new Error(\"CFF Table CID Font FDSelect table has unsupported format \" + format);\n }\n return fdSelect;\n}\nfunction parseCFFTable(data, start, font, opt) {\n let resultTable;\n const header = parseCFFHeader(data, start);\n if (header.formatMajor === 2) {\n resultTable = font.tables.cff2 = {};\n } else {\n resultTable = font.tables.cff = {};\n }\n const nameIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, header.endOffset, parse_default.bytesToString);\n const topDictIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, nameIndex.endOffset);\n const stringIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, topDictIndex.endOffset, parse_default.bytesToString);\n const globalSubrIndex = parseCFFIndex(data, header.formatMajor > 1 ? start + header.size + header.topDictLength : stringIndex.endOffset, void 0, header.formatMajor);\n font.gsubrs = globalSubrIndex.objects;\n font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);\n let topDict;\n if (header.formatMajor > 1) {\n const topDictOffset = start + header.size;\n const topDictData = parse_default.getBytes(data, topDictOffset, topDictOffset + header.topDictLength);\n topDict = gatherCFFTopDicts(data, 0, [topDictData], void 0, header.formatMajor)[0];\n } else {\n const topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects, header.formatMajor);\n if (topDictArray.length !== 1) {\n throw new Error(\"CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = \" + topDictArray.length);\n }\n topDict = topDictArray[0];\n }\n resultTable.topDict = topDict;\n if (topDict._privateDict) {\n font.defaultWidthX = topDict._privateDict.defaultWidthX;\n font.nominalWidthX = topDict._privateDict.nominalWidthX;\n }\n if (header.formatMajor < 2 && topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) {\n font.isCIDFont = true;\n }\n if (header.formatMajor > 1) {\n let fdArrayIndexOffset = topDict.fdArray;\n let fdSelectOffset = topDict.fdSelect;\n if (!fdArrayIndexOffset) {\n throw new Error(\"This is a CFF2 font, but FDArray information is missing\");\n }\n const fdArrayIndex = parseCFFIndex(data, start + fdArrayIndexOffset, null, header.formatMajor);\n const fdArray = gatherCFF2FontDicts(data, start, fdArrayIndex.objects);\n topDict._fdArray = fdArray;\n if (fdSelectOffset) {\n topDict._fdSelect = parseCFFFDSelect(data, start + fdSelectOffset, font.numGlyphs, fdArray.length, header.formatMajor);\n }\n } else if (font.isCIDFont) {\n let fdArrayOffset = topDict.fdArray;\n let fdSelectOffset = topDict.fdSelect;\n if (fdArrayOffset === 0 || fdSelectOffset === 0) {\n throw new Error(\"Font is marked as a CID font, but FDArray and/or FDSelect information is missing\");\n }\n fdArrayOffset += start;\n const fdArrayIndex = parseCFFIndex(data, fdArrayOffset);\n const fdArray = gatherCFFTopDicts(data, start, fdArrayIndex.objects, stringIndex.objects, header.formatMajor);\n topDict._fdArray = fdArray;\n fdSelectOffset += start;\n topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length, header.formatMajor);\n }\n if (header.formatMajor < 2) {\n const privateDictOffset = start + topDict.private[1];\n const privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects, header.formatMajor);\n font.defaultWidthX = privateDict.defaultWidthX;\n font.nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n const subrOffset = privateDictOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset);\n font.subrs = subrIndex.objects;\n font.subrsBias = calcCFFSubroutineBias(font.subrs);\n } else {\n font.subrs = [];\n font.subrsBias = 0;\n }\n }\n let charStringsIndex;\n if (opt.lowMemory) {\n charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings, header.formatMajor);\n font.nGlyphs = charStringsIndex.offsets.length - (header.formatMajor > 1 ? 1 : 0);\n } else {\n charStringsIndex = parseCFFIndex(data, start + topDict.charStrings, null, header.formatMajor);\n font.nGlyphs = charStringsIndex.objects.length;\n }\n if (header.formatMajor > 1 && font.tables.maxp && font.nGlyphs !== font.tables.maxp.numGlyphs) {\n console.error(`Glyph count in the CFF2 table (${font.nGlyphs}) must correspond to the glyph count in the maxp table (${font.tables.maxp.numGlyphs})`);\n }\n if (header.formatMajor < 2) {\n let charset = [];\n let encoding = [];\n if (topDict.charset === 0) {\n charset = cffISOAdobeStrings;\n } else if (topDict.charset === 1) {\n charset = cffIExpertStrings;\n } else if (topDict.charset === 2) {\n charset = cffExpertSubsetStrings;\n } else {\n charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects, font.isCIDFont);\n }\n if (topDict.encoding === 0) {\n encoding = cffStandardEncoding;\n } else if (topDict.encoding === 1) {\n encoding = cffExpertEncoding;\n } else {\n encoding = parseCFFEncoding(data, start + topDict.encoding);\n }\n font.cffEncoding = new CffEncoding(encoding, charset);\n font.encoding = font.encoding || font.cffEncoding;\n }\n font.glyphs = new glyphset_default.GlyphSet(font);\n if (opt.lowMemory) {\n font._push = function(i) {\n const charString = getCffIndexObject(i, charStringsIndex.offsets, data, start + topDict.charStrings, void 0, header.formatMajor);\n font.glyphs.push(i, glyphset_default.cffGlyphLoader(font, i, parseCFFCharstring, charString, header.formatMajor));\n };\n } else {\n for (let i = 0; i < font.nGlyphs; i += 1) {\n const charString = charStringsIndex.objects[i];\n font.glyphs.push(i, glyphset_default.cffGlyphLoader(font, i, parseCFFCharstring, charString, header.formatMajor));\n }\n }\n if (topDict.vstore) {\n const p = new parse_default.Parser(data, start + topDict.vstore);\n topDict._vstore = p.parseVariationStore();\n }\n}\nfunction encodeString(s, strings) {\n let sid;\n let i = cffStandardStrings.indexOf(s);\n if (i >= 0) {\n sid = i;\n }\n i = strings.indexOf(s);\n if (i >= 0) {\n sid = i + cffStandardStrings.length;\n } else {\n sid = cffStandardStrings.length + strings.length;\n strings.push(s);\n }\n return sid;\n}\nfunction makeHeader() {\n return new table_default.Record(\"Header\", [\n { name: \"major\", type: \"Card8\", value: 1 },\n { name: \"minor\", type: \"Card8\", value: 0 },\n { name: \"hdrSize\", type: \"Card8\", value: 4 },\n { name: \"major\", type: \"Card8\", value: 1 }\n ]);\n}\nfunction makeNameIndex(fontNames) {\n const t = new table_default.Record(\"Name INDEX\", [\n { name: \"names\", type: \"INDEX\", value: [] }\n ]);\n t.names = [];\n for (let i = 0; i < fontNames.length; i += 1) {\n t.names.push({ name: \"name_\" + i, type: \"NAME\", value: fontNames[i] });\n }\n return t;\n}\nfunction makeDict(meta, attrs, strings) {\n const m = {};\n for (let i = 0; i < meta.length; i += 1) {\n const entry = meta[i];\n let value = attrs[entry.name];\n if (value !== void 0 && !equals(value, entry.value)) {\n if (entry.type === \"SID\") {\n value = encodeString(value, strings);\n }\n m[entry.op] = { name: entry.name, type: entry.type, value };\n }\n }\n return m;\n}\nfunction makeTopDict(attrs, strings, version) {\n const t = new table_default.Record(\"Top DICT\", [\n { name: \"dict\", type: \"DICT\", value: {} }\n ]);\n t.dict = makeDict(version > 1 ? TOP_DICT_META_CFF2 : TOP_DICT_META, attrs, strings);\n return t;\n}\nfunction makeTopDictIndex(topDict) {\n const t = new table_default.Record(\"Top DICT INDEX\", [\n { name: \"topDicts\", type: \"INDEX\", value: [] }\n ]);\n t.topDicts = [{ name: \"topDict_0\", type: \"TABLE\", value: topDict }];\n return t;\n}\nfunction makeStringIndex(strings) {\n const t = new table_default.Record(\"String INDEX\", [\n { name: \"strings\", type: \"INDEX\", value: [] }\n ]);\n t.strings = [];\n for (let i = 0; i < strings.length; i += 1) {\n t.strings.push({ name: \"string_\" + i, type: \"STRING\", value: strings[i] });\n }\n return t;\n}\nfunction makeGlobalSubrIndex() {\n return new table_default.Record(\"Global Subr INDEX\", [\n { name: \"subrs\", type: \"INDEX\", value: [] }\n ]);\n}\nfunction makeCharsets(glyphNames, strings) {\n const t = new table_default.Record(\"Charsets\", [\n { name: \"format\", type: \"Card8\", value: 0 }\n ]);\n for (let i = 0; i < glyphNames.length; i += 1) {\n const glyphName = glyphNames[i];\n const glyphSID = encodeString(glyphName, strings);\n t.fields.push({ name: \"glyph_\" + i, type: \"SID\", value: glyphSID });\n }\n return t;\n}\nfunction glyphToOps(glyph, version) {\n const ops = [];\n const path = glyph.path;\n if (version < 2) {\n ops.push({ name: \"width\", type: \"NUMBER\", value: glyph.advanceWidth });\n }\n let x = 0;\n let y = 0;\n for (let i = 0; i < path.commands.length; i += 1) {\n let dx;\n let dy;\n let cmd = path.commands[i];\n if (cmd.type === \"Q\") {\n const _13 = 1 / 3;\n const _23 = 2 / 3;\n cmd = {\n type: \"C\",\n x: cmd.x,\n y: cmd.y,\n x1: Math.round(_13 * x + _23 * cmd.x1),\n y1: Math.round(_13 * y + _23 * cmd.y1),\n x2: Math.round(_13 * cmd.x + _23 * cmd.x1),\n y2: Math.round(_13 * cmd.y + _23 * cmd.y1)\n };\n }\n if (cmd.type === \"M\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rmoveto\", type: \"OP\", value: 21 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"L\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rlineto\", type: \"OP\", value: 5 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"C\") {\n const dx1 = Math.round(cmd.x1 - x);\n const dy1 = Math.round(cmd.y1 - y);\n const dx2 = Math.round(cmd.x2 - cmd.x1);\n const dy2 = Math.round(cmd.y2 - cmd.y1);\n dx = Math.round(cmd.x - cmd.x2);\n dy = Math.round(cmd.y - cmd.y2);\n ops.push({ name: \"dx1\", type: \"NUMBER\", value: dx1 });\n ops.push({ name: \"dy1\", type: \"NUMBER\", value: dy1 });\n ops.push({ name: \"dx2\", type: \"NUMBER\", value: dx2 });\n ops.push({ name: \"dy2\", type: \"NUMBER\", value: dy2 });\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rrcurveto\", type: \"OP\", value: 8 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n }\n }\n if (version < 2) {\n ops.push({ name: \"endchar\", type: \"OP\", value: 14 });\n }\n return ops;\n}\nfunction makeCharStringsIndex(glyphs, version) {\n const t = new table_default.Record(\"CharStrings INDEX\", [\n { name: \"charStrings\", type: \"INDEX\", value: [] }\n ]);\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n const ops = glyphToOps(glyph, version);\n t.charStrings.push({ name: glyph.name, type: \"CHARSTRING\", value: ops });\n }\n return t;\n}\nfunction makePrivateDict(attrs, strings, version) {\n const t = new table_default.Record(\"Private DICT\", [\n { name: \"dict\", type: \"DICT\", value: {} }\n ]);\n t.dict = makeDict(version > 1 ? PRIVATE_DICT_META_CFF2 : PRIVATE_DICT_META, attrs, strings);\n return t;\n}\nfunction makeCFFTable(glyphs, options) {\n const cffVersion = 1;\n const t = new table_default.Table(\"CFF \", [\n { name: \"header\", type: \"RECORD\" },\n { name: \"nameIndex\", type: \"RECORD\" },\n { name: \"topDictIndex\", type: \"RECORD\" },\n { name: \"stringIndex\", type: \"RECORD\" },\n { name: \"globalSubrIndex\", type: \"RECORD\" },\n { name: \"charsets\", type: \"RECORD\" },\n { name: \"charStringsIndex\", type: \"RECORD\" },\n { name: \"privateDict\", type: \"RECORD\" }\n ]);\n const fontScale = 1 / options.unitsPerEm;\n const attrs = {\n version: options.version,\n fullName: options.fullName,\n familyName: options.familyName,\n weight: options.weightName,\n fontBBox: options.fontBBox || [0, 0, 0, 0],\n fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],\n charset: 999,\n encoding: 0,\n charStrings: 999,\n private: [0, 999]\n };\n const topDictOptions = options && options.topDict || {};\n if (cffVersion < 2 && topDictOptions.paintType) {\n attrs.paintType = topDictOptions.paintType;\n attrs.strokeWidth = topDictOptions.strokeWidth || 0;\n }\n const privateAttrs = {};\n const glyphNames = [];\n let glyph;\n for (let i = 1; i < glyphs.length; i += 1) {\n glyph = glyphs.get(i);\n glyphNames.push(glyph.name);\n }\n const strings = [];\n t.header = makeHeader();\n t.nameIndex = makeNameIndex([options.postScriptName]);\n let topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n t.globalSubrIndex = makeGlobalSubrIndex();\n t.charsets = makeCharsets(glyphNames, strings);\n t.charStringsIndex = makeCharStringsIndex(glyphs, cffVersion);\n t.privateDict = makePrivateDict(privateAttrs, strings);\n t.stringIndex = makeStringIndex(strings);\n const startOffset = t.header.sizeOf() + t.nameIndex.sizeOf() + t.topDictIndex.sizeOf() + t.stringIndex.sizeOf() + t.globalSubrIndex.sizeOf();\n attrs.charset = startOffset;\n attrs.encoding = 0;\n attrs.charStrings = attrs.charset + t.charsets.sizeOf();\n attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();\n topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n return t;\n}\nvar cff_default = { parse: parseCFFTable, make: makeCFFTable };\n\n// src/tables/head.mjs\nfunction parseHeadTable(data, start) {\n const head = {};\n const p = new parse_default.Parser(data, start);\n head.version = p.parseVersion();\n head.fontRevision = Math.round(p.parseFixed() * 1e3) / 1e3;\n head.checkSumAdjustment = p.parseULong();\n head.magicNumber = p.parseULong();\n check_default.argument(head.magicNumber === 1594834165, \"Font header has wrong magic number.\");\n head.flags = p.parseUShort();\n head.unitsPerEm = p.parseUShort();\n head.created = p.parseLongDateTime();\n head.modified = p.parseLongDateTime();\n head.xMin = p.parseShort();\n head.yMin = p.parseShort();\n head.xMax = p.parseShort();\n head.yMax = p.parseShort();\n head.macStyle = p.parseUShort();\n head.lowestRecPPEM = p.parseUShort();\n head.fontDirectionHint = p.parseShort();\n head.indexToLocFormat = p.parseShort();\n head.glyphDataFormat = p.parseShort();\n return head;\n}\nfunction makeHeadTable(options) {\n const timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800;\n let createdTimestamp = timestamp;\n let macStyle = options.macStyle || 0;\n if (options.createdTimestamp) {\n createdTimestamp = options.createdTimestamp + 2082844800;\n }\n return new table_default.Table(\"head\", [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"fontRevision\", type: \"FIXED\", value: 65536 },\n { name: \"checkSumAdjustment\", type: \"ULONG\", value: 0 },\n { name: \"magicNumber\", type: \"ULONG\", value: 1594834165 },\n { name: \"flags\", type: \"USHORT\", value: 0 },\n { name: \"unitsPerEm\", type: \"USHORT\", value: 1e3 },\n { name: \"created\", type: \"LONGDATETIME\", value: createdTimestamp },\n { name: \"modified\", type: \"LONGDATETIME\", value: timestamp },\n { name: \"xMin\", type: \"SHORT\", value: 0 },\n { name: \"yMin\", type: \"SHORT\", value: 0 },\n { name: \"xMax\", type: \"SHORT\", value: 0 },\n { name: \"yMax\", type: \"SHORT\", value: 0 },\n { name: \"macStyle\", type: \"USHORT\", value: macStyle },\n { name: \"lowestRecPPEM\", type: \"USHORT\", value: 0 },\n { name: \"fontDirectionHint\", type: \"SHORT\", value: 2 },\n { name: \"indexToLocFormat\", type: \"SHORT\", value: 0 },\n { name: \"glyphDataFormat\", type: \"SHORT\", value: 0 }\n ], options);\n}\nvar head_default = { parse: parseHeadTable, make: makeHeadTable };\n\n// src/tables/hhea.mjs\nfunction parseHheaTable(data, start) {\n const hhea = {};\n const p = new parse_default.Parser(data, start);\n hhea.version = p.parseVersion();\n hhea.ascender = p.parseShort();\n hhea.descender = p.parseShort();\n hhea.lineGap = p.parseShort();\n hhea.advanceWidthMax = p.parseUShort();\n hhea.minLeftSideBearing = p.parseShort();\n hhea.minRightSideBearing = p.parseShort();\n hhea.xMaxExtent = p.parseShort();\n hhea.caretSlopeRise = p.parseShort();\n hhea.caretSlopeRun = p.parseShort();\n hhea.caretOffset = p.parseShort();\n p.relativeOffset += 8;\n hhea.metricDataFormat = p.parseShort();\n hhea.numberOfHMetrics = p.parseUShort();\n return hhea;\n}\nfunction makeHheaTable(options) {\n return new table_default.Table(\"hhea\", [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"ascender\", type: \"FWORD\", value: 0 },\n { name: \"descender\", type: \"FWORD\", value: 0 },\n { name: \"lineGap\", type: \"FWORD\", value: 0 },\n { name: \"advanceWidthMax\", type: \"UFWORD\", value: 0 },\n { name: \"minLeftSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"minRightSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"xMaxExtent\", type: \"FWORD\", value: 0 },\n { name: \"caretSlopeRise\", type: \"SHORT\", value: 1 },\n { name: \"caretSlopeRun\", type: \"SHORT\", value: 0 },\n { name: \"caretOffset\", type: \"SHORT\", value: 0 },\n { name: \"reserved1\", type: \"SHORT\", value: 0 },\n { name: \"reserved2\", type: \"SHORT\", value: 0 },\n { name: \"reserved3\", type: \"SHORT\", value: 0 },\n { name: \"reserved4\", type: \"SHORT\", value: 0 },\n { name: \"metricDataFormat\", type: \"SHORT\", value: 0 },\n { name: \"numberOfHMetrics\", type: \"USHORT\", value: 0 }\n ], options);\n}\nvar hhea_default = { parse: parseHheaTable, make: makeHheaTable };\n\n// src/tables/hmtx.mjs\nfunction parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) {\n let advanceWidth;\n let leftSideBearing;\n const p = new parse_default.Parser(data, start);\n for (let i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n const glyph = glyphs.get(i);\n glyph.advanceWidth = advanceWidth;\n glyph.leftSideBearing = leftSideBearing;\n }\n}\nfunction parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) {\n font._hmtxTableData = {};\n let advanceWidth;\n let leftSideBearing;\n const p = new parse_default.Parser(data, start);\n for (let i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n font._hmtxTableData[i] = {\n advanceWidth,\n leftSideBearing\n };\n }\n}\nfunction parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) {\n if (opt.lowMemory)\n parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs);\n else\n parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs);\n}\nfunction makeHmtxTable(glyphs) {\n const t = new table_default.Table(\"hmtx\", []);\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n const advanceWidth = glyph.advanceWidth || 0;\n const leftSideBearing = glyph.leftSideBearing || 0;\n t.fields.push({ name: \"advanceWidth_\" + i, type: \"USHORT\", value: advanceWidth });\n t.fields.push({ name: \"leftSideBearing_\" + i, type: \"SHORT\", value: leftSideBearing });\n }\n return t;\n}\nvar hmtx_default = { parse: parseHmtxTable, make: makeHmtxTable };\n\n// src/tables/ltag.mjs\nfunction makeLtagTable(tags) {\n const result = new table_default.Table(\"ltag\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"numTags\", type: \"ULONG\", value: tags.length }\n ]);\n let stringPool = \"\";\n const stringPoolOffset = 12 + tags.length * 4;\n for (let i = 0; i < tags.length; ++i) {\n let pos = stringPool.indexOf(tags[i]);\n if (pos < 0) {\n pos = stringPool.length;\n stringPool += tags[i];\n }\n result.fields.push({ name: \"offset \" + i, type: \"USHORT\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + i, type: \"USHORT\", value: tags[i].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n}\nfunction parseLtagTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 1, \"Unsupported ltag table version.\");\n p.skip(\"uLong\", 1);\n const numTags = p.parseULong();\n const tags = [];\n for (let i = 0; i < numTags; i++) {\n let tag = \"\";\n const offset = start + p.parseUShort();\n const length = p.parseUShort();\n for (let j = offset; j < offset + length; ++j) {\n tag += String.fromCharCode(data.getInt8(j));\n }\n tags.push(tag);\n }\n return tags;\n}\nvar ltag_default = { make: makeLtagTable, parse: parseLtagTable };\n\n// src/tables/maxp.mjs\nfunction parseMaxpTable(data, start) {\n const maxp = {};\n const p = new parse_default.Parser(data, start);\n maxp.version = p.parseVersion();\n maxp.numGlyphs = p.parseUShort();\n if (maxp.version === 1) {\n maxp.maxPoints = p.parseUShort();\n maxp.maxContours = p.parseUShort();\n maxp.maxCompositePoints = p.parseUShort();\n maxp.maxCompositeContours = p.parseUShort();\n maxp.maxZones = p.parseUShort();\n maxp.maxTwilightPoints = p.parseUShort();\n maxp.maxStorage = p.parseUShort();\n maxp.maxFunctionDefs = p.parseUShort();\n maxp.maxInstructionDefs = p.parseUShort();\n maxp.maxStackElements = p.parseUShort();\n maxp.maxSizeOfInstructions = p.parseUShort();\n maxp.maxComponentElements = p.parseUShort();\n maxp.maxComponentDepth = p.parseUShort();\n }\n return maxp;\n}\nfunction makeMaxpTable(numGlyphs) {\n return new table_default.Table(\"maxp\", [\n { name: \"version\", type: \"FIXED\", value: 20480 },\n { name: \"numGlyphs\", type: \"USHORT\", value: numGlyphs }\n ]);\n}\nvar maxp_default = { parse: parseMaxpTable, make: makeMaxpTable };\n\n// src/tables/os2.mjs\nvar unicodeRanges = [\n { begin: 0, end: 127 },\n // Basic Latin\n { begin: 128, end: 255 },\n // Latin-1 Supplement\n { begin: 256, end: 383 },\n // Latin Extended-A\n { begin: 384, end: 591 },\n // Latin Extended-B\n { begin: 592, end: 687 },\n // IPA Extensions\n { begin: 688, end: 767 },\n // Spacing Modifier Letters\n { begin: 768, end: 879 },\n // Combining Diacritical Marks\n { begin: 880, end: 1023 },\n // Greek and Coptic\n { begin: 11392, end: 11519 },\n // Coptic\n { begin: 1024, end: 1279 },\n // Cyrillic\n { begin: 1328, end: 1423 },\n // Armenian\n { begin: 1424, end: 1535 },\n // Hebrew\n { begin: 42240, end: 42559 },\n // Vai\n { begin: 1536, end: 1791 },\n // Arabic\n { begin: 1984, end: 2047 },\n // NKo\n { begin: 2304, end: 2431 },\n // Devanagari\n { begin: 2432, end: 2559 },\n // Bengali\n { begin: 2560, end: 2687 },\n // Gurmukhi\n { begin: 2688, end: 2815 },\n // Gujarati\n { begin: 2816, end: 2943 },\n // Oriya\n { begin: 2944, end: 3071 },\n // Tamil\n { begin: 3072, end: 3199 },\n // Telugu\n { begin: 3200, end: 3327 },\n // Kannada\n { begin: 3328, end: 3455 },\n // Malayalam\n { begin: 3584, end: 3711 },\n // Thai\n { begin: 3712, end: 3839 },\n // Lao\n { begin: 4256, end: 4351 },\n // Georgian\n { begin: 6912, end: 7039 },\n // Balinese\n { begin: 4352, end: 4607 },\n // Hangul Jamo\n { begin: 7680, end: 7935 },\n // Latin Extended Additional\n { begin: 7936, end: 8191 },\n // Greek Extended\n { begin: 8192, end: 8303 },\n // General Punctuation\n { begin: 8304, end: 8351 },\n // Superscripts And Subscripts\n { begin: 8352, end: 8399 },\n // Currency Symbol\n { begin: 8400, end: 8447 },\n // Combining Diacritical Marks For Symbols\n { begin: 8448, end: 8527 },\n // Letterlike Symbols\n { begin: 8528, end: 8591 },\n // Number Forms\n { begin: 8592, end: 8703 },\n // Arrows\n { begin: 8704, end: 8959 },\n // Mathematical Operators\n { begin: 8960, end: 9215 },\n // Miscellaneous Technical\n { begin: 9216, end: 9279 },\n // Control Pictures\n { begin: 9280, end: 9311 },\n // Optical Character Recognition\n { begin: 9312, end: 9471 },\n // Enclosed Alphanumerics\n { begin: 9472, end: 9599 },\n // Box Drawing\n { begin: 9600, end: 9631 },\n // Block Elements\n { begin: 9632, end: 9727 },\n // Geometric Shapes\n { begin: 9728, end: 9983 },\n // Miscellaneous Symbols\n { begin: 9984, end: 10175 },\n // Dingbats\n { begin: 12288, end: 12351 },\n // CJK Symbols And Punctuation\n { begin: 12352, end: 12447 },\n // Hiragana\n { begin: 12448, end: 12543 },\n // Katakana\n { begin: 12544, end: 12591 },\n // Bopomofo\n { begin: 12592, end: 12687 },\n // Hangul Compatibility Jamo\n { begin: 43072, end: 43135 },\n // Phags-pa\n { begin: 12800, end: 13055 },\n // Enclosed CJK Letters And Months\n { begin: 13056, end: 13311 },\n // CJK Compatibility\n { begin: 44032, end: 55215 },\n // Hangul Syllables\n { begin: 55296, end: 57343 },\n // Non-Plane 0 *\n { begin: 67840, end: 67871 },\n // Phoenicia\n { begin: 19968, end: 40959 },\n // CJK Unified Ideographs\n { begin: 57344, end: 63743 },\n // Private Use Area (plane 0)\n { begin: 12736, end: 12783 },\n // CJK Strokes\n { begin: 64256, end: 64335 },\n // Alphabetic Presentation Forms\n { begin: 64336, end: 65023 },\n // Arabic Presentation Forms-A\n { begin: 65056, end: 65071 },\n // Combining Half Marks\n { begin: 65040, end: 65055 },\n // Vertical Forms\n { begin: 65104, end: 65135 },\n // Small Form Variants\n { begin: 65136, end: 65279 },\n // Arabic Presentation Forms-B\n { begin: 65280, end: 65519 },\n // Halfwidth And Fullwidth Forms\n { begin: 65520, end: 65535 },\n // Specials\n { begin: 3840, end: 4095 },\n // Tibetan\n { begin: 1792, end: 1871 },\n // Syriac\n { begin: 1920, end: 1983 },\n // Thaana\n { begin: 3456, end: 3583 },\n // Sinhala\n { begin: 4096, end: 4255 },\n // Myanmar\n { begin: 4608, end: 4991 },\n // Ethiopic\n { begin: 5024, end: 5119 },\n // Cherokee\n { begin: 5120, end: 5759 },\n // Unified Canadian Aboriginal Syllabics\n { begin: 5760, end: 5791 },\n // Ogham\n { begin: 5792, end: 5887 },\n // Runic\n { begin: 6016, end: 6143 },\n // Khmer\n { begin: 6144, end: 6319 },\n // Mongolian\n { begin: 10240, end: 10495 },\n // Braille Patterns\n { begin: 40960, end: 42127 },\n // Yi Syllables\n { begin: 5888, end: 5919 },\n // Tagalog\n { begin: 66304, end: 66351 },\n // Old Italic\n { begin: 66352, end: 66383 },\n // Gothic\n { begin: 66560, end: 66639 },\n // Deseret\n { begin: 118784, end: 119039 },\n // Byzantine Musical Symbols\n { begin: 119808, end: 120831 },\n // Mathematical Alphanumeric Symbols\n { begin: 1044480, end: 1048573 },\n // Private Use (plane 15)\n { begin: 65024, end: 65039 },\n // Variation Selectors\n { begin: 917504, end: 917631 },\n // Tags\n { begin: 6400, end: 6479 },\n // Limbu\n { begin: 6480, end: 6527 },\n // Tai Le\n { begin: 6528, end: 6623 },\n // New Tai Lue\n { begin: 6656, end: 6687 },\n // Buginese\n { begin: 11264, end: 11359 },\n // Glagolitic\n { begin: 11568, end: 11647 },\n // Tifinagh\n { begin: 19904, end: 19967 },\n // Yijing Hexagram Symbols\n { begin: 43008, end: 43055 },\n // Syloti Nagri\n { begin: 65536, end: 65663 },\n // Linear B Syllabary\n { begin: 65856, end: 65935 },\n // Ancient Greek Numbers\n { begin: 66432, end: 66463 },\n // Ugaritic\n { begin: 66464, end: 66527 },\n // Old Persian\n { begin: 66640, end: 66687 },\n // Shavian\n { begin: 66688, end: 66735 },\n // Osmanya\n { begin: 67584, end: 67647 },\n // Cypriot Syllabary\n { begin: 68096, end: 68191 },\n // Kharoshthi\n { begin: 119552, end: 119647 },\n // Tai Xuan Jing Symbols\n { begin: 73728, end: 74751 },\n // Cuneiform\n { begin: 119648, end: 119679 },\n // Counting Rod Numerals\n { begin: 7040, end: 7103 },\n // Sundanese\n { begin: 7168, end: 7247 },\n // Lepcha\n { begin: 7248, end: 7295 },\n // Ol Chiki\n { begin: 43136, end: 43231 },\n // Saurashtra\n { begin: 43264, end: 43311 },\n // Kayah Li\n { begin: 43312, end: 43359 },\n // Rejang\n { begin: 43520, end: 43615 },\n // Cham\n { begin: 65936, end: 65999 },\n // Ancient Symbols\n { begin: 66e3, end: 66047 },\n // Phaistos Disc\n { begin: 66208, end: 66271 },\n // Carian\n { begin: 127024, end: 127135 }\n // Domino Tiles\n];\nfunction getUnicodeRange(unicode) {\n for (let i = 0; i < unicodeRanges.length; i += 1) {\n const range = unicodeRanges[i];\n if (unicode >= range.begin && unicode < range.end) {\n return i;\n }\n }\n return -1;\n}\nfunction parseOS2Table(data, start) {\n const os2 = {};\n const p = new parse_default.Parser(data, start);\n os2.version = p.parseUShort();\n os2.xAvgCharWidth = p.parseShort();\n os2.usWeightClass = p.parseUShort();\n os2.usWidthClass = p.parseUShort();\n os2.fsType = p.parseUShort();\n os2.ySubscriptXSize = p.parseShort();\n os2.ySubscriptYSize = p.parseShort();\n os2.ySubscriptXOffset = p.parseShort();\n os2.ySubscriptYOffset = p.parseShort();\n os2.ySuperscriptXSize = p.parseShort();\n os2.ySuperscriptYSize = p.parseShort();\n os2.ySuperscriptXOffset = p.parseShort();\n os2.ySuperscriptYOffset = p.parseShort();\n os2.yStrikeoutSize = p.parseShort();\n os2.yStrikeoutPosition = p.parseShort();\n os2.sFamilyClass = p.parseShort();\n os2.panose = [];\n for (let i = 0; i < 10; i++) {\n os2.panose[i] = p.parseByte();\n }\n os2.ulUnicodeRange1 = p.parseULong();\n os2.ulUnicodeRange2 = p.parseULong();\n os2.ulUnicodeRange3 = p.parseULong();\n os2.ulUnicodeRange4 = p.parseULong();\n os2.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte());\n os2.fsSelection = p.parseUShort();\n os2.usFirstCharIndex = p.parseUShort();\n os2.usLastCharIndex = p.parseUShort();\n os2.sTypoAscender = p.parseShort();\n os2.sTypoDescender = p.parseShort();\n os2.sTypoLineGap = p.parseShort();\n os2.usWinAscent = p.parseUShort();\n os2.usWinDescent = p.parseUShort();\n if (os2.version >= 1) {\n os2.ulCodePageRange1 = p.parseULong();\n os2.ulCodePageRange2 = p.parseULong();\n }\n if (os2.version >= 2) {\n os2.sxHeight = p.parseShort();\n os2.sCapHeight = p.parseShort();\n os2.usDefaultChar = p.parseUShort();\n os2.usBreakChar = p.parseUShort();\n os2.usMaxContent = p.parseUShort();\n }\n return os2;\n}\nfunction makeOS2Table(options) {\n return new table_default.Table(\"OS/2\", [\n { name: \"version\", type: \"USHORT\", value: 3 },\n { name: \"xAvgCharWidth\", type: \"SHORT\", value: 0 },\n { name: \"usWeightClass\", type: \"USHORT\", value: 0 },\n { name: \"usWidthClass\", type: \"USHORT\", value: 0 },\n { name: \"fsType\", type: \"USHORT\", value: 0 },\n { name: \"ySubscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySubscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySubscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySubscriptYOffset\", type: \"SHORT\", value: 140 },\n { name: \"ySuperscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySuperscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySuperscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySuperscriptYOffset\", type: \"SHORT\", value: 479 },\n { name: \"yStrikeoutSize\", type: \"SHORT\", value: 49 },\n { name: \"yStrikeoutPosition\", type: \"SHORT\", value: 258 },\n { name: \"sFamilyClass\", type: \"SHORT\", value: 0 },\n { name: \"bFamilyType\", type: \"BYTE\", value: 0 },\n { name: \"bSerifStyle\", type: \"BYTE\", value: 0 },\n { name: \"bWeight\", type: \"BYTE\", value: 0 },\n { name: \"bProportion\", type: \"BYTE\", value: 0 },\n { name: \"bContrast\", type: \"BYTE\", value: 0 },\n { name: \"bStrokeVariation\", type: \"BYTE\", value: 0 },\n { name: \"bArmStyle\", type: \"BYTE\", value: 0 },\n { name: \"bLetterform\", type: \"BYTE\", value: 0 },\n { name: \"bMidline\", type: \"BYTE\", value: 0 },\n { name: \"bXHeight\", type: \"BYTE\", value: 0 },\n { name: \"ulUnicodeRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange2\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange3\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange4\", type: \"ULONG\", value: 0 },\n { name: \"achVendID\", type: \"CHARARRAY\", value: \"XXXX\" },\n { name: \"fsSelection\", type: \"USHORT\", value: 0 },\n { name: \"usFirstCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"usLastCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"sTypoAscender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoDescender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoLineGap\", type: \"SHORT\", value: 0 },\n { name: \"usWinAscent\", type: \"USHORT\", value: 0 },\n { name: \"usWinDescent\", type: \"USHORT\", value: 0 },\n { name: \"ulCodePageRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulCodePageRange2\", type: \"ULONG\", value: 0 },\n { name: \"sxHeight\", type: \"SHORT\", value: 0 },\n { name: \"sCapHeight\", type: \"SHORT\", value: 0 },\n { name: \"usDefaultChar\", type: \"USHORT\", value: 0 },\n { name: \"usBreakChar\", type: \"USHORT\", value: 0 },\n { name: \"usMaxContext\", type: \"USHORT\", value: 0 }\n ], options);\n}\nvar os2_default = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges, getUnicodeRange };\n\n// src/tables/post.mjs\nfunction parsePostTable(data, start) {\n const post = {};\n const p = new parse_default.Parser(data, start);\n post.version = p.parseVersion();\n post.italicAngle = p.parseFixed();\n post.underlinePosition = p.parseShort();\n post.underlineThickness = p.parseShort();\n post.isFixedPitch = p.parseULong();\n post.minMemType42 = p.parseULong();\n post.maxMemType42 = p.parseULong();\n post.minMemType1 = p.parseULong();\n post.maxMemType1 = p.parseULong();\n switch (post.version) {\n case 1:\n post.names = standardNames.slice();\n break;\n case 2:\n post.numberOfGlyphs = p.parseUShort();\n post.glyphNameIndex = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n post.glyphNameIndex[i] = p.parseUShort();\n }\n post.names = [];\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n if (post.glyphNameIndex[i] >= standardNames.length) {\n const nameLength = p.parseChar();\n post.names.push(p.parseString(nameLength));\n }\n }\n break;\n case 2.5:\n post.numberOfGlyphs = p.parseUShort();\n post.offset = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n post.offset[i] = p.parseChar();\n }\n break;\n }\n return post;\n}\nfunction makePostTable(font) {\n const {\n italicAngle = Math.round((font.italicAngle || 0) * 65536),\n underlinePosition = 0,\n underlineThickness = 0,\n isFixedPitch = 0,\n minMemType42 = 0,\n maxMemType42 = 0,\n minMemType1 = 0,\n maxMemType1 = 0\n } = font.tables.post || {};\n return new table_default.Table(\"post\", [\n { name: \"version\", type: \"FIXED\", value: 196608 },\n { name: \"italicAngle\", type: \"FIXED\", value: italicAngle },\n { name: \"underlinePosition\", type: \"FWORD\", value: underlinePosition },\n { name: \"underlineThickness\", type: \"FWORD\", value: underlineThickness },\n { name: \"isFixedPitch\", type: \"ULONG\", value: isFixedPitch },\n { name: \"minMemType42\", type: \"ULONG\", value: minMemType42 },\n { name: \"maxMemType42\", type: \"ULONG\", value: maxMemType42 },\n { name: \"minMemType1\", type: \"ULONG\", value: minMemType1 },\n { name: \"maxMemType1\", type: \"ULONG\", value: maxMemType1 }\n ]);\n}\nvar post_default = { parse: parsePostTable, make: makePostTable };\n\n// src/tables/gsub.mjs\nvar subtableParsers = new Array(9);\nsubtableParsers[1] = function parseLookup1() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n deltaGlyphId: this.parseShort()\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n substitute: this.parseOffset16List()\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 1 format must be 1 or 2.\");\n};\nsubtableParsers[2] = function parseLookup2() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Multiple Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n sequences: this.parseListOfLists()\n };\n};\nsubtableParsers[3] = function parseLookup3() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Alternate Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n alternateSets: this.parseListOfLists()\n };\n};\nsubtableParsers[4] = function parseLookup4() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB ligature table identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ligatureSets: this.parseListOfLists(function() {\n return {\n ligGlyph: this.parseUShort(),\n components: this.parseUShortList(this.parseUShort() - 1)\n };\n })\n };\n};\nvar lookupRecordDesc = {\n sequenceIndex: Parser.uShort,\n lookupListIndex: Parser.uShort\n};\nsubtableParsers[5] = function parseLookup5() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ruleSets: this.parseListOfLists(function() {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n input: this.parseUShortList(glyphCount - 1),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n classDef: this.parsePointer(Parser.classDef),\n classSets: this.parseListOfLists(function() {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n classes: this.parseUShortList(glyphCount - 1),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n substFormat,\n coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 5 format must be 1, 2 or 3.\");\n};\nsubtableParsers[6] = function parseLookup6() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n chainRuleSets: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n backtrackClassDef: this.parsePointer(Parser.classDef),\n inputClassDef: this.parsePointer(Parser.classDef),\n lookaheadClassDef: this.parsePointer(Parser.classDef),\n chainClassSet: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n return {\n substFormat: 3,\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n inputCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 6 format must be 1, 2 or 3.\");\n};\nsubtableParsers[7] = function parseLookup7() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Extension Substitution subtable identifier-format must be 1\");\n const extensionLookupType = this.parseUShort();\n const extensionParser = new Parser(this.data, this.offset + this.parseULong());\n return {\n substFormat: 1,\n lookupType: extensionLookupType,\n extension: subtableParsers[extensionLookupType].call(extensionParser)\n };\n};\nsubtableParsers[8] = function parseLookup8() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n substitutes: this.parseUShortList()\n };\n};\nfunction parseGsubTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GSUB table version.\");\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers),\n variations: p.parseFeatureVariationsList()\n };\n }\n}\nvar subtableMakers = new Array(9);\nsubtableMakers[1] = function makeLookup1(subtable) {\n if (subtable.substFormat === 1) {\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) },\n { name: \"deltaGlyphID\", type: \"SHORT\", value: subtable.deltaGlyphId }\n ]);\n } else if (subtable.substFormat === 2) {\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 2 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.ushortList(\"substitute\", subtable.substitute)));\n }\n check_default.fail(\"Lookup type 1 substFormat must be 1 or 2.\");\n};\nsubtableMakers[2] = function makeLookup2(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 2 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"seqSet\", subtable.sequences, function(sequenceSet) {\n return new table_default.Table(\"sequenceSetTable\", table_default.ushortList(\"sequence\", sequenceSet));\n })));\n};\nsubtableMakers[3] = function makeLookup3(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 3 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"altSet\", subtable.alternateSets, function(alternateSet) {\n return new table_default.Table(\"alternateSetTable\", table_default.ushortList(\"alternate\", alternateSet));\n })));\n};\nsubtableMakers[4] = function makeLookup4(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 4 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"ligSet\", subtable.ligatureSets, function(ligatureSet) {\n return new table_default.Table(\"ligatureSetTable\", table_default.tableList(\"ligature\", ligatureSet, function(ligature) {\n return new table_default.Table(\n \"ligatureTable\",\n [{ name: \"ligGlyph\", type: \"USHORT\", value: ligature.ligGlyph }].concat(table_default.ushortList(\"component\", ligature.components, ligature.components.length + 1))\n );\n }));\n })));\n};\nsubtableMakers[5] = function makeLookup5(subtable) {\n if (subtable.substFormat === 1) {\n return new table_default.Table(\"contextualSubstitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"sequenceRuleSet\", subtable.ruleSets, function(sequenceRuleSet) {\n if (!sequenceRuleSet) {\n return new table_default.Table(\"NULL\", null);\n }\n return new table_default.Table(\"sequenceRuleSetTable\", table_default.tableList(\"sequenceRule\", sequenceRuleSet, function(sequenceRule) {\n let tableData = table_default.ushortList(\"seqLookup\", [], sequenceRule.lookupRecords.length).concat(table_default.ushortList(\"inputSequence\", sequenceRule.input, sequenceRule.input.length + 1));\n [tableData[0], tableData[1]] = [tableData[1], tableData[0]];\n for (let i = 0; i < sequenceRule.lookupRecords.length; i++) {\n const record = sequenceRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"sequenceRuleTable\", tableData);\n }));\n })));\n } else if (subtable.substFormat === 2) {\n return new table_default.Table(\"contextualSubstitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) },\n { name: \"classDef\", type: \"TABLE\", value: new table_default.ClassDef(subtable.classDef) }\n ].concat(table_default.tableList(\"classSeqRuleSet\", subtable.classSets, function(classSeqRuleSet) {\n if (!classSeqRuleSet) {\n return new table_default.Table(\"NULL\", null);\n }\n return new table_default.Table(\"classSeqRuleSetTable\", table_default.tableList(\"classSeqRule\", classSeqRuleSet, function(classSeqRule) {\n let tableData = table_default.ushortList(\"classes\", classSeqRule.classes, classSeqRule.classes.length + 1).concat(table_default.ushortList(\"seqLookupCount\", [], classSeqRule.lookupRecords.length));\n for (let i = 0; i < classSeqRule.lookupRecords.length; i++) {\n const record = classSeqRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"classSeqRuleTable\", tableData);\n }));\n })));\n } else if (subtable.substFormat === 3) {\n let tableData = [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }\n ];\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.coverages.length });\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n for (let i = 0; i < subtable.coverages.length; i++) {\n const coverage = subtable.coverages[i];\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const record = subtable.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n let returnTable = new table_default.Table(\"contextualSubstitutionTable\", tableData);\n return returnTable;\n }\n check_default.assert(false, \"lookup type 5 format must be 1, 2 or 3.\");\n};\nsubtableMakers[6] = function makeLookup6(subtable) {\n if (subtable.substFormat === 1) {\n let returnTable = new table_default.Table(\"chainContextTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"chainRuleSet\", subtable.chainRuleSets, function(chainRuleSet) {\n return new table_default.Table(\"chainRuleSetTable\", table_default.tableList(\"chainRule\", chainRuleSet, function(chainRule) {\n let tableData = table_default.ushortList(\"backtrackGlyph\", chainRule.backtrack, chainRule.backtrack.length).concat(table_default.ushortList(\"inputGlyph\", chainRule.input, chainRule.input.length + 1)).concat(table_default.ushortList(\"lookaheadGlyph\", chainRule.lookahead, chainRule.lookahead.length)).concat(table_default.ushortList(\"substitution\", [], chainRule.lookupRecords.length));\n for (let i = 0; i < chainRule.lookupRecords.length; i++) {\n const record = chainRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"chainRuleTable\", tableData);\n }));\n })));\n return returnTable;\n } else if (subtable.substFormat === 2) {\n check_default.assert(false, \"lookup type 6 format 2 is not yet supported.\");\n } else if (subtable.substFormat === 3) {\n let tableData = [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }\n ];\n tableData.push({ name: \"backtrackGlyphCount\", type: \"USHORT\", value: subtable.backtrackCoverage.length });\n for (let i = 0; i < subtable.backtrackCoverage.length; i++) {\n const coverage = subtable.backtrackCoverage[i];\n tableData.push({ name: \"backtrackCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.inputCoverage.length });\n for (let i = 0; i < subtable.inputCoverage.length; i++) {\n const coverage = subtable.inputCoverage[i];\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"lookaheadGlyphCount\", type: \"USHORT\", value: subtable.lookaheadCoverage.length });\n for (let i = 0; i < subtable.lookaheadCoverage.length; i++) {\n const coverage = subtable.lookaheadCoverage[i];\n tableData.push({ name: \"lookaheadCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const record = subtable.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n let returnTable = new table_default.Table(\"chainContextTable\", tableData);\n return returnTable;\n }\n check_default.assert(false, \"lookup type 6 format must be 1, 2 or 3.\");\n};\nfunction makeGsubTable(gsub) {\n return new table_default.Table(\"GSUB\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table_default.ScriptList(gsub.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table_default.FeatureList(gsub.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table_default.LookupList(gsub.lookups, subtableMakers) }\n ]);\n}\nvar gsub_default = { parse: parseGsubTable, make: makeGsubTable };\n\n// src/tables/meta.mjs\nfunction parseMetaTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 1, \"Unsupported META table version.\");\n p.parseULong();\n p.parseULong();\n const numDataMaps = p.parseULong();\n const tags = {};\n for (let i = 0; i < numDataMaps; i++) {\n const tag = p.parseTag();\n const dataOffset = p.parseULong();\n const dataLength = p.parseULong();\n if (tag === \"appl\" || tag === \"bild\")\n continue;\n const text = decode.UTF8(data, start + dataOffset, dataLength);\n tags[tag] = text;\n }\n return tags;\n}\nfunction makeMetaTable(tags) {\n const numTags = Object.keys(tags).length;\n let stringPool = \"\";\n const stringPoolOffset = 16 + numTags * 12;\n const result = new table_default.Table(\"meta\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"offset\", type: \"ULONG\", value: stringPoolOffset },\n { name: \"numTags\", type: \"ULONG\", value: numTags }\n ]);\n for (let tag in tags) {\n const pos = stringPool.length;\n stringPool += tags[tag];\n result.fields.push({ name: \"tag \" + tag, type: \"TAG\", value: tag });\n result.fields.push({ name: \"offset \" + tag, type: \"ULONG\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + tag, type: \"ULONG\", value: tags[tag].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n}\nvar meta_default = { parse: parseMetaTable, make: makeMetaTable };\n\n// src/tables/colr.mjs\nfunction parseColrTable(data, start) {\n const p = new Parser(data, start);\n const version = p.parseUShort();\n if (version !== 0) {\n console.warn(\"Only COLRv0 is currently fully supported. A subset of color glyphs might be available in this font if provided in the v0 format.\");\n }\n const numBaseGlyphRecords = p.parseUShort();\n const baseGlyphRecordsOffset = p.parseOffset32();\n const layerRecordsOffset = p.parseOffset32();\n const numLayerRecords = p.parseUShort();\n p.relativeOffset = baseGlyphRecordsOffset;\n const baseGlyphRecords = p.parseRecordList(numBaseGlyphRecords, {\n glyphID: Parser.uShort,\n firstLayerIndex: Parser.uShort,\n numLayers: Parser.uShort\n });\n p.relativeOffset = layerRecordsOffset;\n const layerRecords = p.parseRecordList(numLayerRecords, {\n glyphID: Parser.uShort,\n paletteIndex: Parser.uShort\n });\n return {\n version,\n baseGlyphRecords,\n layerRecords\n };\n}\nfunction makeColrTable({ version = 0, baseGlyphRecords = [], layerRecords = [] }) {\n check_default.argument(version === 0, \"Only COLRv0 supported.\");\n const baseGlyphRecordsOffset = 14;\n const layerRecordsOffset = baseGlyphRecordsOffset + baseGlyphRecords.length * 6;\n return new table_default.Table(\"COLR\", [\n { name: \"version\", type: \"USHORT\", value: version },\n { name: \"numBaseGlyphRecords\", type: \"USHORT\", value: baseGlyphRecords.length },\n { name: \"baseGlyphRecordsOffset\", type: \"ULONG\", value: baseGlyphRecordsOffset },\n { name: \"layerRecordsOffset\", type: \"ULONG\", value: layerRecordsOffset },\n { name: \"numLayerRecords\", type: \"USHORT\", value: layerRecords.length },\n ...baseGlyphRecords.map((glyph, i) => [\n { name: \"glyphID_\" + i, type: \"USHORT\", value: glyph.glyphID },\n { name: \"firstLayerIndex_\" + i, type: \"USHORT\", value: glyph.firstLayerIndex },\n { name: \"numLayers_\" + i, type: \"USHORT\", value: glyph.numLayers }\n ]).flat(),\n ...layerRecords.map((layer, i) => [\n { name: \"LayerGlyphID_\" + i, type: \"USHORT\", value: layer.glyphID },\n { name: \"paletteIndex_\" + i, type: \"USHORT\", value: layer.paletteIndex }\n ]).flat()\n ]);\n}\nvar colr_default = { parse: parseColrTable, make: makeColrTable };\n\n// src/tables/fvar.mjs\nfunction makeFvarAxis(n, axis) {\n return [\n { name: \"tag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"minValue_\" + n, type: \"FIXED\", value: axis.minValue << 16 },\n { name: \"defaultValue_\" + n, type: \"FIXED\", value: axis.defaultValue << 16 },\n { name: \"maxValue_\" + n, type: \"FIXED\", value: axis.maxValue << 16 },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 },\n { name: \"nameID_\" + n, type: \"USHORT\", value: axis.axisNameID }\n ];\n}\nfunction parseFvarAxis(data, start, names) {\n const axis = {};\n const p = new parse_default.Parser(data, start);\n axis.tag = p.parseTag();\n axis.minValue = p.parseFixed();\n axis.defaultValue = p.parseFixed();\n axis.maxValue = p.parseFixed();\n p.skip(\"uShort\", 1);\n const axisNameID = p.parseUShort();\n axis.axisNameID = axisNameID;\n axis.name = getNameByID(names, axisNameID);\n return axis;\n}\nfunction makeFvarInstance(n, inst, axes, optionalFields = {}) {\n const fields = [\n { name: \"nameID_\" + n, type: \"USHORT\", value: inst.subfamilyNameID },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 }\n ];\n for (let i = 0; i < axes.length; ++i) {\n const axisTag = axes[i].tag;\n fields.push({\n name: \"axis_\" + n + \" \" + axisTag,\n type: \"FIXED\",\n value: inst.coordinates[axisTag] << 16\n });\n }\n if (optionalFields && optionalFields.postScriptNameID) {\n fields.push({\n name: \"postScriptNameID_\",\n type: \"USHORT\",\n value: inst.postScriptNameID !== void 0 ? inst.postScriptNameID : 65535\n });\n }\n return fields;\n}\nfunction parseFvarInstance(data, start, axes, names, instanceSize) {\n const inst = {};\n const p = new parse_default.Parser(data, start);\n const subfamilyNameID = p.parseUShort();\n inst.subfamilyNameID = subfamilyNameID;\n inst.name = getNameByID(names, subfamilyNameID, [2, 17]);\n p.skip(\"uShort\", 1);\n inst.coordinates = {};\n for (let i = 0; i < axes.length; ++i) {\n inst.coordinates[axes[i].tag] = p.parseFixed();\n }\n if (p.relativeOffset === instanceSize) {\n inst.postScriptNameID = void 0;\n inst.postScriptName = void 0;\n return inst;\n }\n const postScriptNameID = p.parseUShort();\n inst.postScriptNameID = postScriptNameID == 65535 ? void 0 : postScriptNameID;\n inst.postScriptName = inst.postScriptNameID !== void 0 ? getNameByID(names, postScriptNameID, [6]) : \"\";\n return inst;\n}\nfunction makeFvarTable(fvar, names) {\n const result = new table_default.Table(\"fvar\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"offsetToData\", type: \"USHORT\", value: 0 },\n { name: \"countSizePairs\", type: \"USHORT\", value: 2 },\n { name: \"axisCount\", type: \"USHORT\", value: fvar.axes.length },\n { name: \"axisSize\", type: \"USHORT\", value: 20 },\n { name: \"instanceCount\", type: \"USHORT\", value: fvar.instances.length },\n { name: \"instanceSize\", type: \"USHORT\", value: 4 + fvar.axes.length * 4 }\n ]);\n result.offsetToData = result.sizeOf();\n for (let i = 0; i < fvar.axes.length; i++) {\n result.fields = result.fields.concat(makeFvarAxis(i, fvar.axes[i], names));\n }\n const optionalFields = {};\n for (let j = 0; j < fvar.instances.length; j++) {\n if (fvar.instances[j].postScriptNameID !== void 0) {\n result.instanceSize += 2;\n optionalFields.postScriptNameID = true;\n break;\n }\n }\n for (let j = 0; j < fvar.instances.length; j++) {\n result.fields = result.fields.concat(makeFvarInstance(\n j,\n fvar.instances[j],\n fvar.axes,\n optionalFields\n ));\n }\n return result;\n}\nfunction parseFvarTable(data, start, names) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 65536, \"Unsupported fvar table version.\");\n const offsetToData = p.parseOffset16();\n p.skip(\"uShort\", 1);\n const axisCount = p.parseUShort();\n const axisSize = p.parseUShort();\n const instanceCount = p.parseUShort();\n const instanceSize = p.parseUShort();\n const axes = [];\n for (let i = 0; i < axisCount; i++) {\n axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names));\n }\n const instances = [];\n const instanceStart = start + offsetToData + axisCount * axisSize;\n for (let j = 0; j < instanceCount; j++) {\n instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names, instanceSize));\n }\n return { axes, instances };\n}\nvar fvar_default = { make: makeFvarTable, parse: parseFvarTable };\n\n// src/tables/stat.mjs\nvar axisRecordStruct = {\n tag: Parser.tag,\n nameID: Parser.uShort,\n ordering: Parser.uShort\n};\nvar axisValueParsers = new Array(5);\naxisValueParsers[1] = function axisValueParser1() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n value: this.parseFixed()\n };\n};\naxisValueParsers[2] = function axisValueParser2() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n nominalValue: this.parseFixed(),\n rangeMinValue: this.parseFixed(),\n rangeMaxValue: this.parseFixed()\n };\n};\naxisValueParsers[3] = function axisValueParser3() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n value: this.parseFixed(),\n linkedValue: this.parseFixed()\n };\n};\naxisValueParsers[4] = function axisValueParser4() {\n const axisCount = this.parseUShort();\n return {\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n axisValues: this.parseList(axisCount, function() {\n return {\n axisIndex: this.parseUShort(),\n value: this.parseFixed()\n };\n })\n };\n};\nfunction parseSTATAxisValue() {\n const valueTableFormat = this.parseUShort();\n const axisValueParser = axisValueParsers[valueTableFormat];\n const formatStub = {\n format: valueTableFormat\n };\n if (axisValueParser === void 0) {\n console.warn(`Unknown axis value table format ${valueTableFormat}`);\n return formatStub;\n }\n return Object.assign(formatStub, this.parseStruct(axisValueParser.bind(this)));\n}\nfunction parseSTATTable(data, start, fvar) {\n if (!start) {\n start = 0;\n }\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported STAT table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const version = [\n tableVersionMajor,\n tableVersionMinor\n ];\n const designAxisSize = p.parseUShort();\n const designAxisCount = p.parseUShort();\n const designAxesOffset = p.parseOffset32();\n const axisValueCount = p.parseUShort();\n const offsetToAxisValueOffsets = p.parseOffset32();\n const elidedFallbackNameID = tableVersionMajor > 1 || tableVersionMinor > 0 ? p.parseUShort() : void 0;\n if (fvar !== void 0) {\n check_default.argument(designAxisCount >= fvar.axes.length, \"STAT axis count must be greater than or equal to fvar axis count\");\n }\n if (axisValueCount > 0) {\n check_default.argument(designAxisCount >= 0, \"STAT axis count must be greater than 0 if STAT axis value count is greater than 0\");\n }\n const axes = [];\n for (let i = 0; i < designAxisCount; i++) {\n p.offset = start + designAxesOffset;\n p.relativeOffset = i * designAxisSize;\n axes.push(p.parseStruct(axisRecordStruct));\n }\n p.offset = start;\n p.relativeOffset = offsetToAxisValueOffsets;\n const valueOffsets = p.parseUShortList(axisValueCount);\n const values = [];\n for (let i = 0; i < axisValueCount; i++) {\n p.offset = start + offsetToAxisValueOffsets;\n p.relativeOffset = valueOffsets[i];\n values.push(parseSTATAxisValue.apply(p));\n }\n return {\n version,\n axes,\n values,\n elidedFallbackNameID\n };\n}\nvar axisValueMakers = new Array(5);\naxisValueMakers[1] = function axisValueMaker1(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 1 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `value${n}`, type: \"FLOAT\", value: table.value }\n ];\n};\naxisValueMakers[2] = function axisValueMaker2(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 2 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `nominalValue${n}`, type: \"FLOAT\", value: table.nominalValue },\n { name: `rangeMinValue${n}`, type: \"FLOAT\", value: table.rangeMinValue },\n { name: `rangeMaxValue${n}`, type: \"FLOAT\", value: table.rangeMaxValue }\n ];\n};\naxisValueMakers[3] = function axisValueMaker3(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 3 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `value${n}`, type: \"FLOAT\", value: table.value },\n { name: `linkedValue${n}`, type: \"FLOAT\", value: table.linkedValue }\n ];\n};\naxisValueMakers[4] = function axisValueMaker4(n, table) {\n let returnFields = [\n { name: `format${n}`, type: \"USHORT\", value: 4 },\n { name: `axisCount${n}`, type: \"USHORT\", value: table.axisValues.length },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID }\n ];\n for (let i = 0; i < table.axisValues.length; i++) {\n returnFields = returnFields.concat([\n { name: `format${n}axisIndex${i}`, type: \"USHORT\", value: table.axisValues[i].axisIndex },\n { name: `format${n}value${i}`, type: \"FLOAT\", value: table.axisValues[i].value }\n ]);\n }\n return returnFields;\n};\nfunction makeSTATAxisRecord(n, axis) {\n return new table_default.Record(\"axisRecord_\" + n, [\n { name: \"axisTag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"axisNameID_\" + n, type: \"USHORT\", value: axis.nameID },\n { name: \"axisOrdering_\" + n, type: \"USHORT\", value: axis.ordering }\n ]);\n}\nfunction makeSTATValueTable(n, tableData) {\n const valueTableFormat = tableData.format;\n const axisValueMaker = axisValueMakers[valueTableFormat];\n check_default.argument(axisValueMaker !== void 0, `Unknown axis value table format ${valueTableFormat}`);\n const fields = axisValueMaker(n, tableData);\n return new table_default.Table(\"axisValueTable_\" + n, fields);\n}\nfunction makeSTATTable(STAT) {\n const result = new table_default.Table(\"STAT\", [\n { name: \"majorVersion\", type: \"USHORT\", value: 1 },\n { name: \"minorVersion\", type: \"USHORT\", value: 2 },\n { name: \"designAxisSize\", type: \"USHORT\", value: 8 },\n { name: \"designAxisCount\", type: \"USHORT\", value: STAT.axes.length },\n { name: \"designAxesOffset\", type: \"ULONG\", value: 0 },\n { name: \"axisValueCount\", type: \"USHORT\", value: STAT.values.length },\n { name: \"offsetToAxisValueOffsets\", type: \"ULONG\", value: 0 },\n { name: \"elidedFallbackNameID\", type: \"USHORT\", value: STAT.elidedFallbackNameID }\n ]);\n result.designAxesOffset = result.offsetToAxisValueOffsets = result.sizeOf();\n for (let i = 0; i < STAT.axes.length; i++) {\n const axisRecord = makeSTATAxisRecord(i, STAT.axes[i]);\n result.offsetToAxisValueOffsets += axisRecord.sizeOf();\n result.fields = result.fields.concat(axisRecord.fields);\n }\n const axisValueOffsets = [];\n let axisValueTables = [];\n let axisValueTableOffset = STAT.values.length * 2;\n for (let j = 0; j < STAT.values.length; j++) {\n const axisValueTable = makeSTATValueTable(j, STAT.values[j]);\n axisValueOffsets.push({\n name: \"offset_\" + j,\n type: \"USHORT\",\n value: axisValueTableOffset\n });\n axisValueTableOffset += axisValueTable.sizeOf();\n axisValueTables = axisValueTables.concat(axisValueTable.fields);\n }\n result.fields = result.fields.concat(axisValueOffsets);\n result.fields = result.fields.concat(axisValueTables);\n return result;\n}\nvar stat_default = { make: makeSTATTable, parse: parseSTATTable };\n\n// src/tables/avar.mjs\nfunction makeAvarAxisValueMap(n, axisValueMap) {\n return new table_default.Record(\"axisValueMap_\" + n, [\n { name: \"fromCoordinate_\" + n, type: \"F2DOT14\", value: axisValueMap.fromCoordinate },\n { name: \"toCoordinate_\" + n, type: \"F2DOT14\", value: axisValueMap.toCoordinate }\n ]);\n}\nfunction makeAvarSegmentMap(n, axis) {\n const returnTable = new table_default.Record(\"segmentMap_\" + n, [\n { name: \"positionMapCount_\" + n, type: \"USHORT\", value: axis.axisValueMaps.length }\n ]);\n let axisValueMaps = [];\n for (let i = 0; i < axis.axisValueMaps.length; i++) {\n const valueMap = makeAvarAxisValueMap(`${n}_${i}`, axis.axisValueMaps[i]);\n axisValueMaps = axisValueMaps.concat(valueMap.fields);\n }\n returnTable.fields = returnTable.fields.concat(axisValueMaps);\n return returnTable;\n}\nfunction makeAvarTable(avar, fvar) {\n check_default.argument(avar.axisSegmentMaps.length === fvar.axes.length, \"avar axis count must correspond to fvar axis count\");\n const result = new table_default.Table(\"avar\", [\n { name: \"majorVersion\", type: \"USHORT\", value: 1 },\n { name: \"minorVersion\", type: \"USHORT\", value: 0 },\n { name: \"reserved\", type: \"USHORT\", value: 0 },\n { name: \"axisCount\", type: \"USHORT\", value: avar.axisSegmentMaps.length }\n ]);\n for (let i = 0; i < avar.axisSegmentMaps.length; i++) {\n const axisRecord = makeAvarSegmentMap(i, avar.axisSegmentMaps[i]);\n result.fields = result.fields.concat(axisRecord.fields);\n }\n return result;\n}\nfunction parseAvarTable(data, start, fvar) {\n if (!start) {\n start = 0;\n }\n const p = new Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported avar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n p.skip(\"uShort\", 1);\n const axisCount = p.parseUShort();\n check_default.argument(axisCount === fvar.axes.length, \"avar axis count must correspond to fvar axis count\");\n const axisSegmentMaps = [];\n for (let i = 0; i < axisCount; i++) {\n const axisValueMaps = [];\n const positionMapCount = p.parseUShort();\n for (let j = 0; j < positionMapCount; j++) {\n const fromCoordinate = p.parseF2Dot14();\n const toCoordinate = p.parseF2Dot14();\n axisValueMaps.push({\n fromCoordinate,\n toCoordinate\n });\n }\n axisSegmentMaps.push({\n axisValueMaps\n });\n }\n return {\n version: [tableVersionMajor, tableVersionMinor],\n axisSegmentMaps\n };\n}\nvar avar_default = { make: makeAvarTable, parse: parseAvarTable };\n\n// src/tables/cvar.mjs\nfunction parseCvarTable(data, start, fvar, cvt) {\n const p = new parse_default.Parser(data, start);\n const cvtVariations = p.parseTupleVariationStore(\n p.relativeOffset,\n fvar.axes.length,\n \"cvar\",\n cvt\n );\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported cvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n return {\n version: [tableVersionMajor, tableVersionMinor],\n ...cvtVariations\n };\n}\nfunction makeCvarTable() {\n console.warn(\"Writing of cvar tables is not yet supported.\");\n}\nvar cvar_default = { make: makeCvarTable, parse: parseCvarTable };\n\n// src/tables/gvar.mjs\nfunction parseGvarTable(data, start, fvar, glyphs) {\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported gvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const axisCount = p.parseUShort();\n if (axisCount !== fvar.axes.length) {\n console.warn(`axisCount ${axisCount} in gvar table does not match the number of axes ${fvar.axes.length} in the fvar table!`);\n }\n const sharedTupleCount = p.parseUShort();\n const sharedTuples = p.parsePointer32(function() {\n return this.parseTupleRecords(sharedTupleCount, axisCount);\n });\n const glyphVariations = p.parseTupleVariationStoreList(axisCount, \"gvar\", glyphs);\n return {\n version: [tableVersionMajor, tableVersionMinor],\n sharedTuples,\n glyphVariations\n };\n}\nfunction makeGvarTable() {\n console.warn(\"Writing of gvar tables is not yet supported.\");\n}\nvar gvar_default = { make: makeGvarTable, parse: parseGvarTable };\n\n// src/tables/gasp.mjs\nfunction parseGaspTable(data, start) {\n const gasp = {};\n const p = new parse_default.Parser(data, start);\n gasp.version = p.parseUShort();\n check_default.argument(gasp.version <= 1, \"Unsupported gasp table version.\");\n gasp.numRanges = p.parseUShort();\n gasp.gaspRanges = [];\n for (let i = 0; i < gasp.numRanges; i++) {\n gasp.gaspRanges[i] = {\n rangeMaxPPEM: p.parseUShort(),\n rangeGaspBehavior: p.parseUShort()\n };\n }\n return gasp;\n}\nfunction makeGaspTable(gasp) {\n const result = new table_default.Table(\"gasp\", [\n { name: \"version\", type: \"USHORT\", value: 1 },\n { name: \"numRanges\", type: \"USHORT\", value: gasp.numRanges }\n ]);\n for (let i in gasp.gaspRanges) {\n result.fields.push({ name: \"rangeMaxPPEM\", type: \"USHORT\", value: gasp.gaspRanges[i].rangeMaxPPEM });\n result.fields.push({ name: \"rangeGaspBehavior\", type: \"USHORT\", value: gasp.gaspRanges[i].rangeGaspBehavior });\n }\n return result;\n}\nvar gasp_default = { parse: parseGaspTable, make: makeGaspTable };\n\n// src/tables/svg.mjs\nfunction parseSvgTable(data, offset) {\n const svgTable = /* @__PURE__ */ new Map();\n const buf = data.buffer;\n const p = new Parser(data, offset);\n const version = p.parseUShort();\n if (version !== 0) return svgTable;\n p.relativeOffset = p.parseOffset32();\n const svgDocumentListOffset = data.byteOffset + offset + p.relativeOffset;\n const numEntries = p.parseUShort();\n const svgDocMap = /* @__PURE__ */ new Map();\n for (let i = 0; i < numEntries; i++) {\n const startGlyphID = p.parseUShort();\n const endGlyphID = p.parseUShort();\n const svgDocOffset = svgDocumentListOffset + p.parseOffset32();\n const svgDocLength = p.parseULong();\n let svgDoc = svgDocMap.get(svgDocOffset);\n if (svgDoc === void 0) {\n svgDoc = new Uint8Array(buf, svgDocOffset, svgDocLength);\n svgDocMap.set(svgDocOffset, svgDoc);\n }\n for (let i2 = startGlyphID; i2 <= endGlyphID; i2++) {\n svgTable.set(i2, svgDoc);\n }\n }\n return svgTable;\n}\nfunction makeSvgTable(svgTable) {\n const glyphIds = Array.from(svgTable.keys()).sort();\n const documentRecords = [];\n const documentBuffers = [];\n const documentOffsets = /* @__PURE__ */ new Map();\n let nextSvgDocOffset = 0;\n let record = { endGlyphID: null };\n for (let i = 0, l = glyphIds.length; i < l; i++) {\n const glyphId = glyphIds[i];\n const svgDoc = svgTable.get(glyphId);\n let svgDocOffset = documentOffsets.get(svgDoc);\n if (svgDocOffset === void 0) {\n svgDocOffset = nextSvgDocOffset;\n documentBuffers.push(svgDoc);\n documentOffsets.set(svgDoc, svgDocOffset);\n nextSvgDocOffset += svgDoc.byteLength;\n }\n if (glyphId - 1 === record.endGlyphID && svgDocOffset === record.svgDocOffset) {\n record.endGlyphID = glyphId;\n } else {\n record = {\n startGlyphID: glyphId,\n endGlyphID: glyphId,\n svgDocOffset,\n svgDocLength: svgDoc.byteLength\n };\n documentRecords.push(record);\n }\n }\n const numEntries = documentRecords.length;\n const numDocuments = documentBuffers.length;\n const documentsOffset = 2 + numEntries * (2 + 2 + 4 + 4);\n const fields = new Array(3 + 1 + numEntries * 4 + numDocuments);\n let fieldIndex = 0;\n fields[fieldIndex++] = { name: \"version\", type: \"USHORT\", value: 0 };\n fields[fieldIndex++] = { name: \"svgDocumentListOffset\", type: \"ULONG\", value: 2 + 4 + 4 };\n fields[fieldIndex++] = { name: \"reserved\", type: \"ULONG\", value: 0 };\n fields[fieldIndex++] = { name: \"numEntries\", type: \"USHORT\", value: numEntries };\n for (let i = 0; i < numEntries; i++) {\n const namePrefix = \"documentRecord_\" + i;\n const { startGlyphID, endGlyphID, svgDocOffset, svgDocLength } = documentRecords[i];\n fields[fieldIndex++] = { name: namePrefix + \"_startGlyphID\", type: \"USHORT\", value: startGlyphID };\n fields[fieldIndex++] = { name: namePrefix + \"_endGlyphID\", type: \"USHORT\", value: endGlyphID };\n fields[fieldIndex++] = { name: namePrefix + \"_svgDocOffset\", type: \"ULONG\", value: documentsOffset + svgDocOffset };\n fields[fieldIndex++] = { name: namePrefix + \"_svgDocLength\", type: \"ULONG\", value: svgDocLength };\n }\n for (let i = 0; i < numDocuments; i++) {\n fields[fieldIndex++] = { name: \"svgDoc_\" + i, type: \"LITERAL\", value: documentBuffers[i] };\n }\n return new table_default.Table(\"SVG \", fields);\n}\nvar svg_default = {\n make: makeSvgTable,\n parse: parseSvgTable\n};\n\n// src/tables/sfnt.mjs\nfunction log2(v) {\n return Math.log(v) / Math.log(2) | 0;\n}\nfunction computeCheckSum(bytes) {\n while (bytes.length % 4 !== 0) {\n bytes.push(0);\n }\n let sum = 0;\n for (let i = 0; i < bytes.length; i += 4) {\n sum += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3];\n }\n sum %= Math.pow(2, 32);\n return sum;\n}\nfunction makeTableRecord(tag, checkSum, offset, length) {\n return new table_default.Record(\"Table Record\", [\n { name: \"tag\", type: \"TAG\", value: tag !== void 0 ? tag : \"\" },\n { name: \"checkSum\", type: \"ULONG\", value: checkSum !== void 0 ? checkSum : 0 },\n { name: \"offset\", type: \"ULONG\", value: offset !== void 0 ? offset : 0 },\n { name: \"length\", type: \"ULONG\", value: length !== void 0 ? length : 0 }\n ]);\n}\nfunction makeSfntTable(tables) {\n const sfnt = new table_default.Table(\"sfnt\", [\n { name: \"version\", type: \"TAG\", value: \"OTTO\" },\n { name: \"numTables\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n sfnt.tables = tables;\n sfnt.numTables = tables.length;\n const highestPowerOf2 = Math.pow(2, log2(sfnt.numTables));\n sfnt.searchRange = 16 * highestPowerOf2;\n sfnt.entrySelector = log2(highestPowerOf2);\n sfnt.rangeShift = sfnt.numTables * 16 - sfnt.searchRange;\n const recordFields = [];\n const tableFields = [];\n let offset = sfnt.sizeOf() + makeTableRecord().sizeOf() * sfnt.numTables;\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n for (let i = 0; i < tables.length; i += 1) {\n const t = tables[i];\n check_default.argument(t.tableName.length === 4, \"Table name\" + t.tableName + \" is invalid.\");\n const tableLength = t.sizeOf();\n const tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength);\n recordFields.push({ name: tableRecord.tag + \" Table Record\", type: \"RECORD\", value: tableRecord });\n tableFields.push({ name: t.tableName + \" table\", type: \"RECORD\", value: t });\n offset += tableLength;\n check_default.argument(!isNaN(offset), \"Something went wrong calculating the offset.\");\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n }\n recordFields.sort(function(r1, r2) {\n if (r1.value.tag > r2.value.tag) {\n return 1;\n } else {\n return -1;\n }\n });\n sfnt.fields = sfnt.fields.concat(recordFields);\n sfnt.fields = sfnt.fields.concat(tableFields);\n return sfnt;\n}\nfunction metricsForChar(font, chars, notFoundMetrics) {\n for (let i = 0; i < chars.length; i += 1) {\n const glyphIndex = font.charToGlyphIndex(chars[i]);\n if (glyphIndex > 0) {\n const glyph = font.glyphs.get(glyphIndex);\n return glyph.getMetrics();\n }\n }\n return notFoundMetrics;\n}\nfunction average(vs) {\n let sum = 0;\n for (let i = 0; i < vs.length; i += 1) {\n sum += vs[i];\n }\n return sum / vs.length;\n}\nfunction fontToSfntTable(font) {\n const xMins = [];\n const yMins = [];\n const xMaxs = [];\n const yMaxs = [];\n const advanceWidths = [];\n const leftSideBearings = [];\n const rightSideBearings = [];\n let firstCharIndex;\n let lastCharIndex = 0;\n let ulUnicodeRange1 = 0;\n let ulUnicodeRange2 = 0;\n let ulUnicodeRange3 = 0;\n let ulUnicodeRange4 = 0;\n for (let i = 0; i < font.glyphs.length; i += 1) {\n const glyph = font.glyphs.get(i);\n const unicode = glyph.unicode | 0;\n if (isNaN(glyph.advanceWidth)) {\n throw new Error(\"Glyph \" + glyph.name + \" (\" + i + \"): advanceWidth is not a number.\");\n }\n if (firstCharIndex > unicode || firstCharIndex === void 0) {\n if (unicode > 0) {\n firstCharIndex = unicode;\n }\n }\n if (lastCharIndex < unicode) {\n lastCharIndex = unicode;\n }\n const position = os2_default.getUnicodeRange(unicode);\n if (position < 32) {\n ulUnicodeRange1 |= 1 << position;\n } else if (position < 64) {\n ulUnicodeRange2 |= 1 << position - 32;\n } else if (position < 96) {\n ulUnicodeRange3 |= 1 << position - 64;\n } else if (position < 123) {\n ulUnicodeRange4 |= 1 << position - 96;\n } else {\n throw new Error(\"Unicode ranges bits > 123 are reserved for internal usage\");\n }\n if (glyph.name === \".notdef\") continue;\n const metrics = glyph.getMetrics();\n xMins.push(metrics.xMin);\n yMins.push(metrics.yMin);\n xMaxs.push(metrics.xMax);\n yMaxs.push(metrics.yMax);\n leftSideBearings.push(metrics.leftSideBearing);\n rightSideBearings.push(metrics.rightSideBearing);\n advanceWidths.push(glyph.advanceWidth);\n }\n const globals = {\n xMin: Math.min.apply(null, xMins),\n yMin: Math.min.apply(null, yMins),\n xMax: Math.max.apply(null, xMaxs),\n yMax: Math.max.apply(null, yMaxs),\n advanceWidthMax: Math.max.apply(null, advanceWidths),\n advanceWidthAvg: average(advanceWidths),\n minLeftSideBearing: Math.min.apply(null, leftSideBearings),\n maxLeftSideBearing: Math.max.apply(null, leftSideBearings),\n minRightSideBearing: Math.min.apply(null, rightSideBearings)\n };\n globals.ascender = font.ascender;\n globals.descender = font.descender;\n let macStyle = 0;\n if (font.weightClass >= 600) {\n macStyle |= font.macStyleValues.BOLD;\n }\n if (font.italicAngle < 0) {\n macStyle |= font.macStyleValues.ITALIC;\n }\n const headTable = head_default.make({\n flags: 3,\n // 00000011 (baseline for font at y=0; left sidebearing point at x=0)\n unitsPerEm: font.unitsPerEm,\n xMin: globals.xMin,\n yMin: globals.yMin,\n xMax: globals.xMax,\n yMax: globals.yMax,\n lowestRecPPEM: 3,\n macStyle,\n createdTimestamp: font.createdTimestamp\n });\n const hheaTable = hhea_default.make({\n ascender: globals.ascender,\n descender: globals.descender,\n advanceWidthMax: globals.advanceWidthMax,\n minLeftSideBearing: globals.minLeftSideBearing,\n minRightSideBearing: globals.minRightSideBearing,\n xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),\n numberOfHMetrics: font.glyphs.length\n });\n const maxpTable = maxp_default.make(font.glyphs.length);\n const os2Table = os2_default.make(Object.assign({\n xAvgCharWidth: Math.round(globals.advanceWidthAvg),\n usFirstCharIndex: firstCharIndex,\n usLastCharIndex: lastCharIndex,\n ulUnicodeRange1,\n ulUnicodeRange2,\n ulUnicodeRange3,\n ulUnicodeRange4,\n // See http://typophile.com/node/13081 for more info on vertical metrics.\n // We get metrics for typical characters (such as \"x\" for xHeight).\n // We provide some fallback characters if characters are unavailable: their\n // ordering was chosen experimentally.\n sTypoAscender: globals.ascender,\n sTypoDescender: globals.descender,\n sTypoLineGap: 0,\n usWinAscent: globals.yMax,\n usWinDescent: Math.abs(globals.yMin),\n ulCodePageRange1: 1,\n // FIXME: hard-code Latin 1 support for now\n sxHeight: metricsForChar(font, \"xyvw\", { yMax: Math.round(globals.ascender / 2) }).yMax,\n sCapHeight: metricsForChar(font, \"HIKLEFJMNTZBDPRAGOQSUVWXY\", globals).yMax,\n usDefaultChar: font.hasChar(\" \") ? 32 : 0,\n // Use space as the default character, if available.\n usBreakChar: font.hasChar(\" \") ? 32 : 0\n // Use space as the break character, if available.\n }, font.tables.os2));\n const hmtxTable = hmtx_default.make(font.glyphs);\n const cmapTable = cmap_default.make(font.glyphs);\n const englishFamilyName = font.getEnglishName(\"fontFamily\");\n const englishStyleName = font.getEnglishName(\"fontSubfamily\");\n const englishFullName = englishFamilyName + \" \" + englishStyleName;\n let postScriptName = font.getEnglishName(\"postScriptName\");\n if (!postScriptName) {\n postScriptName = englishFamilyName.replace(/\\s/g, \"\") + \"-\" + englishStyleName;\n }\n const names = {};\n for (let n in font.names) {\n names[n] = font.names[n];\n }\n names.unicode = names.unicode || {};\n names.macintosh = names.macintosh || {};\n names.windows = names.windows || {};\n const fontNamesUnicode = font.names.unicode || {};\n const fontNamesMacintosh = font.names.macintosh || {};\n const fontNamesWindows = font.names.windows || {};\n for (const platform in names) {\n names[platform] = names[platform] || {};\n if (!names[platform].uniqueID) {\n const manufacturer = font.getEnglishName(\"manufacturer\") || \"\";\n names[platform].uniqueID = { en: `${manufacturer}: ${englishFullName}` };\n }\n if (!names[platform].postScriptName) {\n names[platform].postScriptName = { en: postScriptName };\n }\n }\n if (!names.unicode.preferredFamily) {\n names.unicode.preferredFamily = fontNamesUnicode.fontFamily || fontNamesMacintosh.fontFamily || fontNamesWindows.fontFamily;\n }\n if (!names.macintosh.preferredFamily) {\n names.macintosh.preferredFamily = fontNamesMacintosh.fontFamily || fontNamesUnicode.fontFamily || fontNamesWindows.fontFamily;\n }\n if (!names.windows.preferredFamily) {\n names.windows.preferredFamily = fontNamesWindows.fontFamily || fontNamesUnicode.fontFamily || fontNamesMacintosh.fontFamily;\n }\n if (!names.unicode.preferredSubfamily) {\n names.unicode.preferredSubfamily = fontNamesUnicode.fontSubfamily || fontNamesMacintosh.fontSubfamily || fontNamesWindows.fontSubfamily;\n }\n if (!names.macintosh.preferredSubfamily) {\n names.macintosh.preferredSubfamily = fontNamesMacintosh.fontSubfamily || fontNamesUnicode.fontSubfamily || fontNamesWindows.fontSubfamily;\n }\n if (!names.windows.preferredSubfamily) {\n names.windows.preferredSubfamily = fontNamesWindows.fontSubfamily || fontNamesUnicode.fontSubfamily || fontNamesMacintosh.fontSubfamily;\n }\n const languageTags = [];\n const nameTable = name_default.make(names, languageTags);\n const ltagTable = languageTags.length > 0 ? ltag_default.make(languageTags) : void 0;\n const postTable = post_default.make(font);\n const cffTable = cff_default.make(font.glyphs, {\n version: font.getEnglishName(\"version\"),\n fullName: englishFullName,\n familyName: englishFamilyName,\n weightName: englishStyleName,\n postScriptName,\n unitsPerEm: font.unitsPerEm,\n fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax],\n topDict: font.tables.cff && font.tables.cff.topDict || {}\n });\n const metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta_default.make(font.metas) : void 0;\n const tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable];\n if (ltagTable) {\n tables.push(ltagTable);\n }\n const optionalTables = {\n gsub: gsub_default,\n cpal: cpal_default,\n colr: colr_default,\n stat: stat_default,\n avar: avar_default,\n cvar: cvar_default,\n fvar: fvar_default,\n gvar: gvar_default,\n gasp: gasp_default,\n svg: svg_default\n };\n const optionalTableArgs = {\n avar: [font.tables.fvar],\n fvar: [font.names]\n };\n for (let tableName in optionalTables) {\n const table = font.tables[tableName];\n if (table) {\n const tableData = optionalTables[tableName].make.call(font, table, ...optionalTableArgs[tableName] || []);\n if (tableData) {\n tables.push(tableData);\n }\n }\n }\n if (metaTable) {\n tables.push(metaTable);\n }\n const sfntTable = makeSfntTable(tables);\n const bytes = sfntTable.encode();\n const checkSum = computeCheckSum(bytes);\n const tableFields = sfntTable.fields;\n let checkSumAdjusted = false;\n for (let i = 0; i < tableFields.length; i += 1) {\n if (tableFields[i].name === \"head table\") {\n tableFields[i].value.checkSumAdjustment = 2981146554 - checkSum;\n checkSumAdjusted = true;\n break;\n }\n }\n if (!checkSumAdjusted) {\n throw new Error(\"Could not find head table with checkSum to adjust.\");\n }\n return sfntTable;\n}\nvar sfnt_default = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum };\n\n// src/layout.mjs\nfunction searchTag(arr, tag) {\n let imin = 0;\n let imax = arr.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n const val = arr[imid].tag;\n if (val === tag) {\n return imid;\n } else if (val < tag) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n}\nfunction binSearch(arr, value) {\n let imin = 0;\n let imax = arr.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n const val = arr[imid];\n if (val === value) {\n return imid;\n } else if (val < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n}\nfunction searchRange(ranges, value) {\n let range;\n let imin = 0;\n let imax = ranges.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n range = ranges[imid];\n const start = range.start;\n if (start === value) {\n return range;\n } else if (start < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n if (imin > 0) {\n range = ranges[imin - 1];\n if (value > range.end) return 0;\n return range;\n }\n}\nfunction Layout(font, tableName) {\n this.font = font;\n this.tableName = tableName;\n}\nLayout.prototype = {\n /**\n * Binary search an object by \"tag\" property\n * @instance\n * @function searchTag\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {string} tag\n * @return {number}\n */\n searchTag,\n /**\n * Binary search in a list of numbers\n * @instance\n * @function binSearch\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {number} value\n * @return {number}\n */\n binSearch,\n /**\n * Get or create the Layout table (GSUB, GPOS etc).\n * @param {boolean} create - Whether to create a new one.\n * @return {Object} The GSUB or GPOS table.\n */\n getTable: function(create) {\n let layout = this.font.tables[this.tableName];\n if (!layout && create) {\n layout = this.font.tables[this.tableName] = this.createDefaultTable();\n }\n return layout;\n },\n /**\n * Returns all scripts in the substitution table.\n * @instance\n * @return {Array}\n */\n getScriptNames: function() {\n let layout = this.getTable();\n if (!layout) {\n return [];\n }\n return layout.scripts.map(function(script) {\n return script.tag;\n });\n },\n /**\n * Returns the best bet for a script name.\n * Returns 'DFLT' if it exists.\n * If not, returns 'latn' if it exists.\n * If neither exist, returns undefined.\n */\n getDefaultScriptName: function() {\n let layout = this.getTable();\n if (!layout) {\n return;\n }\n let hasLatn = false;\n for (let i = 0; i < layout.scripts.length; i++) {\n const name = layout.scripts[i].tag;\n if (name === \"DFLT\") return name;\n if (name === \"latn\") hasLatn = true;\n }\n if (hasLatn) return \"latn\";\n },\n /**\n * Returns all LangSysRecords in the given script.\n * @instance\n * @param {string} [script='DFLT']\n * @param {boolean} create - forces the creation of this script table if it doesn't exist.\n * @return {Object} An object with tag and script properties.\n */\n getScriptTable: function(script, create) {\n const layout = this.getTable(create);\n if (layout) {\n script = script || \"DFLT\";\n const scripts = layout.scripts;\n const pos = searchTag(layout.scripts, script);\n if (pos >= 0) {\n return scripts[pos].script;\n } else if (create) {\n const scr = {\n tag: script,\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n };\n scripts.splice(-1 - pos, 0, scr);\n return scr.script;\n }\n }\n },\n /**\n * Returns a language system table\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.\n * @return {Object}\n */\n getLangSysTable: function(script, language, create) {\n const scriptTable = this.getScriptTable(script, create);\n if (scriptTable) {\n if (!language || language === \"dflt\" || language === \"DFLT\") {\n return scriptTable.defaultLangSys;\n }\n const pos = searchTag(scriptTable.langSysRecords, language);\n if (pos >= 0) {\n return scriptTable.langSysRecords[pos].langSys;\n } else if (create) {\n const langSysRecord = {\n tag: language,\n langSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }\n };\n scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);\n return langSysRecord.langSys;\n }\n }\n },\n /**\n * Get a specific feature table.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm\n * @param {boolean} create - forces the creation of the feature table if it doesn't exist.\n * @return {Object}\n */\n getFeatureTable: function(script, language, feature, create) {\n const langSysTable2 = this.getLangSysTable(script, language, create);\n if (langSysTable2) {\n let featureRecord;\n const featIndexes = langSysTable2.featureIndexes;\n const allFeatures = this.font.tables[this.tableName].features;\n for (let i = 0; i < featIndexes.length; i++) {\n featureRecord = allFeatures[featIndexes[i]];\n if (featureRecord.tag === feature) {\n return featureRecord.feature;\n }\n }\n if (create) {\n const index = allFeatures.length;\n check_default.assert(index === 0 || feature >= allFeatures[index - 1].tag, \"Features must be added in alphabetical order.\");\n featureRecord = {\n tag: feature,\n feature: { params: 0, lookupListIndexes: [] }\n };\n allFeatures.push(featureRecord);\n featIndexes.push(index);\n return featureRecord.feature;\n }\n }\n },\n /**\n * Get the lookup tables of a given type for a script/language/feature.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - 4-letter feature code\n * @param {number} lookupType - 1 to 9\n * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.\n * @return {Object[]}\n */\n getLookupTables: function(script, language, feature, lookupType, create) {\n const featureTable = this.getFeatureTable(script, language, feature, create);\n const tables = [];\n if (featureTable) {\n let lookupTable;\n const lookupListIndexes = featureTable.lookupListIndexes;\n const allLookups = this.font.tables[this.tableName].lookups;\n for (let i = 0; i < lookupListIndexes.length; i++) {\n lookupTable = allLookups[lookupListIndexes[i]];\n if (lookupTable.lookupType === lookupType) {\n tables.push(lookupTable);\n }\n }\n if (tables.length === 0 && create) {\n lookupTable = {\n lookupType,\n lookupFlag: 0,\n subtables: [],\n markFilteringSet: void 0\n };\n const index = allLookups.length;\n allLookups.push(lookupTable);\n lookupListIndexes.push(index);\n return [lookupTable];\n }\n }\n return tables;\n },\n /**\n * Find a glyph in a class definition table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table\n * @param {object} classDefTable - an OpenType Layout class definition table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getGlyphClass: function(classDefTable, glyphIndex) {\n switch (classDefTable.format) {\n case 1: {\n if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) {\n return classDefTable.classes[glyphIndex - classDefTable.startGlyph];\n }\n return 0;\n }\n case 2: {\n const range = searchRange(classDefTable.ranges, glyphIndex);\n return range ? range.classId : 0;\n }\n }\n },\n /**\n * Find a glyph in a coverage table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table\n * @param {object} coverageTable - an OpenType Layout coverage table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getCoverageIndex: function(coverageTable, glyphIndex) {\n switch (coverageTable.format) {\n case 1: {\n const index = binSearch(coverageTable.glyphs, glyphIndex);\n return index >= 0 ? index : -1;\n }\n case 2: {\n const range = searchRange(coverageTable.ranges, glyphIndex);\n return range ? range.index + glyphIndex - range.start : -1;\n }\n }\n },\n /**\n * Returns the list of glyph indexes of a coverage table.\n * Format 1: the list is stored raw\n * Format 2: compact list as range records.\n * @instance\n * @param {Object} coverageTable\n * @return {Array}\n */\n expandCoverage: function(coverageTable) {\n if (coverageTable.format === 1) {\n return coverageTable.glyphs;\n } else {\n const glyphs = [];\n const ranges = coverageTable.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n const start = range.start;\n const end = range.end;\n for (let j = start; j <= end; j++) {\n glyphs.push(j);\n }\n }\n return glyphs;\n }\n }\n};\nvar layout_default = Layout;\n\n// src/position.mjs\nfunction Position(font) {\n layout_default.call(this, font, \"gpos\");\n}\nPosition.prototype = layout_default.prototype;\nPosition.prototype.init = function() {\n const script = this.getDefaultScriptName();\n this.defaultKerningTables = this.getKerningTables(script);\n};\nPosition.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {\n for (let i = 0; i < kerningLookups.length; i++) {\n const subtables = kerningLookups[i].subtables;\n for (let j = 0; j < subtables.length; j++) {\n const subtable = subtables[j];\n const covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);\n if (covIndex < 0) continue;\n switch (subtable.posFormat) {\n case 1: {\n let pairSet = subtable.pairSets[covIndex];\n for (let k = 0; k < pairSet.length; k++) {\n let pair = pairSet[k];\n if (pair.secondGlyph === rightIndex) {\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n break;\n }\n case 2: {\n const class1 = this.getGlyphClass(subtable.classDef1, leftIndex);\n const class2 = this.getGlyphClass(subtable.classDef2, rightIndex);\n const pair = subtable.classRecords[class1][class2];\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n }\n }\n return 0;\n};\nPosition.prototype.getKerningTables = function(script, language) {\n if (this.font.tables.gpos) {\n return this.getLookupTables(script, language, \"kern\", 2);\n }\n};\nvar position_default = Position;\n\n// src/util.mjs\nfunction arraysEqual(ar1, ar2) {\n const n = ar1.length;\n if (n !== ar2.length) {\n return false;\n }\n for (let i = 0; i < n; i++) {\n if (ar1[i] !== ar2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction binarySearch(array, key, value) {\n let low = 0, high = array.length - 1;\n let result = null;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const record = array[mid];\n const recordValue = record[key];\n if (recordValue < value) {\n low = mid + 1;\n } else if (recordValue > value) {\n high = mid - 1;\n } else {\n result = record;\n break;\n }\n }\n return result;\n}\nfunction binarySearchIndex(array, key, value) {\n let low = 0, high = array.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (element[key] < value) {\n low = mid + 1;\n } else if (element[key] > value) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n return -1;\n}\nfunction binarySearchInsert(array, key, value) {\n let low = 0, high = array.length;\n const compare = (a, b) => a[key] - b[key];\n while (low < high) {\n const mid = low + high >>> 1;\n if (compare(array[mid], value) < 0) low = mid + 1;\n else high = mid;\n }\n array.splice(low, 0, value);\n return low;\n}\nfunction isGzip(buf) {\n return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;\n}\nfunction unGzip(gzip) {\n const data = new DataView(gzip.buffer, gzip.byteOffset, gzip.byteLength);\n let start = 10;\n const end = gzip.byteLength - 8;\n const flg = data.getInt8(3);\n if (flg & 4) {\n start += 2 + data.getUint16(start, true);\n }\n if (flg & 8) {\n while (start < end) if (gzip[start++] === 0) break;\n }\n if (flg & 16) {\n while (start < end) if (gzip[start++] === 0) break;\n }\n if (flg & 2) {\n start += 2;\n }\n if (start >= end) throw new Error(\"Can't find compressed blocks\");\n const isize = data.getUint32(data.byteLength - 4, true);\n return tinf_uncompress(gzip.subarray(start, end), new Uint8Array(isize));\n}\nfunction copyPoint(p) {\n return {\n x: p.x,\n y: p.y,\n onCurve: p.onCurve,\n lastPointOfContour: p.lastPointOfContour\n };\n}\nfunction copyComponent(c) {\n return {\n glyphIndex: c.glyphIndex,\n xScale: c.xScale,\n scale01: c.scale01,\n scale10: c.scale10,\n yScale: c.yScale,\n dx: c.dx,\n dy: c.dy\n };\n}\n\n// src/substitution.mjs\nfunction Substitution(font) {\n layout_default.call(this, font, \"gsub\");\n}\nfunction getSubstFormat(lookupTable, format, defaultSubtable) {\n const subtables = lookupTable.subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n if (subtable.substFormat === format) {\n return subtable;\n }\n }\n if (defaultSubtable) {\n subtables.push(defaultSubtable);\n return defaultSubtable;\n }\n return void 0;\n}\nSubstitution.prototype = layout_default.prototype;\nSubstitution.prototype.createDefaultTable = function() {\n return {\n version: 1,\n scripts: [{\n tag: \"DFLT\",\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n }],\n features: [],\n lookups: []\n };\n};\nSubstitution.prototype.getSingle = function(feature, script, language) {\n const substitutions = [];\n const lookupTables = this.getLookupTables(script, language, feature, 1);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n let j;\n if (subtable.substFormat === 1) {\n const delta = subtable.deltaGlyphId;\n for (j = 0; j < glyphs.length; j++) {\n const glyph = glyphs[j];\n substitutions.push({ sub: glyph, by: glyph + delta });\n }\n } else {\n const substitute = subtable.substitute;\n for (j = 0; j < glyphs.length; j++) {\n substitutions.push({ sub: glyphs[j], by: substitute[j] });\n }\n }\n }\n }\n return substitutions;\n};\nSubstitution.prototype.getMultiple = function(feature, script, language) {\n const substitutions = [];\n const lookupTables = this.getLookupTables(script, language, feature, 2);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n let j;\n for (j = 0; j < glyphs.length; j++) {\n const glyph = glyphs[j];\n const replacements = subtable.sequences[j];\n substitutions.push({ sub: glyph, by: replacements });\n }\n }\n }\n return substitutions;\n};\nSubstitution.prototype.getAlternates = function(feature, script, language) {\n const alternates = [];\n const lookupTables = this.getLookupTables(script, language, feature, 3);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n const alternateSets = subtable.alternateSets;\n for (let j = 0; j < glyphs.length; j++) {\n alternates.push({ sub: glyphs[j], by: alternateSets[j] });\n }\n }\n }\n return alternates;\n};\nSubstitution.prototype.getLigatures = function(feature, script, language) {\n const ligatures = [];\n const lookupTables = this.getLookupTables(script, language, feature, 4);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n const ligatureSets = subtable.ligatureSets;\n for (let j = 0; j < glyphs.length; j++) {\n const startGlyph = glyphs[j];\n const ligSet = ligatureSets[j];\n for (let k = 0; k < ligSet.length; k++) {\n const lig = ligSet[k];\n ligatures.push({\n sub: [startGlyph].concat(lig.components),\n by: lig.ligGlyph\n });\n }\n }\n }\n }\n return ligatures;\n};\nSubstitution.prototype.addSingle = function(feature, substitution, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 1, true)[0];\n const subtable = getSubstFormat(lookupTable, 2, {\n // lookup type 1 subtable, format 2, coverage format 1\n substFormat: 2,\n coverage: { format: 1, glyphs: [] },\n substitute: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Single: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.substitute.splice(pos, 0, 0);\n }\n subtable.substitute[pos] = substitution.by;\n};\nSubstitution.prototype.addMultiple = function(feature, substitution, script, language) {\n check_default.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: \"by\" must be an array of two or more ids');\n const lookupTable = this.getLookupTables(script, language, feature, 2, true)[0];\n const subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 2 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n sequences: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Multiple: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.sequences.splice(pos, 0, 0);\n }\n subtable.sequences[pos] = substitution.by;\n};\nSubstitution.prototype.addAlternate = function(feature, substitution, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 3, true)[0];\n const subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 3 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n alternateSets: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Alternate: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.alternateSets.splice(pos, 0, 0);\n }\n subtable.alternateSets[pos] = substitution.by;\n};\nSubstitution.prototype.addLigature = function(feature, ligature, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 4, true)[0];\n let subtable = lookupTable.subtables[0];\n if (!subtable) {\n subtable = {\n // lookup type 4 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n ligatureSets: []\n };\n lookupTable.subtables[0] = subtable;\n }\n check_default.assert(subtable.coverage.format === 1, \"Ligature: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = ligature.sub[0];\n const ligComponents = ligature.sub.slice(1);\n const ligatureTable = {\n ligGlyph: ligature.by,\n components: ligComponents\n };\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos >= 0) {\n const ligatureSet = subtable.ligatureSets[pos];\n for (let i = 0; i < ligatureSet.length; i++) {\n if (arraysEqual(ligatureSet[i].components, ligComponents)) {\n return;\n }\n }\n ligatureSet.push(ligatureTable);\n } else {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.ligatureSets.splice(pos, 0, [ligatureTable]);\n }\n};\nSubstitution.prototype.getFeature = function(feature, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.getSingle(feature, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language));\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.getLigatures(feature, script, language);\n case \"ccmp\":\n return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language));\n case \"stch\":\n return this.getMultiple(feature, script, language);\n }\n return void 0;\n};\nSubstitution.prototype.add = function(feature, sub, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.addSingle(feature, sub, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n if (typeof sub.by === \"number\") {\n return this.addSingle(feature, sub, script, language);\n }\n return this.addAlternate(feature, sub, script, language);\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.addLigature(feature, sub, script, language);\n case \"ccmp\":\n if (sub.by instanceof Array) {\n return this.addMultiple(feature, sub, script, language);\n }\n return this.addLigature(feature, sub, script, language);\n }\n return void 0;\n};\nvar substitution_default = Substitution;\n\n// src/palettes.mjs\nvar PaletteManager = class {\n // private properties don't work with reify\n // @TODO: refactor once we migrated to ES6 modules, see https://github.com/opentypejs/opentype.js/pull/579\n // #font = null;\n /**\n * @type {integer} CPAL color used to (pre)fill unset colors in a palette.\n * Format 0xBBGGRRAA\n */\n // defaultValue = 0x000000FF;\n /**\n * \n * @param {opentype.Font} font \n */\n constructor(font) {\n this.defaultValue = 255;\n this.font = font;\n }\n /**\n * Returns the font's cpal table object if present\n * @returns {Object}\n */\n cpal() {\n if (this.font.tables && this.font.tables.cpal) {\n return this.font.tables.cpal;\n }\n return false;\n }\n /**\n * Returns an array of arrays of color values for each palette, optionally in a specified color format\n * @param {string} colorFormat \n * @returns {Array<Array>}\n */\n getAll(colorFormat) {\n const palettes = [];\n const cpal = this.cpal();\n if (!cpal) return palettes;\n for (let i = 0; i < cpal.colorRecordIndices.length; i++) {\n const startIndex = cpal.colorRecordIndices[i];\n const paletteColors = [];\n for (let j = startIndex; j < startIndex + cpal.numPaletteEntries; j++) {\n paletteColors.push(formatColor(cpal.colorRecords[j], colorFormat || \"hexa\"));\n }\n palettes.push(paletteColors);\n }\n return palettes;\n }\n /**\n * Converts a color value string or array of color value strings to CPAL integer color value(s)\n * @param {string|Array<string></string>} color \n * @returns {integer}\n */\n toCPALcolor(color) {\n if (Array.isArray(color)) {\n return color.map((color2) => parseColor(color2, \"raw\"));\n }\n return parseColor(color, \"raw\");\n }\n /**\n * Fills a set of palette colors (from palette index, or a provided array of CPAL color values) with a set of colors, falling back to the default color value, until a given count\n * @param {Array<string>|integer} palette Palette index integer or Array of colors to be filled\n * @param {Array<string|integer>} colors Colors to fill the palette with\n * @param {integer} _colorCount Number of colors to fill the palette with, defaults to the value of the numPaletteEntries field. Used internally by extend() and shouldn't be set manually\n * @returns \n */\n fillPalette(palette, colors = [], _colorCount = this.cpal().numPaletteEntries) {\n palette = Number.isInteger(palette) ? this.get(palette, \"raw\") : palette;\n return Object.assign(Array(_colorCount).fill(this.defaultValue), this.toCPALcolor(palette).concat(this.toCPALcolor(colors)));\n }\n /**\n * Extend existing palettes and numPaletteEntries by a number of color slots\n * @param {integer} num number of additional color slots to add to all palettes\n */\n extend(num) {\n if (this.ensureCPAL(Array(num).fill(this.defaultValue))) {\n return;\n }\n const cpal = this.cpal();\n const newCount = cpal.numPaletteEntries + num;\n const palettes = this.getAll().map((palette) => this.fillPalette(palette, [], newCount));\n cpal.numPaletteEntries = newCount;\n cpal.colorRecords = this.toCPALcolor(palettes.flat());\n this.updateIndices();\n }\n /**\n * Get a specific palette by its zero-based index\n * @param {integer} paletteIndex \n * @param {string} [colorFormat='hexa']\n * @returns {Array}\n */\n get(paletteIndex, colorFormat = \"hexa\") {\n return this.getAll(colorFormat)[paletteIndex] || null;\n }\n /**\n * Get a color from a specific palette by its zero-based index\n * @param {integer} index \n * @param {integer} paletteIndex\n * @param {string} [colorFormat ='hexa']\n * @returns \n */\n getColor(index, paletteIndex = 0, colorFormat = \"hexa\") {\n return getPaletteColor(this.font, index, paletteIndex, colorFormat);\n }\n /**\n * Set one or more colors on a specific palette by its zero-based index\n * @param {integer} index zero-based color index to start filling from\n * @param {string|integer|Array<string|integer>} color color value or array of color values\n * @param {integer} paletteIndex\n * @returns \n */\n setColor(index, colors, paletteIndex = 0) {\n index = parseInt(index);\n paletteIndex = parseInt(paletteIndex);\n let palettes = this.getAll(\"raw\");\n let palette = palettes[paletteIndex];\n if (!palette) {\n throw Error(`paletteIndex ${paletteIndex} out of range`);\n }\n const cpal = this.cpal();\n const colorCount = cpal.numPaletteEntries;\n if (!Array.isArray(colors)) {\n colors = [colors];\n }\n if (colors.length + index > colorCount) {\n this.extend(colors.length + index - colorCount);\n palettes = this.getAll(\"raw\");\n palette = palettes[paletteIndex];\n }\n for (let i = 0; i < colors.length; i++) {\n palette[i + index] = this.toCPALcolor(colors[i]);\n }\n cpal.colorRecords = palettes.flat();\n this.updateIndices();\n }\n /**\n * Add a new palette. \n * @param {Array} colors (optional) colors to add to the palette, differences to existing palettes will be filled with the defaultValue.\n * @returns \n */\n add(colors) {\n if (this.ensureCPAL(colors)) {\n return;\n }\n const cpal = this.cpal();\n const colorCount = cpal.numPaletteEntries;\n if (colors && colors.length) {\n colors = this.toCPALcolor(colors);\n if (colors.length > colorCount) {\n this.extend(colors.length - colorCount);\n } else if (colors.length < colorCount) {\n colors = this.fillPalette(colors);\n }\n cpal.colorRecordIndices.push(cpal.colorRecords.length);\n cpal.colorRecords.push(...colors);\n } else {\n cpal.colorRecordIndices.push(cpal.colorRecords.length);\n cpal.colorRecords.push(...Array(colorCount).fill(this.defaultValue));\n }\n }\n /**\n * deletes a palette by its zero-based index\n * @param {integer} paletteIndex \n */\n delete(paletteIndex) {\n const palettes = this.getAll(\"raw\");\n delete palettes[paletteIndex];\n const cpal = this.cpal();\n cpal.colorRecordIndices.pop();\n cpal.colorRecords = palettes.flat();\n }\n /**\n * Deletes a specific color index in all palettes and updates all layers using that color with the replacement index\n * @param {integer} colorIndex index of the color that should be deleted\n * @param {integer} replacementIndex index (according to the palette before deletion) of the color to replace in layers using the color to be to deleted\n */\n deleteColor(colorIndex, replacementIndex) {\n if (colorIndex === replacementIndex) {\n throw Error(\"replacementIndex cannot be the same as colorIndex\");\n }\n const cpal = this.cpal();\n const palettes = this.getAll(\"raw\");\n const updatedPalettes = [];\n if (replacementIndex > cpal.numPaletteEntries - 1) {\n throw Error(`Replacement index out of range: numPaletteEntries after deletion: ${cpal.numPaletteEntries - 1}, replacementIndex: ${replacementIndex})`);\n }\n for (let i = 0; i < palettes.length; i++) {\n const palette = palettes[i];\n const updatedPalette = palette.filter((color, index) => index !== colorIndex);\n updatedPalettes.push(updatedPalette);\n }\n const colrTable = this.font.tables.colr;\n if (colrTable) {\n const layerRecords = colrTable.layerRecords;\n for (let i = 0; i < layerRecords.length; i++) {\n const currentIndex = layerRecords[i].paletteIndex;\n if (currentIndex > colorIndex) {\n const shiftAmount = 1;\n layerRecords[i].paletteIndex -= shiftAmount;\n } else if (currentIndex === colorIndex) {\n let replacementShift = 0;\n for (let j = 0; j < palettes.length; j++) {\n if (replacementIndex > colorIndex && replacementIndex <= colorIndex + palettes[j].length) {\n replacementShift++;\n break;\n }\n }\n layerRecords[i].paletteIndex = replacementIndex - replacementShift;\n }\n }\n this.font.tables.colr = {\n ...colrTable,\n layerRecords\n };\n }\n const flattenedPalettes = updatedPalettes.flat();\n for (let i = 0; i < palettes.length; i++) {\n cpal.colorRecordIndices[i] -= i;\n }\n cpal.numPaletteEntries = Math.max(0, cpal.numPaletteEntries - 1);\n cpal.colorRecords = this.toCPALcolor(flattenedPalettes);\n }\n /**\n * Makes sure that the CPAL table exists and is populated with default values.\n * @param {Array} colors (optional) colors to populate on creation\n * @returns {Boolean} true if it was created, false if it already existed.\n */\n ensureCPAL(colors) {\n if (!this.cpal()) {\n if (!colors || !colors.length) {\n colors = [this.defaultValue];\n } else {\n colors = this.toCPALcolor(colors);\n }\n this.font.tables.cpal = {\n version: 0,\n numPaletteEntries: colors.length,\n colorRecords: colors,\n colorRecordIndices: [0]\n };\n return true;\n }\n return false;\n }\n /**\n * Mainly used internally. Recalculates the colorRecordIndices array based on the numPaletteEntries and number of palettes\n */\n updateIndices() {\n const cpal = this.cpal();\n const paletteCount = Math.ceil(cpal.colorRecords.length / cpal.numPaletteEntries);\n cpal.colorRecordIndices = [];\n for (let i = 0; i < paletteCount; i++) {\n cpal.colorRecordIndices.push(i * cpal.numPaletteEntries);\n }\n }\n};\n\n// src/layers.mjs\nvar LayerManager = class {\n // private properties don't work with reify\n // @TODO: refactor once we migrated to ES6 modules, see https://github.com/opentypejs/opentype.js/pull/579\n // #font = null;\n constructor(font) {\n this.font = font;\n }\n /**\n * Mainly used internally. Ensures that the COLR table exists and is populated with default values\n * @returns the LayerManager's font instance for chaining\n */\n ensureCOLR() {\n if (!this.font.tables.colr) {\n this.font.tables.colr = {\n version: 0,\n baseGlyphRecords: [],\n layerRecords: []\n };\n }\n return this.font;\n }\n /**\n * Gets the layers for a specific glyph\n * @param {integer} glyphIndex\n * @returns {Array<Object>} array of layer objects {glyph, paletteIndex}\n */\n get(glyphIndex) {\n const font = this.font;\n const layers = [];\n const colr = font.tables.colr;\n const cpal = font.tables.cpal;\n if (!colr || !cpal) {\n return layers;\n }\n const baseGlyph = binarySearch(colr.baseGlyphRecords, \"glyphID\", glyphIndex);\n if (!baseGlyph) {\n return layers;\n }\n const firstIndex = baseGlyph.firstLayerIndex;\n const numLayers = baseGlyph.numLayers;\n for (let l = 0; l < numLayers; l++) {\n const layer = colr.layerRecords[firstIndex + l];\n layers.push({\n glyph: font.glyphs.get(layer.glyphID),\n paletteIndex: layer.paletteIndex\n });\n }\n return layers;\n }\n /**\n * Adds one or more layers to a glyph, at the end or at a specific position.\n * @param {integer} glyphIndex glyph index to add the layer(s) to.\n * @param {Array|Object} layers layer object {glyph, paletteIndex}/{glyphID, paletteIndex} or array of layer objects.\n * @param {integer?} position position to insert the layers at (will default to adding at the end).\n */\n add(glyphIndex, layers, position) {\n const currentLayers = this.get(glyphIndex);\n layers = Array.isArray(layers) ? layers : [layers];\n if (position === void 0 || position === Infinity || position > currentLayers.length) {\n position = currentLayers.length;\n } else if (position < 0) {\n position = currentLayers.length + 1 + position % (currentLayers.length + 1);\n if (position >= currentLayers.length + 1) {\n position -= currentLayers.length + 1;\n }\n }\n const newLayers = [];\n for (let i = 0; i < position; i++) {\n const glyphID = Number.isInteger(currentLayers[i].glyph) ? currentLayers[i].glyph : currentLayers[i].glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: currentLayers[i].paletteIndex\n });\n }\n for (const layer of layers) {\n const glyphID = Number.isInteger(layer.glyph) ? layer.glyph : layer.glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: layer.paletteIndex\n });\n }\n for (let i = position; i < currentLayers.length; i++) {\n const glyphID = Number.isInteger(currentLayers[i].glyph) ? currentLayers[i].glyph : currentLayers[i].glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: currentLayers[i].paletteIndex\n });\n }\n this.updateColrTable(glyphIndex, newLayers);\n }\n /**\n * Sets a color glyph layer's paletteIndex property to a new index\n * @param {integer} glyphIndex glyph in the font by zero-based glyph index\n * @param {integer} layerIndex layer in the glyph by zero-based layer index\n * @param {integer} paletteIndex new color to set for the layer by zero-based index in any palette\n */\n setPaletteIndex(glyphIndex, layerIndex, paletteIndex) {\n let layers = this.get(glyphIndex);\n if (layers[layerIndex]) {\n layers = layers.map((layer, index) => ({\n glyphID: layer.glyph.index,\n paletteIndex: index === layerIndex ? paletteIndex : layer.paletteIndex\n }));\n this.updateColrTable(glyphIndex, layers);\n } else {\n console.error(\"Invalid layer index\");\n }\n }\n /**\n * Removes one or more layers from a glyph.\n * @param {integer} glyphIndex glyph index to remove the layer(s) from\n * @param {integer} start index to remove the layer at\n * @param {integer?} end (optional) if provided, removes all layers from start index to (and including) end index\n */\n remove(glyphIndex, start, end = start) {\n let currentLayers = this.get(glyphIndex);\n currentLayers = currentLayers.map((layer) => ({\n glyphID: layer.glyph.index,\n paletteIndex: layer.paletteIndex\n }));\n currentLayers.splice(start, end - start + 1);\n this.updateColrTable(glyphIndex, currentLayers);\n }\n /**\n * Mainly used internally. Mainly used internally. Updates the colr table, adding a baseGlyphRecord if needed,\n * ensuring that it's inserted at the correct position, updating numLayers, and adjusting firstLayerIndex values\n * for all baseGlyphRecords according to any deletions or insertions.\n * @param {integer} glyphIndex \n * @param {Array<Object>} layers array of layer objects {glyphID, paletteIndex}\n */\n updateColrTable(glyphIndex, layers) {\n this.ensureCOLR();\n const font = this.font;\n const colr = font.tables.colr;\n let index = binarySearchIndex(colr.baseGlyphRecords, \"glyphID\", glyphIndex);\n const addBaseGlyph = index === -1;\n if (addBaseGlyph) {\n const newBaseGlyphRecord = { glyphID: glyphIndex, firstLayerIndex: colr.layerRecords.length, numLayers: 0 };\n index = binarySearchInsert(colr.baseGlyphRecords, \"glyphID\", newBaseGlyphRecord);\n }\n const baseGlyphRecord = colr.baseGlyphRecords[index];\n const originalNumLayers = baseGlyphRecord.numLayers;\n const newNumLayers = layers.length;\n const layerDiff = newNumLayers - originalNumLayers;\n if (layerDiff > 0) {\n const newLayers = layers.slice(originalNumLayers).map((layer) => ({\n glyphID: layer.glyphID,\n paletteIndex: layer.paletteIndex\n }));\n colr.layerRecords.splice(baseGlyphRecord.firstLayerIndex + originalNumLayers, 0, ...newLayers);\n } else if (layerDiff < 0) {\n colr.layerRecords.splice(baseGlyphRecord.firstLayerIndex + newNumLayers, -layerDiff);\n }\n for (let i = 0; i < Math.min(originalNumLayers, newNumLayers); i++) {\n colr.layerRecords[baseGlyphRecord.firstLayerIndex + i] = {\n glyphID: layers[i].glyphID,\n paletteIndex: layers[i].paletteIndex\n };\n }\n baseGlyphRecord.numLayers = newNumLayers;\n if (layerDiff !== 0) {\n for (let i = 0; i < colr.baseGlyphRecords.length; i++) {\n const sibling = colr.baseGlyphRecords[i];\n if (i === index || sibling.firstLayerIndex < baseGlyphRecord.firstLayerIndex) continue;\n colr.baseGlyphRecords[i].firstLayerIndex += layerDiff;\n }\n }\n }\n};\n\n// src/svgimages.mjs\nvar SVGImageManager = class {\n /**\n * @param {opentype.Font} font\n */\n constructor(font) {\n this.font = font;\n this.cache = /* @__PURE__ */ new WeakMap();\n }\n /**\n * @param {number} glyphIndex\n * @returns {SvgImage | undefined}\n */\n get(glyphIndex) {\n const svgImageCacheEntry = this.getOrCreateSvgImageCacheEntry(glyphIndex);\n return svgImageCacheEntry && svgImageCacheEntry.image;\n }\n /**\n * @param {number} glyphIndex\n * @returns {Promise<SvgImage> | undefined}\n */\n getAsync(glyphIndex) {\n const svgImageCacheEntry = this.getOrCreateSvgImageCacheEntry(glyphIndex);\n return svgImageCacheEntry && svgImageCacheEntry.promise;\n }\n /**\n * @param {number} glyphIndex\n * @returns {SVGImageCacheEntry | undefined}\n */\n getOrCreateSvgImageCacheEntry(glyphIndex) {\n const svg = this.font.tables.svg;\n if (svg === void 0) return;\n const svgBuf = svg.get(glyphIndex);\n if (svgBuf === void 0) return;\n let svgDocCacheEntry = this.cache.get(svgBuf);\n if (svgDocCacheEntry === void 0) {\n svgDocCacheEntry = createSvgDocCacheEntry(svgBuf);\n this.cache.set(svgBuf, svgDocCacheEntry);\n }\n let svgImageCacheEntry = svgDocCacheEntry.images.get(glyphIndex);\n if (svgImageCacheEntry === void 0) {\n svgImageCacheEntry = createSvgImageCacheEntry(this.font, svgDocCacheEntry.template, glyphIndex);\n svgImageCacheEntry.promise.then((svgImage) => {\n svgImageCacheEntry.image = svgImage;\n if (typeof this.font.onGlyphUpdated === \"function\") {\n try {\n this.font.onGlyphUpdated(glyphIndex);\n } catch (error) {\n console.error(\"font.onGlyphUpdated\", glyphIndex, error);\n }\n }\n });\n svgDocCacheEntry.images.set(glyphIndex, svgImageCacheEntry);\n }\n return svgImageCacheEntry;\n }\n};\nfunction createSvgDocCacheEntry(svgBuf) {\n return {\n template: decodeSvgDocument(svgBuf).then(makeSvgTemplate),\n images: /* @__PURE__ */ new Map()\n };\n}\nfunction createSvgImageCacheEntry(font, svgTemplatePromise, glyphIndex) {\n return {\n promise: svgTemplatePromise.then((svgTemplate) => {\n let svgText;\n if (typeof svgTemplate === \"string\") {\n svgText = svgTemplate;\n } else {\n svgTemplate[4] = glyphIndex;\n svgText = svgTemplate.join(\"\");\n }\n const svgImage = makeSvgImage(svgText, font.unitsPerEm);\n return svgImage.image.decode().then(() => svgImage);\n }),\n image: void 0\n };\n}\nvar decodeSvgDocument = typeof DecompressionStream === \"function\" ? decodeSvgDocumentWithDecompressionStream : decodeSvgDocumentWithTinyInflate;\nfunction decodeSvgDocumentWithTinyInflate(buf) {\n try {\n return Promise.resolve(new TextDecoder().decode(isGzip(buf) ? unGzip(buf) : buf));\n } catch (error) {\n return Promise.reject(error);\n }\n}\nfunction decodeSvgDocumentWithDecompressionStream(buf) {\n if (isGzip(buf)) {\n return new Response(new Response(buf).body.pipeThrough(new DecompressionStream(\"gzip\"))).text();\n }\n try {\n return Promise.resolve(new TextDecoder().decode(buf));\n } catch (error) {\n return Promise.reject(error);\n }\n}\nfunction makeSvgTemplate(text) {\n const documentStart = text.indexOf(\"<svg\");\n const contentStart = text.indexOf(\">\", documentStart + 4) + 1;\n if (/ id=['\"]glyph\\d+['\"]/.test(text.substring(documentStart, contentStart))) {\n return text;\n }\n const contentEnd = text.lastIndexOf(\"</svg>\");\n return [\n text.substring(0, contentStart),\n \"<defs>\",\n text.substring(contentStart, contentEnd),\n '</defs><use href=\"#glyph',\n \"\",\n '\"/>',\n text.substring(contentEnd)\n ];\n}\nfunction makeSvgImage(text, unitsPerEm) {\n const svgDocument = new DOMParser().parseFromString(text, \"image/svg+xml\");\n const svg = svgDocument.documentElement;\n const viewBoxVal = svg.viewBox.baseVal;\n const widthVal = svg.width.baseVal;\n const heightVal = svg.height.baseVal;\n let xScale = 1;\n let yScale = 1;\n if (viewBoxVal.width > 0 && viewBoxVal.height > 0) {\n if (widthVal.unitType === 1) {\n xScale = widthVal.valueInSpecifiedUnits / viewBoxVal.width;\n yScale = heightVal.unitType === 1 ? heightVal.valueInSpecifiedUnits / viewBoxVal.height : xScale;\n } else if (heightVal.unitType === 1) {\n yScale = heightVal.valueInSpecifiedUnits / viewBoxVal.height;\n xScale = yScale;\n } else if (unitsPerEm) {\n xScale = unitsPerEm / viewBoxVal.width;\n yScale = unitsPerEm / viewBoxVal.height;\n }\n }\n const div = document.createElement(\"div\");\n div.style.position = \"fixed\";\n div.style.visibility = \"hidden\";\n div.appendChild(svg);\n document.body.appendChild(div);\n const bbox = svg.getBBox();\n document.body.removeChild(div);\n const leftSideBearing = (bbox.x - viewBoxVal.x) * xScale;\n const baseline = (viewBoxVal.y - bbox.y) * yScale;\n const width = bbox.width * xScale;\n const height = bbox.height * yScale;\n svg.setAttribute(\"viewBox\", [bbox.x, bbox.y, bbox.width, bbox.height].join(\" \"));\n if (xScale !== 1) svg.setAttribute(\"width\", width);\n if (yScale !== 1) svg.setAttribute(\"height\", height);\n const image = new Image(width, height);\n image.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(svg.outerHTML);\n return { leftSideBearing, baseline, image };\n}\n\n// src/tables/glyf.mjs\nvar _resolving = /* @__PURE__ */ new WeakMap();\nfunction parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) {\n let v;\n if ((flag & shortVectorBitMask) > 0) {\n v = p.parseByte();\n if ((flag & sameBitMask) === 0) {\n v = -v;\n }\n v = previousValue + v;\n } else {\n if ((flag & sameBitMask) > 0) {\n v = previousValue;\n } else {\n v = previousValue + p.parseShort();\n }\n }\n return v;\n}\nfunction parseGlyph(glyph, data, start) {\n const p = new parse_default.Parser(data, start);\n glyph._numberOfContours = p.parseShort();\n glyph._xMin = p.parseShort();\n glyph._yMin = p.parseShort();\n glyph._xMax = p.parseShort();\n glyph._yMax = p.parseShort();\n let flags;\n let flag;\n if (glyph._numberOfContours > 0) {\n const endPointIndices = glyph.endPointIndices = [];\n for (let i = 0; i < glyph._numberOfContours; i += 1) {\n endPointIndices.push(p.parseUShort());\n }\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (let i = 0; i < glyph.instructionLength; i += 1) {\n glyph.instructions.push(p.parseByte());\n }\n const numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;\n flags = [];\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = p.parseByte();\n flags.push(flag);\n if ((flag & 8) > 0) {\n const repeatCount = p.parseByte();\n for (let j = 0; j < repeatCount; j += 1) {\n flags.push(flag);\n i += 1;\n }\n }\n }\n check_default.argument(flags.length === numberOfCoordinates, \"Bad flags.\");\n if (endPointIndices.length > 0) {\n const points = [];\n let point;\n if (numberOfCoordinates > 0) {\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = {};\n point.onCurve = !!(flag & 1);\n point.lastPointOfContour = endPointIndices.indexOf(i) >= 0;\n points.push(point);\n }\n let px = 0;\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = points[i];\n point.x = parseGlyphCoordinate(p, flag, px, 2, 16);\n px = point.x;\n }\n let py = 0;\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = points[i];\n point.y = parseGlyphCoordinate(p, flag, py, 4, 32);\n py = point.y;\n }\n }\n glyph.points = points;\n } else {\n glyph.points = [];\n }\n } else if (glyph._numberOfContours === 0) {\n glyph.points = [];\n } else {\n glyph.isComposite = true;\n glyph.points = [];\n glyph.components = [];\n let moreComponents = true;\n while (moreComponents) {\n flags = p.parseUShort();\n const component = {\n glyphIndex: p.parseUShort(),\n xScale: 1,\n scale01: 0,\n scale10: 0,\n yScale: 1,\n dx: 0,\n dy: 0\n };\n if ((flags & 1) > 0) {\n if ((flags & 2) > 0) {\n component.dx = p.parseShort();\n component.dy = p.parseShort();\n } else {\n component.matchedPoints = [p.parseUShort(), p.parseUShort()];\n }\n } else {\n if ((flags & 2) > 0) {\n component.dx = p.parseChar();\n component.dy = p.parseChar();\n } else {\n component.matchedPoints = [p.parseByte(), p.parseByte()];\n }\n }\n if ((flags & 8) > 0) {\n component.xScale = component.yScale = p.parseF2Dot14();\n } else if ((flags & 64) > 0) {\n component.xScale = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n } else if ((flags & 128) > 0) {\n component.xScale = p.parseF2Dot14();\n component.scale01 = p.parseF2Dot14();\n component.scale10 = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n }\n glyph.components.push(component);\n moreComponents = !!(flags & 32);\n }\n if (flags & 256) {\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (let i = 0; i < glyph.instructionLength; i += 1) {\n glyph.instructions.push(p.parseByte());\n }\n }\n }\n}\nfunction transformPoints(points, transform) {\n const newPoints = [];\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n const newPt = {\n x: transform.xScale * pt.x + transform.scale10 * pt.y + transform.dx,\n y: transform.scale01 * pt.x + transform.yScale * pt.y + transform.dy,\n onCurve: pt.onCurve,\n lastPointOfContour: pt.lastPointOfContour\n };\n newPoints.push(newPt);\n }\n return newPoints;\n}\nfunction getContours(points) {\n const contours = [];\n let currentContour = [];\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check_default.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n}\nfunction getPath(points) {\n const p = new path_default();\n if (!points) {\n return p;\n }\n const contours = getContours(points);\n for (let contourIndex = 0; contourIndex < contours.length; ++contourIndex) {\n const contour = contours[contourIndex];\n let curr = contour[contour.length - 1];\n let next = contour[0];\n if (curr.onCurve) {\n p.moveTo(curr.x, curr.y);\n } else {\n if (next.onCurve) {\n p.moveTo(next.x, next.y);\n } else {\n const start = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n p.moveTo(start.x, start.y);\n }\n }\n for (let i = 0; i < contour.length; ++i) {\n curr = next;\n next = contour[(i + 1) % contour.length];\n if (curr.onCurve) {\n p.lineTo(curr.x, curr.y);\n } else {\n let next2 = next;\n if (!next.onCurve) {\n next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n }\n p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);\n }\n }\n p.closePath();\n }\n return p;\n}\nfunction buildPath(glyphs, glyph) {\n if (glyph.isComposite) {\n if (!_resolving.has(glyphs)) {\n _resolving.set(glyphs, /* @__PURE__ */ new Set());\n }\n const resolving = _resolving.get(glyphs);\n resolving.add(glyph.index);\n try {\n for (let j = 0; j < glyph.components.length; j += 1) {\n const component = glyph.components[j];\n if (resolving.has(component.glyphIndex)) {\n continue;\n }\n const componentGlyph = glyphs.get(component.glyphIndex);\n componentGlyph.getPath();\n if (componentGlyph.points) {\n let transformedPoints;\n if (component.matchedPoints === void 0) {\n transformedPoints = transformPoints(componentGlyph.points, component);\n } else {\n if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) {\n throw Error(\"Matched points out of range in \" + glyph.name);\n }\n const firstPt = glyph.points[component.matchedPoints[0]];\n let secondPt = componentGlyph.points[component.matchedPoints[1]];\n const transform = {\n xScale: component.xScale,\n scale01: component.scale01,\n scale10: component.scale10,\n yScale: component.yScale,\n dx: 0,\n dy: 0\n };\n secondPt = transformPoints([secondPt], transform)[0];\n transform.dx = firstPt.x - secondPt.x;\n transform.dy = firstPt.y - secondPt.y;\n transformedPoints = transformPoints(componentGlyph.points, transform);\n }\n glyph.points = glyph.points.concat(transformedPoints);\n }\n }\n } finally {\n resolving.delete(glyph.index);\n }\n }\n return getPath(glyph.points);\n}\nfunction parseGlyfTableAll(data, start, loca, font) {\n const glyphs = new glyphset_default.GlyphSet(font);\n for (let i = 0; i < loca.length - 1; i += 1) {\n const offset = loca[i];\n const nextOffset = loca[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset_default.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset_default.glyphLoader(font, i));\n }\n }\n return glyphs;\n}\nfunction parseGlyfTableOnLowMemory(data, start, loca, font) {\n const glyphs = new glyphset_default.GlyphSet(font);\n font._push = function(i) {\n const offset = loca[i];\n const nextOffset = loca[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset_default.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset_default.glyphLoader(font, i));\n }\n };\n return glyphs;\n}\nfunction parseGlyfTable(data, start, loca, font, opt) {\n if (opt.lowMemory)\n return parseGlyfTableOnLowMemory(data, start, loca, font);\n else\n return parseGlyfTableAll(data, start, loca, font);\n}\nvar glyf_default = { getPath, parse: parseGlyfTable };\n\n// src/variationprocessor.mjs\nvar VariationProcessor = class {\n constructor(font) {\n this.font = font;\n }\n /**\n * Modifies a coords object to make sure that tags have a length of 4\n * @param {Object} coords - variation coordinates\n */\n normalizeCoordTags(coords) {\n for (const tag in coords) {\n if (tag.length < 4) {\n const padded = tag.padEnd(4, \" \");\n coords[padded] === void 0 && (coords[padded] = coords[tag]);\n delete coords[tag];\n }\n }\n }\n /**\n * Normalizes the coordinates from the axis ranges to a range of -1 to 1.\n * @param {Object} coords - The coordinates object to normalize.\n * @returns {Array<number>} The normalized coordinates as an array\n */\n getNormalizedCoords(coords) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n let normalized = [];\n this.normalizeCoordTags(coords);\n for (let i = 0; i < this.fvar().axes.length; i++) {\n const axis = this.fvar().axes[i];\n let tagValue = coords[axis.tag];\n if (tagValue === void 0) {\n tagValue = axis.defaultValue;\n }\n if (tagValue < axis.defaultValue) {\n normalized.push((tagValue - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((tagValue - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n if (this.avar()) {\n for (let i = 0; i < this.avar().axisSegmentMaps.length; i++) {\n let segment = this.avar().axisSegmentMaps[i];\n for (let j = 0; j < segment.axisValueMaps.length; j++) {\n let pair = segment.axisValueMaps[j];\n if (j >= 1 && normalized[i] < pair.fromCoordinate) {\n let prev = segment.axisValueMaps[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoordinate) * (pair.toCoordinate - prev.toCoordinate) + Number.EPSILON) / (pair.fromCoordinate - prev.fromCoordinate + Number.EPSILON) + prev.toCoordinate;\n break;\n }\n }\n }\n }\n return normalized;\n }\n /**\n * Interpolates points within a glyph if deltas are not provided for all points.\n * @param {Array<Object>} points - The points to be interpolated.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Object} deltaMap - A map indicating which points have deltas.\n */\n interpolatePoints(points, glyphPoints, deltaMap) {\n if (points.length === 0) {\n return;\n }\n let pointIndex = 0;\n while (pointIndex < points.length) {\n let firstPoint = pointIndex;\n let endPoint = pointIndex;\n let point = points[endPoint];\n while (!point.lastPointOfContour) {\n point = points[++endPoint];\n }\n while (pointIndex <= endPoint && !deltaMap[pointIndex]) {\n pointIndex++;\n }\n if (pointIndex > endPoint) {\n continue;\n }\n let firstDelta = pointIndex;\n let curDelta = pointIndex;\n pointIndex++;\n while (pointIndex <= endPoint) {\n if (deltaMap[pointIndex]) {\n this.deltaInterpolate(curDelta + 1, pointIndex - 1, curDelta, pointIndex, glyphPoints, points);\n curDelta = pointIndex;\n }\n pointIndex++;\n }\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, glyphPoints, points);\n } else {\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, glyphPoints, points);\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, glyphPoints, points);\n }\n }\n pointIndex = endPoint + 1;\n }\n }\n /**\n * Interpolates delta values between two points.\n * @param {number} p1 - Start point index for interpolation.\n * @param {number} p2 - End point index for interpolation.\n * @param {number} ref1 - Reference point index for the start delta.\n * @param {number} ref2 - Reference point index for the end delta.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Array<Object>} points - The points to be adjusted.\n */\n deltaInterpolate(p1, p2, ref1, ref2, glyphPoints, points) {\n if (p1 > p2) {\n return;\n }\n let iterable = [\"x\", \"y\"];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (glyphPoints[ref1][k] > glyphPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n let in1 = glyphPoints[ref1][k];\n let in2 = glyphPoints[ref2][k];\n let out1 = points[ref1][k];\n let out2 = points[ref2][k];\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n for (let p3 = p1; p3 <= p2; p3++) {\n let out = glyphPoints[p3][k];\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 points[p3][k] = out;\n }\n }\n }\n }\n /**\n * Applies a delta shift to a range of points based on a reference point.\n * @param {number} p1 - Start point index for shifting.\n * @param {number} p2 - End point index for shifting.\n * @param {number} ref - Reference point index.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Array<Object>} points - The points to be shifted.\n */\n deltaShift(p1, p2, ref, glyphPoints, points) {\n let deltaX = points[ref].x - glyphPoints[ref].x;\n let deltaY = points[ref].y - glyphPoints[ref].y;\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n points[p].x += deltaX;\n points[p].y += deltaY;\n }\n }\n }\n /**\n * Transforms glyph components based on variation data.\n * @param {Glyph} glyph - The composite glyph to transform.\n * @param {Array<Object>} transformedPoints - Points that are already transformed.\n * @param {Object} coords - Variation coordinates.\n * @param {Array<number>} tuplePoints - Points that are part of the tuple.\n * @param {Object} header - Header information from the variation data.\n * @param {number} factor - The scaling factor for the transformation.\n */\n transformComponents(glyph, transformedPoints, coords, tuplePoints, header, factor) {\n let pointsIndex = 0;\n for (let c = 0; c < glyph.components.length; c++) {\n const component = glyph.components[c];\n const componentGlyph = this.font.glyphs.get(component.glyphIndex);\n const componentTransform = copyComponent(component);\n const deltaIndex = tuplePoints.indexOf(c);\n if (deltaIndex > -1) {\n componentTransform.dx += Math.round(header.deltas[deltaIndex] * factor);\n componentTransform.dy += Math.round(header.deltasY[deltaIndex] * factor);\n }\n const transformedComponentPoints = transformPoints(this.getTransform(componentGlyph, coords).points, componentTransform);\n transformedPoints.splice(pointsIndex, transformedComponentPoints.length, ...transformedComponentPoints);\n pointsIndex += componentGlyph.points.length;\n }\n }\n applyTupleVariationStore(variationData, points, coords, flavor = \"gvar\", args = {}) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n const normalizedCoords = this.getNormalizedCoords(coords);\n const { headers, sharedPoints } = variationData;\n const axisCount = this.fvar().axes.length;\n let transformedPoints;\n if (flavor === \"gvar\") {\n transformedPoints = points.map(copyPoint);\n } else if (flavor === \"cvar\") {\n transformedPoints = [...points];\n }\n for (let h = 0; h < headers.length; h++) {\n const header = headers[h];\n let factor = 1;\n for (let a = 0; a < axisCount; a++) {\n let tupleCoords = [0];\n switch (flavor) {\n case \"gvar\":\n tupleCoords = header.peakTuple ? header.peakTuple : this.gvar().sharedTuples[header.sharedTupleRecordsIndex];\n break;\n case \"cvar\":\n tupleCoords = header.peakTuple;\n break;\n }\n if (tupleCoords[a] === 0) {\n continue;\n }\n if (normalizedCoords[a] === 0) {\n factor = 0;\n break;\n }\n if (!header.intermediateStartTuple) {\n if (normalizedCoords[a] < Math.min(0, tupleCoords[a]) || normalizedCoords[a] > Math.max(0, tupleCoords[a])) {\n factor = 0;\n break;\n }\n factor = (factor * normalizedCoords[a] + Number.EPSILON) / (tupleCoords[a] + Number.EPSILON);\n } else {\n if (normalizedCoords[a] < header.intermediateStartTuple[a] || normalizedCoords[a] > header.intermediateEndTuple[a]) {\n factor = 0;\n break;\n } else if (normalizedCoords[a] < tupleCoords[a]) {\n factor = factor * (normalizedCoords[a] - header.intermediateStartTuple[a] + Number.EPSILON) / (tupleCoords[a] - header.intermediateStartTuple[a] + Number.EPSILON);\n } else {\n factor = factor * (header.intermediateEndTuple[a] - normalizedCoords[a] + Number.EPSILON) / (header.intermediateEndTuple[a] - tupleCoords[a] + Number.EPSILON);\n }\n }\n }\n if (factor === 0) {\n continue;\n }\n const tuplePoints = header.privatePoints.length ? header.privatePoints : sharedPoints;\n if (flavor === \"gvar\" && args.glyph && args.glyph.isComposite) {\n this.transformComponents(args.glyph, transformedPoints, coords, tuplePoints, header, factor);\n } else if (tuplePoints.length === 0) {\n for (let i = 0; i < transformedPoints.length; i++) {\n const point = transformedPoints[i];\n if (flavor === \"gvar\") {\n transformedPoints[i] = {\n x: Math.round(point.x + header.deltas[i] * factor),\n y: Math.round(point.y + header.deltasY[i] * factor),\n onCurve: point.onCurve,\n lastPointOfContour: point.lastPointOfContour\n };\n } else if (flavor === \"cvar\") {\n transformedPoints[i] = Math.round(point + header.deltas[i] * factor);\n }\n }\n } else {\n let interpolatedPoints;\n if (flavor === \"gvar\") {\n interpolatedPoints = transformedPoints.map(copyPoint);\n } else if (flavor === \"cvar\") {\n interpolatedPoints = transformedPoints;\n }\n const deltaMap = Array(points.length).fill(false);\n for (let i = 0; i < tuplePoints.length; i++) {\n let pointIndex = tuplePoints[i];\n if (pointIndex < points.length) {\n let point = interpolatedPoints[pointIndex];\n if (flavor === \"gvar\") {\n deltaMap[pointIndex] = true;\n point.x += header.deltas[i] * factor;\n point.y += header.deltasY[i] * factor;\n } else if (flavor === \"cvar\") {\n transformedPoints[pointIndex] = Math.round(point + header.deltas[i] * factor);\n }\n }\n }\n if (flavor === \"gvar\") {\n this.interpolatePoints(interpolatedPoints, transformedPoints, deltaMap);\n for (let i = 0; i < points.length; i++) {\n let deltaX = interpolatedPoints[i].x - transformedPoints[i].x;\n let deltaY = interpolatedPoints[i].y - transformedPoints[i].y;\n transformedPoints[i].x = Math.round(transformedPoints[i].x + deltaX);\n transformedPoints[i].y = Math.round(transformedPoints[i].y + deltaY);\n }\n }\n }\n }\n return transformedPoints;\n }\n /**\n * Retrieves a transformed copy of a glyph based on the provided variation coordinates, or the glyph itself if no variation was applied\n * @param {opentype.Glyph|number} glyph - Glyph or index of glyph to transform.\n * @param {Object} coords - Variation coords object (will fall back to variation coords in the defaultRenderOptions)\n * @returns {opentype.Glyph} - The transformed glyph.\n */\n getTransform(glyph, coords) {\n if (Number.isInteger(glyph)) {\n glyph = this.font.glyphs.get(glyph);\n }\n const hasBlend = glyph.getBlendPath;\n const hasPoints = !!(glyph.points && glyph.points.length);\n let transformedGlyph = glyph;\n if (hasBlend || hasPoints) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n if (hasPoints) {\n const variationData = this.gvar() && this.gvar().glyphVariations[glyph.index];\n if (variationData) {\n const glyphPoints = glyph.points;\n let transformedPoints = this.applyTupleVariationStore(variationData, glyphPoints, coords, \"gvar\", { glyph });\n transformedGlyph = new glyph_default(Object.assign({}, glyph, { points: transformedPoints, path: getPath(transformedPoints) }));\n }\n } else if (hasBlend) {\n const blendPath = glyph.getBlendPath(coords);\n transformedGlyph = new glyph_default(Object.assign({}, glyph, { path: blendPath }));\n }\n }\n if (this.font.tables.hvar) {\n glyph._advanceWidth = typeof glyph._advanceWidth !== \"undefined\" ? glyph._advanceWidth : glyph.advanceWidth;\n glyph.advanceWidth = transformedGlyph.advanceWidth = Math.round(glyph._advanceWidth + this.getVariableAdjustment(transformedGlyph.index, \"hvar\", \"advanceWidth\", coords));\n glyph._leftSideBearing = typeof glyph._leftSideBearing !== \"undefined\" ? glyph._leftSideBearing : glyph.leftSideBearing;\n glyph.leftSideBearing = transformedGlyph.leftSideBearing = Math.round(glyph._leftSideBearing + this.getVariableAdjustment(transformedGlyph.index, \"hvar\", \"lsb\", coords));\n }\n return transformedGlyph;\n }\n getCvarTransform(coords) {\n const cvt = this.font.tables.cvt;\n const variationData = this.cvar();\n if (!cvt || !cvt.length || !variationData || !variationData.headers.length) return cvt;\n return this.applyTupleVariationStore(variationData, cvt, coords, \"cvar\");\n }\n /**\n * Calculates the variable adjustment for a glyph property from variation data.\n * @param {number} gid - Glyph ID.\n * @param {string} tableName - The name of the variation data table.\n * @param {string} parameter - The property to adjust.\n * @param {Object} coords - Variation coordinates.\n * @returns {number} - The calculated adjustment.\n */\n getVariableAdjustment(gid, tableName, parameter, coords) {\n coords = coords || this.font.variation.get();\n let outerIndex, innerIndex;\n const table = this.font.tables[tableName];\n if (!table) {\n throw Error(`trying to get variation adjustment from non-existent table \"${table}\"`);\n }\n if (!table.itemVariationStore) {\n throw Error(`trying to get variation adjustment from table \"${table}\" which does not have an itemVariationStore`);\n }\n const mapSize = table[parameter] && table[parameter].map.length;\n if (mapSize) {\n let i = gid;\n if (i >= mapSize) {\n i = mapSize - 1;\n }\n ({ outerIndex, innerIndex } = table[parameter].map[i]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex, coords);\n }\n /**\n * Retrieves the delta value from a variation store.\n * @param {Object} itemStore - The item variation store.\n * @param {number} outerIndex - The outer index in the variation subtables.\n * @param {number} innerIndex - The inner index in the delta sets.\n * @param {Object} coords - Variation coordinates.\n * @returns {number} - The delta value.\n */\n getDelta(itemStore, outerIndex, innerIndex, coords) {\n if (outerIndex >= itemStore.itemVariationSubtables.length) {\n return 0;\n }\n let varData = itemStore.itemVariationSubtables[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex, coords);\n let netAdjustment = 0;\n for (let master = 0; master < varData.regionIndexes.length; master++) {\n netAdjustment += deltaSet[master] * blendVector[master];\n }\n return netAdjustment;\n }\n /**\n * Calculates the blend vector for a set of variation coordinates.\n * @param {Object} itemStore - The item variation store.\n * @param {number} itemIndex - Index of the current item in the variation subtables.\n * @param {Object} coords - Variation coordinates.\n * @returns {Array<number>} - The blend vector for the given coordinates.\n */\n getBlendVector(itemStore, itemIndex, coords) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n let varData = itemStore.itemVariationSubtables[itemIndex];\n const normalizedCoords = this.getNormalizedCoords(coords);\n let blendVector = [];\n for (let master = 0; master < varData.regionIndexes.length; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegions[regionIndex].regionAxes;\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\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) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n scalar *= axisScalar;\n }\n blendVector[master] = scalar;\n }\n return blendVector;\n }\n /**\n * Helper method that returns the font's avar table if present\n * @returns {Object|undefined}\n */\n avar() {\n return this.font.tables.avar;\n }\n /**\n * Helper method that returns the font's cvar table if present\n * @returns {Object|undefined}\n */\n cvar() {\n return this.font.tables.cvar;\n }\n /**\n * Helper method that returns the font's fvar table if present\n * @returns {Object|undefined}\n */\n fvar() {\n return this.font.tables.fvar;\n }\n /**\n * Helper method that returns the font's gvar table if present\n * @returns {Object|undefined}\n */\n gvar() {\n return this.font.tables.gvar;\n }\n /**\n * Helper method that returns the font's hvar table if present\n * @returns {Object|undefined}\n */\n hvar() {\n return this.font.tables.hvar;\n }\n};\n\n// src/variation.mjs\nvar VariationManager = class {\n constructor(font) {\n this.font = font;\n this.process = new VariationProcessor(this.font);\n this.activateDefaultVariation();\n this.getTransform = this.process.getTransform.bind(this.process);\n }\n /**\n * Tries to determine the default instance and sets its variation data as the font.defaultRenderOptions.\n * If not defaultInstance can be determined, the default coordinates of all axes are used.\n */\n activateDefaultVariation() {\n const defaultInstance = this.getDefaultInstanceIndex();\n if (defaultInstance > -1) {\n this.set(defaultInstance);\n } else {\n this.set(this.getDefaultCoordinates());\n }\n }\n /**\n * Retrieves the default coordinates for the font's variation axes.\n * @returns {Object} An object mapping axis tags to their default values.\n */\n getDefaultCoordinates() {\n return this.fvar().axes.reduce((acc, axis) => {\n acc[axis.tag] = axis.defaultValue;\n return acc;\n }, {});\n }\n /**\n * Gets the index of the default variation instance or -1 if not able to determine\n * @returns {integer} default index or -1\n */\n getDefaultInstanceIndex() {\n const defaultCoordinates = this.getDefaultCoordinates();\n let defaultInstanceIndex = this.getInstanceIndex(defaultCoordinates);\n if (defaultInstanceIndex < 0) {\n defaultInstanceIndex = this.fvar().instances.findIndex((instance) => instance.name && instance.name.en === \"Regular\");\n }\n return defaultInstanceIndex;\n }\n /**\n * Retrieves the index of the variation instance matching the coordinates object or -1 if not able to determine\n * @param {integer|Object} coordinates An object where keys are axis tags and values are the corresponding variation values.\n * @returns {integer} The index of the matching instance or -1 if no match is found.\n */\n getInstanceIndex(coordinates) {\n return this.fvar().instances.findIndex(\n (instance) => Object.keys(coordinates).every(\n (axis) => instance.coordinates[axis] === coordinates[axis]\n )\n );\n }\n /**\n * Retrieves a variation instance by its zero-based index\n * @param {integer} index - zero-based index of the variation instance\n * @returns {Object} - variation instance or null if the index is invalid.\n */\n getInstance(index) {\n return this.fvar().instances && this.fvar().instances[index];\n }\n /**\n * Set the variation coordinates to use by default for rendering in the font.defaultRenderOptions\n * @param {integer|Object} instanceIdOrObject Either the zero-based index of a variation instance or an object with axis tags as keys and variation values as values\n */\n set(instanceIdOrObject) {\n let variationData;\n if (Number.isInteger(instanceIdOrObject)) {\n const instance = this.getInstance(instanceIdOrObject);\n if (!instance) {\n throw Error(`Invalid instance index ${instanceIdOrObject}`);\n }\n variationData = { ...instance.coordinates };\n } else {\n variationData = instanceIdOrObject;\n this.process.normalizeCoordTags(variationData);\n }\n variationData = Object.assign(\n {},\n this.font.defaultRenderOptions.variation,\n variationData\n );\n this.font.defaultRenderOptions = Object.assign(\n {},\n this.font.defaultRenderOptions,\n { variation: variationData }\n );\n }\n /**\n * Returns the variation coordinates currently set in the font.defaultRenderOptions\n * @returns {Object}\n */\n get() {\n return Object.assign({}, this.font.defaultRenderOptions.variation);\n }\n /**\n * Helper method that returns the font's avar table if present\n * @returns {Object|undefined}\n */\n avar() {\n return this.font.tables.avar;\n }\n /**\n * Helper method that returns the font's cvar table if present\n * @returns {Object|undefined}\n */\n cvar() {\n return this.font.tables.cvar;\n }\n /**\n * Helper method that returns the font's fvar table if present\n * @returns {Object|undefined}\n */\n fvar() {\n return this.font.tables.fvar;\n }\n /**\n * Helper method that returns the font's gvar table if present\n * @returns {Object|undefined}\n */\n gvar() {\n return this.font.tables.gvar;\n }\n /**\n * Helper method that returns the font's hvar table if present\n * @returns {Object|undefined}\n */\n hvar() {\n return this.font.tables.hvar;\n }\n};\n\n// src/hintingtt.mjs\nvar MAX_INSTRUCTIONS = 1e6;\nvar MAX_CALL_DEPTH2 = 64;\nvar MAX_LOOP_COUNT = 1e4;\nvar instructionTable;\nvar exec;\nvar execGlyph;\nvar execComponent;\nfunction Hinting(font) {\n this.font = font;\n this.getCommands = function(hPoints) {\n return glyf_default.getPath(hPoints).commands;\n };\n this._fpgmState = this._prepState = void 0;\n this._errorState = 0;\n}\nfunction roundOff(v) {\n return v;\n}\nfunction roundToGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v));\n}\nfunction roundToDoubleGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;\n}\nfunction roundToHalfGrid(v) {\n return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);\n}\nfunction roundUpToGrid(v) {\n return Math.sign(v) * Math.ceil(Math.abs(v));\n}\nfunction roundDownToGrid(v) {\n return Math.sign(v) * Math.floor(Math.abs(v));\n}\nvar roundSuper = function(v) {\n const period = this.srPeriod;\n let phase = this.srPhase;\n const threshold = this.srThreshold;\n let sign = 1;\n if (v < 0) {\n v = -v;\n sign = -1;\n }\n v += threshold - phase;\n v = Math.trunc(v / period) * period;\n v += phase;\n if (v < 0) return phase * sign;\n return v * sign;\n};\nvar xUnitVector = {\n x: 1,\n y: 0,\n axis: \"x\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dm1;\n let dm2;\n let dt;\n if (!pv || pv === this) {\n do1 = p.xo - rp1.xo;\n do2 = p.xo - rp2.xo;\n dm1 = rp1.x - rp1.xo;\n dm2 = rp2.x - rp2.xo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.x = p.xo + (dm1 + dm2) / 2;\n return;\n }\n p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this\n normalSlope: Number.NEGATIVE_INFINITY,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'.\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.x = (org ? rp.xo : rp.x) + d;\n return;\n }\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n p.x = rpdx + (p.y - rpdy) / pv.normalSlope;\n },\n // Slope of vector line.\n slope: 0,\n // Touches the point p.\n touch: function(p) {\n p.xTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.xTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.xTouched = false;\n }\n};\nvar yUnitVector = {\n x: 0,\n y: 1,\n axis: \"y\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dm1;\n let dm2;\n let dt;\n if (!pv || pv === this) {\n do1 = p.yo - rp1.yo;\n do2 = p.yo - rp2.yo;\n dm1 = rp1.y - rp1.yo;\n dm2 = rp2.y - rp2.yo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.y = p.yo + (dm1 + dm2) / 2;\n return;\n }\n p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this.\n normalSlope: 0,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.y = (org ? rp.yo : rp.y) + d;\n return;\n }\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n p.y = rpdy + pv.normalSlope * (p.x - rpdx);\n },\n // Slope of vector line.\n slope: Number.POSITIVE_INFINITY,\n // Touches the point p.\n touch: function(p) {\n p.yTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.yTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.yTouched = false;\n }\n};\nObject.freeze(xUnitVector);\nObject.freeze(yUnitVector);\nfunction UnitVector(x, y) {\n this.x = x;\n this.y = y;\n this.axis = void 0;\n this.slope = y / x;\n this.normalSlope = -x / y;\n Object.freeze(this);\n}\nUnitVector.prototype.distance = function(p1, p2, o1, o2) {\n return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2);\n};\nUnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {\n let dm1;\n let dm2;\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dt;\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n};\nUnitVector.prototype.setRelative = function(p, rp, d, pv, org) {\n pv = pv || this;\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n const pvns = pv.normalSlope;\n const fvs = this.slope;\n const px = p.x;\n const py = p.y;\n p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);\n p.y = fvs * (p.x - px) + py;\n};\nUnitVector.prototype.touch = function(p) {\n p.xTouched = true;\n p.yTouched = true;\n};\nfunction getUnitVector(x, y) {\n const d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d;\n if (x === 1 && y === 0) return xUnitVector;\n else if (x === 0 && y === 1) return yUnitVector;\n else return new UnitVector(x, y);\n}\nfunction HPoint(x, y, lastPointOfContour, onCurve) {\n this.x = this.xo = Math.round(x * 64) / 64;\n this.y = this.yo = Math.round(y * 64) / 64;\n this.lastPointOfContour = lastPointOfContour;\n this.onCurve = onCurve;\n this.prevPointOnContour = void 0;\n this.nextPointOnContour = void 0;\n this.xTouched = false;\n this.yTouched = false;\n Object.preventExtensions(this);\n}\nHPoint.prototype.nextTouched = function(v) {\n let p = this.nextPointOnContour;\n while (!v.touched(p) && p !== this) p = p.nextPointOnContour;\n return p;\n};\nHPoint.prototype.prevTouched = function(v) {\n let p = this.prevPointOnContour;\n while (!v.touched(p) && p !== this) p = p.prevPointOnContour;\n return p;\n};\nvar HPZero = Object.freeze(new HPoint(0, 0));\nvar defaultState = {\n cvCutIn: 17 / 16,\n // control value cut in\n deltaBase: 9,\n deltaShift: 0.125,\n loop: 1,\n // loops some instructions\n minDis: 1,\n // minimum distance\n autoFlip: true\n};\nfunction State(env, prog) {\n this.env = env;\n this.stack = [];\n this.prog = prog;\n switch (env) {\n case \"glyf\":\n this.zp0 = this.zp1 = this.zp2 = 1;\n this.rp0 = this.rp1 = this.rp2 = 0;\n /* fall through */\n case \"prep\":\n this.fv = this.pv = this.dpv = xUnitVector;\n this.round = roundToGrid;\n }\n}\nHinting.prototype.exec = function(glyph, ppem) {\n if (typeof ppem !== \"number\") {\n throw new Error(\"Point size is not a number!\");\n }\n if (this._errorState > 2) return;\n const font = this.font;\n let prepState = this._prepState;\n if (!prepState || prepState.ppem !== ppem) {\n let fpgmState = this._fpgmState;\n if (!fpgmState) {\n State.prototype = defaultState;\n fpgmState = this._fpgmState = new State(\"fpgm\", font.tables.fpgm);\n fpgmState.funcs = [];\n fpgmState.font = font;\n fpgmState.instructionCount = 0;\n fpgmState.callDepth = 0;\n if (false) {\n console.log(\"---EXEC FPGM---\");\n fpgmState.step = -1;\n }\n try {\n exec(fpgmState);\n } catch (e) {\n console.log(\"Hinting error in FPGM:\" + e);\n this._errorState = 3;\n return;\n }\n }\n State.prototype = fpgmState;\n prepState = this._prepState = new State(\"prep\", font.tables.prep);\n prepState.ppem = ppem;\n prepState.instructionCount = 0;\n prepState.callDepth = 0;\n const oCvt = font.variation && font.variation.process.getCvarTransform() || font.tables.cvt;\n if (oCvt) {\n const cvt = prepState.cvt = new Array(oCvt.length);\n const scale = ppem / font.unitsPerEm;\n for (let c = 0; c < oCvt.length; c++) {\n cvt[c] = oCvt[c] * scale;\n }\n } else {\n prepState.cvt = [];\n }\n if (false) {\n console.log(\"---EXEC PREP---\");\n prepState.step = -1;\n }\n try {\n exec(prepState);\n } catch (e) {\n if (this._errorState < 2) {\n console.log(\"Hinting error in PREP:\" + e);\n }\n this._errorState = 2;\n }\n }\n if (this._errorState > 1) return;\n try {\n return execGlyph(glyph, prepState);\n } catch (e) {\n if (this._errorState < 1) {\n console.log(\"Hinting error:\" + e);\n console.log(\"Note: further hinting errors are silenced\");\n }\n this._errorState = 1;\n return void 0;\n }\n};\nexecGlyph = function(glyph, prepState) {\n const xScale = prepState.ppem / prepState.font.unitsPerEm;\n const yScale = xScale;\n let components = glyph.components;\n let contours;\n let gZone;\n let state;\n State.prototype = prepState;\n if (!components) {\n state = new State(\"glyf\", glyph.instructions);\n state.instructionCount = 0;\n state.callDepth = 0;\n if (false) {\n console.log(\"---EXEC GLYPH---\");\n state.step = -1;\n }\n execComponent(glyph, state, xScale, yScale);\n gZone = state.gZone;\n } else {\n const font = prepState.font;\n gZone = [];\n contours = [];\n for (let i = 0; i < components.length; i++) {\n const c = components[i];\n const cg = font.glyphs.get(c.glyphIndex);\n state = new State(\"glyf\", cg.instructions);\n state.instructionCount = 0;\n state.callDepth = 0;\n if (false) {\n console.log(\"---EXEC COMP \" + i + \"---\");\n state.step = -1;\n }\n execComponent(cg, state, xScale, yScale);\n const dx = Math.round(c.dx * xScale);\n const dy = Math.round(c.dy * yScale);\n const gz = state.gZone;\n const cc = state.contours;\n for (let pi = 0; pi < gz.length; pi++) {\n const p = gz[pi];\n p.xTouched = p.yTouched = false;\n p.xo = p.x = p.x + dx;\n p.yo = p.y = p.y + dy;\n }\n const gLen = gZone.length;\n gZone.push.apply(gZone, gz);\n for (let j = 0; j < cc.length; j++) {\n contours.push(cc[j] + gLen);\n }\n }\n if (glyph.instructions && !state.inhibitGridFit) {\n state = new State(\"glyf\", glyph.instructions);\n state.gZone = state.z0 = state.z1 = state.z2 = gZone;\n state.contours = contours;\n gZone.push(\n new HPoint(0, 0),\n new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n );\n if (false) {\n console.log(\"---EXEC COMPOSITE---\");\n state.step = -1;\n }\n exec(state);\n gZone.length -= 2;\n }\n }\n return gZone;\n};\nexecComponent = function(glyph, state, xScale, yScale) {\n const points = glyph.points || [];\n const pLen = points.length;\n const gZone = state.gZone = state.z0 = state.z1 = state.z2 = [];\n const contours = state.contours = [];\n let cp;\n for (let i = 0; i < pLen; i++) {\n cp = points[i];\n gZone[i] = new HPoint(\n cp.x * xScale,\n cp.y * yScale,\n cp.lastPointOfContour,\n cp.onCurve\n );\n }\n let sp;\n let np;\n for (let i = 0; i < pLen; i++) {\n cp = gZone[i];\n if (!sp) {\n sp = cp;\n contours.push(i);\n }\n if (cp.lastPointOfContour) {\n cp.nextPointOnContour = sp;\n sp.prevPointOnContour = cp;\n sp = void 0;\n } else {\n np = gZone[i + 1];\n cp.nextPointOnContour = np;\n np.prevPointOnContour = cp;\n }\n }\n if (state.inhibitGridFit) return;\n if (false) {\n console.log(\"PROCESSING GLYPH\", state.stack);\n for (let i = 0; i < pLen; i++) {\n console.log(i, gZone[i].x, gZone[i].y);\n }\n }\n gZone.push(\n new HPoint(0, 0),\n new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n );\n exec(state);\n gZone.length -= 2;\n if (false) {\n console.log(\"FINISHED GLYPH\", state.stack);\n for (let i = 0; i < pLen; i++) {\n console.log(i, gZone[i].x, gZone[i].y);\n }\n }\n};\nexec = function(state) {\n let prog = state.prog;\n if (!prog) return;\n const pLen = prog.length;\n let ins;\n for (state.ip = 0; state.ip < pLen; state.ip++) {\n if (++state.instructionCount > MAX_INSTRUCTIONS) {\n throw new Error(\n \"Hinting instructions exceeded maximum of \" + MAX_INSTRUCTIONS\n );\n }\n if (false) state.step++;\n ins = instructionTable[prog[state.ip]];\n if (!ins) {\n throw new Error(\n \"unknown instruction: 0x\" + Number(prog[state.ip]).toString(16)\n );\n }\n ins(state);\n }\n};\nfunction initTZone(state) {\n const tZone = state.tZone = new Array(state.gZone.length);\n for (let i = 0; i < tZone.length; i++) {\n tZone[i] = new HPoint(0, 0);\n }\n}\nfunction skip(state, handleElse) {\n const prog = state.prog;\n let ip = state.ip;\n let nesting = 1;\n let ins;\n do {\n ins = prog[++ip];\n if (ins === 88)\n nesting++;\n else if (ins === 89)\n nesting--;\n else if (ins === 64)\n ip += prog[ip + 1] + 1;\n else if (ins === 65)\n ip += 2 * prog[ip + 1] + 1;\n else if (ins >= 176 && ins <= 183)\n ip += ins - 176 + 1;\n else if (ins >= 184 && ins <= 191)\n ip += (ins - 184 + 1) * 2;\n else if (handleElse && nesting === 1 && ins === 27)\n break;\n } while (nesting > 0);\n state.ip = ip;\n}\nfunction SVTCA(v, state) {\n if (false) console.log(state.step, \"SVTCA[\" + v.axis + \"]\");\n state.fv = state.pv = state.dpv = v;\n}\nfunction SPVTCA(v, state) {\n if (false) console.log(state.step, \"SPVTCA[\" + v.axis + \"]\");\n state.pv = state.dpv = v;\n}\nfunction SFVTCA(v, state) {\n if (false) console.log(state.step, \"SFVTCA[\" + v.axis + \"]\");\n state.fv = v;\n}\nfunction SPVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(\"SPVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.pv = state.dpv = getUnitVector(dx, dy);\n}\nfunction SFVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(\"SFVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.fv = getUnitVector(dx, dy);\n}\nfunction SPVFS(state) {\n const stack = state.stack;\n const y = stack.pop();\n const x = stack.pop();\n if (false) console.log(state.step, \"SPVFS[]\", y, x);\n state.pv = state.dpv = getUnitVector(x, y);\n}\nfunction SFVFS(state) {\n const stack = state.stack;\n const y = stack.pop();\n const x = stack.pop();\n if (false) console.log(state.step, \"SPVFS[]\", y, x);\n state.fv = getUnitVector(x, y);\n}\nfunction GPV(state) {\n const stack = state.stack;\n const pv = state.pv;\n if (false) console.log(state.step, \"GPV[]\");\n stack.push(pv.x * 16384);\n stack.push(pv.y * 16384);\n}\nfunction GFV(state) {\n const stack = state.stack;\n const fv = state.fv;\n if (false) console.log(state.step, \"GFV[]\");\n stack.push(fv.x * 16384);\n stack.push(fv.y * 16384);\n}\nfunction SFVTPV(state) {\n state.fv = state.pv;\n if (false) console.log(state.step, \"SFVTPV[]\");\n}\nfunction ISECT(state) {\n const stack = state.stack;\n const pa0i = stack.pop();\n const pa1i = stack.pop();\n const pb0i = stack.pop();\n const pb1i = stack.pop();\n const pi = stack.pop();\n const z0 = state.z0;\n const z1 = state.z1;\n const pa0 = z0[pa0i];\n const pa1 = z0[pa1i];\n const pb0 = z1[pb0i];\n const pb1 = z1[pb1i];\n const p = state.z2[pi];\n if (false) console.log(\"ISECT[], \", pa0i, pa1i, pb0i, pb1i, pi);\n const x1 = pa0.x;\n const y1 = pa0.y;\n const x2 = pa1.x;\n const y2 = pa1.y;\n const x3 = pb0.x;\n const y3 = pb0.y;\n const x4 = pb1.x;\n const y4 = pb1.y;\n const div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n const f1 = x1 * y2 - y1 * x2;\n const f2 = x3 * y4 - y3 * x4;\n p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;\n p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;\n}\nfunction SRP0(state) {\n state.rp0 = state.stack.pop();\n if (false) console.log(state.step, \"SRP0[]\", state.rp0);\n}\nfunction SRP1(state) {\n state.rp1 = state.stack.pop();\n if (false) console.log(state.step, \"SRP1[]\", state.rp1);\n}\nfunction SRP2(state) {\n state.rp2 = state.stack.pop();\n if (false) console.log(state.step, \"SRP2[]\", state.rp2);\n}\nfunction SZP0(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP0[]\", n);\n state.zp0 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z0 = state.tZone;\n break;\n case 1:\n state.z0 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZP1(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP1[]\", n);\n state.zp1 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z1 = state.tZone;\n break;\n case 1:\n state.z1 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZP2(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP2[]\", n);\n state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z2 = state.tZone;\n break;\n case 1:\n state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZPS(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZPS[]\", n);\n state.zp0 = state.zp1 = state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z0 = state.z1 = state.z2 = state.tZone;\n break;\n case 1:\n state.z0 = state.z1 = state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SLOOP(state) {\n state.loop = state.stack.pop();\n if (state.loop > MAX_LOOP_COUNT) {\n state.loop = MAX_LOOP_COUNT;\n }\n if (false) console.log(state.step, \"SLOOP[]\", state.loop);\n}\nfunction RTG(state) {\n if (false) console.log(state.step, \"RTG[]\");\n state.round = roundToGrid;\n}\nfunction RTHG(state) {\n if (false) console.log(state.step, \"RTHG[]\");\n state.round = roundToHalfGrid;\n}\nfunction SMD(state) {\n const d = state.stack.pop();\n if (false) console.log(state.step, \"SMD[]\", d);\n state.minDis = d / 64;\n}\nfunction ELSE(state) {\n if (false) console.log(state.step, \"ELSE[]\");\n skip(state, false);\n}\nfunction JMPR(state) {\n const o = state.stack.pop();\n if (false) console.log(state.step, \"JMPR[]\", o);\n state.ip += o - 1;\n}\nfunction SCVTCI(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCVTCI[]\", n);\n state.cvCutIn = n / 64;\n}\nfunction DUP(state) {\n const stack = state.stack;\n if (false) console.log(state.step, \"DUP[]\");\n stack.push(stack[stack.length - 1]);\n}\nfunction POP(state) {\n if (false) console.log(state.step, \"POP[]\");\n state.stack.pop();\n}\nfunction CLEAR(state) {\n if (false) console.log(state.step, \"CLEAR[]\");\n state.stack.length = 0;\n}\nfunction SWAP(state) {\n const stack = state.stack;\n const a = stack.pop();\n const b = stack.pop();\n if (false) console.log(state.step, \"SWAP[]\");\n stack.push(a);\n stack.push(b);\n}\nfunction DEPTH(state) {\n const stack = state.stack;\n if (false) console.log(state.step, \"DEPTH[]\");\n stack.push(stack.length);\n}\nfunction LOOPCALL(state) {\n const stack = state.stack;\n const fn = stack.pop();\n let c = stack.pop();\n if (c > MAX_LOOP_COUNT) c = MAX_LOOP_COUNT;\n if (false) console.log(state.step, \"LOOPCALL[]\", fn, c);\n if (++state.callDepth > MAX_CALL_DEPTH2) {\n throw new Error(\"Hinting call depth exceeded maximum of \" + MAX_CALL_DEPTH2);\n }\n const cip = state.ip;\n const cprog = state.prog;\n state.prog = state.funcs[fn];\n for (let i = 0; i < c; i++) {\n exec(state);\n if (false) console.log(\n ++state.step,\n i + 1 < c ? \"next loopcall\" : \"done loopcall\",\n i\n );\n }\n state.ip = cip;\n state.prog = cprog;\n state.callDepth--;\n}\nfunction CALL(state) {\n const fn = state.stack.pop();\n if (false) console.log(state.step, \"CALL[]\", fn);\n if (++state.callDepth > MAX_CALL_DEPTH2) {\n throw new Error(\"Hinting call depth exceeded maximum of \" + MAX_CALL_DEPTH2);\n }\n const cip = state.ip;\n const cprog = state.prog;\n state.prog = state.funcs[fn];\n exec(state);\n state.ip = cip;\n state.prog = cprog;\n state.callDepth--;\n if (false) console.log(++state.step, \"returning from\", fn);\n}\nfunction CINDEX(state) {\n const stack = state.stack;\n const k = stack.pop();\n if (false) console.log(state.step, \"CINDEX[]\", k);\n stack.push(stack[stack.length - k]);\n}\nfunction MINDEX(state) {\n const stack = state.stack;\n const k = stack.pop();\n if (false) console.log(state.step, \"MINDEX[]\", k);\n stack.push(stack.splice(stack.length - k, 1)[0]);\n}\nfunction FDEF(state) {\n if (state.env !== \"fpgm\") throw new Error(\"FDEF not allowed here\");\n const stack = state.stack;\n const prog = state.prog;\n let ip = state.ip;\n const fn = stack.pop();\n const ipBegin = ip;\n if (false) console.log(state.step, \"FDEF[]\", fn);\n while (prog[++ip] !== 45) ;\n state.ip = ip;\n state.funcs[fn] = prog.slice(ipBegin + 1, ip);\n}\nfunction MDAP(round, state) {\n const pi = state.stack.pop();\n const p = state.z0[pi];\n const fv = state.fv;\n const pv = state.pv;\n if (false) console.log(state.step, \"MDAP[\" + round + \"]\", pi);\n let d = pv.distance(p, HPZero);\n if (round) d = state.round(d);\n fv.setRelative(p, HPZero, d, pv);\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n}\nfunction IUP(v, state) {\n const z2 = state.z2;\n const pLen = z2.length - 2;\n let cp;\n let pp;\n let np;\n if (false) console.log(state.step, \"IUP[\" + v.axis + \"]\");\n for (let i = 0; i < pLen; i++) {\n cp = z2[i];\n if (v.touched(cp)) continue;\n pp = cp.prevTouched(v);\n if (pp === cp) continue;\n np = cp.nextTouched(v);\n if (pp === np) {\n v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);\n }\n v.interpolate(cp, pp, np, v);\n }\n}\nfunction SHP(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n let loop = state.loop;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n const d = pv.distance(rp, rp, false, true);\n fv.setRelative(p, p, d, pv);\n fv.touch(p);\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHP[\" + (a ? \"rp1\" : \"rp2\") + \"]\",\n pi\n );\n }\n }\n state.loop = 1;\n}\nfunction SHC(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n const ci = stack.pop();\n const sp = state.z2[state.contours[ci]];\n let p = sp;\n if (false) console.log(state.step, \"SHC[\" + a + \"]\", ci);\n const d = pv.distance(rp, rp, false, true);\n do {\n if (p !== rp) fv.setRelative(p, p, d, pv);\n p = p.nextPointOnContour;\n } while (p !== sp);\n}\nfunction SHZ(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n const e = stack.pop();\n if (false) console.log(state.step, \"SHZ[\" + a + \"]\", e);\n let z;\n switch (e) {\n case 0:\n z = state.tZone;\n break;\n case 1:\n z = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone\");\n }\n let p;\n const d = pv.distance(rp, rp, false, true);\n const pLen = z.length - 2;\n for (let i = 0; i < pLen; i++) {\n p = z[i];\n fv.setRelative(p, p, d, pv);\n }\n}\nfunction SHPIX(state) {\n const stack = state.stack;\n let loop = state.loop;\n const fv = state.fv;\n const d = stack.pop() / 64;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHPIX[]\",\n pi,\n d\n );\n }\n fv.setRelative(p, p, d);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction IP(state) {\n const stack = state.stack;\n const rp1i = state.rp1;\n const rp2i = state.rp2;\n let loop = state.loop;\n const rp1 = state.z0[rp1i];\n const rp2 = state.z1[rp2i];\n const fv = state.fv;\n const pv = state.dpv;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"IP[]\",\n pi,\n rp1i,\n \"<->\",\n rp2i\n );\n }\n fv.interpolate(p, rp1, rp2, pv);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction MSIRP(a, state) {\n const stack = state.stack;\n const d = stack.pop() / 64;\n const pi = stack.pop();\n const p = state.z1[pi];\n const rp0 = state.z0[state.rp0];\n const fv = state.fv;\n const pv = state.pv;\n fv.setRelative(p, rp0, d, pv);\n fv.touch(p);\n if (false) console.log(state.step, \"MSIRP[\" + a + \"]\", d, pi);\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (a) state.rp0 = pi;\n}\nfunction ALIGNRP(state) {\n const stack = state.stack;\n const rp0i = state.rp0;\n const rp0 = state.z0[rp0i];\n let loop = state.loop;\n const fv = state.fv;\n const pv = state.pv;\n const z1 = state.z1;\n while (loop--) {\n const pi = stack.pop();\n const p = z1[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"ALIGNRP[]\",\n pi\n );\n }\n fv.setRelative(p, rp0, 0, pv);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction RTDG(state) {\n if (false) console.log(state.step, \"RTDG[]\");\n state.round = roundToDoubleGrid;\n}\nfunction MIAP(round, state) {\n const stack = state.stack;\n const n = stack.pop();\n const pi = stack.pop();\n const p = state.z0[pi];\n const fv = state.fv;\n const pv = state.pv;\n let cv = state.cvt[n];\n if (false) {\n console.log(\n state.step,\n \"MIAP[\" + round + \"]\",\n n,\n \"(\",\n cv,\n \")\",\n pi\n );\n }\n let d = pv.distance(p, HPZero);\n if (round) {\n if (Math.abs(d - cv) < state.cvCutIn) d = cv;\n d = state.round(d);\n }\n fv.setRelative(p, HPZero, d, pv);\n if (state.zp0 === 0) {\n p.xo = p.x;\n p.yo = p.y;\n }\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n}\nfunction NPUSHB(state) {\n const prog = state.prog;\n let ip = state.ip;\n const stack = state.stack;\n const n = prog[++ip];\n if (false) console.log(state.step, \"NPUSHB[]\", n);\n for (let i = 0; i < n; i++) stack.push(prog[++ip]);\n state.ip = ip;\n}\nfunction NPUSHW(state) {\n let ip = state.ip;\n const prog = state.prog;\n const stack = state.stack;\n const n = prog[++ip];\n if (false) console.log(state.step, \"NPUSHW[]\", n);\n for (let i = 0; i < n; i++) {\n let w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) w = -((w ^ 65535) + 1);\n stack.push(w);\n }\n state.ip = ip;\n}\nfunction WS(state) {\n const stack = state.stack;\n let store = state.store;\n if (!store) store = state.store = [];\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WS\", v, l);\n store[l] = v;\n}\nfunction RS(state) {\n const stack = state.stack;\n const store = state.store;\n const l = stack.pop();\n if (false) console.log(state.step, \"RS\", l);\n const v = store && store[l] || 0;\n stack.push(v);\n}\nfunction WCVTP(state) {\n const stack = state.stack;\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WCVTP\", v, l);\n state.cvt[l] = v / 64;\n}\nfunction RCVT(state) {\n const stack = state.stack;\n const cvte = stack.pop();\n if (false) console.log(state.step, \"RCVT\", cvte);\n stack.push(state.cvt[cvte] * 64);\n}\nfunction GC(a, state) {\n const stack = state.stack;\n const pi = stack.pop();\n const p = state.z2[pi];\n if (false) console.log(state.step, \"GC[\" + a + \"]\", pi);\n stack.push(state.dpv.distance(p, HPZero, a, false) * 64);\n}\nfunction MD(a, state) {\n const stack = state.stack;\n const pi2 = stack.pop();\n const pi1 = stack.pop();\n const p2 = state.z1[pi2];\n const p1 = state.z0[pi1];\n const d = state.dpv.distance(p1, p2, a, a);\n if (false) console.log(state.step, \"MD[\" + a + \"]\", pi2, pi1, \"->\", d);\n state.stack.push(Math.round(d * 64));\n}\nfunction MPPEM(state) {\n if (false) console.log(state.step, \"MPPEM[]\");\n state.stack.push(state.ppem);\n}\nfunction FLIPON(state) {\n if (false) console.log(state.step, \"FLIPON[]\");\n state.autoFlip = true;\n}\nfunction LT(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"LT[]\", e2, e1);\n stack.push(e1 < e2 ? 1 : 0);\n}\nfunction LTEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"LTEQ[]\", e2, e1);\n stack.push(e1 <= e2 ? 1 : 0);\n}\nfunction GT(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"GT[]\", e2, e1);\n stack.push(e1 > e2 ? 1 : 0);\n}\nfunction GTEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"GTEQ[]\", e2, e1);\n stack.push(e1 >= e2 ? 1 : 0);\n}\nfunction EQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"EQ[]\", e2, e1);\n stack.push(e2 === e1 ? 1 : 0);\n}\nfunction NEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"NEQ[]\", e2, e1);\n stack.push(e2 !== e1 ? 1 : 0);\n}\nfunction ODD(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ODD[]\", n);\n stack.push(Math.trunc(n) & 1 ? 1 : 0);\n}\nfunction EVEN(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"EVEN[]\", n);\n stack.push(Math.trunc(n) & 1 ? 0 : 1);\n}\nfunction IF(state) {\n let test = state.stack.pop();\n let ins;\n if (false) console.log(state.step, \"IF[]\", test);\n if (!test) {\n skip(state, true);\n if (false) console.log(state.step, ins === 27 ? \"ELSE[]\" : \"EIF[]\");\n }\n}\nfunction EIF(state) {\n if (false) console.log(state.step, \"EIF[]\");\n}\nfunction AND(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"AND[]\", e2, e1);\n stack.push(e2 && e1 ? 1 : 0);\n}\nfunction OR(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"OR[]\", e2, e1);\n stack.push(e2 || e1 ? 1 : 0);\n}\nfunction NOT(state) {\n const stack = state.stack;\n const e = stack.pop();\n if (false) console.log(state.step, \"NOT[]\", e);\n stack.push(e ? 0 : 1);\n}\nfunction DELTAP123(b, state) {\n const stack = state.stack;\n const n = stack.pop();\n const fv = state.fv;\n const pv = state.pv;\n const ppem = state.ppem;\n const base = state.deltaBase + (b - 1) * 16;\n const ds = state.deltaShift;\n const z0 = state.z0;\n if (false) console.log(state.step, \"DELTAP[\" + b + \"]\", n, stack);\n for (let i = 0; i < n; i++) {\n const pi = stack.pop();\n const arg = stack.pop();\n const appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) continue;\n let mag = (arg & 15) - 8;\n if (mag >= 0) mag++;\n if (false) console.log(state.step, \"DELTAPFIX\", pi, \"by\", mag * ds);\n const p = z0[pi];\n fv.setRelative(p, p, mag * ds, pv);\n }\n}\nfunction SDB(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"SDB[]\", n);\n state.deltaBase = n;\n}\nfunction SDS(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"SDS[]\", n);\n state.deltaShift = Math.pow(0.5, n);\n}\nfunction ADD(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"ADD[]\", n2, n1);\n stack.push(n1 + n2);\n}\nfunction SUB(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"SUB[]\", n2, n1);\n stack.push(n1 - n2);\n}\nfunction DIV(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"DIV[]\", n2, n1);\n stack.push(n1 * 64 / n2);\n}\nfunction MUL(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"MUL[]\", n2, n1);\n stack.push(n1 * n2 / 64);\n}\nfunction ABS(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ABS[]\", n);\n stack.push(Math.abs(n));\n}\nfunction NEG(state) {\n const stack = state.stack;\n let n = stack.pop();\n if (false) console.log(state.step, \"NEG[]\", n);\n stack.push(-n);\n}\nfunction FLOOR(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"FLOOR[]\", n);\n stack.push(Math.floor(n / 64) * 64);\n}\nfunction CEILING(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"CEILING[]\", n);\n stack.push(Math.ceil(n / 64) * 64);\n}\nfunction ROUND(dt, state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ROUND[]\");\n stack.push(state.round(n / 64) * 64);\n}\nfunction WCVTF(state) {\n const stack = state.stack;\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WCVTF[]\", v, l);\n state.cvt[l] = v * state.ppem / state.font.unitsPerEm;\n}\nfunction DELTAC123(b, state) {\n const stack = state.stack;\n const n = stack.pop();\n const ppem = state.ppem;\n const base = state.deltaBase + (b - 1) * 16;\n const ds = state.deltaShift;\n if (false) console.log(state.step, \"DELTAC[\" + b + \"]\", n, stack);\n for (let i = 0; i < n; i++) {\n const c = stack.pop();\n const arg = stack.pop();\n const appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) continue;\n let mag = (arg & 15) - 8;\n if (mag >= 0) mag++;\n const delta = mag * ds;\n if (false) console.log(state.step, \"DELTACFIX\", c, \"by\", delta);\n state.cvt[c] += delta;\n }\n}\nfunction SROUND(state) {\n let n = state.stack.pop();\n if (false) console.log(state.step, \"SROUND[]\", n);\n state.round = roundSuper;\n let period;\n switch (n & 192) {\n case 0:\n period = 0.5;\n break;\n case 64:\n period = 1;\n break;\n case 128:\n period = 2;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n n &= 15;\n if (n === 0) state.srThreshold = 0;\n else state.srThreshold = (n / 8 - 0.5) * period;\n}\nfunction S45ROUND(state) {\n let n = state.stack.pop();\n if (false) console.log(state.step, \"S45ROUND[]\", n);\n state.round = roundSuper;\n let period;\n switch (n & 192) {\n case 0:\n period = Math.sqrt(2) / 2;\n break;\n case 64:\n period = Math.sqrt(2);\n break;\n case 128:\n period = 2 * Math.sqrt(2);\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n n &= 15;\n if (n === 0) state.srThreshold = 0;\n else state.srThreshold = (n / 8 - 0.5) * period;\n}\nfunction ROFF(state) {\n if (false) console.log(state.step, \"ROFF[]\");\n state.round = roundOff;\n}\nfunction RUTG(state) {\n if (false) console.log(state.step, \"RUTG[]\");\n state.round = roundUpToGrid;\n}\nfunction RDTG(state) {\n if (false) console.log(state.step, \"RDTG[]\");\n state.round = roundDownToGrid;\n}\nfunction SCANCTRL(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCANCTRL[]\", n);\n}\nfunction SDPVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(state.step, \"SDPVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.dpv = getUnitVector(dx, dy);\n}\nfunction GETINFO(state) {\n const stack = state.stack;\n const sel = stack.pop();\n let r = 0;\n if (false) console.log(state.step, \"GETINFO[]\", sel);\n if (sel & 1) r = 35;\n if (sel & 32) r |= 4096;\n stack.push(r);\n}\nfunction ROLL(state) {\n const stack = state.stack;\n const a = stack.pop();\n const b = stack.pop();\n const c = stack.pop();\n if (false) console.log(state.step, \"ROLL[]\");\n stack.push(b);\n stack.push(a);\n stack.push(c);\n}\nfunction MAX(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"MAX[]\", e2, e1);\n stack.push(Math.max(e1, e2));\n}\nfunction MIN(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"MIN[]\", e2, e1);\n stack.push(Math.min(e1, e2));\n}\nfunction SCANTYPE(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCANTYPE[]\", n);\n}\nfunction INSTCTRL(state) {\n const s = state.stack.pop();\n let v = state.stack.pop();\n if (false) console.log(state.step, \"INSTCTRL[]\", s, v);\n switch (s) {\n case 1:\n state.inhibitGridFit = !!v;\n return;\n case 2:\n state.ignoreCvt = !!v;\n return;\n default:\n throw new Error(\"invalid INSTCTRL[] selector\");\n }\n}\nfunction PUSHB(n, state) {\n const stack = state.stack;\n const prog = state.prog;\n let ip = state.ip;\n if (false) console.log(state.step, \"PUSHB[\" + n + \"]\");\n for (let i = 0; i < n; i++) stack.push(prog[++ip]);\n state.ip = ip;\n}\nfunction PUSHW(n, state) {\n let ip = state.ip;\n const prog = state.prog;\n const stack = state.stack;\n if (false) console.log(state.ip, \"PUSHW[\" + n + \"]\");\n for (let i = 0; i < n; i++) {\n let w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) w = -((w ^ 65535) + 1);\n stack.push(w);\n }\n state.ip = ip;\n}\nfunction MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {\n const stack = state.stack;\n const cvte = indirect && stack.pop();\n const pi = stack.pop();\n const rp0i = state.rp0;\n const rp = state.z0[rp0i];\n const p = state.z1[pi];\n const md = state.minDis;\n const fv = state.fv;\n const pv = state.dpv;\n let od;\n let d;\n let sign;\n let cv;\n d = od = pv.distance(p, rp, true, true);\n sign = d >= 0 ? 1 : -1;\n d = Math.abs(d);\n if (indirect) {\n cv = state.cvt[cvte];\n if (ro && Math.abs(d - cv) < state.cvCutIn) d = cv;\n }\n if (keepD && d < md) d = md;\n if (ro) d = state.round(d);\n fv.setRelative(p, rp, sign * d, pv);\n fv.touch(p);\n if (false) {\n console.log(\n state.step,\n (indirect ? \"MIRP[\" : \"MDRP[\") + (setRp0 ? \"M\" : \"m\") + (keepD ? \">\" : \"_\") + (ro ? \"R\" : \"_\") + (dt === 0 ? \"Gr\" : dt === 1 ? \"Bl\" : dt === 2 ? \"Wh\" : \"\") + \"]\",\n indirect ? cvte + \"(\" + state.cvt[cvte] + \",\" + cv + \")\" : \"\",\n pi,\n \"(d =\",\n od,\n \"->\",\n sign * d,\n \")\"\n );\n }\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (setRp0) state.rp0 = pi;\n}\ninstructionTable = [\n /* 0x00 */\n SVTCA.bind(void 0, yUnitVector),\n /* 0x01 */\n SVTCA.bind(void 0, xUnitVector),\n /* 0x02 */\n SPVTCA.bind(void 0, yUnitVector),\n /* 0x03 */\n SPVTCA.bind(void 0, xUnitVector),\n /* 0x04 */\n SFVTCA.bind(void 0, yUnitVector),\n /* 0x05 */\n SFVTCA.bind(void 0, xUnitVector),\n /* 0x06 */\n SPVTL.bind(void 0, 0),\n /* 0x07 */\n SPVTL.bind(void 0, 1),\n /* 0x08 */\n SFVTL.bind(void 0, 0),\n /* 0x09 */\n SFVTL.bind(void 0, 1),\n /* 0x0A */\n SPVFS,\n /* 0x0B */\n SFVFS,\n /* 0x0C */\n GPV,\n /* 0x0D */\n GFV,\n /* 0x0E */\n SFVTPV,\n /* 0x0F */\n ISECT,\n /* 0x10 */\n SRP0,\n /* 0x11 */\n SRP1,\n /* 0x12 */\n SRP2,\n /* 0x13 */\n SZP0,\n /* 0x14 */\n SZP1,\n /* 0x15 */\n SZP2,\n /* 0x16 */\n SZPS,\n /* 0x17 */\n SLOOP,\n /* 0x18 */\n RTG,\n /* 0x19 */\n RTHG,\n /* 0x1A */\n SMD,\n /* 0x1B */\n ELSE,\n /* 0x1C */\n JMPR,\n /* 0x1D */\n SCVTCI,\n /* 0x1E */\n void 0,\n // TODO SSWCI\n /* 0x1F */\n void 0,\n // TODO SSW\n /* 0x20 */\n DUP,\n /* 0x21 */\n POP,\n /* 0x22 */\n CLEAR,\n /* 0x23 */\n SWAP,\n /* 0x24 */\n DEPTH,\n /* 0x25 */\n CINDEX,\n /* 0x26 */\n MINDEX,\n /* 0x27 */\n void 0,\n // TODO ALIGNPTS\n /* 0x28 */\n void 0,\n /* 0x29 */\n void 0,\n // TODO UTP\n /* 0x2A */\n LOOPCALL,\n /* 0x2B */\n CALL,\n /* 0x2C */\n FDEF,\n /* 0x2D */\n void 0,\n // ENDF (eaten by FDEF)\n /* 0x2E */\n MDAP.bind(void 0, 0),\n /* 0x2F */\n MDAP.bind(void 0, 1),\n /* 0x30 */\n IUP.bind(void 0, yUnitVector),\n /* 0x31 */\n IUP.bind(void 0, xUnitVector),\n /* 0x32 */\n SHP.bind(void 0, 0),\n /* 0x33 */\n SHP.bind(void 0, 1),\n /* 0x34 */\n SHC.bind(void 0, 0),\n /* 0x35 */\n SHC.bind(void 0, 1),\n /* 0x36 */\n SHZ.bind(void 0, 0),\n /* 0x37 */\n SHZ.bind(void 0, 1),\n /* 0x38 */\n SHPIX,\n /* 0x39 */\n IP,\n /* 0x3A */\n MSIRP.bind(void 0, 0),\n /* 0x3B */\n MSIRP.bind(void 0, 1),\n /* 0x3C */\n ALIGNRP,\n /* 0x3D */\n RTDG,\n /* 0x3E */\n MIAP.bind(void 0, 0),\n /* 0x3F */\n MIAP.bind(void 0, 1),\n /* 0x40 */\n NPUSHB,\n /* 0x41 */\n NPUSHW,\n /* 0x42 */\n WS,\n /* 0x43 */\n RS,\n /* 0x44 */\n WCVTP,\n /* 0x45 */\n RCVT,\n /* 0x46 */\n GC.bind(void 0, 0),\n /* 0x47 */\n GC.bind(void 0, 1),\n /* 0x48 */\n void 0,\n // TODO SCFS\n /* 0x49 */\n MD.bind(void 0, 0),\n /* 0x4A */\n MD.bind(void 0, 1),\n /* 0x4B */\n MPPEM,\n /* 0x4C */\n void 0,\n // TODO MPS\n /* 0x4D */\n FLIPON,\n /* 0x4E */\n void 0,\n // TODO FLIPOFF\n /* 0x4F */\n void 0,\n // TODO DEBUG\n /* 0x50 */\n LT,\n /* 0x51 */\n LTEQ,\n /* 0x52 */\n GT,\n /* 0x53 */\n GTEQ,\n /* 0x54 */\n EQ,\n /* 0x55 */\n NEQ,\n /* 0x56 */\n ODD,\n /* 0x57 */\n EVEN,\n /* 0x58 */\n IF,\n /* 0x59 */\n EIF,\n /* 0x5A */\n AND,\n /* 0x5B */\n OR,\n /* 0x5C */\n NOT,\n /* 0x5D */\n DELTAP123.bind(void 0, 1),\n /* 0x5E */\n SDB,\n /* 0x5F */\n SDS,\n /* 0x60 */\n ADD,\n /* 0x61 */\n SUB,\n /* 0x62 */\n DIV,\n /* 0x63 */\n MUL,\n /* 0x64 */\n ABS,\n /* 0x65 */\n NEG,\n /* 0x66 */\n FLOOR,\n /* 0x67 */\n CEILING,\n /* 0x68 */\n ROUND.bind(void 0, 0),\n /* 0x69 */\n ROUND.bind(void 0, 1),\n /* 0x6A */\n ROUND.bind(void 0, 2),\n /* 0x6B */\n ROUND.bind(void 0, 3),\n /* 0x6C */\n void 0,\n // TODO NROUND[ab]\n /* 0x6D */\n void 0,\n // TODO NROUND[ab]\n /* 0x6E */\n void 0,\n // TODO NROUND[ab]\n /* 0x6F */\n void 0,\n // TODO NROUND[ab]\n /* 0x70 */\n WCVTF,\n /* 0x71 */\n DELTAP123.bind(void 0, 2),\n /* 0x72 */\n DELTAP123.bind(void 0, 3),\n /* 0x73 */\n DELTAC123.bind(void 0, 1),\n /* 0x74 */\n DELTAC123.bind(void 0, 2),\n /* 0x75 */\n DELTAC123.bind(void 0, 3),\n /* 0x76 */\n SROUND,\n /* 0x77 */\n S45ROUND,\n /* 0x78 */\n void 0,\n // TODO JROT[]\n /* 0x79 */\n void 0,\n // TODO JROF[]\n /* 0x7A */\n ROFF,\n /* 0x7B */\n void 0,\n /* 0x7C */\n RUTG,\n /* 0x7D */\n RDTG,\n /* 0x7E */\n POP,\n // actually SANGW, supposed to do only a pop though\n /* 0x7F */\n POP,\n // actually AA, supposed to do only a pop though\n /* 0x80 */\n void 0,\n // TODO FLIPPT\n /* 0x81 */\n void 0,\n // TODO FLIPRGON\n /* 0x82 */\n void 0,\n // TODO FLIPRGOFF\n /* 0x83 */\n void 0,\n /* 0x84 */\n void 0,\n /* 0x85 */\n SCANCTRL,\n /* 0x86 */\n SDPVTL.bind(void 0, 0),\n /* 0x87 */\n SDPVTL.bind(void 0, 1),\n /* 0x88 */\n GETINFO,\n /* 0x89 */\n void 0,\n // TODO IDEF\n /* 0x8A */\n ROLL,\n /* 0x8B */\n MAX,\n /* 0x8C */\n MIN,\n /* 0x8D */\n SCANTYPE,\n /* 0x8E */\n INSTCTRL,\n /* 0x8F */\n void 0,\n /* 0x90 */\n void 0,\n /* 0x91 */\n void 0,\n /* 0x92 */\n void 0,\n /* 0x93 */\n void 0,\n /* 0x94 */\n void 0,\n /* 0x95 */\n void 0,\n /* 0x96 */\n void 0,\n /* 0x97 */\n void 0,\n /* 0x98 */\n void 0,\n /* 0x99 */\n void 0,\n /* 0x9A */\n void 0,\n /* 0x9B */\n void 0,\n /* 0x9C */\n void 0,\n /* 0x9D */\n void 0,\n /* 0x9E */\n void 0,\n /* 0x9F */\n void 0,\n /* 0xA0 */\n void 0,\n /* 0xA1 */\n void 0,\n /* 0xA2 */\n void 0,\n /* 0xA3 */\n void 0,\n /* 0xA4 */\n void 0,\n /* 0xA5 */\n void 0,\n /* 0xA6 */\n void 0,\n /* 0xA7 */\n void 0,\n /* 0xA8 */\n void 0,\n /* 0xA9 */\n void 0,\n /* 0xAA */\n void 0,\n /* 0xAB */\n void 0,\n /* 0xAC */\n void 0,\n /* 0xAD */\n void 0,\n /* 0xAE */\n void 0,\n /* 0xAF */\n void 0,\n /* 0xB0 */\n PUSHB.bind(void 0, 1),\n /* 0xB1 */\n PUSHB.bind(void 0, 2),\n /* 0xB2 */\n PUSHB.bind(void 0, 3),\n /* 0xB3 */\n PUSHB.bind(void 0, 4),\n /* 0xB4 */\n PUSHB.bind(void 0, 5),\n /* 0xB5 */\n PUSHB.bind(void 0, 6),\n /* 0xB6 */\n PUSHB.bind(void 0, 7),\n /* 0xB7 */\n PUSHB.bind(void 0, 8),\n /* 0xB8 */\n PUSHW.bind(void 0, 1),\n /* 0xB9 */\n PUSHW.bind(void 0, 2),\n /* 0xBA */\n PUSHW.bind(void 0, 3),\n /* 0xBB */\n PUSHW.bind(void 0, 4),\n /* 0xBC */\n PUSHW.bind(void 0, 5),\n /* 0xBD */\n PUSHW.bind(void 0, 6),\n /* 0xBE */\n PUSHW.bind(void 0, 7),\n /* 0xBF */\n PUSHW.bind(void 0, 8),\n /* 0xC0 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0),\n /* 0xC1 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1),\n /* 0xC2 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2),\n /* 0xC3 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3),\n /* 0xC4 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0),\n /* 0xC5 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1),\n /* 0xC6 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2),\n /* 0xC7 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3),\n /* 0xC8 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0),\n /* 0xC9 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1),\n /* 0xCA */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2),\n /* 0xCB */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3),\n /* 0xCC */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0),\n /* 0xCD */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1),\n /* 0xCE */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2),\n /* 0xCF */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3),\n /* 0xD0 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0),\n /* 0xD1 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1),\n /* 0xD2 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2),\n /* 0xD3 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3),\n /* 0xD4 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0),\n /* 0xD5 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1),\n /* 0xD6 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2),\n /* 0xD7 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3),\n /* 0xD8 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0),\n /* 0xD9 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1),\n /* 0xDA */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2),\n /* 0xDB */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3),\n /* 0xDC */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0),\n /* 0xDD */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1),\n /* 0xDE */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2),\n /* 0xDF */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3),\n /* 0xE0 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0),\n /* 0xE1 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1),\n /* 0xE2 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2),\n /* 0xE3 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3),\n /* 0xE4 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0),\n /* 0xE5 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1),\n /* 0xE6 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2),\n /* 0xE7 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3),\n /* 0xE8 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0),\n /* 0xE9 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1),\n /* 0xEA */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2),\n /* 0xEB */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3),\n /* 0xEC */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0),\n /* 0xED */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1),\n /* 0xEE */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2),\n /* 0xEF */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3),\n /* 0xF0 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0),\n /* 0xF1 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1),\n /* 0xF2 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2),\n /* 0xF3 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3),\n /* 0xF4 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0),\n /* 0xF5 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1),\n /* 0xF6 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2),\n /* 0xF7 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3),\n /* 0xF8 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0),\n /* 0xF9 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1),\n /* 0xFA */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2),\n /* 0xFB */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3),\n /* 0xFC */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0),\n /* 0xFD */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1),\n /* 0xFE */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2),\n /* 0xFF */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3)\n];\nvar hintingtt_default = Hinting;\n\n// src/tokenizer.mjs\nfunction Token(char) {\n this.char = char;\n this.state = {};\n this.activeState = null;\n}\nfunction ContextRange(startIndex, endOffset, contextName) {\n this.contextName = contextName;\n this.startIndex = startIndex;\n this.endOffset = endOffset;\n}\nfunction ContextChecker(contextName, checkStart, checkEnd) {\n this.contextName = contextName;\n this.openRange = null;\n this.ranges = [];\n this.checkStart = checkStart;\n this.checkEnd = checkEnd;\n}\nfunction ContextParams(context, currentIndex) {\n this.context = context;\n this.index = currentIndex;\n this.length = context.length;\n this.current = context[currentIndex];\n this.backtrack = context.slice(0, currentIndex);\n this.lookahead = context.slice(currentIndex + 1);\n}\nfunction Event(eventId) {\n this.eventId = eventId;\n this.subscribers = [];\n}\nfunction initializeCoreEvents(events) {\n const coreEvents = [\n \"start\",\n \"end\",\n \"next\",\n \"newToken\",\n \"contextStart\",\n \"contextEnd\",\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\",\n \"updateContextsRanges\"\n ];\n for (let i = 0; i < coreEvents.length; i++) {\n const eventId = coreEvents[i];\n Object.defineProperty(this.events, eventId, {\n value: new Event(eventId)\n });\n }\n if (events) {\n for (let i = 0; i < coreEvents.length; i++) {\n const eventId = coreEvents[i];\n const event = events[eventId];\n if (typeof event === \"function\") {\n this.events[eventId].subscribe(event);\n }\n }\n }\n const requiresContextUpdate = [\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\"\n ];\n for (let i = 0; i < requiresContextUpdate.length; i++) {\n const eventId = requiresContextUpdate[i];\n this.events[eventId].subscribe(\n this.updateContextsRanges\n );\n }\n}\nfunction Tokenizer(events) {\n this.tokens = [];\n this.registeredContexts = {};\n this.contextCheckers = [];\n this.events = {};\n this.registeredModifiers = [];\n initializeCoreEvents.call(this, events);\n}\nToken.prototype.setState = function(key, value) {\n this.state[key] = value;\n this.activeState = { key, value: this.state[key] };\n return this.activeState;\n};\nToken.prototype.getState = function(stateId) {\n return this.state[stateId] || null;\n};\nTokenizer.prototype.inboundIndex = function(index) {\n return index >= 0 && index < this.tokens.length;\n};\nTokenizer.prototype.composeRUD = function(RUDs) {\n const silent = true;\n const state = RUDs.map((RUD) => this[RUD[0]].apply(this, RUD.slice(1).concat(silent)));\n const hasFAILObject = (obj) => typeof obj === \"object\" && Object.prototype.hasOwnProperty.call(obj, \"FAIL\");\n if (state.every(hasFAILObject)) {\n return {\n FAIL: \"composeRUD: one or more operations hasn't completed successfully\",\n report: state.filter(hasFAILObject)\n };\n }\n this.dispatch(\"composeRUD\", [state.filter((op) => !hasFAILObject(op))]);\n};\nTokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) {\n offset = offset !== null ? offset : this.tokens.length;\n const isTokenType = tokens.every((token) => token instanceof Token);\n if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) {\n const replaced = this.tokens.splice.apply(\n this.tokens,\n [startIndex, offset].concat(tokens)\n );\n if (!silent) this.dispatch(\"replaceToken\", [startIndex, offset, tokens]);\n return [replaced, tokens];\n } else {\n return { FAIL: \"replaceRange: invalid tokens or startIndex.\" };\n }\n};\nTokenizer.prototype.replaceToken = function(index, token, silent) {\n if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) {\n const replaced = this.tokens.splice(index, 1, token);\n if (!silent) this.dispatch(\"replaceToken\", [index, token]);\n return [replaced[0], token];\n } else {\n return { FAIL: \"replaceToken: invalid token or index.\" };\n }\n};\nTokenizer.prototype.removeRange = function(startIndex, offset, silent) {\n offset = !isNaN(offset) ? offset : this.tokens.length;\n const tokens = this.tokens.splice(startIndex, offset);\n if (!silent) this.dispatch(\"removeRange\", [tokens, startIndex, offset]);\n return tokens;\n};\nTokenizer.prototype.removeToken = function(index, silent) {\n if (!isNaN(index) && this.inboundIndex(index)) {\n const token = this.tokens.splice(index, 1);\n if (!silent) this.dispatch(\"removeToken\", [token, index]);\n return token;\n } else {\n return { FAIL: \"removeToken: invalid token index.\" };\n }\n};\nTokenizer.prototype.insertToken = function(tokens, index, silent) {\n const tokenType = tokens.every(\n (token) => token instanceof Token\n );\n if (tokenType) {\n this.tokens.splice.apply(\n this.tokens,\n [index, 0].concat(tokens)\n );\n if (!silent) this.dispatch(\"insertToken\", [tokens, index]);\n return tokens;\n } else {\n return { FAIL: \"insertToken: invalid token(s).\" };\n }\n};\nTokenizer.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.events.newToken.subscribe(function(token, contextParams) {\n const conditionParams = [token, contextParams];\n const canApplyModifier = condition === null || condition.apply(this, conditionParams) === true;\n const modifierParams = [token, contextParams];\n if (canApplyModifier) {\n let newStateValue = modifier.apply(this, modifierParams);\n token.setState(modifierId, newStateValue);\n }\n });\n this.registeredModifiers.push(modifierId);\n};\nEvent.prototype.subscribe = function(eventHandler) {\n if (typeof eventHandler === \"function\") {\n return this.subscribers.push(eventHandler) - 1;\n } else {\n return { FAIL: `invalid '${this.eventId}' event handler` };\n }\n};\nEvent.prototype.unsubscribe = function(subsId) {\n this.subscribers.splice(subsId, 1);\n};\nContextParams.prototype.setCurrentIndex = function(index) {\n this.index = index;\n this.current = this.context[index];\n this.backtrack = this.context.slice(0, index);\n this.lookahead = this.context.slice(index + 1);\n};\nContextParams.prototype.get = function(offset) {\n switch (true) {\n case offset === 0:\n return this.current;\n case (offset < 0 && Math.abs(offset) <= this.backtrack.length):\n return this.backtrack.slice(offset)[0];\n case (offset > 0 && offset <= this.lookahead.length):\n return this.lookahead[offset - 1];\n default:\n return null;\n }\n};\nTokenizer.prototype.rangeToText = function(range) {\n if (range instanceof ContextRange) {\n return this.getRangeTokens(range).map((token) => token.char).join(\"\");\n }\n};\nTokenizer.prototype.getText = function() {\n return this.tokens.map((token) => token.char).join(\"\");\n};\nTokenizer.prototype.getContext = function(contextName) {\n let context = this.registeredContexts[contextName];\n return context ? context : null;\n};\nTokenizer.prototype.on = function(eventName, eventHandler) {\n const event = this.events[eventName];\n if (event) {\n return event.subscribe(eventHandler);\n } else {\n return null;\n }\n};\nTokenizer.prototype.dispatch = function(eventName, args) {\n const event = this.events[eventName];\n if (event instanceof Event) {\n for (let i = 0; i < event.subscribers.length; i++) {\n const subscriber = event.subscribers[i];\n subscriber.apply(this, args || []);\n }\n }\n};\nTokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) {\n if (this.getContext(contextName)) return {\n FAIL: `context name '${contextName}' is already registered.`\n };\n if (typeof contextStartCheck !== \"function\") return {\n FAIL: \"missing context start check.\"\n };\n if (typeof contextEndCheck !== \"function\") return {\n FAIL: \"missing context end check.\"\n };\n const contextCheckers = new ContextChecker(\n contextName,\n contextStartCheck,\n contextEndCheck\n );\n this.registeredContexts[contextName] = contextCheckers;\n this.contextCheckers.push(contextCheckers);\n return contextCheckers;\n};\nTokenizer.prototype.getRangeTokens = function(range) {\n const endIndex = range.startIndex + range.endOffset;\n return [].concat(\n this.tokens.slice(range.startIndex, endIndex)\n );\n};\nTokenizer.prototype.getContextRanges = function(contextName) {\n const context = this.getContext(contextName);\n if (context) {\n return context.ranges;\n } else {\n return { FAIL: `context checker '${contextName}' is not registered.` };\n }\n};\nTokenizer.prototype.resetContextsRanges = function() {\n const registeredContexts = this.registeredContexts;\n for (const contextName in registeredContexts) {\n if (Object.prototype.hasOwnProperty.call(registeredContexts, contextName)) {\n const context = registeredContexts[contextName];\n context.ranges = [];\n }\n }\n};\nTokenizer.prototype.updateContextsRanges = function() {\n this.resetContextsRanges();\n const chars = this.tokens.map((token) => token.char);\n for (let i = 0; i < chars.length; i++) {\n const contextParams = new ContextParams(chars, i);\n this.runContextCheck(contextParams);\n }\n this.dispatch(\"updateContextsRanges\", [this.registeredContexts]);\n};\nTokenizer.prototype.setEndOffset = function(offset, contextName) {\n const startIndex = this.getContext(contextName).openRange.startIndex;\n let range = new ContextRange(startIndex, offset, contextName);\n const ranges = this.getContext(contextName).ranges;\n range.rangeId = `${contextName}.${ranges.length}`;\n ranges.push(range);\n this.getContext(contextName).openRange = null;\n return range;\n};\nTokenizer.prototype.runContextCheck = function(contextParams) {\n const index = contextParams.index;\n for (let i = 0; i < this.contextCheckers.length; i++) {\n const contextChecker = this.contextCheckers[i];\n let contextName = contextChecker.contextName;\n let openRange = this.getContext(contextName).openRange;\n if (!openRange && contextChecker.checkStart(contextParams)) {\n openRange = new ContextRange(index, null, contextName);\n this.getContext(contextName).openRange = openRange;\n this.dispatch(\"contextStart\", [contextName, index]);\n }\n if (!!openRange && contextChecker.checkEnd(contextParams)) {\n const offset = index - openRange.startIndex + 1;\n const range = this.setEndOffset(offset, contextName);\n this.dispatch(\"contextEnd\", [contextName, range]);\n }\n }\n};\nTokenizer.prototype.tokenize = function(text) {\n this.tokens = [];\n this.resetContextsRanges();\n let chars = Array.from(text);\n this.dispatch(\"start\");\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const contextParams = new ContextParams(chars, i);\n this.dispatch(\"next\", [contextParams]);\n this.runContextCheck(contextParams);\n let token = new Token(char);\n this.tokens.push(token);\n this.dispatch(\"newToken\", [token, contextParams]);\n }\n this.dispatch(\"end\", [this.tokens]);\n return this.tokens;\n};\nvar tokenizer_default = Tokenizer;\n\n// src/char.mjs\nfunction isArabicChar(c) {\n return /[\\u0600-\\u065F\\u066A-\\u06D2\\u06FA-\\u06FF]/.test(c);\n}\nfunction isIsolatedArabicChar(char) {\n return /[\\u0630\\u0690\\u0621\\u0631\\u0661\\u0671\\u0622\\u0632\\u0672\\u0692\\u06C2\\u0623\\u0673\\u0693\\u06C3\\u0624\\u0694\\u06C4\\u0625\\u0675\\u0695\\u06C5\\u06E5\\u0676\\u0696\\u06C6\\u0627\\u0677\\u0697\\u06C7\\u0648\\u0688\\u0698\\u06C8\\u0689\\u0699\\u06C9\\u068A\\u06CA\\u066B\\u068B\\u06CB\\u068C\\u068D\\u06CD\\u06FD\\u068E\\u06EE\\u06FE\\u062F\\u068F\\u06CF\\u06EF]/.test(char);\n}\nfunction isTashkeelArabicChar(char) {\n return /[\\u0600-\\u0605\\u060C-\\u060E\\u0610-\\u061B\\u061E\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED]/.test(char);\n}\nfunction isThaiChar(c) {\n return /[\\u0E00-\\u0E7F]/.test(c);\n}\nfunction isLatinChar(c) {\n return /[A-z]/.test(c);\n}\nfunction isWhiteSpace(c) {\n return /\\s/.test(c);\n}\n\n// src/features/featureQuery.mjs\nfunction FeatureQuery(font) {\n this.font = font;\n this.features = {};\n}\nfunction SubstitutionAction(action) {\n this.id = action.id;\n this.tag = action.tag;\n this.substitution = action.substitution;\n}\nfunction lookupCoverage(glyphIndex, coverage) {\n if (!glyphIndex) return -1;\n switch (coverage.format) {\n case 1:\n return coverage.glyphs.indexOf(glyphIndex);\n case 2: {\n let ranges = coverage.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\n let offset = glyphIndex - range.start;\n return range.index + offset;\n }\n }\n break;\n }\n default:\n return -1;\n }\n return -1;\n}\nfunction singleSubstitutionFormat1(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return glyphIndex + subtable.deltaGlyphId;\n}\nfunction singleSubstitutionFormat2(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return subtable.substitute[substituteIndex];\n}\nfunction lookupCoverageList(coverageList, contextParams) {\n let lookupList = [];\n for (let i = 0; i < coverageList.length; i++) {\n const coverage = coverageList[i];\n let glyphIndex = contextParams.current;\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n const lookupIndex = lookupCoverage(glyphIndex, coverage);\n if (lookupIndex !== -1) {\n lookupList.push(lookupIndex);\n }\n }\n if (lookupList.length !== coverageList.length) return -1;\n return lookupList;\n}\nfunction chainingSubstitutionFormat3(contextParams, subtable) {\n const lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length;\n if (contextParams.context.length < lookupsCount) return [];\n let inputLookups = lookupCoverageList(\n subtable.inputCoverage,\n contextParams\n );\n if (inputLookups === -1) return [];\n const lookaheadOffset = subtable.inputCoverage.length - 1;\n if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) return [];\n let lookaheadContext = contextParams.lookahead.slice(lookaheadOffset);\n while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) {\n lookaheadContext.shift();\n }\n const lookaheadParams = new ContextParams(lookaheadContext, 0);\n let lookaheadLookups = lookupCoverageList(\n subtable.lookaheadCoverage,\n lookaheadParams\n );\n let backtrackContext = [].concat(contextParams.backtrack);\n backtrackContext.reverse();\n while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) {\n backtrackContext.shift();\n }\n if (backtrackContext.length < subtable.backtrackCoverage.length) return [];\n const backtrackParams = new ContextParams(backtrackContext, 0);\n let backtrackLookups = lookupCoverageList(\n subtable.backtrackCoverage,\n backtrackParams\n );\n const contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length;\n let substitutions = [];\n if (contextRulesMatch) {\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const lookupRecord = subtable.lookupRecords[i];\n const lookupListIndex = lookupRecord.lookupListIndex;\n const lookupTable = this.getLookupByIndex(lookupListIndex);\n for (let s = 0; s < lookupTable.subtables.length; s++) {\n let subtable2 = lookupTable.subtables[s];\n let lookup;\n let substitutionType = this.getSubstitutionType(lookupTable, subtable2);\n if (substitutionType === \"71\") {\n substitutionType = this.getSubstitutionType(subtable2, subtable2.extension);\n lookup = this.getLookupMethod(subtable2, subtable2.extension);\n subtable2 = subtable2.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable2);\n }\n if (substitutionType === \"12\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else if (substitutionType === \"21\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else {\n throw new Error(`Substitution type ${substitutionType} is not supported in chaining substitution`);\n }\n }\n }\n }\n return substitutions;\n}\nfunction ligatureSubstitutionFormat1(contextParams, subtable) {\n let glyphIndex = contextParams.current;\n let ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (ligSetIndex === -1) return null;\n let ligature;\n let ligatureSet = subtable.ligatureSets[ligSetIndex];\n for (let s = 0; s < ligatureSet.length; s++) {\n ligature = ligatureSet[s];\n for (let l = 0; l < ligature.components.length; l++) {\n const lookaheadItem = contextParams.lookahead[l];\n const component = ligature.components[l];\n if (lookaheadItem !== component) break;\n if (l === ligature.components.length - 1) return ligature;\n }\n }\n return null;\n}\nfunction contextSubstitutionFormat1(contextParams, subtable) {\n let glyphId = contextParams.current;\n let ligSetIndex = lookupCoverage(glyphId, subtable.coverage);\n if (ligSetIndex === -1)\n return null;\n for (const ruleSet of subtable.ruleSets) {\n for (const rule of ruleSet) {\n let matched = true;\n for (let i = 0; i < rule.input.length; i++) {\n if (contextParams.lookahead[i] !== rule.input[i]) {\n matched = false;\n break;\n }\n }\n if (matched) {\n let substitutions = [];\n substitutions.push(glyphId);\n for (let i = 0; i < rule.input.length; i++) {\n substitutions.push(rule.input[i]);\n }\n const parser = (substitutions2, lookupRecord) => {\n const { lookupListIndex, sequenceIndex } = lookupRecord;\n const { subtables } = this.getLookupByIndex(lookupListIndex);\n for (const subtable2 of subtables) {\n let ligSetIndex2 = lookupCoverage(substitutions2[sequenceIndex], subtable2.coverage);\n if (ligSetIndex2 !== -1) {\n substitutions2[sequenceIndex] = subtable2.deltaGlyphId;\n }\n }\n };\n for (let i = 0; i < rule.lookupRecords.length; i++) {\n const lookupRecord = rule.lookupRecords[i];\n parser(substitutions, lookupRecord);\n }\n return substitutions;\n }\n }\n }\n return null;\n}\nfunction contextSubstitutionFormat3(contextParams, subtable) {\n if (contextParams.context.length < subtable.coverages.length) {\n return [];\n }\n for (let i = 0; i < subtable.coverages.length; i++) {\n let glyphIndex = contextParams.get(i);\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n if (lookupCoverage(glyphIndex, subtable.coverages[i]) === -1) {\n return [];\n }\n }\n let substitutions = [];\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const lookupRecord = subtable.lookupRecords[i];\n const lookupListIndex = lookupRecord.lookupListIndex;\n const lookupTable = this.getLookupByIndex(lookupListIndex);\n for (let s = 0; s < lookupTable.subtables.length; s++) {\n let subtable2 = lookupTable.subtables[s];\n let lookup;\n let substitutionType = this.getSubstitutionType(lookupTable, subtable2);\n if (substitutionType === \"71\") {\n substitutionType = this.getSubstitutionType(subtable2, subtable2.extension);\n lookup = this.getLookupMethod(subtable2, subtable2.extension);\n subtable2 = subtable2.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable2);\n }\n if (substitutionType === \"12\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else if (substitutionType === \"21\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n }\n }\n }\n return substitutions;\n}\nfunction decompositionSubstitutionFormat1(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return subtable.sequences[substituteIndex];\n}\nFeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() {\n const scripts = this.font.tables.gsub.scripts;\n for (let s = 0; s < scripts.length; s++) {\n const script = scripts[s];\n if (script.tag === \"DFLT\") return script.script.defaultLangSys.featureIndexes;\n }\n return [];\n};\nFeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) {\n const tables = this.font.tables;\n if (!tables.gsub) return [];\n if (!scriptTag) return this.getDefaultScriptFeaturesIndexes();\n const scripts = this.font.tables.gsub.scripts;\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.tag === scriptTag && script.script.defaultLangSys) {\n return script.script.defaultLangSys.featureIndexes;\n } else {\n let langSysRecords = script.langSysRecords;\n if (langSysRecords) {\n for (let j = 0; j < langSysRecords.length; j++) {\n const langSysRecord = langSysRecords[j];\n if (langSysRecord.tag === scriptTag) {\n let langSys = langSysRecord.langSys;\n return langSys.featureIndexes;\n }\n }\n }\n }\n }\n return this.getDefaultScriptFeaturesIndexes();\n};\nFeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) {\n let tags = {};\n for (let i = 0; i < features.length; i++) {\n const tag = features[i].tag;\n const feature = features[i].feature;\n tags[tag] = feature;\n }\n this.features[scriptTag].tags = tags;\n};\nFeatureQuery.prototype.getScriptFeatures = function(scriptTag) {\n let features = this.features[scriptTag];\n if (Object.prototype.hasOwnProperty.call(this.features, scriptTag)) return features;\n const featuresIndexes = this.getScriptFeaturesIndexes(scriptTag);\n if (!featuresIndexes) return null;\n const gsub = this.font.tables.gsub;\n features = featuresIndexes.map((index) => gsub.features[index]);\n this.features[scriptTag] = features;\n this.mapTagsToFeatures(features, scriptTag);\n return features;\n};\nFeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) {\n const lookupType = lookupTable.lookupType.toString();\n const substFormat = subtable.substFormat.toString();\n return lookupType + substFormat;\n};\nFeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) {\n let substitutionType = this.getSubstitutionType(lookupTable, subtable);\n switch (substitutionType) {\n case \"11\":\n return (glyphIndex) => singleSubstitutionFormat1.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"12\":\n return (glyphIndex) => singleSubstitutionFormat2.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"63\":\n return (contextParams) => chainingSubstitutionFormat3.apply(\n this,\n [contextParams, subtable]\n );\n case \"41\":\n return (contextParams) => ligatureSubstitutionFormat1.apply(\n this,\n [contextParams, subtable]\n );\n case \"21\":\n return (glyphIndex) => decompositionSubstitutionFormat1.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"51\":\n return (contextParams) => contextSubstitutionFormat1.apply(\n this,\n [contextParams, subtable]\n );\n case \"53\":\n return (contextParams) => contextSubstitutionFormat3.apply(\n this,\n [contextParams, subtable]\n );\n default:\n throw new Error(\n `substitutionType : ${substitutionType} lookupType: ${lookupTable.lookupType} - substFormat: ${subtable.substFormat} is not yet supported`\n );\n }\n};\nFeatureQuery.prototype.lookupFeature = function(query) {\n let contextParams = query.contextParams;\n let currentIndex = contextParams.index;\n const feature = this.getFeature({\n tag: query.tag,\n script: query.script\n });\n if (!feature) return new Error(\n `font '${(this.font.names.unicode || this.font.names.windows || this.font.names.macintosh).fullName.en}' doesn't support feature '${query.tag}' for script '${query.script}'.`\n );\n const lookups = this.getFeatureLookups(feature);\n const substitutions = [].concat(contextParams.context);\n for (let l = 0; l < lookups.length; l++) {\n const lookupTable = lookups[l];\n const subtables = this.getLookupSubtables(lookupTable);\n for (let s = 0; s < subtables.length; s++) {\n let subtable = subtables[s];\n let substType = this.getSubstitutionType(lookupTable, subtable);\n let lookup;\n if (substType === \"71\") {\n substType = this.getSubstitutionType(subtable, subtable.extension);\n lookup = this.getLookupMethod(subtable, subtable.extension);\n subtable = subtable.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable);\n }\n let substitution;\n switch (substType) {\n case \"11\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 11,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"12\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 12,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"63\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 63,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"41\":\n substitution = lookup(contextParams);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 41,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"21\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 21,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"51\":\n case \"53\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: parseInt(substType),\n tag: query.tag,\n substitution\n }));\n }\n break;\n }\n contextParams = new ContextParams(substitutions, currentIndex);\n if (Array.isArray(substitution) && !substitution.length) continue;\n substitution = null;\n }\n }\n return substitutions.length ? substitutions : null;\n};\nFeatureQuery.prototype.supports = function(query) {\n if (!query.script) return false;\n this.getScriptFeatures(query.script);\n const supportedScript = Object.prototype.hasOwnProperty.call(this.features, query.script);\n if (!query.tag) return supportedScript;\n const supportedFeature = this.features[query.script].some((feature) => feature.tag === query.tag);\n return supportedScript && supportedFeature;\n};\nFeatureQuery.prototype.getLookupSubtables = function(lookupTable) {\n return lookupTable.subtables || null;\n};\nFeatureQuery.prototype.getLookupByIndex = function(index) {\n const lookups = this.font.tables.gsub.lookups;\n return lookups[index] || null;\n};\nFeatureQuery.prototype.getFeatureLookups = function(feature) {\n return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this));\n};\nFeatureQuery.prototype.getFeature = function getFeature(query) {\n if (!this.font) return { FAIL: \"No font was found\" };\n if (!Object.prototype.hasOwnProperty.call(this.features, query.script)) {\n this.getScriptFeatures(query.script);\n }\n const scriptFeatures = this.features[query.script];\n if (!scriptFeatures) return { FAIL: `No feature for script ${query.script}` };\n if (!scriptFeatures.tags[query.tag]) return null;\n return this.features[query.script].tags[query.tag];\n};\nvar featureQuery_default = FeatureQuery;\n\n// src/features/arab/contextCheck/arabicWord.mjs\nfunction arabicWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? arabic first char\n prevChar === null && isArabicChar(char) || // ? arabic char preceded with a non arabic char\n !isArabicChar(prevChar) && isArabicChar(char)\n );\n}\nfunction arabicWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last arabic char\n nextChar === null || // ? next char is not arabic\n !isArabicChar(nextChar)\n );\n}\nvar arabicWord_default = {\n startCheck: arabicWordStartCheck,\n endCheck: arabicWordEndCheck\n};\n\n// src/features/arab/contextCheck/arabicSentence.mjs\nfunction arabicSentenceStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? an arabic char preceded with a non arabic char\n (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar)\n );\n}\nfunction arabicSentenceEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n switch (true) {\n case nextChar === null:\n return true;\n case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)): {\n const nextIsWhitespace = isWhiteSpace(nextChar);\n if (!nextIsWhitespace) return true;\n if (nextIsWhitespace) {\n let arabicCharAhead = false;\n arabicCharAhead = contextParams.lookahead.some(\n (c) => isArabicChar(c) || isTashkeelArabicChar(c)\n );\n if (!arabicCharAhead) return true;\n }\n break;\n }\n default:\n return false;\n }\n}\nvar arabicSentence_default = {\n startCheck: arabicSentenceStartCheck,\n endCheck: arabicSentenceEndCheck\n};\n\n// src/features/applySubstitution.mjs\nfunction singleSubstitutionFormat12(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n}\nfunction singleSubstitutionFormat22(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n}\nfunction chainingSubstitutionFormat32(action, tokens, index) {\n for (let i = 0; i < action.substitution.length; i++) {\n const subst = action.substitution[i];\n const token = tokens[index + i];\n if (Array.isArray(subst)) {\n if (subst.length) {\n token.setState(action.tag, subst[0]);\n } else {\n token.setState(\"deleted\", true);\n }\n continue;\n }\n token.setState(action.tag, subst);\n }\n}\nfunction ligatureSubstitutionFormat12(action, tokens, index) {\n let token = tokens[index];\n token.setState(action.tag, action.substitution.ligGlyph);\n const compsCount = action.substitution.components.length;\n for (let i = 0; i < compsCount; i++) {\n token = tokens[index + i + 1];\n token.setState(\"deleted\", true);\n }\n}\nvar SUBSTITUTIONS = {\n 11: singleSubstitutionFormat12,\n 12: singleSubstitutionFormat22,\n 63: chainingSubstitutionFormat32,\n 41: ligatureSubstitutionFormat12,\n 51: chainingSubstitutionFormat32,\n 53: chainingSubstitutionFormat32\n};\nfunction applySubstitution(action, tokens, index) {\n if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {\n SUBSTITUTIONS[action.id](action, tokens, index);\n }\n}\nvar applySubstitution_default = applySubstitution;\n\n// src/features/arab/arabicPresentationForms.mjs\nfunction willConnectPrev(charContextParams) {\n let backtrack = [].concat(charContextParams.backtrack);\n for (let i = backtrack.length - 1; i >= 0; i--) {\n const prevChar = backtrack[i];\n const isolated = isIsolatedArabicChar(prevChar);\n const tashkeel = isTashkeelArabicChar(prevChar);\n if (!isolated && !tashkeel) return true;\n if (isolated) return false;\n }\n return false;\n}\nfunction willConnectNext(charContextParams) {\n if (isIsolatedArabicChar(charContextParams.current)) return false;\n for (let i = 0; i < charContextParams.lookahead.length; i++) {\n const nextChar = charContextParams.lookahead[i];\n const tashkeel = isTashkeelArabicChar(nextChar);\n if (!tashkeel) return true;\n }\n return false;\n}\nfunction arabicPresentationForms(range) {\n const script = \"arab\";\n const tags = this.featuresTags[script];\n const tokens = this.tokenizer.getRangeTokens(range);\n if (tokens.length === 1) return;\n let contextParams = new ContextParams(\n tokens.map(\n (token) => token.getState(\"glyphIndex\")\n ),\n 0\n );\n const charContextParams = new ContextParams(\n tokens.map(\n (token) => token.char\n ),\n 0\n );\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (isTashkeelArabicChar(token.char)) continue;\n contextParams.setCurrentIndex(i);\n charContextParams.setCurrentIndex(i);\n let CONNECT = 0;\n if (willConnectPrev(charContextParams)) CONNECT |= 1;\n if (willConnectNext(charContextParams)) CONNECT |= 2;\n let tag;\n switch (CONNECT) {\n case 1:\n tag = \"fina\";\n break;\n case 2:\n tag = \"init\";\n break;\n case 3:\n tag = \"medi\";\n break;\n }\n if (tags.indexOf(tag) === -1) continue;\n let substitutions = this.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions instanceof Error) {\n console.info(substitutions.message);\n continue;\n }\n for (let j = 0; j < substitutions.length; j++) {\n const action = substitutions[j];\n if (action instanceof SubstitutionAction) {\n applySubstitution_default(action, tokens, j);\n contextParams.context[j] = action.substitution;\n }\n }\n }\n}\nvar arabicPresentationForms_default = arabicPresentationForms;\n\n// src/features/arab/arabicRequiredLigatures.mjs\nfunction getContextParams(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction arabicRequiredLigatures(range) {\n const script = \"arab\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams(tokens);\n }\n }\n}\nvar arabicRequiredLigatures_default = arabicRequiredLigatures;\n\n// src/features/ccmp/contextCheck/ccmpReplacement.mjs\nfunction ccmpReplacementStartCheck(contextParams) {\n return contextParams.index === 0 && contextParams.context.length > 1;\n}\nfunction ccmpReplacementEndCheck(contextParams) {\n return contextParams.index === contextParams.context.length - 1;\n}\nvar ccmpReplacement_default = {\n startCheck: ccmpReplacementStartCheck,\n endCheck: ccmpReplacementEndCheck\n};\n\n// src/features/ccmp/ccmpReplacementLigatures.mjs\nfunction getContextParams2(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction ccmpReplacementLigatures(range) {\n const script = \"delf\";\n const tag = \"ccmp\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams2(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n if (!this.query.getFeature({ tag, script, contextParams })) {\n continue;\n }\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams2(tokens);\n }\n }\n}\nvar ccmpReplacementLigatures_default = ccmpReplacementLigatures;\n\n// src/features/latn/contextCheck/latinWord.mjs\nfunction latinWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? latin first char\n prevChar === null && isLatinChar(char) || // ? latin char preceded with a non latin char\n !isLatinChar(prevChar) && isLatinChar(char)\n );\n}\nfunction latinWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last latin char\n nextChar === null || // ? next char is not latin\n !isLatinChar(nextChar)\n );\n}\nvar latinWord_default = {\n startCheck: latinWordStartCheck,\n endCheck: latinWordEndCheck\n};\n\n// src/features/latn/latinLigatures.mjs\nfunction getContextParams3(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction latinLigature(range) {\n const script = \"latn\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams3(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams3(tokens);\n }\n }\n}\nvar latinLigatures_default = latinLigature;\n\n// src/features/thai/contextCheck/thaiWord.mjs\nfunction thaiWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? thai first char\n prevChar === null && isThaiChar(char) || // ? thai char preceded with a non thai char\n !isThaiChar(prevChar) && isThaiChar(char)\n );\n}\nfunction thaiWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last thai char\n nextChar === null || // ? next char is not thai\n !isThaiChar(nextChar)\n );\n}\nvar thaiWord_default = {\n startCheck: thaiWordStartCheck,\n endCheck: thaiWordEndCheck\n};\n\n// src/features/thai/thaiGlyphComposition.mjs\nfunction getContextParams4(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiGlyphComposition(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams4(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"ccmp\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams4(tokens, index);\n }\n }\n}\nvar thaiGlyphComposition_default = thaiGlyphComposition;\n\n// src/features/thai/thaiLigatures.mjs\nfunction getContextParams5(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiLigatures(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams5(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams5(tokens, index);\n }\n }\n}\nvar thaiLigatures_default = thaiLigatures;\n\n// src/features/thai/thaiRequiredLigatures.mjs\nfunction getContextParams6(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiRequiredLigatures(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams6(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams6(tokens, index);\n }\n }\n}\nvar thaiRequiredLigatures_default = thaiRequiredLigatures;\n\n// src/features/unicode/contextCheck/variationSequenceCheck.mjs\nfunction isVariationSequenceSelector(char) {\n if (char === null) return false;\n const charCode = char.codePointAt(0);\n return (\n // Mongolian Variation Selectors\n charCode >= 6155 && charCode <= 6157 || // Generic Variation Selectors\n charCode >= 65024 && charCode <= 65039 || // Ideographic Variation Sequences\n charCode >= 917760 && charCode <= 917999\n );\n}\nfunction unicodeVariationSequenceStartCheck(contextParams) {\n const char = contextParams.current;\n const nextChar = contextParams.get(1);\n return nextChar === null && isVariationSequenceSelector(char) || isVariationSequenceSelector(nextChar);\n}\nfunction unicodeVariationSequenceEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return nextChar === null || !isVariationSequenceSelector(nextChar);\n}\nvar variationSequenceCheck_default = {\n startCheck: unicodeVariationSequenceStartCheck,\n endCheck: unicodeVariationSequenceEndCheck\n};\n\n// src/features/unicode/variationSequences.mjs\nfunction unicodeVariationSequence(range) {\n const font = this.query.font;\n const tokens = this.tokenizer.getRangeTokens(range);\n tokens[1].setState(\"deleted\", true);\n if (font.tables.cmap && font.tables.cmap.varSelectorList) {\n const baseCodePoint = tokens[0].char.codePointAt(0);\n const vsCodePoint = tokens[1].char.codePointAt(0);\n const selectorLookup = font.tables.cmap.varSelectorList[vsCodePoint];\n if (selectorLookup !== void 0) {\n if (selectorLookup.nonDefaultUVS) {\n const mappings = selectorLookup.nonDefaultUVS.uvsMappings;\n if (mappings[baseCodePoint]) {\n const replacementGlyphId = mappings[baseCodePoint].glyphID;\n if (font.glyphs.glyphs[replacementGlyphId] !== void 0) {\n tokens[0].setState(\"glyphIndex\", replacementGlyphId);\n }\n }\n }\n }\n }\n}\nvar variationSequences_default = unicodeVariationSequence;\n\n// src/bidi.mjs\nfunction Bidi(baseDir) {\n this.baseDir = baseDir || \"ltr\";\n this.tokenizer = new tokenizer_default();\n this.featuresTags = {};\n}\nBidi.prototype.setText = function(text) {\n this.text = text;\n};\nBidi.prototype.contextChecks = {\n ccmpReplacementCheck: ccmpReplacement_default,\n latinWordCheck: latinWord_default,\n arabicWordCheck: arabicWord_default,\n arabicSentenceCheck: arabicSentence_default,\n thaiWordCheck: thaiWord_default,\n unicodeVariationSequenceCheck: variationSequenceCheck_default\n};\nfunction registerContextChecker(checkId) {\n const check = this.contextChecks[`${checkId}Check`];\n return this.tokenizer.registerContextChecker(\n checkId,\n check.startCheck,\n check.endCheck\n );\n}\nfunction tokenizeText() {\n registerContextChecker.call(this, \"ccmpReplacement\");\n registerContextChecker.call(this, \"latinWord\");\n registerContextChecker.call(this, \"arabicWord\");\n registerContextChecker.call(this, \"arabicSentence\");\n registerContextChecker.call(this, \"thaiWord\");\n registerContextChecker.call(this, \"unicodeVariationSequence\");\n return this.tokenizer.tokenize(this.text);\n}\nfunction reverseArabicSentences() {\n const ranges = this.tokenizer.getContextRanges(\"arabicSentence\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n let rangeTokens = this.tokenizer.getRangeTokens(range);\n this.tokenizer.replaceRange(\n range.startIndex,\n range.endOffset,\n rangeTokens.reverse()\n );\n }\n}\nBidi.prototype.registerFeatures = function(script, tags) {\n const supportedTags = tags.filter(\n (tag) => this.query.supports({ script, tag })\n );\n if (!Object.prototype.hasOwnProperty.call(this.featuresTags, script)) {\n this.featuresTags[script] = supportedTags;\n } else {\n this.featuresTags[script] = this.featuresTags[script].concat(supportedTags);\n }\n};\nBidi.prototype.applyFeatures = function(font, features) {\n if (!font) throw new Error(\n \"No valid font was provided to apply features\"\n );\n if (!this.query) this.query = new featureQuery_default(font);\n for (let f = 0; f < features.length; f++) {\n const feature = features[f];\n if (!this.query.supports({ script: feature.script })) continue;\n this.registerFeatures(feature.script, feature.tags);\n }\n};\nBidi.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.tokenizer.registerModifier(modifierId, condition, modifier);\n};\nfunction checkGlyphIndexStatus() {\n if (this.tokenizer.registeredModifiers.indexOf(\"glyphIndex\") === -1) {\n throw new Error(\n \"glyphIndex modifier is required to apply arabic presentation features.\"\n );\n }\n}\nfunction applyArabicPresentationForms() {\n const script = \"arab\";\n if (!Object.prototype.hasOwnProperty.call(this.featuresTags, script)) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n arabicPresentationForms_default.call(this, range);\n }\n}\nfunction applyCcmpReplacement() {\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"ccmpReplacement\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n ccmpReplacementLigatures_default.call(this, range);\n }\n}\nfunction applyArabicRequireLigatures() {\n if (!this.hasFeatureEnabled(\"arab\", \"rlig\")) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n arabicRequiredLigatures_default.call(this, range);\n }\n}\nfunction applyLatinLigatures() {\n if (!this.hasFeatureEnabled(\"latn\", \"liga\")) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"latinWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n latinLigatures_default.call(this, range);\n }\n}\nfunction applyUnicodeVariationSequences() {\n const ranges = this.tokenizer.getContextRanges(\"unicodeVariationSequence\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n variationSequences_default.call(this, range);\n }\n}\nfunction applyThaiFeatures() {\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"thaiWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (this.hasFeatureEnabled(\"thai\", \"liga\")) thaiLigatures_default.call(this, range);\n if (this.hasFeatureEnabled(\"thai\", \"rlig\")) thaiRequiredLigatures_default.call(this, range);\n if (this.hasFeatureEnabled(\"thai\", \"ccmp\")) thaiGlyphComposition_default.call(this, range);\n }\n}\nBidi.prototype.checkContextReady = function(contextId) {\n return !!this.tokenizer.getContext(contextId);\n};\nBidi.prototype.applyFeaturesToContexts = function() {\n if (this.checkContextReady(\"ccmpReplacement\")) {\n applyCcmpReplacement.call(this);\n }\n if (this.checkContextReady(\"arabicWord\")) {\n applyArabicPresentationForms.call(this);\n applyArabicRequireLigatures.call(this);\n }\n if (this.checkContextReady(\"latinWord\")) {\n applyLatinLigatures.call(this);\n }\n if (this.checkContextReady(\"arabicSentence\")) {\n reverseArabicSentences.call(this);\n }\n if (this.checkContextReady(\"thaiWord\")) {\n applyThaiFeatures.call(this);\n }\n if (this.checkContextReady(\"unicodeVariationSequence\")) {\n applyUnicodeVariationSequences.call(this);\n }\n};\nBidi.prototype.hasFeatureEnabled = function(script, tag) {\n return (this.featuresTags[script] || []).indexOf(tag) !== -1;\n};\nBidi.prototype.processText = function(text) {\n if (!this.text || this.text !== text) {\n this.setText(text);\n tokenizeText.call(this);\n this.applyFeaturesToContexts();\n }\n};\nBidi.prototype.getBidiText = function(text) {\n this.processText(text);\n return this.tokenizer.getText();\n};\nBidi.prototype.getTextGlyphs = function(text) {\n this.processText(text);\n let indexes = [];\n for (let i = 0; i < this.tokenizer.tokens.length; i++) {\n const token = this.tokenizer.tokens[i];\n if (token.state.deleted) continue;\n const index = token.activeState.value;\n indexes.push(Array.isArray(index) ? index[0] : index);\n }\n return indexes;\n};\nvar bidi_default = Bidi;\n\n// src/font.mjs\nfunction createDefaultNamesInfo(options) {\n return {\n fontFamily: { en: options.familyName || \" \" },\n fontSubfamily: { en: options.styleName || \" \" },\n fullName: { en: options.fullName || options.familyName + \" \" + options.styleName },\n // postScriptName may not contain any whitespace\n postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\\s/g, \"\") },\n designer: { en: options.designer || \" \" },\n designerURL: { en: options.designerURL || \" \" },\n manufacturer: { en: options.manufacturer || \" \" },\n manufacturerURL: { en: options.manufacturerURL || \" \" },\n license: { en: options.license || \" \" },\n licenseURL: { en: options.licenseURL || \" \" },\n version: { en: options.version || \"Version 0.1\" },\n description: { en: options.description || \" \" },\n copyright: { en: options.copyright || \" \" },\n trademark: { en: options.trademark || \" \" }\n };\n}\nfunction Font(options) {\n options = options || {};\n options.tables = options.tables || {};\n if (!options.empty) {\n if (!options.familyName) throw new Error(\"When creating a new Font object, familyName is required.\");\n if (!options.styleName) throw new Error(\"When creating a new Font object, styleName is required.\");\n if (!options.unitsPerEm) throw new Error(\"When creating a new Font object, unitsPerEm is required.\");\n if (!options.ascender) throw new Error(\"When creating a new Font object, ascender is required.\");\n if (options.descender > 0) throw new Error(\"When creating a new Font object, negative descender value is required.\");\n this.names = {};\n this.names.unicode = createDefaultNamesInfo(options);\n this.names.macintosh = createDefaultNamesInfo(options);\n this.names.windows = createDefaultNamesInfo(options);\n this.unitsPerEm = options.unitsPerEm || 1e3;\n this.ascender = options.ascender;\n this.descender = options.descender;\n this.createdTimestamp = options.createdTimestamp;\n this.italicAngle = options.italicAngle || 0;\n this.weightClass = options.weightClass || 0;\n let selection = 0;\n if (options.fsSelection) {\n selection = options.fsSelection;\n } else {\n if (this.italicAngle < 0) {\n selection |= this.fsSelectionValues.ITALIC;\n } else if (this.italicAngle > 0) {\n selection |= this.fsSelectionValues.OBLIQUE;\n }\n if (this.weightClass >= 600) {\n selection |= this.fsSelectionValues.BOLD;\n }\n if (selection === 0) {\n selection = this.fsSelectionValues.REGULAR;\n }\n }\n if (!options.panose || !Array.isArray(options.panose)) {\n options.panose = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n this.tables = Object.assign(options.tables, {\n os2: Object.assign({\n usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,\n usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,\n bFamilyType: options.panose[0] || 0,\n bSerifStyle: options.panose[1] || 0,\n bWeight: options.panose[2] || 0,\n bProportion: options.panose[3] || 0,\n bContrast: options.panose[4] || 0,\n bStrokeVariation: options.panose[5] || 0,\n bArmStyle: options.panose[6] || 0,\n bLetterform: options.panose[7] || 0,\n bMidline: options.panose[8] || 0,\n bXHeight: options.panose[9] || 0,\n fsSelection: selection\n }, options.tables.os2)\n });\n }\n this.supported = true;\n this.glyphs = new glyphset_default.GlyphSet(this, options.glyphs || []);\n this.encoding = new DefaultEncoding(this);\n this.position = new position_default(this);\n this.substitution = new substitution_default(this);\n this.tables = this.tables || {};\n this.tables = new Proxy(this.tables, {\n set: (tables, tableName, tableData) => {\n tables[tableName] = tableData;\n if (tables.fvar && (tables.gvar || tables.cff2) && !this.variation) {\n this.variation = new VariationManager(this);\n }\n return true;\n }\n });\n this.palettes = new PaletteManager(this);\n this.layers = new LayerManager(this);\n this.svgImages = new SVGImageManager(this);\n this._push = null;\n this._hmtxTableData = {};\n Object.defineProperty(this, \"hinting\", {\n get: function() {\n if (this._hinting) return this._hinting;\n if (this.outlinesFormat === \"truetype\") {\n return this._hinting = new hintingtt_default(this);\n }\n return null;\n }\n });\n}\nFont.prototype.hasChar = function(c) {\n return this.encoding.charToGlyphIndex(c) > 0;\n};\nFont.prototype.charToGlyphIndex = function(s) {\n return this.encoding.charToGlyphIndex(s);\n};\nFont.prototype.charToGlyph = function(c) {\n const glyphIndex = this.charToGlyphIndex(c);\n let glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n};\nFont.prototype.updateFeatures = function(options) {\n return this.defaultRenderOptions.features.map((feature) => {\n if (feature.script === \"latn\") {\n return {\n script: \"latn\",\n tags: feature.tags.filter((tag) => options[tag])\n };\n } else {\n return feature;\n }\n });\n};\nFont.prototype.stringToGlyphIndexes = function(s, options) {\n const bidi = new bidi_default();\n const charToGlyphIndexMod = (token) => this.charToGlyphIndex(token.char);\n bidi.registerModifier(\"glyphIndex\", null, charToGlyphIndexMod);\n let features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features;\n bidi.applyFeatures(this, features);\n return bidi.getTextGlyphs(s);\n};\nFont.prototype.stringToGlyphs = function(s, options) {\n const indexes = this.stringToGlyphIndexes(s, options);\n let length = indexes.length;\n const glyphs = new Array(length);\n const notdef = this.glyphs.get(0);\n for (let i = 0; i < length; i += 1) {\n glyphs[i] = this.glyphs.get(indexes[i]) || notdef;\n }\n return glyphs;\n};\nFont.prototype.nameToGlyphIndex = function(name) {\n return this.glyphNames.nameToGlyphIndex(name);\n};\nFont.prototype.nameToGlyph = function(name) {\n const glyphIndex = this.nameToGlyphIndex(name);\n let glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n};\nFont.prototype.glyphIndexToName = function(gid) {\n if (!this.glyphNames.glyphIndexToName) {\n return \"\";\n }\n return this.glyphNames.glyphIndexToName(gid);\n};\nFont.prototype.getKerningValue = function(leftGlyph, rightGlyph) {\n leftGlyph = leftGlyph.index || leftGlyph;\n rightGlyph = rightGlyph.index || rightGlyph;\n const gposKerning = this.position.defaultKerningTables;\n if (gposKerning) {\n return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);\n }\n return this.kerningPairs[leftGlyph + \",\" + rightGlyph] || 0;\n};\nFont.prototype.defaultRenderOptions = {\n kerning: true,\n features: [\n /**\n * these 4 features are required to render Arabic text properly\n * and shouldn't be turned off when rendering arabic text.\n */\n { script: \"arab\", tags: [\"init\", \"medi\", \"fina\", \"rlig\"] },\n { script: \"latn\", tags: [\"liga\", \"rlig\"] },\n { script: \"thai\", tags: [\"liga\", \"rlig\", \"ccmp\"] }\n ],\n hinting: false,\n usePalette: 0,\n drawLayers: true,\n drawSVG: true\n};\nFont.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, this.defaultRenderOptions, options);\n const fontScale = 1 / this.unitsPerEm * fontSize;\n const glyphs = this.stringToGlyphs(text, options);\n let kerningLookups;\n if (options.kerning) {\n const script = options.script || this.position.getDefaultScriptName();\n kerningLookups = this.position.getKerningTables(script, options.language);\n }\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs[i];\n callback.call(this, glyph, x, y, fontSize, options);\n if (glyph.advanceWidth) {\n x += glyph.advanceWidth * fontScale;\n }\n if (options.kerning && i < glyphs.length - 1) {\n const kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]);\n x += kerningValue * fontScale;\n }\n if (options.letterSpacing) {\n x += options.letterSpacing * fontSize;\n } else if (options.tracking) {\n x += options.tracking / 1e3 * fontSize;\n }\n }\n return x;\n};\nFont.prototype.getPath = function(text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n const fullPath = new path_default();\n fullPath._layers = [];\n applyPaintType(this, fullPath, fontSize);\n if (fullPath.stroke) {\n const scale = 1 / (fullPath.unitsPerEm || 1e3) * fontSize;\n fullPath.strokeWidth *= scale;\n }\n this.forEachGlyph(text, x, y, fontSize, options, (glyph, gX, gY, gFontSize) => {\n const glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n if (options.drawSVG || options.drawLayers) {\n const layers = glyphPath._layers;\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l++) {\n const layer = layers[l];\n fullPath._layers.push(layer);\n }\n return;\n }\n }\n fullPath.extend(glyphPath);\n });\n return fullPath;\n};\nFont.prototype.getPaths = function(text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n const glyphPaths = [];\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n const glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n glyphPaths.push(glyphPath);\n });\n return glyphPaths;\n};\nFont.prototype.getAdvanceWidth = function(text, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n return this.forEachGlyph(text, 0, 0, fontSize, options, function() {\n });\n};\nFont.prototype.draw = function(ctx, text, x, y, fontSize, options) {\n const path = this.getPath(text, x, y, fontSize, options);\n path.draw(ctx);\n};\nFont.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawPoints(ctx, gX, gY, gFontSize, options, this);\n });\n};\nFont.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawMetrics(ctx, gX, gY, gFontSize);\n });\n};\nFont.prototype.getEnglishName = function(name) {\n const translations = (this.names.unicode || this.names.macintosh || this.names.windows)[name];\n if (translations) {\n return translations.en;\n }\n};\nFont.prototype.validate = function() {\n const warnings = [];\n const _this = this;\n function assert(predicate, message) {\n if (!predicate) {\n console.warn(`[opentype.js] ${message}`);\n warnings.push(message);\n }\n }\n function assertNamePresent(name) {\n const englishName = _this.getEnglishName(name);\n assert(\n englishName && englishName.trim().length > 0,\n \"No English \" + name + \" specified.\"\n );\n }\n assertNamePresent(\"fontFamily\");\n assertNamePresent(\"weightName\");\n assertNamePresent(\"manufacturer\");\n assertNamePresent(\"copyright\");\n assertNamePresent(\"version\");\n assert(this.unitsPerEm > 0, \"No unitsPerEm specified.\");\n if (this.tables.colr) {\n const baseGlyphs = this.tables.colr.baseGlyphRecords;\n let previousID = -1;\n for (let b = 0; b < baseGlyphs.length; b++) {\n const currentGlyphID = baseGlyphs[b].glyphID;\n assert(previousID < baseGlyphs[b].glyphID, `baseGlyphs must be sorted by GlyphID in ascending order, but glyphID ${currentGlyphID} comes after ${previousID}`);\n if (previousID > baseGlyphs[b].glyphID) {\n break;\n }\n previousID = currentGlyphID;\n }\n }\n return warnings;\n};\nFont.prototype.toTables = function() {\n return sfnt_default.fontToTable(this);\n};\nFont.prototype.toBuffer = function() {\n console.warn(\"Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.\");\n return this.toArrayBuffer();\n};\nFont.prototype.toArrayBuffer = function() {\n const sfntTable = this.toTables();\n const bytes = sfntTable.encode();\n const buffer = new ArrayBuffer(bytes.length);\n const intArray = new Uint8Array(buffer);\n for (let i = 0; i < bytes.length; i++) {\n intArray[i] = bytes[i];\n }\n return buffer;\n};\nFont.prototype.download = function() {\n console.error(\"DEPRECATED: platform-specific actions are to be implemented on user-side\");\n};\nFont.prototype.fsSelectionValues = {\n ITALIC: 1,\n //1\n UNDERSCORE: 2,\n //2\n NEGATIVE: 4,\n //4\n OUTLINED: 8,\n //8\n STRIKEOUT: 16,\n //16\n BOLD: 32,\n //32\n REGULAR: 64,\n //64\n USER_TYPO_METRICS: 128,\n //128\n WWS: 256,\n //256\n OBLIQUE: 512\n //512\n};\nFont.prototype.macStyleValues = {\n BOLD: 1,\n //1\n ITALIC: 2,\n //2\n UNDERLINE: 4,\n //4\n OUTLINED: 8,\n //8\n SHADOW: 16,\n //16\n CONDENSED: 32,\n //32\n EXTENDED: 64\n //64\n};\nFont.prototype.usWidthClasses = {\n ULTRA_CONDENSED: 1,\n EXTRA_CONDENSED: 2,\n CONDENSED: 3,\n SEMI_CONDENSED: 4,\n MEDIUM: 5,\n SEMI_EXPANDED: 6,\n EXPANDED: 7,\n EXTRA_EXPANDED: 8,\n ULTRA_EXPANDED: 9\n};\nFont.prototype.usWeightClasses = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900\n};\nvar font_default = Font;\n\n// src/tables/hvar.mjs\nfunction parseHvarTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported hvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const version = [\n tableVersionMajor,\n tableVersionMinor\n ];\n const itemVariationStore = p.parsePointer32(function() {\n return this.parseItemVariationStore();\n });\n const advanceWidth = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n const lsb = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n const rsb = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n return {\n version,\n itemVariationStore,\n advanceWidth,\n lsb,\n rsb\n };\n}\nfunction makeHvarTable() {\n console.warn(\"Writing of hvar tables is not yet supported.\");\n}\nvar hvar_default = { make: makeHvarTable, parse: parseHvarTable };\n\n// src/tables/gdef.mjs\nvar attachList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n attachPoints: this.parseList(Parser.pointer(Parser.uShortList))\n };\n};\nvar caretValue = function() {\n var format = this.parseUShort();\n check_default.argument(\n format === 1 || format === 2 || format === 3,\n \"Unsupported CaretValue table version.\"\n );\n if (format === 1) {\n return { coordinate: this.parseShort() };\n } else if (format === 2) {\n return { pointindex: this.parseShort() };\n } else if (format === 3) {\n return { coordinate: this.parseShort() };\n }\n};\nvar ligGlyph = function() {\n return this.parseList(Parser.pointer(caretValue));\n};\nvar ligCaretList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n ligGlyphs: this.parseList(Parser.pointer(ligGlyph))\n };\n};\nvar markGlyphSets = function() {\n this.parseUShort();\n return this.parseList(Parser.pointer(Parser.coverage));\n};\nfunction parseGDEFTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(\n tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,\n \"Unsupported GDEF table version.\"\n );\n var gdef = {\n version: tableVersion,\n classDef: p.parsePointer(Parser.classDef),\n attachList: p.parsePointer(attachList),\n ligCaretList: p.parsePointer(ligCaretList),\n markAttachClassDef: p.parsePointer(Parser.classDef)\n };\n if (tableVersion >= 1.2) {\n gdef.markGlyphSets = p.parsePointer(markGlyphSets);\n }\n return gdef;\n}\nvar gdef_default = { parse: parseGDEFTable };\n\n// src/tables/gpos.mjs\nvar subtableParsers2 = new Array(10);\nsubtableParsers2[1] = function parseLookup12() {\n const start = this.offset + this.relativeOffset;\n const posformat = this.parseUShort();\n if (posformat === 1) {\n return {\n posFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n value: this.parseValueRecord()\n };\n } else if (posformat === 2) {\n return {\n posFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n values: this.parseValueRecordList()\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": GPOS lookup type 1 format must be 1 or 2.\");\n};\nsubtableParsers2[2] = function parseLookup22() {\n const start = this.offset + this.relativeOffset;\n const posFormat = this.parseUShort();\n check_default.assert(posFormat === 1 || posFormat === 2, \"0x\" + start.toString(16) + \": GPOS lookup type 2 format must be 1 or 2.\");\n const coverage = this.parsePointer(Parser.coverage);\n const valueFormat1 = this.parseUShort();\n const valueFormat2 = this.parseUShort();\n if (posFormat === 1) {\n return {\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n pairSets: this.parseList(Parser.pointer(Parser.list(function() {\n return {\n // pairValueRecord\n secondGlyph: this.parseUShort(),\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n })))\n };\n } else if (posFormat === 2) {\n const classDef1 = this.parsePointer(Parser.classDef);\n const classDef2 = this.parsePointer(Parser.classDef);\n const class1Count = this.parseUShort();\n const class2Count = this.parseUShort();\n return {\n // Class Pair Adjustment\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n classDef1,\n classDef2,\n class1Count,\n class2Count,\n classRecords: this.parseList(class1Count, Parser.list(class2Count, function() {\n return {\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n }))\n };\n }\n};\nsubtableParsers2[3] = function parseLookup32() {\n return { error: \"GPOS Lookup 3 not supported\" };\n};\nsubtableParsers2[4] = function parseLookup42() {\n return { error: \"GPOS Lookup 4 not supported\" };\n};\nsubtableParsers2[5] = function parseLookup52() {\n return { error: \"GPOS Lookup 5 not supported\" };\n};\nsubtableParsers2[6] = function parseLookup62() {\n return { error: \"GPOS Lookup 6 not supported\" };\n};\nsubtableParsers2[7] = function parseLookup72() {\n return { error: \"GPOS Lookup 7 not supported\" };\n};\nsubtableParsers2[8] = function parseLookup82() {\n return { error: \"GPOS Lookup 8 not supported\" };\n};\nsubtableParsers2[9] = function parseLookup9() {\n return { error: \"GPOS Lookup 9 not supported\" };\n};\nfunction parseGposTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GPOS table version \" + tableVersion);\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers2)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers2),\n variations: p.parseFeatureVariationsList()\n };\n }\n}\nvar subtableMakers2 = new Array(10);\nfunction makeGposTable(gpos) {\n return new table_default.Table(\"GPOS\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table_default.ScriptList(gpos.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table_default.FeatureList(gpos.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table_default.LookupList(gpos.lookups, subtableMakers2) }\n ]);\n}\nvar gpos_default = { parse: parseGposTable, make: makeGposTable };\n\n// src/tables/kern.mjs\nfunction parseWindowsKernTable(p) {\n const pairs = {};\n p.skip(\"uShort\");\n const subtableVersion = p.parseUShort();\n check_default.argument(subtableVersion === 0, \"Unsupported kern sub-table version.\");\n p.skip(\"uShort\", 2);\n const nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (let i = 0; i < nPairs; i += 1) {\n const leftIndex = p.parseUShort();\n const rightIndex = p.parseUShort();\n const value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n return pairs;\n}\nfunction parseMacKernTable(p) {\n const pairs = {};\n p.skip(\"uShort\");\n const nTables = p.parseULong();\n if (nTables > 1) {\n console.warn(\"Only the first kern subtable is supported.\");\n }\n p.skip(\"uLong\");\n const coverage = p.parseUShort();\n const subtableVersion = coverage & 255;\n p.skip(\"uShort\");\n if (subtableVersion === 0) {\n const nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (let i = 0; i < nPairs; i += 1) {\n const leftIndex = p.parseUShort();\n const rightIndex = p.parseUShort();\n const value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n }\n return pairs;\n}\nfunction parseKernTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseUShort();\n if (tableVersion === 0) {\n return parseWindowsKernTable(p);\n } else if (tableVersion === 1) {\n return parseMacKernTable(p);\n } else {\n throw new Error(\"Unsupported kern table version (\" + tableVersion + \").\");\n }\n}\nvar kern_default = { parse: parseKernTable };\n\n// src/tables/loca.mjs\nfunction parseLocaTable(data, start, numGlyphs, shortVersion) {\n const p = new parse_default.Parser(data, start);\n const parseFn = shortVersion ? p.parseUShort : p.parseULong;\n const glyphOffsets = [];\n for (let i = 0; i < numGlyphs + 1; i += 1) {\n let glyphOffset = parseFn.call(p);\n if (shortVersion) {\n glyphOffset *= 2;\n }\n glyphOffsets.push(glyphOffset);\n }\n return glyphOffsets;\n}\nvar loca_default = { parse: parseLocaTable };\n\n// src/opentype.mjs\nfunction parseOpenTypeTableEntries(data, numTables) {\n const tableEntries = [];\n let p = 12;\n for (let i = 0; i < numTables; i += 1) {\n const tag = parse_default.getTag(data, p);\n const checksum = parse_default.getULong(data, p + 4);\n const offset = parse_default.getULong(data, p + 8);\n const length = parse_default.getULong(data, p + 12);\n tableEntries.push({ tag, checksum, offset, length, compression: false });\n p += 16;\n }\n return tableEntries;\n}\nfunction parseWOFFTableEntries(data, numTables) {\n const tableEntries = [];\n let p = 44;\n for (let i = 0; i < numTables; i += 1) {\n const tag = parse_default.getTag(data, p);\n const offset = parse_default.getULong(data, p + 4);\n const compLength = parse_default.getULong(data, p + 8);\n const origLength = parse_default.getULong(data, p + 12);\n let compression;\n if (compLength < origLength) {\n compression = \"WOFF\";\n } else {\n compression = false;\n }\n tableEntries.push({\n tag,\n offset,\n compression,\n compressedLength: compLength,\n length: origLength\n });\n p += 20;\n }\n return tableEntries;\n}\nfunction uncompressTable(data, tableEntry) {\n if (tableEntry.compression === \"WOFF\") {\n const inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2);\n const outBuffer = new Uint8Array(tableEntry.length);\n tinf_uncompress(inBuffer, outBuffer);\n if (outBuffer.byteLength !== tableEntry.length) {\n throw new Error(\"Decompression error: \" + tableEntry.tag + \" decompressed length doesn't match recorded length\");\n }\n const view = new DataView(outBuffer.buffer, 0);\n return { data: view, offset: 0 };\n } else {\n return { data, offset: tableEntry.offset };\n }\n}\nfunction parseBuffer(buffer, opt = {}) {\n let indexToLocFormat;\n let ltagTable;\n const font = new font_default({ empty: true });\n if (buffer.constructor !== ArrayBuffer) {\n buffer = new Uint8Array(buffer).buffer;\n }\n const data = new DataView(buffer, 0);\n let numTables;\n let tableEntries = [];\n const signature = parse_default.getTag(data, 0);\n if (signature === String.fromCharCode(0, 1, 0, 0) || signature === \"true\" || signature === \"typ1\") {\n font.outlinesFormat = \"truetype\";\n numTables = parse_default.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n numTables = parse_default.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"wOFF\") {\n const flavor = parse_default.getTag(data, 4);\n if (flavor === String.fromCharCode(0, 1, 0, 0)) {\n font.outlinesFormat = \"truetype\";\n } else if (flavor === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n } else {\n throw new Error(\"Unsupported OpenType flavor \" + signature);\n }\n numTables = parse_default.getUShort(data, 12);\n tableEntries = parseWOFFTableEntries(data, numTables);\n } else if (signature === \"wOF2\") {\n const issue = \"https://github.com/opentypejs/opentype.js/issues/183#issuecomment-1147228025\";\n throw new Error(\"WOFF2 require an external decompressor library, see examples at: \" + issue);\n } else {\n throw new Error(\"Unsupported OpenType signature \" + signature);\n }\n let cffTableEntry;\n let cff2TableEntry;\n let fvarTableEntry;\n let statTableEntry;\n let gvarTableEntry;\n let cvarTableEntry;\n let avarTableEntry;\n let glyfTableEntry;\n let gdefTableEntry;\n let gposTableEntry;\n let gsubTableEntry;\n let hmtxTableEntry;\n let hvarTableEntry;\n let kernTableEntry;\n let locaTableEntry;\n let nameTableEntry;\n let metaTableEntry;\n let p;\n for (let i = 0; i < numTables; i += 1) {\n const tableEntry = tableEntries[i];\n let table;\n switch (tableEntry.tag) {\n case \"avar\":\n avarTableEntry = tableEntry;\n break;\n case \"cmap\":\n table = uncompressTable(data, tableEntry);\n font.tables.cmap = cmap_default.parse(table.data, table.offset);\n font.encoding = new CmapEncoding(font.tables.cmap);\n break;\n case \"cvt \":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.cvt = p.parseShortList(tableEntry.length / 2);\n break;\n case \"fvar\":\n fvarTableEntry = tableEntry;\n break;\n case \"STAT\":\n statTableEntry = tableEntry;\n break;\n case \"gvar\":\n gvarTableEntry = tableEntry;\n break;\n case \"cvar\":\n cvarTableEntry = tableEntry;\n break;\n case \"fpgm\":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.fpgm = p.parseByteList(tableEntry.length);\n break;\n case \"head\":\n table = uncompressTable(data, tableEntry);\n font.tables.head = head_default.parse(table.data, table.offset);\n font.unitsPerEm = font.tables.head.unitsPerEm;\n indexToLocFormat = font.tables.head.indexToLocFormat;\n break;\n case \"hhea\":\n table = uncompressTable(data, tableEntry);\n font.tables.hhea = hhea_default.parse(table.data, table.offset);\n font.ascender = font.tables.hhea.ascender;\n font.descender = font.tables.hhea.descender;\n font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;\n break;\n case \"HVAR\":\n hvarTableEntry = tableEntry;\n break;\n case \"hmtx\":\n hmtxTableEntry = tableEntry;\n break;\n case \"ltag\":\n table = uncompressTable(data, tableEntry);\n ltagTable = ltag_default.parse(table.data, table.offset);\n break;\n case \"COLR\":\n table = uncompressTable(data, tableEntry);\n font.tables.colr = colr_default.parse(table.data, table.offset);\n break;\n case \"CPAL\":\n table = uncompressTable(data, tableEntry);\n font.tables.cpal = cpal_default.parse(table.data, table.offset);\n break;\n case \"maxp\":\n table = uncompressTable(data, tableEntry);\n font.tables.maxp = maxp_default.parse(table.data, table.offset);\n font.numGlyphs = font.tables.maxp.numGlyphs;\n break;\n case \"name\":\n nameTableEntry = tableEntry;\n break;\n case \"OS/2\":\n table = uncompressTable(data, tableEntry);\n font.tables.os2 = os2_default.parse(table.data, table.offset);\n break;\n case \"post\":\n table = uncompressTable(data, tableEntry);\n font.tables.post = post_default.parse(table.data, table.offset);\n font.glyphNames = new GlyphNames(font.tables.post);\n break;\n case \"prep\":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.prep = p.parseByteList(tableEntry.length);\n break;\n case \"glyf\":\n glyfTableEntry = tableEntry;\n break;\n case \"loca\":\n locaTableEntry = tableEntry;\n break;\n case \"CFF \":\n cffTableEntry = tableEntry;\n break;\n case \"CFF2\":\n cff2TableEntry = tableEntry;\n break;\n case \"kern\":\n kernTableEntry = tableEntry;\n break;\n case \"GDEF\":\n gdefTableEntry = tableEntry;\n break;\n case \"GPOS\":\n gposTableEntry = tableEntry;\n break;\n case \"GSUB\":\n gsubTableEntry = tableEntry;\n break;\n case \"meta\":\n metaTableEntry = tableEntry;\n break;\n case \"gasp\":\n try {\n table = uncompressTable(data, tableEntry);\n font.tables.gasp = gasp_default.parse(table.data, table.offset);\n } catch (e) {\n console.warn(\"Failed to parse gasp table, skipping.\");\n console.warn(e);\n }\n break;\n case \"SVG \":\n table = uncompressTable(data, tableEntry);\n font.tables.svg = svg_default.parse(table.data, table.offset);\n break;\n default:\n break;\n }\n }\n const nameTable = uncompressTable(data, nameTableEntry);\n font.tables.name = name_default.parse(nameTable.data, nameTable.offset, ltagTable);\n font.names = font.tables.name;\n if (glyfTableEntry && locaTableEntry) {\n const shortVersion = indexToLocFormat === 0;\n const locaTable = uncompressTable(data, locaTableEntry);\n const locaOffsets = loca_default.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion);\n const glyfTable = uncompressTable(data, glyfTableEntry);\n font.glyphs = glyf_default.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt);\n } else if (cffTableEntry) {\n const cffTable = uncompressTable(data, cffTableEntry);\n cff_default.parse(cffTable.data, cffTable.offset, font, opt);\n } else if (cff2TableEntry) {\n const cffTable2 = uncompressTable(data, cff2TableEntry);\n cff_default.parse(cffTable2.data, cffTable2.offset, font, opt);\n } else {\n throw new Error(\"Font doesn't contain TrueType, CFF or CFF2 outlines.\");\n }\n const hmtxTable = uncompressTable(data, hmtxTableEntry);\n hmtx_default.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt);\n addGlyphNames(font, opt);\n if (kernTableEntry) {\n const kernTable = uncompressTable(data, kernTableEntry);\n font.kerningPairs = kern_default.parse(kernTable.data, kernTable.offset);\n } else {\n font.kerningPairs = {};\n }\n if (gdefTableEntry) {\n const gdefTable = uncompressTable(data, gdefTableEntry);\n font.tables.gdef = gdef_default.parse(gdefTable.data, gdefTable.offset);\n }\n if (gposTableEntry) {\n const gposTable = uncompressTable(data, gposTableEntry);\n font.tables.gpos = gpos_default.parse(gposTable.data, gposTable.offset);\n font.position.init();\n }\n if (gsubTableEntry) {\n const gsubTable = uncompressTable(data, gsubTableEntry);\n font.tables.gsub = gsub_default.parse(gsubTable.data, gsubTable.offset);\n }\n if (fvarTableEntry) {\n const fvarTable = uncompressTable(data, fvarTableEntry);\n font.tables.fvar = fvar_default.parse(fvarTable.data, fvarTable.offset, font.names);\n }\n if (statTableEntry) {\n const statTable = uncompressTable(data, statTableEntry);\n font.tables.stat = stat_default.parse(statTable.data, statTable.offset, font.tables.fvar);\n }\n if (gvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides a gvar table, but no fvar table, which is required for variable fonts.\");\n }\n if (!glyfTableEntry) {\n console.warn(\"This font provides a gvar table, but no glyf table. Glyph variation only works with TrueType outlines.\");\n }\n const gvarTable = uncompressTable(data, gvarTableEntry);\n font.tables.gvar = gvar_default.parse(gvarTable.data, gvarTable.offset, font.tables.fvar, font.glyphs);\n }\n if (cvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides a cvar table, but no fvar table, which is required for variable fonts.\");\n }\n if (!font.tables.cvt) {\n console.warn(\"This font provides a cvar table, but no cvt table which could be made variable.\");\n }\n if (!glyfTableEntry) {\n console.warn(\"This font provides a gvar table, but no glyf table. Glyph variation only works with TrueType outlines.\");\n }\n const cvarTable = uncompressTable(data, cvarTableEntry);\n font.tables.cvar = cvar_default.parse(cvarTable.data, cvarTable.offset, font.tables.fvar, font.tables.cvt || []);\n }\n if (avarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides an avar table, but no fvar table, which is required for variable fonts.\");\n }\n const avarTable = uncompressTable(data, avarTableEntry);\n font.tables.avar = avar_default.parse(avarTable.data, avarTable.offset, font.tables.fvar);\n }\n if (hvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides an HVAR table, but no fvar table, which is required for variable fonts.\");\n }\n if (!hmtxTableEntry) {\n console.warn(\"This font provides an HVAR table, but no hmtx table to vary.\");\n }\n const hvarTable = uncompressTable(data, hvarTableEntry);\n font.tables.hvar = hvar_default.parse(hvarTable.data, hvarTable.offset, font.tables.fvar);\n }\n if (metaTableEntry) {\n const metaTable = uncompressTable(data, metaTableEntry);\n font.tables.meta = meta_default.parse(metaTable.data, metaTable.offset);\n font.metas = font.tables.meta;\n }\n font.palettes = new PaletteManager(font);\n return font;\n}\nfunction load() {\n console.error(\"DEPRECATED! migrate to: opentype.parse(buffer, opt) See: https://github.com/opentypejs/opentype.js/issues/675\");\n}\nfunction loadSync() {\n console.error('DEPRECATED! migrate to: opentype.parse(require(\"fs\").readFileSync(url), opt)');\n}\nexport {\n bbox_default as BoundingBox,\n font_default as Font,\n glyph_default as Glyph,\n path_default as Path,\n parse_default as _parse,\n load,\n loadSync,\n parseBuffer as parse\n};\n","import React, { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport { parse } from 'opentype.js';\nimport type { Font as OpentypeFont } from 'opentype.js';\nimport { useTranslator } from '../../i18n/LocaleContext';\nimport { useFetcher } from '../../RequestContext';\nimport { useResolvedTheme } from '../../ThemeContext';\nimport { RendererError } from '../RendererError';\nimport type { RendererHandle } from '../base.types';\n\n// 字体文件魔数:用首 4 字节判断格式,比扩展名更可靠\nconst MAGIC_WOFF2 = 0x774f4632; // 'wOF2'\nconst MAGIC_WOFF = 0x774f4646; // 'wOFF'\nconst MAGIC_OTTO = 0x4f54544f; // 'OTTO' (OTF/CFF)\nconst MAGIC_TTF1 = 0x00010000; // TTF\nconst MAGIC_TRUE = 0x74727565; // 'true' (TTF on macOS)\n\ntype DetectedFormat = 'woff2' | 'woff' | 'otf' | 'ttf' | 'unknown';\n\nconst detectMagic = (buf: ArrayBuffer): DetectedFormat => {\n if (buf.byteLength < 4) return 'unknown';\n const m = new DataView(buf).getUint32(0);\n if (m === MAGIC_WOFF2) return 'woff2';\n if (m === MAGIC_WOFF) return 'woff';\n if (m === MAGIC_OTTO) return 'otf';\n if (m === MAGIC_TTF1 || m === MAGIC_TRUE) return 'ttf';\n return 'unknown';\n};\n\nexport interface FontRendererProps {\n url: string;\n}\n\ninterface FontMetadata {\n family: string;\n subfamily: string;\n version: string;\n designer: string;\n glyphCount: number;\n format: string;\n}\n\nconst DEFAULT_SAMPLES = {\n latin: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ\\nabcdefghijklmnopqrstuvwxyz\\n0123456789 .,;:!?@#$%&*()[]{}',\n chinese: '春夏秋冬东南西北天地人和风雨雷电山水日月',\n mixed: 'The Quick Brown Fox Jumps Over The Lazy Dog\\n敏捷的棕色狐狸跳过了懒狗',\n};\n\nconst SIZES = [72, 48, 36, 24, 18];\n\n// 渲染模式:FontFace 用原生字体渲染,Canvas 用 opentype.js 软渲染(兼容浏览器拒绝的字体)\ntype RenderMode = 'fontface' | 'canvas';\n\n// 元数据状态:loading(解析中)/ ready(成功)/ unavailable(不支持解析或解析失败)\ntype MetadataStatus = 'loading' | 'ready' | 'unavailable';\n\nexport const FontRenderer = forwardRef<RendererHandle, FontRendererProps>(({ url }, ref) => {\n const t = useTranslator();\n const fetcher = useFetcher();\n const resolvedTheme = useResolvedTheme();\n const [font, setFont] = useState<OpentypeFont | null>(null);\n const [metadata, setMetadata] = useState<FontMetadata | null>(null);\n const [metadataStatus, setMetadataStatus] = useState<MetadataStatus>('loading');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [customText, setCustomText] = useState('');\n const [renderMode, setRenderMode] = useState<RenderMode>('fontface');\n const fontFaceRef = useRef<FontFace | null>(null);\n\n useEffect(() => {\n if (!url) return;\n\n let mounted = true;\n\n const detectFormat = (url: string): string => {\n const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n const formatMap: Record<string, string> = {\n ttf: 'TrueType (TTF)',\n otf: 'OpenType (OTF)',\n woff: 'Web Open Font Format (WOFF)',\n woff2: 'Web Open Font Format 2 (WOFF2)',\n };\n return formatMap[ext] || 'TTF';\n };\n\n const formatLabel = (magic: DetectedFormat, url: string): string => {\n const labels: Record<DetectedFormat, string | null> = {\n woff2: 'Web Open Font Format 2 (WOFF2)',\n woff: 'Web Open Font Format (WOFF)',\n otf: 'OpenType (OTF)',\n ttf: 'TrueType (TTF)',\n unknown: null,\n };\n return labels[magic] ?? detectFormat(url);\n };\n\n // 任务 A:FontFace 原生加载(浏览器对 WOFF2 原生支持,无需 wawoff2 解压)\n const loadFontFace = async (faceBuffer: ArrayBuffer): Promise<void> => {\n try {\n const face = new FontFace('PreviewFont', faceBuffer);\n await face.load();\n if (!mounted) return;\n document.fonts.add(face);\n fontFaceRef.current = face;\n setRenderMode('fontface');\n } catch (faceErr) {\n console.warn('[FontRenderer] FontFace API rejected, fallback to Canvas:', faceErr);\n if (!mounted) return;\n setRenderMode('canvas');\n throw faceErr;\n }\n };\n\n // 任务 B:opentype 元数据解析。WOFF2 由浏览器原生渲染即可,不解析元数据\n // (opentype.js 不支持 Brotli;独立解压链路引入 emscripten wasm 与挂死风险,代价过大)\n const loadMetadata = async (\n arrayBuffer: ArrayBuffer,\n magic: DetectedFormat,\n ): Promise<void> => {\n if (magic === 'woff2') {\n // 直接标记为不可用,但保留 format 信息\n throw new Error('WOFF2 metadata parsing intentionally skipped');\n }\n\n const fontData = parse(arrayBuffer) as unknown as OpentypeFont;\n if (!fontData) {\n throw new Error('Font data is invalid');\n }\n\n // opentype.js 2.x 的 names 嵌在 platform 表下,优先 windows / macintosh / unicode,再回退 1.x 平铺\n const rawNames = (fontData.names || {}) as unknown as Record<string, unknown>;\n const platformTables = ['windows', 'macintosh', 'unicode']\n .map((k) => rawNames[k])\n .filter((t): t is Record<string, { en?: string; 'zh-Hans'?: string }> => !!t && typeof t === 'object');\n const pickName = (key: string): string => {\n for (const table of platformTables) {\n const entry = table[key];\n const val = entry?.en || entry?.['zh-Hans'];\n if (val) return val;\n }\n const flat = rawNames[key] as { en?: string; 'zh-Hans'?: string } | undefined;\n return flat?.en || flat?.['zh-Hans'] || '';\n };\n\n const meta: FontMetadata = {\n family: pickName('fontFamily') || pickName('postScriptName') || 'Unknown',\n subfamily: pickName('fontSubfamily'),\n version: pickName('version'),\n designer: pickName('designer'),\n glyphCount: fontData.numGlyphs || 0,\n format: formatLabel(magic, url),\n };\n\n if (!mounted) return;\n setFont(fontData);\n setMetadata(meta);\n setMetadataStatus('ready');\n };\n\n const run = async () => {\n try {\n setLoading(true);\n setError(null);\n setMetadataStatus('loading');\n\n const response = await fetcher(url);\n if (!response.ok) {\n throw new Error('Failed to load font file');\n }\n const arrayBuffer = await response.arrayBuffer();\n if (!mounted) return;\n\n const faceBuffer = arrayBuffer.slice(0);\n const magic = detectMagic(arrayBuffer);\n\n // 并行启动 FontFace 与 opentype 解析\n const facePromise = loadFontFace(faceBuffer);\n const metadataPromise = loadMetadata(arrayBuffer, magic);\n\n await facePromise.catch(() => {\n // FontFace 失败由 metadata 兜底\n });\n if (!mounted) return;\n setLoading(false);\n\n try {\n await metadataPromise;\n } catch (metaErr) {\n if (!mounted) return;\n // WOFF2 是“按设计跳过”,其他格式失败才需要 warn\n if (magic !== 'woff2') {\n console.warn(\n '[FontRenderer] Metadata parse failed, font is still rendered via FontFace:',\n metaErr instanceof Error ? metaErr.message : String(metaErr),\n );\n }\n setMetadataStatus('unavailable');\n setMetadata({\n family: 'Unknown',\n subfamily: '',\n version: '',\n designer: '',\n glyphCount: 0,\n format: formatLabel(magic, url),\n });\n }\n } catch (err) {\n if (!mounted) return;\n console.warn(\n '[FontRenderer] Failed to load font:',\n err instanceof Error ? err.message : String(err),\n );\n setError(t('font.load_failed'));\n setLoading(false);\n setMetadataStatus('unavailable');\n }\n };\n\n run();\n\n return () => {\n mounted = false;\n if (fontFaceRef.current) {\n document.fonts.delete(fontFaceRef.current);\n fontFaceRef.current = null;\n }\n };\n }, [url, fetcher, t]);\n\n // 暴露接口给父组件\n useImperativeHandle(ref, () => ({\n getToolbarGroups: () => [],\n }), []);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-fg-secondary\">{t('font.loading')}</div>\n </div>\n );\n }\n\n if (error || !metadata) {\n return <RendererError message={error || t('font.parse_failed')} />;\n }\n\n const displayText = customText || DEFAULT_SAMPLES.mixed;\n const metadataLoadingLabel = t('font.metadata_loading');\n const metadataUnavailableLabel = t('font.metadata_unavailable');\n const showMetaPlaceholder = metadataStatus !== 'ready';\n const metaPlaceholder = metadataStatus === 'loading' ? metadataLoadingLabel : metadataUnavailableLabel;\n // Canvas 模式必须有 font 才能绘制;没有 font(如 WOFF2 跳过解析)只能保留 FontFace 路径\n const canRenderCanvas = renderMode === 'canvas' && !!font;\n\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-w-full rfp-h-full rfp-overflow-hidden rfp-min-w-0\">\n {/* 元数据区 */}\n <div className=\"rfp-flex-shrink-0 rfp-px-6 rfp-py-4 rfp-bg-surface-1 rfp-border-b rfp-border-line-weak rfp-min-w-0\">\n <div className=\"rfp-grid rfp-grid-cols-2 rfp-gap-x-6 rfp-gap-y-2 rfp-text-sm rfp-min-w-0\">\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.family')}:</span>\n <span className=\"rfp-text-fg-primary rfp-font-semibold rfp-truncate\">\n {showMetaPlaceholder ? metaPlaceholder : metadata.family}\n </span>\n </div>\n {metadata.subfamily && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.subfamily')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.subfamily}</span>\n </div>\n )}\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.format')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.format}</span>\n </div>\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.glyphs')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">\n {showMetaPlaceholder ? metaPlaceholder : metadata.glyphCount}\n </span>\n </div>\n {metadata.designer && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.designer')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.designer}</span>\n </div>\n )}\n {metadata.version && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-min-w-0\">\n <span className=\"rfp-text-fg-tertiary rfp-flex-shrink-0\">{t('font.meta.version')}:</span>\n <span className=\"rfp-text-fg-primary rfp-truncate\">{metadata.version}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* 预览区 */}\n <div className=\"rfp-flex-1 rfp-overflow-auto rfp-min-w-0\">\n <div className=\"rfp-px-6 rfp-py-6 rfp-space-y-8 rfp-min-w-0\">\n {/* 自定义输入框 */}\n <div className=\"rfp-min-w-0\">\n <label className=\"rfp-block rfp-text-xs rfp-text-fg-tertiary rfp-mb-2\">\n {t('font.sample_text_placeholder')}\n </label>\n <textarea\n className=\"rfp-block rfp-w-full rfp-box-border rfp-px-3 rfp-py-2.5 rfp-bg-surface-2 rfp-text-fg-primary rfp-text-sm rfp-leading-relaxed rfp-border rfp-border-line rfp-rounded-md rfp-resize-y focus:rfp-outline-none focus:rfp-border-line-strong\"\n rows={2}\n placeholder={t('font.sample_text_placeholder')}\n value={customText}\n onChange={(e) => setCustomText(e.target.value)}\n style={{ minHeight: '64px', maxHeight: '160px' }}\n />\n </div>\n\n {/* 多字号展示 */}\n <div className=\"rfp-space-y-6 rfp-min-w-0\">\n {SIZES.map((size) => (\n <div key={size} className=\"rfp-space-y-2 rfp-min-w-0\">\n <div className=\"rfp-text-xs rfp-text-fg-tertiary\">{size}px</div>\n <FontPreviewLine\n font={font}\n text={displayText}\n fontSize={size}\n renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n theme={resolvedTheme}\n />\n </div>\n ))}\n </div>\n\n {/* 字符集样例 */}\n <div className=\"rfp-space-y-6 rfp-pt-6 rfp-border-t rfp-border-line-weak rfp-min-w-0\">\n <div className=\"rfp-min-w-0\">\n <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Latin Alphabet</div>\n <FontPreviewLine\n font={font}\n text={DEFAULT_SAMPLES.latin}\n fontSize={24}\n renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n theme={resolvedTheme}\n />\n </div>\n\n <div className=\"rfp-min-w-0\">\n <div className=\"rfp-text-sm rfp-text-fg-tertiary rfp-mb-3\">Chinese Characters</div>\n <FontPreviewLine\n font={font}\n text={DEFAULT_SAMPLES.chinese}\n fontSize={24}\n renderMode={canRenderCanvas ? 'canvas' : 'fontface'}\n theme={resolvedTheme}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n});\n\ninterface FontPreviewLineProps {\n font: OpentypeFont | null;\n text: string;\n fontSize: number;\n renderMode: RenderMode;\n theme: 'dark' | 'light';\n}\n\nconst FontPreviewLine: React.FC<FontPreviewLineProps> = ({ font, text, fontSize, renderMode, theme }) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const drawCanvas = useCallback(() => {\n const wrapper = wrapperRef.current;\n const canvas = canvasRef.current;\n if (!wrapper || !canvas || renderMode !== 'canvas' || !font) return;\n\n const containerWidth = wrapper.clientWidth || 600;\n const dpr = window.devicePixelRatio || 1;\n const lineHeight = fontSize * 1.4;\n const fillColor = theme === 'light' ? '#1f2937' : '#f3f4f6';\n\n const wrapLine = (line: string): string[] => {\n if (!line) return [''];\n const result: string[] = [];\n let buf = '';\n for (const ch of Array.from(line)) {\n const next = buf + ch;\n const w = font.getAdvanceWidth(next, fontSize);\n if (w > containerWidth && buf) {\n result.push(buf);\n buf = ch;\n } else {\n buf = next;\n }\n }\n if (buf) result.push(buf);\n return result;\n };\n\n const wrappedLines: string[] = [];\n text.split('\\n').forEach((seg) => {\n wrapLine(seg).forEach((l) => wrappedLines.push(l));\n });\n\n const width = containerWidth;\n const height = lineHeight * wrappedLines.length + 4;\n\n canvas.width = Math.max(1, Math.floor(width * dpr));\n canvas.height = Math.max(1, Math.floor(height * dpr));\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n wrappedLines.forEach((line, idx) => {\n const path = font.getPath(line, 0, fontSize + idx * lineHeight, fontSize);\n path.fill = fillColor;\n path.draw(ctx);\n });\n }, [font, text, fontSize, renderMode, theme]);\n\n useEffect(() => {\n if (renderMode !== 'canvas') return;\n drawCanvas();\n const wrapper = wrapperRef.current;\n if (!wrapper || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => drawCanvas());\n observer.observe(wrapper);\n return () => observer.disconnect();\n }, [drawCanvas, renderMode]);\n\n if (renderMode === 'canvas') {\n return (\n <div ref={wrapperRef} className=\"rfp-w-full\">\n <canvas ref={canvasRef} className=\"rfp-block\" />\n </div>\n );\n }\n\n return (\n <div\n ref={wrapperRef}\n className=\"rfp-w-full rfp-text-fg-primary rfp-whitespace-pre-wrap rfp-break-words\"\n style={{\n fontFamily: 'PreviewFont, sans-serif',\n fontSize: `${fontSize}px`,\n lineHeight: 1.4,\n }}\n >\n {text}\n </div>\n );\n};\n"],"names":["TINF_OK","TINF_DATA_ERROR","Tree","Data","source","dest","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","bits","base","delta","first","i","sum","tinf_build_fixed_trees","lt","dt","offs","tinf_build_tree","t","lengths2","off","num","tinf_getbit","d","bit","tinf_read_bits","val","tinf_decode_symbol","cur","len","tag","tinf_decode_trees","hlit","hdist","hclen","length","clen","sym","prev","tinf_inflate_block_data","dist","offs2","tinf_inflate_uncompressed_block","invlength","tinf_uncompress","bfinal","btype","res","derive","v0","v1","v2","v3","BoundingBox","x","y","x0","y0","x1","y1","x2","y2","p0","p1","p2","p3","b","a","c","b2ac","t1","t2","cp1x","cp1y","cp2x","cp2y","bbox_default","Path","decimalRoundingCache","roundDecimal","float","places","integerPart","decimalPart","roundedDecimalPart2","roundedDecimalPart","optimizeCommands","commands","subpaths","startX","startY","subpath","cmd","firstCommand","secondCommand","previousCommand","nextCommand","createSVGParsingOptions","options","createSVGOutputOptions","pathData","number","supportedCommands","unsupportedCommands","sign","command","buffer","isUnexpected","parseBuffer2","buffer2","makeRelative","lastCommand","applyCommand","commandType","relative","parsedBuffer","currentX","currentY","offset","prop","token","lastBuffer","flipY","flipYBase","boundingBox","path","pathOrCommands","box","prevX","prevY","ctx","layers","l","image","floatToString","v","rounded","packValues","s","commandsCopy","tempPath","svg","newPath","path_default","fail","message","argument","predicate","check_default","LIMIT16","LIMIT32","MIN_16_16","MAX_16_16","decode","encode","sizeOf","constant","fixedValue","value","m","epsilon","nibbles","ii","out","data","numBytes","codePoints","numChars","j","codepoint","eightBitMacEncodings","dataView","dataLength","encoding","table","result","macEncodingTableCache","macEncodingCacheKeys","getMacEncodingTable","e","cacheKey","cachedTable","decodingTable","encodingTable","str","isByteEncodable","encodeVarDeltaRunAsZeroes","deltas","pos","runLength","numDeltas","encodeVarDeltaRunAsBytes","encodeVarDeltaRunAsWords","offsets","encodedOffsets","offSize","offsetEncoder","encodedOffset","keys","k","enc1","enc2","type","wmm","ops","cachedValue","op","encodingFunction","sizeOfFunction","subtables","subtableOffsets","field","bytes","Table","tableName","fields","optionKeys","ushortList","itemName","list","count","tableList","records","itemCallback","recordList","Coverage","coverageTable","RangeRecord","ScriptList","scriptListTable","scriptRecord","script","defaultLangSys","langSysRecord","i2","langSys","FeatureList","featureListTable","featureRecord","feature","LookupList","lookupListTable","subtableMakers3","lookupTable","subtableCallback","ClassDef","classDefTable","table_default","getByte","getUShort","getShort","getUInt24","getULong","getLong","getFixed","decimal","fraction","getTag","getOffset","getBytes","startOffset","endOffset","bytesToString","typeOffsets","masks","Parser","string","minorBase","major","minor","amount","recordDescription","rec","fieldName","fieldType","tupleCount","axisCount","tuples","tuple","axisIndex","description","struct","valueFormat","valueRecord","valueCount","values","structOffset","relativeOffset","start","subOffsets","subList","format","ranges","langSysTable","lookupTableParsers","lookupType","lookupFlag","useMarkFilteringSet","majorVersion","minorVersion","vsOffset","variationStore","itemStoreOffset","iVStore","variationRegionListOffset","itemVariationDataCount","itemVariationDataOffsets","subtableOffset","regionCount","itemCount","wordDeltaCount","regionIndexes","regionIndexCount","entryFormat","map","mapCount","bitCount","entrySize","n","entry","outerIndex","innerIndex","longFlag","wordCount","wordParser","restParser","flavor","glyphs","glyphCount","offsetSizeIs32Bit","glyphVariationDataArrayOffset","parseOffset","glyphVariations","currentOffset","nextOffset","tableOffset","glyphIndex","tupleVariationCount","hasSharedPoints","dataOffset","headers","sharedPoints","headerData","serializedDataOffset","header","deltasOffset","deltasRelativeOffset","defineDeltas","propertyName","_deltas","_deltasY","parseDeltas","pointsCount","glyph","variationDataSize","tupleIndex","embeddedPeakTuple","intermediateRegion","privatePointNumbers","sharedTupleRecordsIndex","peakTuple","intermediateStartTuple","intermediateEndTuple","countByte1","points","totalPointCount","countByte2","lastPoint","controlByte","numbersAre16Bit","runCount","pointDelta","expectedCount","zeroData","deltaWords","parse_default","nameTableNames","macLanguages","macLanguageToScript","windowsLanguages","getLanguageCode","platformID","languageID","ltag","utf16","macScriptEncodings","macLanguageEncodings","getEncoding","encodingID","platforms","getPlatform","parseNameTable","name","p","stringOffset","nameID","property","byteLength","language","platformName","text","platform","translations","reverseDict","dict","key","makeNameRecord","findSubArray","needle","haystack","needleLength","limit","loop","addStringToPool","pool","makeNameTable","names","platformNameIds","macLanguageIds","windowsLanguageIds","nameRecords","stringPool","nameIDs","namesWithNumericKeys","nameTableIds","id","lang","macLanguage","macScript","macEncoding","macName","macNameOffset","winLanguage","winName","winNameOffset","r","getNameByID","allowedStandardIDs","nameKey","name_default","parseCmapTableFormat0","cmap","indexMap","glyphIndexMap","parseCmapTableFormat12or13","groupCount","startCharCode","endCharCode","startGlyphId","parseCmapTableFormat4","segCount","endCountParser","startCountParser","idDeltaParser","idRangeOffsetParser","glyphIndexOffset","endCount","startCount","idDelta","idRangeOffset","parseCmapTableFormat14","varSelectorList","numVarSelectorRecords","varSelector","varSelectorRecord","defaultUVSOffset","nonDefaultUVSOffset","parseCmapTable","format14Parser","format14offset","platformId","encodingId","platform0Encodings","platform3Encodings","addSegment","code","addTerminatorSegment","mergeSegments","segments","merged","curr","makeCmapTable","isPlan0Only","cmapTable","segCountToRemove","endCounts","startCounts","idDeltas","idRangeOffsets","glyphIds","cmap12Groups","segment","cmap12Length","cmap_default","cffStandardStrings","cffISOAdobeStrings","cffIExpertStrings","cffExpertSubsetStrings","cffStandardEncoding","cffExpertEncoding","standardNames","DefaultEncoding","font","CmapEncoding","CffEncoding","charset","charName","GlyphNames","post","gid","addGlyphNamesAll","charCodes","addGlyphNamesToUnicodeMap","addGlyphNames","opt","line","draw_default","parseCpalTable","version","numPaletteEntries","numPalettes","numColorRecords","colorRecordsArrayOffset","colorRecordIndices","colorRecords","makeCpalTable","palette","color","parseCPALColor","bgra","g","getPaletteColor","index","colorFormat","cpalTable","lookupIndex","formatColor","toHex","rgbToHSL","max","min","h","hslToRGB","hsla","bgraToRaw","parseColor","targetFormat","returnRaw","isRaw","validFormat","detectedColor","rgbaRegex","matches","hslaRegex","hsl","cpal_default","getPathDefinition","_path","Glyph","unicode","fontSize","hPoints","xScale","yScale","scale","useGlyph","svgImage","layer","transformedPoints","contours","currentContour","pt","xCoords","yCoords","metrics","drawCircles","scale2","blueCircles","redCircles","xMin","yMin","xMax","yMax","advanceWidth","usePath","glyph_default","defineDependentProperty","externalName","internalName","newValue","GlyphSet","done","unicodeObj","loader","glyphLoader","ttfGlyphLoader","parseGlyph2","position","buildPath2","cffGlyphLoader","parseCFFCharstring2","charstring","glyphset_default","equals","MAX_CALL_DEPTH","calcCFFSubroutineBias","subrs","bias","parseCFFIndex","conversionFn","objects","countLength","objectOffset","offsetSize","parseCFFIndexLowMemory","getCffIndexObject","parseFloatOperand","parser","lookup","n1","n2","parseOperand","b0","b1","b2","b3","b4","entriesToObject","entries","o","parseCFFDict","size","operands","operandsStart","parseBlend","getCFFString","strings","interpretDict","meta","newDict","parseCFFHeader","TOP_DICT_META","TOP_DICT_META_CFF2","PRIVATE_DICT_META","PRIVATE_DICT_META_CFF2","FONT_DICT_META","parseCFFTopDict","parseCFFPrivateDict","parseFontDict","gatherCFF2FontDicts","fdArray","fontDictArray","fontDictData","fontDict","privateSize","privateOffset","privateDict","subrOffset","subrIndex","gatherCFFTopDicts","cffIndex","topDictArray","iTopDict","topDictData","topDict","parseCFFCharset","nGlyphs","isCIDFont","sid","parseCFFEncoding","nCodes","nRanges","nLeft","numberOfBlends","applyPaintType","paintType","parseCFFCharstring","coords","c1x","c1y","c2x","c2y","stack","nStems","haveWidth","open","subrsBias","defaultWidthX","nominalWidthX","vsindex","vstore","blendVector","callDepth","cffTable","variationCoords","fdIndex","fdDict","width","newContour","parseStems","hasWidthArg","parse","code2","codeIndex","subrCode","jpx","jpy","c3x","c3y","c4x","c4y","acharName","bcharName","ady","adx","acharGlyphIndex","bcharGlyphIndex","acharGlyph","shiftedCommands","deltaSetCount","deltaSetIndex","parseCFFFDSelect","fdArrayCount","fdSelect","iGid","next","iRange","parseCFFTable","resultTable","nameIndex","topDictIndex","stringIndex","globalSubrIndex","topDictOffset","fdArrayIndexOffset","fdSelectOffset","fdArrayIndex","fdArrayOffset","privateDictOffset","charStringsIndex","charString","encodeString","makeHeader","makeNameIndex","fontNames","makeDict","attrs","makeTopDict","makeTopDictIndex","makeStringIndex","makeGlobalSubrIndex","makeCharsets","glyphNames","glyphName","glyphSID","glyphToOps","dx","dy","_13","_23","dx1","dy1","dx2","dy2","makeCharStringsIndex","makePrivateDict","makeCFFTable","fontScale","topDictOptions","privateAttrs","cff_default","parseHeadTable","head","makeHeadTable","timestamp","createdTimestamp","macStyle","head_default","parseHheaTable","hhea","makeHheaTable","hhea_default","parseHmtxTableAll","numMetrics","numGlyphs","leftSideBearing","parseHmtxTableOnLowMemory","parseHmtxTable","makeHmtxTable","hmtx_default","makeLtagTable","tags","stringPoolOffset","parseLtagTable","tableVersion","numTags","ltag_default","parseMaxpTable","maxp","makeMaxpTable","maxp_default","unicodeRanges","getUnicodeRange","range","parseOS2Table","os2","makeOS2Table","os2_default","parsePostTable","nameLength","makePostTable","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","post_default","subtableParsers","substFormat","lookupRecordDesc","substCount","extensionLookupType","extensionParser","parseGsubTable","subtableMakers","subtable","sequenceSet","alternateSet","ligatureSet","ligature","sequenceRuleSet","sequenceRule","tableData","record","classSeqRuleSet","classSeqRule","coverage","chainRuleSet","chainRule","makeGsubTable","gsub","gsub_default","parseMetaTable","numDataMaps","makeMetaTable","meta_default","parseColrTable","numBaseGlyphRecords","baseGlyphRecordsOffset","layerRecordsOffset","numLayerRecords","baseGlyphRecords","layerRecords","makeColrTable","colr_default","makeFvarAxis","axis","parseFvarAxis","axisNameID","makeFvarInstance","inst","axes","optionalFields","axisTag","parseFvarInstance","instanceSize","subfamilyNameID","postScriptNameID","makeFvarTable","fvar","parseFvarTable","offsetToData","axisSize","instanceCount","instances","instanceStart","fvar_default","axisRecordStruct","axisValueParsers","parseSTATAxisValue","valueTableFormat","axisValueParser","formatStub","parseSTATTable","tableVersionMajor","tableVersionMinor","designAxisSize","designAxisCount","designAxesOffset","axisValueCount","offsetToAxisValueOffsets","elidedFallbackNameID","valueOffsets","axisValueMakers","returnFields","makeSTATAxisRecord","makeSTATValueTable","axisValueMaker","makeSTATTable","STAT","axisRecord","axisValueOffsets","axisValueTables","axisValueTableOffset","axisValueTable","stat_default","makeAvarAxisValueMap","axisValueMap","makeAvarSegmentMap","returnTable","axisValueMaps","valueMap","makeAvarTable","avar","parseAvarTable","axisSegmentMaps","positionMapCount","fromCoordinate","toCoordinate","avar_default","parseCvarTable","cvt","cvtVariations","makeCvarTable","cvar_default","parseGvarTable","sharedTupleCount","sharedTuples","makeGvarTable","gvar_default","parseGaspTable","gasp","makeGaspTable","gasp_default","parseSvgTable","svgTable","buf","svgDocumentListOffset","numEntries","svgDocMap","startGlyphID","endGlyphID","svgDocOffset","svgDocLength","svgDoc","makeSvgTable","documentRecords","documentBuffers","documentOffsets","nextSvgDocOffset","glyphId","numDocuments","documentsOffset","fieldIndex","namePrefix","svg_default","log2","computeCheckSum","makeTableRecord","checkSum","makeSfntTable","tables","sfnt","highestPowerOf2","recordFields","tableFields","tableLength","tableRecord","r1","r2","metricsForChar","chars","notFoundMetrics","average","vs","fontToSfntTable","xMins","yMins","xMaxs","yMaxs","advanceWidths","leftSideBearings","rightSideBearings","firstCharIndex","lastCharIndex","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","globals","headTable","hheaTable","maxpTable","os2Table","hmtxTable","englishFamilyName","englishStyleName","englishFullName","postScriptName","fontNamesUnicode","fontNamesMacintosh","fontNamesWindows","manufacturer","languageTags","nameTable","ltagTable","postTable","metaTable","optionalTables","optionalTableArgs","sfntTable","checkSumAdjusted","sfnt_default","searchTag","arr","imin","imax","imid","binSearch","searchRange","Layout","create","layout","hasLatn","scripts","scr","scriptTable","langSysTable2","featIndexes","allFeatures","featureTable","lookupListIndexes","allLookups","end","layout_default","Position","kerningLookups","leftIndex","rightIndex","covIndex","pairSet","pair","class1","class2","position_default","arraysEqual","ar1","ar2","binarySearch","array","low","high","mid","recordValue","binarySearchIndex","element","binarySearchInsert","compare","isGzip","unGzip","gzip","flg","isize","copyPoint","copyComponent","Substitution","getSubstFormat","defaultSubtable","substitutions","lookupTables","idx","substitute","replacements","alternates","alternateSets","ligatures","ligatureSets","startGlyph","ligSet","lig","substitution","coverageGlyph","ligComponents","ligatureTable","sub","substitution_default","PaletteManager","palettes","cpal","startIndex","paletteColors","color2","colors","_colorCount","newCount","paletteIndex","colorCount","colorIndex","replacementIndex","updatedPalettes","updatedPalette","colrTable","currentIndex","replacementShift","flattenedPalettes","paletteCount","LayerManager","colr","baseGlyph","firstIndex","numLayers","currentLayers","newLayers","glyphID","layerIndex","newBaseGlyphRecord","baseGlyphRecord","originalNumLayers","newNumLayers","layerDiff","sibling","SVGImageManager","svgImageCacheEntry","svgBuf","svgDocCacheEntry","createSvgDocCacheEntry","createSvgImageCacheEntry","error","decodeSvgDocument","makeSvgTemplate","svgTemplatePromise","svgTemplate","svgText","makeSvgImage","decodeSvgDocumentWithDecompressionStream","decodeSvgDocumentWithTinyInflate","documentStart","contentStart","contentEnd","unitsPerEm","viewBoxVal","widthVal","heightVal","div","bbox","baseline","height","_resolving","parseGlyphCoordinate","flag","previousValue","shortVectorBitMask","sameBitMask","parseGlyph","flags","endPointIndices","numberOfCoordinates","repeatCount","point","px","py","moreComponents","component","transformPoints","transform","newPoints","newPt","getContours","getPath","contourIndex","contour","next2","buildPath","resolving","componentGlyph","firstPt","secondPt","parseGlyfTableAll","loca","parseGlyfTableOnLowMemory","parseGlyfTable","glyf_default","VariationProcessor","padded","normalized","tagValue","glyphPoints","deltaMap","pointIndex","firstPoint","endPoint","firstDelta","curDelta","ref1","ref2","iterable","in1","in2","out1","out2","ref","deltaX","deltaY","tuplePoints","factor","pointsIndex","componentTransform","deltaIndex","transformedComponentPoints","variationData","args","normalizedCoords","tupleCoords","interpolatedPoints","hasBlend","hasPoints","transformedGlyph","blendPath","parameter","mapSize","itemStore","varData","deltaSet","netAdjustment","master","itemIndex","scalar","regionIndex","axisScalar","VariationManager","defaultInstance","acc","defaultCoordinates","defaultInstanceIndex","instance","coordinates","instanceIdOrObject","MAX_INSTRUCTIONS","MAX_CALL_DEPTH2","MAX_LOOP_COUNT","instructionTable","exec","execGlyph","execComponent","Hinting","roundOff","roundToGrid","roundToDoubleGrid","roundToHalfGrid","roundUpToGrid","roundDownToGrid","roundSuper","period","phase","threshold","xUnitVector","o1","o2","rp1","rp2","pv","do1","do2","doa1","doa2","dm1","dm2","rp","org","rpx","rpy","rpdx","rpdy","yUnitVector","UnitVector","pvns","fvs","getUnitVector","HPoint","lastPointOfContour","onCurve","HPZero","defaultState","State","env","prog","ppem","prepState","fpgmState","oCvt","components","gZone","state","cg","gz","cc","pi","gLen","pLen","cp","sp","np","ins","initTZone","tZone","skip","handleElse","ip","nesting","SVTCA","SPVTCA","SFVTCA","SPVTL","p2i","p1i","SFVTL","SPVFS","SFVFS","GPV","GFV","fv","SFVTPV","ISECT","pa0i","pa1i","pb0i","pb1i","z0","z1","pa0","pa1","pb0","pb1","x3","y3","x4","y4","f1","f2","SRP0","SRP1","SRP2","SZP0","SZP1","SZP2","SZPS","SLOOP","RTG","RTHG","SMD","ELSE","JMPR","SCVTCI","DUP","POP","CLEAR","SWAP","DEPTH","LOOPCALL","fn","cip","cprog","CALL","CINDEX","MINDEX","FDEF","ipBegin","MDAP","round","IUP","z2","pp","SHP","rpi","SHC","ci","SHZ","z","SHPIX","IP","rp1i","rp2i","MSIRP","rp0","ALIGNRP","rp0i","RTDG","MIAP","cv","NPUSHB","NPUSHW","w","WS","store","RS","WCVTP","RCVT","cvte","GC","MD","pi2","pi1","MPPEM","FLIPON","LT","e2","e1","LTEQ","GT","GTEQ","EQ","NEQ","ODD","EVEN","IF","EIF","AND","OR","NOT","DELTAP123","ds","arg","mag","SDB","SDS","ADD","SUB","DIV","MUL","ABS","NEG","FLOOR","CEILING","ROUND","WCVTF","DELTAC123","SROUND","S45ROUND","ROFF","RUTG","RDTG","SCANCTRL","SDPVTL","GETINFO","sel","ROLL","MAX","MIN","SCANTYPE","INSTCTRL","PUSHB","PUSHW","MDRP_MIRP","indirect","setRp0","keepD","ro","md","hintingtt_default","Token","char","ContextRange","contextName","ContextChecker","checkStart","checkEnd","ContextParams","context","Event","eventId","initializeCoreEvents","events","coreEvents","event","requiresContextUpdate","Tokenizer","stateId","RUDs","RUD","hasFAILObject","obj","tokens","silent","isTokenType","replaced","modifierId","condition","modifier","contextParams","conditionParams","canApplyModifier","modifierParams","newStateValue","eventHandler","subsId","eventName","contextStartCheck","contextEndCheck","contextCheckers","endIndex","registeredContexts","contextChecker","openRange","tokenizer_default","isArabicChar","isIsolatedArabicChar","isTashkeelArabicChar","isThaiChar","isLatinChar","isWhiteSpace","FeatureQuery","SubstitutionAction","action","lookupCoverage","singleSubstitutionFormat1","singleSubstitutionFormat2","substituteIndex","lookupCoverageList","coverageList","lookupList","chainingSubstitutionFormat3","lookupsCount","inputLookups","lookaheadOffset","lookaheadContext","lookaheadParams","lookaheadLookups","backtrackContext","backtrackParams","backtrackLookups","contextRulesMatch","lookupRecord","lookupListIndex","subtable2","substitutionType","ligatureSubstitutionFormat1","ligSetIndex","lookaheadItem","contextSubstitutionFormat1","ruleSet","rule","matched","substitutions2","sequenceIndex","contextSubstitutionFormat3","decompositionSubstitutionFormat1","scriptTag","langSysRecords","features","featuresIndexes","query","lookups","substType","supportedScript","supportedFeature","scriptFeatures","featureQuery_default","arabicWordStartCheck","prevChar","arabicWordEndCheck","nextChar","arabicWord_default","arabicSentenceStartCheck","arabicSentenceEndCheck","nextIsWhitespace","arabicCharAhead","arabicSentence_default","singleSubstitutionFormat12","singleSubstitutionFormat22","chainingSubstitutionFormat32","subst","ligatureSubstitutionFormat12","compsCount","SUBSTITUTIONS","applySubstitution","applySubstitution_default","willConnectPrev","charContextParams","backtrack","isolated","tashkeel","willConnectNext","arabicPresentationForms","CONNECT","arabicPresentationForms_default","getContextParams","arabicRequiredLigatures","arabicRequiredLigatures_default","ccmpReplacementStartCheck","ccmpReplacementEndCheck","ccmpReplacement_default","getContextParams2","ccmpReplacementLigatures","ccmpReplacementLigatures_default","latinWordStartCheck","latinWordEndCheck","latinWord_default","getContextParams3","latinLigature","latinLigatures_default","thaiWordStartCheck","thaiWordEndCheck","thaiWord_default","getContextParams4","thaiGlyphComposition","thaiGlyphComposition_default","getContextParams5","thaiLigatures","thaiLigatures_default","getContextParams6","thaiRequiredLigatures","thaiRequiredLigatures_default","isVariationSequenceSelector","charCode","unicodeVariationSequenceStartCheck","unicodeVariationSequenceEndCheck","variationSequenceCheck_default","unicodeVariationSequence","baseCodePoint","vsCodePoint","selectorLookup","mappings","replacementGlyphId","variationSequences_default","Bidi","baseDir","registerContextChecker","checkId","check","tokenizeText","reverseArabicSentences","rangeTokens","supportedTags","f","checkGlyphIndexStatus","applyArabicPresentationForms","applyCcmpReplacement","applyArabicRequireLigatures","applyLatinLigatures","applyUnicodeVariationSequences","applyThaiFeatures","contextId","indexes","bidi_default","createDefaultNamesInfo","Font","selection","bidi","charToGlyphIndexMod","notdef","leftGlyph","rightGlyph","gposKerning","callback","kerningValue","fullPath","gX","gY","gFontSize","glyphPath","glyphPaths","warnings","_this","assert","assertNamePresent","englishName","baseGlyphs","previousID","currentGlyphID","intArray","font_default","parseHvarTable","itemVariationStore","lsb","rsb","makeHvarTable","hvar_default","attachList","caretValue","ligGlyph","ligCaretList","markGlyphSets","parseGDEFTable","gdef","gdef_default","subtableParsers2","posformat","posFormat","valueFormat1","valueFormat2","classDef1","classDef2","class1Count","class2Count","parseGposTable","subtableMakers2","makeGposTable","gpos","gpos_default","parseWindowsKernTable","pairs","subtableVersion","nPairs","parseMacKernTable","parseKernTable","kern_default","parseLocaTable","shortVersion","parseFn","glyphOffsets","glyphOffset","loca_default","parseOpenTypeTableEntries","numTables","tableEntries","checksum","parseWOFFTableEntries","compLength","origLength","compression","uncompressTable","tableEntry","inBuffer","outBuffer","parseBuffer","indexToLocFormat","signature","issue","cffTableEntry","cff2TableEntry","fvarTableEntry","statTableEntry","gvarTableEntry","cvarTableEntry","avarTableEntry","glyfTableEntry","gdefTableEntry","gposTableEntry","gsubTableEntry","hmtxTableEntry","hvarTableEntry","kernTableEntry","locaTableEntry","nameTableEntry","metaTableEntry","locaTable","locaOffsets","glyfTable","cffTable2","kernTable","gdefTable","gposTable","gsubTable","fvarTable","statTable","gvarTable","cvarTable","avarTable","hvarTable","MAGIC_WOFF2","MAGIC_WOFF","MAGIC_OTTO","MAGIC_TTF1","MAGIC_TRUE","detectMagic","DEFAULT_SAMPLES","SIZES","FontRenderer","forwardRef","url","useTranslator","fetcher","useFetcher","resolvedTheme","useResolvedTheme","setFont","useState","metadata","setMetadata","metadataStatus","setMetadataStatus","loading","setLoading","setError","customText","setCustomText","renderMode","setRenderMode","fontFaceRef","useRef","useEffect","mounted","detectFormat","ext","formatLabel","magic","loadFontFace","faceBuffer","face","faceErr","loadMetadata","arrayBuffer","fontData","rawNames","platformTables","pickName","flat","response","facePromise","metadataPromise","metaErr","err","useImperativeHandle","jsx","RendererError","displayText","metadataLoadingLabel","metadataUnavailableLabel","showMetaPlaceholder","metaPlaceholder","canRenderCanvas","jsxs","FontPreviewLine","theme","wrapperRef","canvasRef","drawCanvas","useCallback","wrapper","canvas","containerWidth","dpr","lineHeight","fillColor","wrapLine","ch","wrappedLines","seg","observer"],"mappings":"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AAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP,GACIC,KAAsB;AAAA,EACxB,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,GAAG;AAAA;AAAA,EAEH,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAEP,GACIC,KAAmB;AAAA,EACrB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAqB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAyB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAsB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAgB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAgBC,GAAM;AAC7B,OAAK,OAAOA;AACd;AACAD,GAAgB,UAAU,mBAAmB,SAASjb,GAAG;AACvD,QAAMuZ,IAAOvZ,EAAE,YAAY,CAAC,GACtBm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AA,EAE1B,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EA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pCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EA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","x_google_ignoreList":[0]}