{"version":3,"sources":["jsdelivr-header.js","/npm/@betterboards/svg-to-pdfkit@0.1.10/source.js"],"names":[],"mappings":"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","file":"/npm/@betterboards/svg-to-pdfkit@0.1.10/source.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/@betterboards/svg-to-pdfkit@0.1.10/source.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var SVGtoPDF = function(doc, svg, x, y, options) {\r\n    \"use strict\";\r\n\r\n    const NamedColors = {aliceblue: [240,248,255], antiquewhite: [250,235,215], aqua: [0,255,255], aquamarine: [127,255,212], azure: [240,255,255], beige: [245,245,220], bisque: [255,228,196], black: [0,0,0], blanchedalmond: [255,235,205], blue: [0,0,255], blueviolet: [138,43,226], brown: [165,42,42], burlywood: [222,184,135], cadetblue: [95,158,160], chartreuse: [127,255,0],\r\n      chocolate: [210,105,30], coral: [255,127,80], cornflowerblue: [100,149,237], cornsilk: [255,248,220], crimson: [220,20,60], cyan: [0,255,255], darkblue: [0,0,139], darkcyan: [0,139,139], darkgoldenrod: [184,134,11], darkgray: [169,169,169], darkgrey: [169,169,169], darkgreen: [0,100,0], darkkhaki: [189,183,107], darkmagenta: [139,0,139], darkolivegreen: [85,107,47],\r\n      darkorange: [255,140,0], darkorchid: [153,50,204], darkred: [139,0,0], darksalmon: [233,150,122], darkseagreen: [143,188,143], darkslateblue: [72,61,139], darkslategray: [47,79,79], darkslategrey: [47,79,79], darkturquoise: [0,206,209], darkviolet: [148,0,211], deeppink: [255,20,147], deepskyblue: [0,191,255], dimgray: [105,105,105], dimgrey: [105,105,105],\r\n      dodgerblue: [30,144,255], firebrick: [178,34,34], floralwhite: [255,250,240], forestgreen: [34,139,34], fuchsia: [255,0,255], gainsboro: [220,220,220], ghostwhite: [248,248,255], gold: [255,215,0], goldenrod: [218,165,32], gray: [128,128,128], grey: [128,128,128], green: [0,128,0], greenyellow: [173,255,47], honeydew: [240,255,240], hotpink: [255,105,180],\r\n      indianred: [205,92,92], indigo: [75,0,130], ivory: [255,255,240], khaki: [240,230,140], lavender: [230,230,250], lavenderblush: [255,240,245], lawngreen: [124,252,0], lemonchiffon: [255,250,205], lightblue: [173,216,230], lightcoral: [240,128,128], lightcyan: [224,255,255], lightgoldenrodyellow: [250,250,210], lightgray: [211,211,211], lightgrey: [211,211,211],\r\n      lightgreen: [144,238,144], lightpink: [255,182,193], lightsalmon: [255,160,122], lightseagreen: [32,178,170], lightskyblue: [135,206,250], lightslategray: [119,136,153], lightslategrey: [119,136,153], lightsteelblue: [176,196,222], lightyellow: [255,255,224], lime: [0,255,0], limegreen: [50,205,50], linen: [250,240,230], magenta: [255,0,255], maroon: [128,0,0],\r\n      mediumaquamarine: [102,205,170], mediumblue: [0,0,205], mediumorchid: [186,85,211], mediumpurple: [147,112,219], mediumseagreen: [60,179,113], mediumslateblue: [123,104,238], mediumspringgreen: [0,250,154], mediumturquoise: [72,209,204], mediumvioletred: [199,21,133], midnightblue: [25,25,112], mintcream: [245,255,250], mistyrose: [255,228,225], moccasin: [255,228,181],\r\n      navajowhite: [255,222,173], navy: [0,0,128], oldlace: [253,245,230], olive: [128,128,0], olivedrab: [107,142,35], orange: [255,165,0], orangered: [255,69,0], orchid: [218,112,214], palegoldenrod: [238,232,170], palegreen: [152,251,152], paleturquoise: [175,238,238], palevioletred: [219,112,147], papayawhip: [255,239,213], peachpuff: [255,218,185], peru: [205,133,63],\r\n      pink: [255,192,203], plum: [221,160,221], powderblue: [176,224,230], purple: [128,0,128], rebeccapurple: [102,51,153], red: [255,0,0], rosybrown: [188,143,143], royalblue: [65,105,225], saddlebrown: [139,69,19], salmon: [250,128,114], sandybrown: [244,164,96], seagreen: [46,139,87], seashell: [255,245,238], sienna: [160,82,45], silver: [192,192,192], skyblue: [135,206,235],\r\n      slateblue: [106,90,205], slategray: [112,128,144], slategrey: [112,128,144], snow: [255,250,250], springgreen: [0,255,127], steelblue: [70,130,180], tan: [210,180,140], teal: [0,128,128], thistle: [216,191,216], tomato: [255,99,71], turquoise: [64,224,208], violet: [238,130,238], wheat: [245,222,179], white: [255,255,255], whitesmoke: [245,245,245], yellow: [255,255,0]};\r\n    const DefaultColors = {black: [NamedColors.black, 1], white: [NamedColors.white, 1], transparent: [NamedColors.black, 0]};\r\n    const Entities = {quot: 34, amp: 38, lt: 60, gt: 62, apos: 39, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, circ: 710, tilde: 732, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, permil: 8240, lsaquo: 8249,\r\n      rsaquo: 8250, euro: 8364, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190,\r\n      iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221,\r\n      THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252,\r\n      yacute: 253, thorn: 254, yuml: 255, fnof: 402, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949,\r\n      zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, bull: 8226, hellip: 8230, prime: 8242, Prime: 8243, oline: 8254, frasl: 8260, weierp: 8472, image: 8465, real: 8476,\r\n      trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744,\r\n      cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830};\r\n    const PathArguments = {A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0};\r\n    const PathFlags = {A3: true, A4: true, a3: true, a4: true};\r\n    const Properties = {\r\n      'color':              {inherit: true, initial: undefined},\r\n      'visibility':         {inherit: true, initial: 'visible', values: {'hidden': 'hidden', 'collapse': 'hidden', 'visible':'visible'}},\r\n      'fill':               {inherit: true, initial: DefaultColors.black},\r\n      'stroke':             {inherit: true, initial: 'none'},\r\n      'stop-color':         {inherit: false, initial: DefaultColors.black},\r\n      'fill-opacity':       {inherit: true, initial: 1},\r\n      'stroke-opacity':     {inherit: true, initial: 1},\r\n      'stop-opacity':       {inherit: false, initial: 1},\r\n      'fill-rule':          {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\r\n      'clip-rule':          {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\r\n      'stroke-width':       {inherit: true, initial: 1},\r\n      'stroke-dasharray':   {inherit: true, initial: []},\r\n      'stroke-dashoffset':  {inherit: true, initial: 0},\r\n      'stroke-miterlimit':  {inherit: true, initial: 4},\r\n      'stroke-linejoin':    {inherit: true, initial: 'miter', values: {'miter':'miter', 'round':'round', 'bevel':'bevel'}},\r\n      'stroke-linecap':     {inherit: true, initial: 'butt', values: {'butt':'butt', 'round':'round', 'square':'square'}},\r\n      'font-size':          {inherit: true, initial: 16, values: {'xx-small':9, 'x-small':10, 'small':13, 'medium':16, 'large':18, 'x-large':24, 'xx-large':32}},\r\n      'font-family':        {inherit: true, initial: 'sans-serif'},\r\n      'font-weight':        {inherit: true, initial: 'normal', values: {'600':'bold', '700':'bold', '800':'bolder', '900':'bolder', 'bold':'bold', 'bolder':'bolder', '500':'normal', '400':'normal', '300':'normal', '200':'normal', '100':'normal', 'normal':'normal', 'lighter':'normal'}},\r\n      'font-style':         {inherit: true, initial: 'normal', values: {'italic':'italic', 'oblique':'italic', 'normal':'normal'}},\r\n      'text-anchor':        {inherit: true, initial: 'start', values: {'start':'start', 'middle':'middle', 'end':'end'}},\r\n      'direction':          {inherit: true, initial: 'ltr', values: {'ltr':'ltr', 'rtl':'rtl'}},\r\n      'dominant-baseline':  {inherit: true, initial: 'baseline', values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\r\n      'alignment-baseline': {inherit: false, initial: undefined, values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\r\n      'baseline-shift':     {inherit: true, initial: 'baseline', values: {'baseline':'baseline', 'sub':'sub', 'super':'super'}},\r\n      'word-spacing':       {inherit: true, initial: 0, values: {normal:0}},\r\n      'letter-spacing':     {inherit: true, initial: 0, values: {normal:0}},\r\n      'text-decoration':    {inherit: false, initial: 'none', values: {'none':'none', 'underline':'underline', 'overline':'overline', 'line-through':'line-through'}},\r\n      'xml:space':          {inherit: true, initial: 'default', css: 'white-space', values: {'preserve':'preserve', 'default':'default', 'pre':'preserve', 'pre-line':'preserve', 'pre-wrap':'preserve', 'nowrap': 'default'}},\r\n      'marker-start':       {inherit: true, initial: 'none'},\r\n      'marker-mid':         {inherit: true, initial: 'none'},\r\n      'marker-end':         {inherit: true, initial: 'none'},\r\n      'opacity':            {inherit: false, initial: 1},\r\n      'transform':          {inherit: false, initial: [1, 0, 0, 1, 0, 0]},\r\n      'display':            {inherit: false, initial: 'inline', values: {'none':'none', 'inline':'inline', 'block':'inline'}},\r\n      'clip-path':          {inherit: false, initial: 'none'},\r\n      'mask':               {inherit: false, initial: 'none'},\r\n      'overflow':           {inherit: false, initial: 'hidden', values: {'hidden':'hidden', 'scroll':'hidden', 'visible':'visible'}},\r\n      'vector-effect':      {inherit: true, initial: 'none', values: {'none':'none', 'non-scaling-stroke':'non-scaling-stroke'}}\r\n    };\r\n\r\n    function docBeginGroup(bbox) {\r\n      let group = new (function PDFGroup() {})();\r\n      group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\r\n      group.resources = doc.ref();\r\n      group.xobj = doc.ref({\r\n        Type: 'XObject',\r\n        Subtype: 'Form',\r\n        FormType: 1,\r\n        BBox: bbox,\r\n        Group: {S: 'Transparency', CS: 'DeviceRGB', I: true, K: false},\r\n        Resources: group.resources\r\n      });\r\n      group.xobj.write('');\r\n      group.savedMatrix = doc._ctm;\r\n      group.savedPage = doc.page;\r\n      groupStack.push(group);\r\n      doc._ctm = [1, 0, 0, 1, 0, 0];\r\n      doc.page = {\r\n        width: doc.page.width, height: doc.page.height,\r\n        write: function(data) {group.xobj.write(data);},\r\n        fonts: {}, xobjects: {}, ext_gstates: {}, patterns: {}\r\n      };\r\n      return group;\r\n    }\r\n    function docEndGroup(group) {\r\n      if (group !== groupStack.pop()) {throw('Group not matching');}\r\n      if (Object.keys(doc.page.fonts).length) {group.resources.data.Font = doc.page.fonts;}\r\n      if (Object.keys(doc.page.xobjects).length) {group.resources.data.XObject = doc.page.xobjects;}\r\n      if (Object.keys(doc.page.ext_gstates).length) {group.resources.data.ExtGState = doc.page.ext_gstates;}\r\n      if (Object.keys(doc.page.patterns).length) {group.resources.data.Pattern = doc.page.patterns;}\r\n      group.resources.end();\r\n      group.xobj.end();\r\n      doc._ctm = group.savedMatrix;\r\n      doc.page = group.savedPage;\r\n    }\r\n    function docInsertGroup(group) {\r\n      doc.page.xobjects[group.name] = group.xobj;\r\n      doc.addContent('/' + group.name + ' Do');\r\n    }\r\n    function docApplyMask(group, clip) {\r\n      let name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\r\n      let gstate = doc.ref({\r\n        Type: 'ExtGState', CA: 1, ca: 1, BM: 'Normal',\r\n        SMask: {S: 'Luminosity', G: group.xobj, BC: (clip ? [0, 0, 0] : [1, 1, 1])}\r\n      });\r\n      gstate.end();\r\n      doc.page.ext_gstates[name] = gstate;\r\n      doc.addContent('/' + name + ' gs');\r\n    }\r\n    function docCreatePattern(group, dx, dy, matrix) {\r\n      let pattern = {\r\n        type: 'PDFPattern',\r\n        group: group,\r\n        dx: dx,\r\n        dy: dy,\r\n        matrix: matrix || [1, 0, 0, 1, 0, 0],\r\n      }\r\n      return pattern;\r\n    }\r\n    function docUsePattern(pattern, stroke) {\r\n      let name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\r\n      let ref = doc.ref({\r\n        Type: 'Pattern', PatternType: 1, PaintType: 1, TilingType: 2,\r\n        BBox: [0, 0, pattern.dx, pattern.dy], XStep: pattern.dx, YStep: pattern.dy,\r\n        Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\r\n        Resources: {\r\n          ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n          XObject: (function() {let temp = {}; temp[pattern.group.name] = pattern.group.xobj; return temp;})()\r\n        }\r\n      });\r\n      ref.write('/' + pattern.group.name + ' Do');\r\n      ref.end();\r\n      doc.page.patterns[name] = ref;\r\n      if (stroke) {\r\n        doc.addContent('/Pattern CS');\r\n        doc.addContent('/' + name + ' SCN');\r\n      } else {\r\n        doc.addContent('/Pattern cs');\r\n        doc.addContent('/' + name + ' scn');\r\n      }\r\n    }\r\n    function docBeginText(font, size) {\r\n      if (!doc.page.fonts[font.id]) {doc.page.fonts[font.id] = font.ref();}\r\n      doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\r\n    }\r\n    function docSetTextMatrix(a, b, c, d, e, f) {\r\n      doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' '  + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\r\n    }\r\n    function docSetTextMode(fill, stroke) {\r\n      let mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\r\n      doc.addContent(mode + ' Tr');\r\n    }\r\n    function docWriteGlyphs(positions, font) {\r\n      let commands = [];\r\n      let commandStr = '';\r\n      const skew = font.fauxItalic ? -0.25 : 0;\r\n\r\n      // Add the given character to the 'TJ' command string.\r\n      function addChar(char) {\r\n        commandStr += char.glyph;\r\n        if (char.kern === 0) return;\r\n        commands.push(`<${commandStr}> ${validateNumber(char.kern)}`);\r\n        commandStr = '';\r\n      };\r\n\r\n      // Flush the current TJ command string to the output stream.\r\n      function flush() {\r\n        if (commandStr.length) {\r\n          commands.push(`<${commandStr}> 0`);\r\n          commandStr = '';\r\n        }\r\n        if (commands.length) {\r\n          doc.addContent(`[${commands.join(' ')}] TJ`);\r\n          commands = [];\r\n        }\r\n      };\r\n\r\n      for (let i = 0; i < positions.length; i++) {\r\n        const pos = positions[i];\r\n\r\n        if (pos.hidden || isEqual(pos.width, 0)) {\r\n          flush();\r\n          continue;\r\n        }\r\n\r\n        if (pos.continuous) {\r\n          addChar(pos);\r\n          continue;\r\n        }\r\n\r\n        // If this character is non-continuous, flush the command buffer.\r\n        flush();\r\n\r\n        // Start a new TJ command after writing a Text Matrix (Tm)\r\n        const cos = Math.cos(pos.rotate);\r\n        const sin = Math.sin(pos.rotate);\r\n        docSetTextMatrix(cos * pos.scale, sin * pos.scale, cos * skew - sin, sin * skew + cos, pos.x, pos.y);\r\n        addChar(pos);\r\n      };\r\n\r\n      // Flush any remaining characters in the buffer.\r\n      flush();\r\n    }\r\n    function docEndText() {\r\n      doc.addContent('ET');\r\n    }\r\n    function docFillColor(color) {\r\n      if (color[0].type === 'PDFPattern') {\r\n        doc.fillOpacity(color[1]);\r\n        docUsePattern(color[0], false);\r\n      } else {\r\n        doc.fillColor(color[0], color[1]);\r\n      }\r\n    }\r\n    function docStrokeColor(color) {\r\n      if (color[0].type === 'PDFPattern') {\r\n        doc.strokeOpacity(color[1]);\r\n        docUsePattern(color[0], true);\r\n      } else {\r\n        doc.strokeColor(color[0], color[1]);\r\n      }\r\n    }\r\n    // PDFKit doesn't accept any 0s in the dash array, but that's perfectly\r\n    // valid in SVG. So this function applys a dash array and offset, detecting\r\n    // any 0s in the dash array and updating it and the dash offset as needed to\r\n    // remove the zeros, but preserve the end result.\r\n    //\r\n    // `dashArray` must have an even number of elements\r\n    function docApplyDash(dashArray, dashOffset) {\r\n      let index;\r\n      // Anytime there's a 0 that isn't the first or last element of the array,\r\n      // we can remove it by combining the previous or next value. If it's a\r\n      // dash, then it's a zero-length dash between two spaces, so the dash can\r\n      // be eliminated and spaces combined by summing them, replacing all three\r\n      // values with the sum of the two spaces. If the 0 value is a space, then\r\n      // it's a zero-length space between two dashes, and the dashes can be\r\n      // similarly combined. So first we run that logic iteratively to remove\r\n      // all the 0s from the dash array that aren't the first or last element.\r\n      // Note that because we replace 3 values with one value, this doesn't\r\n      // change the even-ness of the length of dashArray.\r\n      while ((index = dashArray.slice(1, -1).indexOf(0)) !== -1) {\r\n        let actualIndex = index + 1;\r\n        let replacementValue = dashArray[actualIndex - 1] + dashArray[actualIndex + 1];\r\n        dashArray = dashArray\r\n          .slice(0, actualIndex - 1)\r\n          .concat([replacementValue])\r\n          .concat(dashArray.slice(actualIndex + 2));\r\n      }\r\n\r\n      // The stroke array only having two elements (a dash value and space\r\n      // value) is a special case.\r\n      if (dashArray.length === 2) {\r\n        if (dashArray[0] === 0) {\r\n          // Regardless of the space value, the dash length is zero, so we're\r\n          // not actually drawing a stroke. We can't describe that in a\r\n          // doc.dash() call in a way that PDFKit will accept, so we set the\r\n          // stroke opacity to zero as our best approximation.\r\n          doc.strokeOpacity(0);\r\n          return;\r\n        } else if (dashArray[1] === 0) {\r\n          // Regardless of the dash value, the space value is zero, meaning\r\n          // we're actually drawing a solid stroke, not a dashed one. We can\r\n          // make this happen by just emptying out the dash array.\r\n          dashArray = [];\r\n        }\r\n      } else {\r\n        if (dashArray[0] === 0) {\r\n          // The first dash is zero-length. We fix this by combining the first\r\n          // space (just after the first dash) with the last space and updating\r\n          // the dash offset accordingly. For example, if we had\r\n          //\r\n          // [ 0 4 3 2 5 1 ] (dash offset 0)\r\n          //\r\n          // ␣␣␣␣---␣␣-----␣\r\n          // ⎸\r\n          //\r\n          // we'd end up with\r\n          //\r\n          // [ 3 2 5 5 ] (dash offset -4)\r\n          //\r\n          // ---␣␣-----␣␣␣␣␣\r\n          //            ⎸\r\n          //\r\n          // Another example where the dash array also ends with a 0:\r\n          //\r\n          // [ 0 4 3 2 5 0 ] (dash offset 0)\r\n          //\r\n          // ␣␣␣␣---␣␣-----\r\n          // ⎸\r\n          //\r\n          // we'd end up with\r\n          //\r\n          // [ 3 2 5 4 ] (dash offset -4)\r\n          //\r\n          // ---␣␣-----␣␣␣␣\r\n          //           ⎸\r\n          dashOffset -= dashArray[1];\r\n          dashArray[dashArray.length - 1] += dashArray[1];\r\n          dashArray = dashArray.slice(2);\r\n        }\r\n        if (dashArray[dashArray.length - 1] === 0) {\r\n          // The last space is zero-length. We fix this by combining the last dash\r\n          // (just before the last space) with the first dash and updating the\r\n          // dash offset accordingly. For example, if we had\r\n          //\r\n          // [ 1 4 3 2 5 0 ] (dash offset 0)\r\n          //\r\n          // -␣␣␣␣---␣␣-----\r\n          // ⎸\r\n          //\r\n          // we'd end up with\r\n          //\r\n          // [ 6 4 3 2 ] (dash offset 5)\r\n          //\r\n          // ------␣␣␣␣---␣␣\r\n          //      ⎸\r\n          //\r\n          dashOffset += dashArray[dashArray.length - 2];\r\n          dashArray[0] += dashArray[dashArray.length - 2];\r\n          dashArray = dashArray.slice(0, -2);\r\n        }  \r\n      }\r\n\r\n      // Ensure the dash offset is non-negative (because of crbug.com/660850).\r\n      // First compute the total length of the dash array so we can add it to\r\n      // dash offset until dash offset is non-negative.\r\n      let length = 0;\r\n      for (let i = 0; i < dashArray.length; i++) {length += dashArray[i];}\r\n      if (length > 0) {\r\n        while (dashOffset < 0) {\r\n          dashOffset += length;\r\n        }\r\n      }\r\n\r\n      doc.dash(dashArray, {phase: dashOffset});\r\n    }\r\n    function docInsertLink(x, y, w, h, url) {\r\n      let ref = doc.ref({\r\n        Type: 'Annot',\r\n        Subtype: 'Link',\r\n        Rect: [x, y, w, h],\r\n        Border: [0, 0, 0],\r\n        A: {\r\n          S: 'URI',\r\n          URI: new String(url)\r\n        }\r\n      });\r\n      ref.end();\r\n      links.push(ref);\r\n    }\r\n    function parseXml(xml) {\r\n      let SvgNode = function(tag, type, value, error) {\r\n        this.error = error;\r\n        this.nodeName = tag;\r\n        this.nodeValue = value;\r\n        this.nodeType = type;\r\n        this.attributes = Object.create(null);\r\n        this.childNodes = [];\r\n        this.parentNode = null;\r\n        this.id = '';\r\n        this.textContent = '';\r\n        this.classList = [];\r\n      };\r\n      SvgNode.prototype.getAttribute = function(attr) {\r\n        return this.attributes[attr] != null ? this.attributes[attr] : null;\r\n      };\r\n      SvgNode.prototype.getElementById = function(id) {\r\n        let result = null;\r\n        (function recursive(node) {\r\n          if (result) {return;}\r\n          if (node.nodeType === 1) {\r\n            if (node.id === id) {result = node;}\r\n            for (let i = 0; i < node.childNodes.length; i++) {\r\n              recursive(node.childNodes[i]);\r\n            }\r\n          }\r\n        })(this);\r\n        return result;\r\n      };\r\n      SvgNode.prototype.getElementsByTagName = function(tag) {\r\n        let result = [];\r\n        (function recursive(node) {\r\n          if (node.nodeType === 1) {\r\n            if (node.nodeName === tag) {result.push(node);}\r\n            for (let i = 0; i < node.childNodes.length; i++) {\r\n              recursive(node.childNodes[i]);\r\n            }\r\n          }\r\n        })(this);\r\n        return result;\r\n      };\r\n      let parser = new StringParser(xml.trim()), result, child, error = false; \r\n      let recursive = function() {\r\n        let temp, child;\r\n        if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) { // Opening tag\r\n          let node = new SvgNode(temp[1], 1, null, error);\r\n          while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) { // Attribute\r\n            let attr = temp[1], value = decodeEntities(temp[2] || temp[3] || '');\r\n            if (!node.attributes[attr]) {\r\n              node.attributes[attr] = value;\r\n              if (attr === 'id') {node.id = value;}\r\n              if (attr === 'class') {node.classList = value.split(' ');}\r\n            } else {\r\n              warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\r\n              error = true;\r\n            }\r\n          }\r\n          if (parser.match(/^>/)) { // End of opening tag\r\n            while (child = recursive()) {\r\n              node.childNodes.push(child);\r\n              child.parentNode = node;\r\n              node.textContent += (child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent);\r\n            }\r\n            if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) { // Closing tag\r\n              if (temp[1] === node.nodeName) {\r\n                return node;\r\n              } else {\r\n                warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\r\n                error = true;\r\n                return node;\r\n              }\r\n            } else {\r\n              warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\r\n              error = true;\r\n              return node;\r\n            }\r\n          } else if (parser.match(/^\\/>/)) { // Self-closing tag\r\n            return node;\r\n          } else {\r\n            warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\r\n            error = true;\r\n          }\r\n        } else if (temp = parser.match(/^<!--[\\s\\S]*?-->/)) { // Comment\r\n          return new SvgNode(null, 8, temp, error);\r\n        } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) { // Processing instructions\r\n          return new SvgNode(null, 7, temp, error);\r\n        } else if (temp = parser.match(/^<!DOCTYPE\\s*([\\s\\S]*?)>/)) { // Doctype\r\n          return new SvgNode(null, 10, temp, error);\r\n        } else if (temp = parser.match(/^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/, true)) { // Cdata node\r\n          return new SvgNode('#cdata-section', 4, temp[1], error);\r\n        } else if (temp = parser.match(/^([^<]+)/, true)) { // Text node\r\n          return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\r\n        }\r\n      };\r\n      while (child = recursive()) {\r\n        if (child.nodeType === 1 && !result) {\r\n          result = child;\r\n        } else if (child.nodeType === 1 || (child.nodeType === 3 && child.nodeValue.trim() !== '')) {\r\n          warningCallback('parseXml: data after document end has been discarded');\r\n        }\r\n      }\r\n      if (parser.matchAll()) {\r\n        warningCallback('parseXml: parsing error');\r\n      }\r\n      return result;\r\n    };\r\n    function decodeEntities(str) {\r\n      return(str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function(mt, m0, m1, m2) {\r\n        if (m0) {return String.fromCharCode(parseInt(m0, 10));}\r\n        else if (m1) {return String.fromCharCode(parseInt(m1, 16));}\r\n        else if (m2 && Entities[m2]) {return String.fromCharCode(Entities[m2]);}\r\n        else {return mt;}\r\n      }));\r\n    }\r\n    function parseColor(raw) {\r\n      let temp, result;\r\n      raw = (raw || '').trim();\r\n      if (temp = NamedColors[raw]) {\r\n        result = [temp.slice(), 1];\r\n      } else if (temp = raw.match(/^cmyk\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\r\n        temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]); temp[4] = parseFloat(temp[4]);\r\n        if (temp[1] <= 100 && temp[2] <= 100 && temp[3] <= 100 && temp[4] <= 100) {\r\n          result = [temp.slice(1, 5), 1];\r\n        }\r\n      } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\r\n        temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]); temp[4] = parseFloat(temp[4]);\r\n        if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\r\n          result = [temp.slice(1, 4), temp[4]];\r\n        }\r\n      } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\r\n        temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]);\r\n        if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\r\n          result = [temp.slice(1, 4), 1];\r\n        }\r\n      } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\r\n        temp[1] = 2.55 * parseFloat(temp[1]); temp[2] = 2.55 * parseFloat(temp[2]); temp[3] = 2.55 * parseFloat(temp[3]);\r\n        if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\r\n          result = [temp.slice(1, 4), 1];\r\n        }\r\n      } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\r\n        result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\r\n      } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\r\n        result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\r\n      }\r\n      return colorCallback ? colorCallback(result, raw) : result;\r\n    }\r\n    function opacityToColor(color, opacity, isMask) {\r\n      let newColor = color[0].slice(),\r\n          newOpacity = color[1] * opacity;\r\n      if (isMask) {\r\n        for (let i = 0; i < color.length; i++) {\r\n          newColor[i] *= newOpacity;\r\n        }\r\n        return [newColor, 1];\r\n      } else {\r\n        return [newColor, newOpacity];\r\n      }\r\n    }\r\n    function multiplyMatrix() {\r\n      function multiply(a, b) {\r\n        return [ a[0]*b[0]+a[2]*b[1], a[1]*b[0]+a[3]*b[1], a[0]*b[2]+a[2]*b[3],\r\n                 a[1]*b[2]+a[3]*b[3], a[0]*b[4]+a[2]*b[5]+a[4], a[1]*b[4]+a[3]*b[5]+a[5] ];\r\n      }\r\n      let result = arguments[0];\r\n      for (let i = 1; i < arguments.length; i++) {\r\n        result = multiply(result, arguments[i]);\r\n      }\r\n      return result;\r\n    }\r\n    function transformPoint(p, m) {\r\n      return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\r\n    }\r\n    function getGlobalMatrix() {\r\n      let ctm = doc._ctm;\r\n      for (let i = groupStack.length - 1; i >= 0; i--) {\r\n        ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\r\n      }\r\n      return ctm;\r\n    }\r\n    function getPageBBox() {\r\n      return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height)\r\n                           .transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\r\n    }\r\n    function getPageScale() {\r\n      const bbox = getPageBBox();\r\n      const width = doc.page.width;\r\n      return width / bbox[2];\r\n    }\r\n    function inverseMatrix(m) {\r\n      let dt = m[0] * m[3] - m[1] * m[2];\r\n      return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2]*m[5] - m[3]*m[4]) / dt, (m[1]*m[4] - m[0]*m[5]) / dt];\r\n    }\r\n    function validateMatrix(m) {\r\n      let m0 = validateNumber(m[0]), m1 = validateNumber(m[1]), m2 = validateNumber(m[2]),\r\n          m3 = validateNumber(m[3]), m4 = validateNumber(m[4]), m5 = validateNumber(m[5]);\r\n      if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\r\n        return [m0, m1, m2, m3, m4, m5];\r\n      }\r\n    }\r\n    function solveEquation(curve) {\r\n      let a = curve[2] || 0, b = curve[1] || 0, c = curve[0] || 0;\r\n      if (isEqual(a, 0) && isEqual(b, 0)) {\r\n        return [];\r\n      } else if (isEqual(a, 0)) {\r\n        return [(-c) / b];\r\n      } else {\r\n        let d = b * b - 4 * a * c;\r\n        if (isNotEqual(d, 0) && d > 0) {\r\n          return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\r\n        } else if (isEqual(d, 0)) {\r\n          return [(-b) / (2 * a)];\r\n        } else {\r\n          return [];\r\n        }\r\n      }\r\n    }\r\n    function getCurveValue(t, curve) {\r\n      return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\r\n    }\r\n    function isEqual(number, ref) {\r\n      return Math.abs(number - ref) < 1e-10;\r\n    }\r\n    function isNotEqual(number, ref) {\r\n      return Math.abs(number - ref) >= 1e-10;\r\n    }\r\n    function validateNumber(n) {\r\n      return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\r\n    }\r\n    function isArrayLike(v) {\r\n      return typeof v === 'object' && v !== null && typeof v.length === 'number';\r\n    }\r\n    function parseTranform(v) {\r\n      let parser = new StringParser((v || '').trim()), result = [1, 0, 0, 1, 0, 0], temp;\r\n      while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\r\n        let func = temp[1], nums = [], parser2 = new StringParser(temp[2].trim()), temp2;\r\n        while (temp2 = parser2.matchNumber()) {\r\n          nums.push(Number(temp2));\r\n          parser2.matchSeparator();\r\n        }\r\n        if (func === 'matrix' && nums.length === 6) {\r\n          result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\r\n        } else if (func === 'translate' && nums.length === 2) {\r\n          result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\r\n        } else if (func === 'translate' && nums.length === 1) {\r\n          result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\r\n        } else if (func === 'scale' && nums.length === 2) {\r\n          result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\r\n        } else if (func === 'scale' && nums.length === 1) {\r\n          result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\r\n        } else if (func === 'rotate' && nums.length === 3) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\r\n        } else if (func === 'rotate' && nums.length === 1) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\r\n        } else if (func === 'skewX' && nums.length === 1) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [1, 0, Math.tan(a), 1, 0, 0]);\r\n        } else if (func === 'skewY' && nums.length === 1) {\r\n          let a = nums[0] * Math.PI / 180;\r\n          result = multiplyMatrix(result, [1, Math.tan(a), 0, 1, 0, 0]);\r\n        } else {return;}\r\n        parser.matchSeparator();\r\n      }\r\n      if (parser.matchAll()) {return;}\r\n      return result;\r\n    }\r\n    function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\r\n      let temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\r\n          ratioType = temp[1] || temp[4] || 'meet',\r\n          xAlign = temp[2] || 'Mid',\r\n          yAlign = temp[3] || 'Mid',\r\n          scaleX = availWidth / elemWidth,\r\n          scaleY = availHeight / elemHeight,\r\n          dx = {'Min':0, 'Mid':0.5, 'Max':1}[xAlign] - (initAlign || 0),\r\n          dy = {'Min':0, 'Mid':0.5, 'Max':1}[yAlign] - (initAlign || 0);\r\n      if (ratioType === 'slice') {\r\n        scaleY = scaleX = Math.max(scaleX, scaleY);\r\n      } else if (ratioType === 'meet') {\r\n        scaleY = scaleX = Math.min(scaleX, scaleY);\r\n      }\r\n      return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\r\n    }\r\n    function parseStyleAttr(v) {\r\n      let result = Object.create(null);\r\n      v = (v || '').trim().split(/;/);\r\n      for (let i = 0; i < v.length; i++) {\r\n        let key = (v[i].split(':')[0] || '').trim(),\r\n            value = (v[i].split(':')[1] || '').trim();\r\n        if (key) {\r\n          result[key] = value;\r\n        }\r\n      }\r\n      if (result['marker']) {\r\n        if (!result['marker-start']) {result['marker-start'] = result['marker'];}\r\n        if (!result['marker-mid']) {result['marker-mid'] = result['marker'];}\r\n        if (!result['marker-end']) {result['marker-end'] = result['marker'];}\r\n      }\r\n      if (result['font']) {\r\n        let fontFamily = null, fontSize = null, fontStyle = \"normal\", fontWeight = \"normal\", fontVariant = \"normal\";\r\n        let parts = result['font'].split(/\\s+/);\r\n        for (let i = 0; i < parts.length; i++) {\r\n          switch (parts[i]) {\r\n            case \"normal\":\r\n              break;\r\n            case \"italic\": case \"oblique\":\r\n              fontStyle = parts[i];\r\n              break;\r\n            case \"small-caps\":\r\n              fontVariant = parts[i];\r\n              break;\r\n            case \"bold\": case \"bolder\": case \"lighter\": case \"100\": case \"200\": case \"300\":\r\n            case \"400\": case \"500\": case \"600\": case \"700\": case \"800\": case \"900\":\r\n              fontWeight = parts[i];\r\n              break;\r\n            default:\r\n              if (!fontSize) {\r\n                fontSize = parts[i].split('/')[0];\r\n              } else {\r\n                if (!fontFamily) {\r\n                  fontFamily = parts[i];\r\n                } else {\r\n                  fontFamily += ' ' + parts[i];\r\n                }\r\n              }\r\n              break;\r\n          }\r\n        }\r\n        if (!result['font-style']) {result['font-style'] = fontStyle;}\r\n        if (!result['font-variant']) {result['font-variant'] = fontVariant;}\r\n        if (!result['font-weight']) {result['font-weight'] = fontWeight;}\r\n        if (!result['font-size']) {result['font-size'] = fontSize;}\r\n        if (!result['font-family']) {result['font-family'] = fontFamily;}\r\n      }\r\n      return result;\r\n    }\r\n    function parseSelector(v) {\r\n      let parts = v.split(/(?=[.#])/g), ids = [], classes = [], tags = [], temp;\r\n      for (let i = 0; i < parts.length; i++) {\r\n        if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\r\n          ids.push(temp[1]);\r\n        } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\r\n          classes.push(temp[1]);\r\n        } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\r\n          tags.push(temp[1]);\r\n        } else if (parts[i] !== '*') {\r\n          return;\r\n        }\r\n      }\r\n      return {\r\n        tags: tags, ids: ids, classes: classes,\r\n        specificity: ids.length * 10000 + classes.length * 100 + tags.length\r\n      };\r\n    }\r\n    function parseStyleSheet(v) {\r\n      let parser = new StringParser(v.trim()), rules = [], rule;\r\n      while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\r\n        let selectors = rule[1].split(/\\s*,\\s*/g),\r\n            css = parseStyleAttr(rule[2]);\r\n        for (let i = 0; i < selectors.length; i++) {\r\n          let selector = parseSelector(selectors[i]);\r\n          if (selector) {\r\n            rules.push({selector: selector, css:css});\r\n          }\r\n        }\r\n      }\r\n      return rules;\r\n    }\r\n    function matchesSelector(elem, selector) {\r\n      if (elem.nodeType !== 1) {return false;}\r\n      for (let i = 0; i < selector.tags.length; i++) {\r\n        if (selector.tags[i] !== elem.nodeName) {return false;}\r\n      }\r\n      for (let i = 0; i < selector.ids.length; i++) {\r\n        if (selector.ids[i] !== elem.id) {return false;}\r\n      }\r\n      for (let i = 0; i < selector.classes.length; i++) {\r\n        if (!elem.classList.contains(selector.classes[i])) {return false;}\r\n      }\r\n      return true;\r\n    }\r\n    function getStyle(elem) {\r\n      let result = Object.create(null);\r\n      let specificities = Object.create(null);\r\n      for (let i = 0; i < styleRules.length; i++) {\r\n        let rule = styleRules[i];\r\n        if (matchesSelector(elem, rule.selector)) {\r\n          for (let key in rule.css) {\r\n            if (!(specificities[key] > rule.selector.specificity)) {\r\n              result[key] = rule.css[key];\r\n              specificities[key] = rule.selector.specificity;\r\n            }\r\n          }\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n    function combineArrays(array1, array2) {\r\n      return array1.concat(array2.slice(array1.length));\r\n    }\r\n    function getAscent(font, size) {\r\n      return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\r\n    }\r\n    function getDescent(font, size) {\r\n      return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\r\n    }\r\n    function getXHeight(font, size) {\r\n      return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\r\n    }\r\n    function getBaseline(font, size, baseline, shift) {\r\n      let dy1, dy2;\r\n      switch (baseline) {\r\n        case 'middle': dy1 = 0.5 * getXHeight(font, size); break;\r\n        case 'central': dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size)); break;\r\n        case 'after-edge': case 'text-after-edge': dy1 = getDescent(font, size); break;\r\n        case 'alphabetic': case 'auto': case 'baseline': dy1 = 0; break;\r\n        case 'mathematical': dy1 = 0.5 * getAscent(font, size); break;\r\n        case 'hanging': dy1 = 0.8 * getAscent(font, size); break;\r\n        case 'before-edge': case 'text-before-edge': dy1 = getAscent(font, size); break;\r\n        default: dy1 = 0; break;\r\n      }\r\n      switch (shift) {\r\n        case 'baseline': dy2 = 0; break;\r\n        case 'super': dy2 = 0.6 * size; break;\r\n        case 'sub': dy2 = -0.6 * size; break;\r\n        default: dy2 = shift; break;\r\n      }\r\n      return dy1 - dy2;\r\n    }\r\n    function getTextPos(font, size, text) {\r\n      let encoded = font.encode('' + text), hex = encoded[0], pos = encoded[1], data = [];\r\n      for (let i = 0; i < hex.length; i++) {\r\n        let unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\r\n        data.push({\r\n          glyph: hex[i],\r\n          unicode: unicode,\r\n          kern: pos[i].advanceWidth - pos[i].xAdvance,\r\n          width: pos[i].advanceWidth * size / 1000,\r\n          xOffset: pos[i].xOffset * size / 1000,\r\n          yOffset: pos[i].yOffset * size / 1000,\r\n          xAdvance: pos[i].xAdvance * size / 1000,\r\n          yAdvance: pos[i].yAdvance * size / 1000\r\n        });\r\n      }\r\n      return data;\r\n    }\r\n    function createSVGElement(obj, inherits) {\r\n      switch (obj.nodeName) {\r\n        case 'use': return new SvgElemUse(obj, inherits);\r\n        case 'symbol': return new SvgElemSymbol(obj, inherits);\r\n        case 'g': return new SvgElemGroup(obj, inherits);\r\n        case 'a': return new SvgElemLink(obj, inherits);\r\n        case 'svg': return new SvgElemSvg(obj, inherits);\r\n        case 'image': return new SVGElemImage(obj, inherits);\r\n        case 'rect': return new SvgElemRect(obj, inherits);\r\n        case 'circle': return new SvgElemCircle(obj, inherits);\r\n        case 'ellipse': return new SvgElemEllipse(obj, inherits);\r\n        case 'line': return new SvgElemLine(obj, inherits);\r\n        case 'polyline': return new SvgElemPolyline(obj, inherits);\r\n        case 'polygon': return new SvgElemPolygon(obj, inherits);\r\n        case 'path': return new SvgElemPath(obj, inherits);\r\n        case 'text': return new SvgElemText(obj, inherits);\r\n        case 'tspan': return new SvgElemTspan(obj, inherits);\r\n        case 'textPath': return new SvgElemTextPath(obj, inherits);\r\n        case '#text': case '#cdata-section': return new SvgElemTextNode(obj, inherits);\r\n        default: return new SvgElem(obj, inherits);\r\n      }\r\n    }\r\n\r\n    var StringParser = function(str) {\r\n      this.match = function(exp, all) {\r\n        let temp = str.match(exp);\r\n        if (!temp || temp.index !== 0) {return;}\r\n        str = str.substring(temp[0].length);\r\n        return (all ? temp : temp[0]);\r\n      };\r\n      this.matchSeparator = function() {\r\n        return this.match(/^(?:\\s*,\\s*|\\s*|)/);\r\n      };\r\n      this.matchSpace = function() {\r\n        return this.match(/^(?:\\s*)/);\r\n      };\r\n      this.matchLengthUnit = function() {\r\n        return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\r\n      };\r\n      this.matchNumber = function() {\r\n        return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\r\n      };\r\n      this.matchAll = function() {\r\n        return this.match(/^[\\s\\S]+/);\r\n      };\r\n    };\r\n\r\n    var BezierSegment = function(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\r\n      let divisions = 6 * precision;\r\n      let equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\r\n      let equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\r\n      let derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\r\n      let derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\r\n      let lengthMap = [0];\r\n      for (let i = 1; i <= divisions; i++) {\r\n        let t = (i - 0.5) / divisions;\r\n        let dx = getCurveValue(t, derivativeX) / divisions,\r\n            dy = getCurveValue(t, derivativeY) / divisions,\r\n            l = Math.sqrt(dx * dx + dy * dy);\r\n        lengthMap[i] = lengthMap[i - 1] + l;\r\n      }\r\n      this.totalLength = lengthMap[divisions];\r\n      this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\r\n      this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\r\n      this.getBoundingBox = function() {\r\n        let temp;\r\n        let minX = getCurveValue(0, equationX), minY = getCurveValue(0, equationY),\r\n            maxX = getCurveValue(1, equationX), maxY = getCurveValue(1, equationY);\r\n        if (minX > maxX) {temp = maxX; maxX = minX; minX = temp;}\r\n        if (minY > maxY) {temp = maxY; maxY = minY; minY = temp;}\r\n        let rootsX = solveEquation(derivativeX);\r\n        for (let i = 0; i < rootsX.length; i++) {\r\n          if (rootsX[i] >= 0 && rootsX[i] <= 1) {\r\n            let x = getCurveValue(rootsX[i], equationX);\r\n            if (x < minX) {minX = x;}\r\n            if (x > maxX) {maxX = x;}\r\n          }\r\n        }\r\n        let rootsY = solveEquation(derivativeY);\r\n        for (let i = 0; i < rootsY.length; i++) {\r\n          if (rootsY[i] >= 0 && rootsY[i] <= 1) {\r\n            let y = getCurveValue(rootsY[i], equationY);\r\n            if (y < minY) {minY = y;}\r\n            if (y > maxY) {maxY = y;}\r\n          }\r\n        }\r\n        return [minX, minY, maxX, maxY];\r\n      };\r\n      this.getPointAtLength = function(l) {\r\n        if (isEqual(l, 0)) {return this.startPoint;}\r\n        if (isEqual(l, this.totalLength)) {return this.endPoint;}\r\n        if (l < 0 || l > this.totalLength) {return;}\r\n        for (let i = 1; i <= divisions; i++) {\r\n          let l1 = lengthMap[i-1], l2 = lengthMap[i];\r\n          if (l1 <= l && l <= l2) {\r\n            let t = (i - (l2 - l) / (l2 - l1)) / divisions,\r\n                x = getCurveValue(t, equationX), y = getCurveValue(t, equationY),\r\n                dx = getCurveValue(t, derivativeX), dy = getCurveValue(t, derivativeY);\r\n            return [x, y, Math.atan2(dy, dx)];\r\n          }\r\n        }\r\n      };\r\n    };\r\n\r\n    var LineSegment = function(p1x, p1y, p2x, p2y) {\r\n      this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\r\n      this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\r\n      this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\r\n      this.getBoundingBox = function() {\r\n        return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]),\r\n                Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\r\n      };\r\n      this.getPointAtLength = function(l) {\r\n        if (l >= 0 && l <= this.totalLength) {\r\n          let r = l / this.totalLength || 0,\r\n              x = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\r\n              y = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\r\n          return [x, y, this.startPoint[2]];\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgShape = function() {\r\n      this.pathCommands = [];\r\n      this.pathSegments = [];\r\n      this.startPoint = null;\r\n      this.endPoint = null;\r\n      this.totalLength = 0;\r\n      let startX = 0, startY = 0, currX = 0, currY = 0, lastCom, lastCtrlX, lastCtrlY;\r\n      this.move = function(x, y) {\r\n        startX = currX = x; startY = currY = y;\r\n        return null;\r\n      };\r\n      this.line = function(x, y) {\r\n        let segment = new LineSegment(currX, currY, x, y);\r\n        currX = x; currY = y;\r\n        return segment;\r\n      };\r\n      this.curve = function(c1x, c1y, c2x, c2y, x, y) {\r\n        let segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\r\n        currX = x; currY = y;\r\n        return segment;\r\n      };\r\n      this.close = function() {\r\n        let segment = new LineSegment(currX, currY, startX, startY);\r\n        currX = startX; currY = startY;\r\n        return segment;\r\n      };\r\n      this.addCommand = function(data) {\r\n        this.pathCommands.push(data);\r\n        let segment = this[data[0]].apply(this, data.slice(3));\r\n        if (segment) {\r\n          segment.hasStart = data[1];\r\n          segment.hasEnd = data[2];\r\n          this.startPoint = this.startPoint || segment.startPoint;\r\n          this.endPoint = segment.endPoint;\r\n          this.pathSegments.push(segment);\r\n          this.totalLength += segment.totalLength;\r\n        }\r\n      };\r\n      this.M = function(x, y) {\r\n        this.addCommand(['move', true, true, x, y]);\r\n        lastCom = 'M';\r\n        return this;\r\n      };\r\n      this.m = function(x, y) {\r\n        return this.M(currX + x, currY + y);\r\n      };\r\n      this.Z = this.z = function() {\r\n        this.addCommand(['close', true, true]);\r\n        lastCom = 'Z';\r\n        return this;\r\n      };\r\n      this.L = function(x, y) {\r\n        this.addCommand(['line', true, true, x, y]);\r\n        lastCom = 'L';\r\n        return this;\r\n      };\r\n      this.l = function(x, y) {\r\n        return this.L(currX + x, currY + y);\r\n      };\r\n      this.H = function(x) {\r\n        return this.L(x, currY);\r\n      };\r\n      this.h = function(x) {\r\n        return this.L(currX + x, currY);\r\n      };\r\n      this.V = function(y) {\r\n        return this.L(currX, y);\r\n      };\r\n      this.v = function(y) {\r\n        return this.L(currX, currY + y);\r\n      };\r\n      this.C = function(c1x, c1y, c2x, c2y, x, y) {\r\n        this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\r\n        lastCom = 'C'; lastCtrlX = c2x; lastCtrlY = c2y;\r\n        return this;\r\n      };\r\n      this.c = function(c1x, c1y, c2x, c2y, x, y) {\r\n        return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\r\n      };\r\n      this.S = function(c1x, c1y, x, y) {\r\n        return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\r\n      };\r\n      this.s = function(c1x, c1y, x, y) {\r\n        return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\r\n      };\r\n      this.Q = function(cx, cy, x, y) {\r\n        let c1x = currX + 2 / 3 * (cx - currX), c1y = currY + 2 / 3 * (cy - currY),\r\n            c2x = x + 2 / 3 * (cx - x), c2y = y + 2 / 3 * (cy - y);\r\n        this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\r\n        lastCom = 'Q'; lastCtrlX = cx; lastCtrlY = cy;\r\n        return this;\r\n      };\r\n      this.q = function(c1x, c1y, x, y) {\r\n        return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\r\n      };\r\n      this.T = function(x, y) {\r\n        return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\r\n      };\r\n      this.t = function(x, y) {\r\n        return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\r\n      };\r\n      this.A = function(rx, ry, fi, fa, fs, x, y) {\r\n        if (isEqual(rx, 0) || isEqual(ry, 0)) {\r\n          this.addCommand(['line', true, true, x, y]);\r\n        } else {\r\n          fi = fi * (Math.PI / 180);\r\n          rx = Math.abs(rx);\r\n          ry = Math.abs(ry);\r\n          fa = 1 * !!fa;\r\n          fs = 1 * !!fs;\r\n          let x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\r\n              y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\r\n              lambda = (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry);\r\n          if (lambda > 1) {\r\n            rx *= Math.sqrt(lambda);\r\n            ry *= Math.sqrt(lambda);\r\n          }\r\n          let r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\r\n              x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\r\n              y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\r\n          let cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\r\n              cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\r\n              th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\r\n              th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\r\n          if (fs === 0 && th2 - th1 > 0) {\r\n            th2 -= 2 * Math.PI;\r\n          } else if (fs === 1 && th2 - th1 < 0) {\r\n            th2 += 2 * Math.PI;\r\n          }\r\n          let segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\r\n          for (let i = 0; i < segms; i++) {\r\n            let th3 = th1 + i * (th2 - th1) / segms,\r\n                th4 = th1 + (i + 1) * (th2 - th1) / segms,\r\n                t = 4/3 * Math.tan((th4 - th3) / 4);\r\n            let c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\r\n                c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\r\n                c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\r\n                c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\r\n                endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\r\n                endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\r\n            this.addCommand(['curve', (i === 0), (i === segms - 1), c1x, c1y, c2x, c2y, endX, endY]);\r\n          }\r\n        }\r\n        lastCom = 'A';\r\n        return this;\r\n      };\r\n      this.a = function(rx, ry, fi, fa, fs, x, y) {\r\n        return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\r\n      };\r\n      this.path = function(d) {\r\n        let command, value, temp,\r\n            parser = new StringParser((d || '').trim());\r\n        while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\r\n          parser.matchSeparator();\r\n          let values = [];\r\n          while (value = (PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber())) {\r\n            parser.matchSeparator();\r\n            if (values.length === PathArguments[command]) {\r\n              this[command].apply(this, values);\r\n              values = [];\r\n              if (command === 'M') {command = 'L';}\r\n              else if (command === 'm') {command = 'l';}\r\n            }\r\n            values.push(Number(value));\r\n          }\r\n          if (values.length === PathArguments[command]) {\r\n            this[command].apply(this, values);\r\n          } else {\r\n            warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers'); return;\r\n          }\r\n        }\r\n        if (temp = parser.matchAll()) {\r\n          warningCallback('SvgPath: unexpected string ' + temp);\r\n        }\r\n        return this;\r\n      };\r\n      this.getBoundingBox = function() {\r\n        let bbox = [Infinity, Infinity, -Infinity, -Infinity];\r\n        function addBounds(bbox1) {\r\n          if (bbox1[0] < bbox[0]) {bbox[0] = bbox1[0];}\r\n          if (bbox1[2] > bbox[2]) {bbox[2] = bbox1[2];}\r\n          if (bbox1[1] < bbox[1]) {bbox[1] = bbox1[1];}\r\n          if (bbox1[3] > bbox[3]) {bbox[3] = bbox1[3];}\r\n        }\r\n        for (let i = 0; i < this.pathSegments.length; i++) {\r\n          addBounds(this.pathSegments[i].getBoundingBox());\r\n        }\r\n        if (bbox[0] === Infinity) {bbox[0] = 0;}\r\n        if (bbox[1] === Infinity) {bbox[1] = 0;}\r\n        if (bbox[2] === -Infinity) {bbox[2] = 0;}\r\n        if (bbox[3] === -Infinity) {bbox[3] = 0;}\r\n        return bbox;\r\n      };\r\n      this.getPointAtLength = function(l) {\r\n        if (l >= 0 && l <= this.totalLength) {\r\n          let temp;\r\n          for (let i = 0; i < this.pathSegments.length; i++) {\r\n            if (temp = this.pathSegments[i].getPointAtLength(l)) {\r\n              return temp;\r\n            }\r\n            l -= this.pathSegments[i].totalLength;\r\n          }\r\n          return this.endPoint;\r\n        }\r\n      };\r\n      this.transform = function(m) {\r\n        this.pathSegments = [];\r\n        this.startPoint = null;\r\n        this.endPoint = null;\r\n        this.totalLength = 0;\r\n        for (let i = 0; i < this.pathCommands.length; i++) {\r\n          let data = this.pathCommands.shift();\r\n          for (let j = 3; j < data.length; j+=2) {\r\n            let p = transformPoint([data[j], data[j + 1]], m)\r\n            data[j] = p[0];\r\n            data[j + 1] = p[1];\r\n          }\r\n          this.addCommand(data);\r\n        }\r\n        return this;        \r\n      };\r\n      this.mergeShape = function(shape) {\r\n        for (let i = 0; i < shape.pathCommands.length; i++) {\r\n          this.addCommand(shape.pathCommands[i].slice());\r\n        }\r\n        return this;\r\n      };\r\n      this.clone = function() {\r\n        return new SvgShape().mergeShape(this);\r\n      };\r\n      this.insertInDocument = function() {\r\n        for (let i = 0; i < this.pathCommands.length; i++) {\r\n          let command = this.pathCommands[i][0], values = this.pathCommands[i].slice(3);\r\n          switch(command) {\r\n            case 'move':  doc.moveTo(values[0], values[1]);  break;\r\n            case 'line':  doc.lineTo(values[0], values[1]);  break;\r\n            case 'curve':  doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]);  break;\r\n            case 'close':  doc.closePath();  break;\r\n          }\r\n        }\r\n      };\r\n      this.getSubPaths = function() {\r\n        let subPaths = [], shape = new SvgShape();\r\n        for (let i = 0; i < this.pathCommands.length; i++) {\r\n          let data = this.pathCommands[i], command = this.pathCommands[i][0];\r\n          if (command === 'move' && i !== 0) {\r\n            subPaths.push(shape);\r\n            shape = new SvgShape();\r\n          }\r\n          shape.addCommand(data);\r\n        }\r\n        subPaths.push(shape);\r\n        return subPaths;\r\n      };\r\n      this.getMarkers = function() {\r\n        let markers = [], subPaths = this.getSubPaths();\r\n        for (let i = 0; i < subPaths.length; i++) {\r\n          let subPath = subPaths[i], subPathMarkers = [];\r\n          for (let j = 0; j < subPath.pathSegments.length; j++) {\r\n            let segment = subPath.pathSegments[j];\r\n            if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\r\n              if (segment.hasStart) {\r\n                let startMarker = segment.getPointAtLength(0), prevEndMarker = subPathMarkers.pop();\r\n                if (prevEndMarker) {startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);}\r\n                subPathMarkers.push(startMarker);\r\n              }\r\n              if (segment.hasEnd) {\r\n                let endMarker = segment.getPointAtLength(segment.totalLength);\r\n                subPathMarkers.push(endMarker);\r\n              }\r\n            }\r\n          }\r\n          markers = markers.concat(subPathMarkers);\r\n        }\r\n        return markers;\r\n      };\r\n    };\r\n\r\n    var SvgElem = function(obj, inherits) {\r\n      let styleCache = Object.create(null);\r\n      let childrenCache = null;\r\n      this.name = obj.nodeName;\r\n      this.isOuterElement = obj === svg || !obj.parentNode;\r\n      this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\r\n      this.stack = (this.inherits ? this.inherits.stack.concat(obj) : [obj]);\r\n      this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\r\n      this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\r\n      this.allowedChildren = [];\r\n      this.attr = function(key) {\r\n        if (typeof obj.getAttribute === 'function') {\r\n          return obj.getAttribute(key);\r\n        }\r\n      };\r\n      this.resolveUrl = function(value) {\r\n        let temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\r\n        let file = temp[1] || temp[3] || temp[5] || temp[7],\r\n            id = temp[2] || temp[4] || temp[6] || temp[8];\r\n        if (id) {\r\n          if (!file) {\r\n            let svgObj = svg.getElementById(id);\r\n            if (svgObj) {\r\n              if (this.stack.indexOf(svgObj) === -1) {\r\n                return svgObj;\r\n              } else {\r\n                warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\r\n                return;\r\n              }\r\n            }\r\n          }\r\n          if (documentCallback) {\r\n            let svgs = documentCache[file];\r\n            if (!svgs) {\r\n              svgs = documentCallback(file);\r\n              if (!isArrayLike(svgs)) {svgs = [svgs];}\r\n              for (let i = 0; i < svgs.length; i++) {\r\n                if (typeof svgs[i] === 'string') {svgs[i] = parseXml(svgs[i]);}\r\n              }\r\n              documentCache[file] = svgs;\r\n            }\r\n            for (let i = 0; i < svgs.length; i++) {\r\n              let svgObj = svgs[i].getElementById(id);\r\n              if (svgObj) {\r\n                if (this.stack.indexOf(svgObj) === -1) {\r\n                  return svgObj;\r\n                } else {\r\n                  warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\r\n                  return;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      };\r\n      this.computeUnits = function(value, unit, percent, isFontSize) {\r\n        if (unit === '%') {\r\n          return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\r\n        } else if (unit === 'ex' || unit === 'em') {\r\n          return value * {'em':1, 'ex':0.5}[unit] * (isFontSize ? percent : this.get('font-size'));\r\n        } else {\r\n          return value * {'':1, 'px':1, 'pt':96/72, 'cm':96/2.54, 'mm':96/25.4, 'in':96, 'pc':96/6}[unit];\r\n        }\r\n      };\r\n      this.computeLength = function(value, percent, initial, isFontSize) {\r\n        let parser = new StringParser((value || '').trim()), temp1, temp2;\r\n        if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\r\n          return this.computeUnits(temp1, temp2, percent, isFontSize);\r\n        }\r\n        return initial;\r\n      };\r\n      this.computeLengthList = function(value, percent, strict) {\r\n        let parser = new StringParser((value || '').trim()), result = [], temp1, temp2;\r\n        while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\r\n          result.push(this.computeUnits(temp1, temp2, percent));\r\n          parser.matchSeparator();\r\n        }\r\n        if (strict && parser.matchAll()) {return;}\r\n        return result;\r\n      };\r\n      this.getLength = function(key, percent, initial) {\r\n        return this.computeLength(this.attr(key), percent, initial);\r\n      };\r\n      this.getLengthList = function(key, percent) {\r\n        return this.computeLengthList(this.attr(key), percent);\r\n      };\r\n      this.getUrl = function(key) {\r\n        return this.resolveUrl(this.attr(key))\r\n      };\r\n      this.getNumberList = function(key) {\r\n        let parser = new StringParser((this.attr(key) || '').trim()), result = [], temp;\r\n        while (temp = parser.matchNumber()) {\r\n          result.push(Number(temp));\r\n          parser.matchSeparator();\r\n        }\r\n        result.error = parser.matchAll();\r\n        return result;\r\n      }\r\n      this.getViewbox = function(key, initial) {\r\n        let viewBox = this.getNumberList(key);\r\n        if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {return viewBox;}\r\n        return initial;\r\n      };\r\n      this.getPercent = function(key, initial) {\r\n        let value = this.attr(key);\r\n        let parser = new StringParser((value || '').trim()), temp1, temp2;\r\n        let number = parser.matchNumber();\r\n        if (!number) {return initial;}\r\n        if (parser.match('%')) {number *= 0.01;}\r\n        if (parser.matchAll()) {return initial;}\r\n        return Math.max(0, Math.min(1, number));\r\n      };\r\n      this.chooseValue = function(args) {\r\n        for (let i = 0; i < arguments.length; i++) {\r\n          if (arguments[i] != null && arguments[i] === arguments[i]) {return arguments[i];}\r\n        }\r\n        return arguments[arguments.length - 1];\r\n      };\r\n      this.get = function(key) {\r\n        if (styleCache[key] !== undefined) {return styleCache[key];}\r\n        let keyInfo = Properties[key] || {}, value, result;\r\n        for (let i = 0; i < 3; i++) {\r\n          switch (i) {\r\n            case 0:\r\n              if (key !== 'transform') { // the CSS transform behaves strangely\r\n                value = this.css[keyInfo.css || key];\r\n              }\r\n              break;\r\n            case 1:\r\n              value = this.style[key];\r\n              break;\r\n            case 2:\r\n              value = this.attr(key);\r\n              break;\r\n          }\r\n          if (value === 'inherit') {\r\n            result = (this.inherits ? this.inherits.get(key) : keyInfo.initial);\r\n            if (result != null) {return styleCache[key] = result;}\r\n          }\r\n          if (keyInfo.values != null) {\r\n            result = keyInfo.values[value];\r\n            if (result != null) {return styleCache[key] = result;}\r\n          }\r\n          if (value != null) {\r\n            let parsed;\r\n            switch (key) {\r\n              case 'font-size':\r\n                result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\r\n                break;\r\n              case 'baseline-shift':\r\n                result = this.computeLength(value, this.get('font-size'));\r\n                break;\r\n              case 'font-family':\r\n                result = value || undefined;\r\n                break;\r\n              case 'opacity': case 'stroke-opacity': case 'fill-opacity': case 'stop-opacity':\r\n                parsed = parseFloat(value);\r\n                if (!isNaN(parsed)) {\r\n                  result = Math.max(0, Math.min(1, parsed));\r\n                }\r\n                break;\r\n              case 'transform':\r\n                result = parseTranform(value);\r\n                break;\r\n              case 'stroke-dasharray':\r\n                if (value === 'none') {\r\n                  result = [];\r\n                } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\r\n                  let sum = 0, error = false;\r\n                  for (let j = 0; j < parsed.length; j++) {\r\n                    if (parsed[j] < 0) {error = true;}\r\n                    sum += parsed[j];\r\n                  }\r\n                  if (!error) {\r\n                    if (parsed.length % 2 === 1) {\r\n                      parsed = parsed.concat(parsed);\r\n                    }\r\n                    result = (sum === 0 ? [] : parsed);\r\n                  }\r\n                }\r\n                break;\r\n              case 'color':\r\n                if (value === 'none' || value === 'transparent') {\r\n                  result = 'none';\r\n                } else {\r\n                  result = parseColor(value);\r\n                }\r\n                break;\r\n              case 'fill': case 'stroke':\r\n                if (value === 'none' || value === 'transparent') {\r\n                  result = 'none';\r\n                } else if (value === 'currentColor') {\r\n                  result = this.get('color');\r\n                } else if (parsed = parseColor(value)) {\r\n                  return parsed;\r\n                } else if (parsed = (value || '').split(' ')) {\r\n                  let object = this.resolveUrl(parsed[0]),\r\n                      fallbackColor = parseColor(parsed[1]);\r\n                  if (object == null) {\r\n                    result = fallbackColor;\r\n                  } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\r\n                    result = new SvgElemGradient(object, null, fallbackColor);\r\n                  } else if (object.nodeName === 'pattern') {\r\n                    result = new SvgElemPattern(object, null, fallbackColor);\r\n                  } else {\r\n                    result = fallbackColor;\r\n                  }\r\n                }\r\n                break;\r\n              case 'stop-color':\r\n                if (value === 'none' || value === 'transparent') {\r\n                  result = 'none';\r\n                } else if (value === 'currentColor') {\r\n                  result = this.get('color');\r\n                } else {\r\n                  result = parseColor(value);\r\n                }\r\n                break;\r\n              case 'marker-start': case 'marker-mid': case 'marker-end': case 'clip-path': case 'mask':\r\n                if (value === 'none') {\r\n                  result = 'none';\r\n                } else {\r\n                  result = this.resolveUrl(value);\r\n                }\r\n                break;\r\n              case 'stroke-width':\r\n                parsed = this.computeLength(value, this.getViewport());\r\n                if (parsed != null && parsed >= 0) {\r\n                  result = parsed;\r\n                }\r\n                break;\r\n              case 'stroke-miterlimit':\r\n                parsed = parseFloat(value);\r\n                if (parsed != null && parsed >= 1) {\r\n                  result = parsed;\r\n                }\r\n                break;\r\n              case 'word-spacing': case 'letter-spacing':\r\n                result = this.computeLength(value, this.getViewport());\r\n                break;\r\n              case 'stroke-dashoffset':\r\n                result = this.computeLength(value, this.getViewport());\r\n                break;\r\n            }\r\n            if (result != null) {return styleCache[key] = result;}\r\n          }\r\n        }\r\n        return styleCache[key] = (keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial);\r\n      };\r\n      this.getChildren = function() {\r\n        if (childrenCache != null) {return childrenCache;}\r\n        let children = [];\r\n        for (let i = 0; i < obj.childNodes.length; i++) {\r\n          let child = obj.childNodes[i];\r\n          if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\r\n            children.push(createSVGElement(child, this));\r\n          }\r\n        }\r\n        return childrenCache = children;\r\n      };\r\n      this.getParentVWidth = function() {\r\n        return (this.inherits ? this.inherits.getVWidth(): viewportWidth);\r\n      };\r\n      this.getParentVHeight = function() {\r\n        return (this.inherits ? this.inherits.getVHeight() : viewportHeight);\r\n      };\r\n      this.getParentViewport = function() {\r\n        return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\r\n      };\r\n      this.getVWidth = function() {\r\n        return this.getParentVWidth();\r\n      };\r\n      this.getVHeight = function() {\r\n        return this.getParentVHeight();\r\n      };\r\n      this.getViewport = function() {\r\n        return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\r\n      };\r\n      this.getBoundingBox = function() {\r\n        let shape = this.getBoundingShape();\r\n        return shape.getBoundingBox();\r\n      };\r\n    };\r\n\r\n    var SvgElemStylable = function(obj, inherits) {\r\n      SvgElem.call(this, obj, inherits);\r\n      this.transform = function() {\r\n        doc.transform.apply(doc, this.getTransformation());\r\n      };\r\n      this.clip = function() {\r\n        if (this.get('clip-path') !== 'none') {\r\n          let clipPath = new SvgElemClipPath(this.get('clip-path'), null);\r\n          clipPath.useMask((clipPath.attr('clipPathUnits') === 'objectBoundingBox') ? this.getBoundingBox() : null);\r\n          return true;\r\n        }\r\n      };\r\n      this.mask = function() {\r\n        if (this.get('mask') !== 'none') {\r\n          let mask = new SvgElemMask(this.get('mask'), null);\r\n          mask.useMask(this.getBoundingBox());\r\n          return true;\r\n        }\r\n      };\r\n      this.getFill = function(isClip, isMask) {\r\n        let opacity = this.get('opacity'),\r\n            fill = this.get('fill'),\r\n            fillOpacity = this.get('fill-opacity');\r\n        if (isClip) {return DefaultColors.white;}\r\n        if (fill !== 'none' && opacity && fillOpacity) {\r\n          if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\r\n            return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\r\n          }\r\n          return opacityToColor(fill, fillOpacity * opacity, isMask);\r\n        }\r\n      };\r\n      this.getStroke = function(isClip, isMask) {\r\n        let opacity = this.get('opacity'),\r\n            stroke = this.get('stroke'),\r\n            strokeOpacity = this.get('stroke-opacity');\r\n        if (isClip || isEqual(this.get('stroke-width'), 0)) {return;}\r\n        if (stroke !== 'none' && opacity && strokeOpacity) {\r\n          if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\r\n            return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\r\n          }\r\n          return opacityToColor(stroke, strokeOpacity * opacity, isMask);\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemHasChildren = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\r\n      this.getBoundingShape = function() {\r\n        let shape = new SvgShape(),\r\n            children = this.getChildren();\r\n        for (let i = 0; i < children.length; i++) {\r\n          if (children[i].get('display') !== 'none') {\r\n            if (typeof children[i].getBoundingShape === 'function') {\r\n              let childShape = children[i].getBoundingShape().clone();\r\n              if (typeof children[i].getTransformation === 'function') {\r\n                childShape.transform(children[i].getTransformation());\r\n              }\r\n              shape.mergeShape(childShape);\r\n            }\r\n          }\r\n        }\r\n        return shape;\r\n      };\r\n      this.drawChildren = function(isClip, isMask) {\r\n        let children = this.getChildren();\r\n        for (let i = 0; i < children.length; i++) {\r\n          if (children[i].get('display') !== 'none') {\r\n            if (typeof children[i].drawInDocument === 'function') {\r\n              children[i].drawInDocument(isClip, isMask);\r\n            }\r\n          }\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemContainer = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.drawContent = function(isClip, isMask) {\r\n        this.transform();\r\n        let clipped = this.clip(),\r\n            masked = this.mask(),\r\n            group;\r\n        if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\r\n          group = docBeginGroup(getPageBBox());\r\n        }\r\n        this.drawChildren(isClip, isMask);\r\n        if (group) {\r\n          docEndGroup(group);\r\n          doc.fillOpacity(this.get('opacity'));\r\n          docInsertGroup(group);\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemUse = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      let x = this.getLength('x', this.getVWidth(), 0),\r\n          y = this.getLength('y', this.getVHeight(), 0),\r\n          child = this.getUrl('href') || this.getUrl('xlink:href');\r\n      if (child) {child = createSVGElement(child, this);}\r\n      this.getChildren  = function() {\r\n        return child ? [child] : [];\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\r\n      };\r\n    };\r\n\r\n    var SvgElemSymbol = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\r\n          height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\r\n      if (inherits instanceof SvgElemUse) {\r\n        width = inherits.getLength('width', inherits.getParentVWidth(), width);\r\n        height = inherits.getLength('height', inherits.getParentVHeight(), height);\r\n      }\r\n      let aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\r\n          viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n      this.getVWidth = function() {\r\n        return viewBox[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        return viewBox[3];\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\r\n      };\r\n    };\r\n\r\n    var SvgElemGroup = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        if (this.link && !isClip && !isMask) {this.addLink();}\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n    };\r\n\r\n    var SvgElemLink = function(obj, inherits) {\r\n      if (inherits && inherits.isText) {\r\n        SvgElemTspan.call(this, obj, inherits);\r\n        this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\r\n      } else {\r\n        SvgElemGroup.call(this, obj, inherits);\r\n      }\r\n      this.link = this.attr('href') || this.attr('xlink:href');\r\n      this.addLink = function() {\r\n        if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\r\n          let bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\r\n          docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\r\n        }\r\n      }\r\n    };\r\n\r\n    var SvgElemSvg = function(obj, inherits) {\r\n      SvgElemContainer.call(this, obj, inherits);\r\n      let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\r\n          height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\r\n          x = this.getLength('x', this.getParentVWidth(), 0),\r\n          y = this.getLength('y', this.getParentVHeight(), 0);\r\n      if (inherits instanceof SvgElemUse) {\r\n        width = inherits.getLength('width', inherits.getParentVWidth(), width);\r\n        height = inherits.getLength('height', inherits.getParentVHeight(), height);\r\n      }\r\n      let aspectRatio = this.attr('preserveAspectRatio'),\r\n          viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n      if (this.isOuterElement && preserveAspectRatio) {\r\n        x = y = 0;\r\n        width = viewportWidth;\r\n        height = viewportHeight;\r\n        aspectRatio = preserveAspectRatio;\r\n      }\r\n      this.getVWidth = function() {\r\n        return viewBox[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        return viewBox[3];\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        if (this.get('overflow') === 'hidden') {\r\n          new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z()\r\n                        .transform(this.get('transform'))\r\n                        .insertInDocument();\r\n          doc.clip();\r\n        }\r\n        this.drawContent(isClip, isMask);\r\n        doc.restore();\r\n      };\r\n      this.getTransformation = function() {\r\n        return multiplyMatrix(\r\n          this.get('transform'),\r\n          [1, 0, 0, 1, x, y],\r\n          parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]),\r\n          [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\r\n        );\r\n      };\r\n    };\r\n\r\n    var SVGElemImage = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      let link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\r\n          x = this.getLength('x', this.getVWidth(), 0),\r\n          y = this.getLength('y', this.getVHeight(), 0),\r\n          width = this.getLength('width', this.getVWidth(), 'auto'),\r\n          height = this.getLength('height', this.getVHeight(), 'auto'),\r\n          image;\r\n      try {\r\n        image = doc.openImage(link);\r\n      } catch(e) {\r\n        warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\r\n      }\r\n      if (image) {\r\n        if (width === 'auto' && height !== 'auto') {\r\n          width = height * image.width / image.height;\r\n        } else if (height === 'auto' && width !== 'auto') {\r\n          height = width * image.height / image.width;\r\n        } else if (width === 'auto' && height === 'auto') {\r\n          width = image.width;\r\n          height = image.height;\r\n        }\r\n      }\r\n      if (width === 'auto' || width < 0) {width = 0;}\r\n      if (height === 'auto' || height < 0) {height = 0;}\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n      this.getBoundingShape = function() {\r\n        return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        if (this.get('visibility') === 'hidden' || !image) {return;}\r\n        doc.save();\r\n        this.transform();\r\n        if (this.get('overflow') === 'hidden') {\r\n          doc.rect(x, y, width, height).clip();\r\n        }\r\n        this.clip();\r\n        this.mask();\r\n        doc.translate(x, y);\r\n        doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\r\n        if (!isClip) {\r\n          doc.fillOpacity(this.get('opacity'));\r\n          doc.image(image, 0, 0);\r\n        } else {\r\n          doc.rect(0, 0, image.width, image.height);\r\n          docFillColor(DefaultColors.white).fill();\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    var SvgElemPattern = function(obj, inherits, fallback) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.ref = (function() {\r\n        let ref = this.getUrl('href') || this.getUrl('xlink:href');\r\n        if (ref && ref.nodeName === obj.nodeName) {\r\n          return new SvgElemPattern(ref, inherits, fallback);\r\n        }\r\n      }).call(this);\r\n      let _attr = this.attr;\r\n      this.attr = function(key) {\r\n        let attr = _attr.call(this, key);\r\n        if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\r\n        return this.ref ? this.ref.attr(key) : null;\r\n      };\r\n      let _getChildren = this.getChildren;\r\n      this.getChildren = function() {\r\n        let children = _getChildren.call(this);\r\n        if (children.length > 0) {return children;}\r\n        return this.ref ? this.ref.getChildren() : [];\r\n      };\r\n      this.getPaint = function(bBox, gOpacity, isClip, isMask) {\r\n        let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n            bBoxUnitsContent = (this.attr('patternContentUnits') === 'objectBoundingBox'),\r\n            x = this.getLength('x', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\r\n            y = this.getLength('y', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0),\r\n            width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\r\n            height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\r\n        if (bBoxUnitsContent && !bBoxUnitsPattern) { // Use the same units for pattern & pattern content\r\n          x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\r\n          y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\r\n          width = width / (bBox[2] - bBox[0]) || 0;\r\n          height = height / (bBox[3] - bBox[1]) || 0;\r\n        } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\r\n          x = bBox[0] + x * (bBox[2] - bBox[0]);\r\n          y = bBox[1] + y * (bBox[3] - bBox[1]);\r\n          width = width * (bBox[2] - bBox[0]);\r\n          height = height * (bBox[3] - bBox[1]);\r\n        }\r\n        let viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\r\n            aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\r\n            aspectRatioMatrix = multiplyMatrix(\r\n              parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0),\r\n              [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\r\n            ),\r\n            matrix = parseTranform(this.attr('patternTransform'));\r\n        if (bBoxUnitsContent) {\r\n          matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\r\n        }\r\n        matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\r\n        if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\r\n          let group = docBeginGroup([0, 0, width, height]);\r\n          doc.transform.apply(doc, aspectRatioMatrix);\r\n          this.drawChildren(isClip, isMask);\r\n          docEndGroup(group);\r\n          return [docCreatePattern(group, width, height, matrix), gOpacity];\r\n        } else {\r\n          return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\r\n        }\r\n      };\r\n      this.getVWidth = function() {\r\n        let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n            width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0);\r\n        return this.getViewbox('viewBox', [0, 0, width, 0])[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n            height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\r\n        return this.getViewbox('viewBox', [0, 0, 0, height])[3];\r\n      };\r\n    };\r\n\r\n    var SvgElemGradient = function(obj, inherits, fallback) {\r\n      SvgElem.call(this, obj, inherits);\r\n      this.allowedChildren = ['stop'];\r\n      this.ref = (function() {\r\n        let ref = this.getUrl('href') || this.getUrl('xlink:href');\r\n        if (ref && ref.nodeName === obj.nodeName) {\r\n          return new SvgElemGradient(ref, inherits, fallback);\r\n        }\r\n      }).call(this);\r\n      let _attr = this.attr;\r\n      this.attr = function(key) {\r\n        let attr = _attr.call(this, key);\r\n        if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\r\n        return this.ref ? this.ref.attr(key) : null;\r\n      };\r\n      let _getChildren = this.getChildren;\r\n      this.getChildren = function() {\r\n        let children = _getChildren.call(this);\r\n        if (children.length > 0) {return children;}\r\n        return this.ref ? this.ref.getChildren() : [];\r\n      };\r\n      this.getPaint = function(bBox, gOpacity, isClip, isMask) {\r\n        let children = this.getChildren();\r\n        if (children.length === 0) {return;}\r\n        if (children.length === 1) {\r\n          let child = children[0],\r\n              stopColor = child.get('stop-color');\r\n          if (stopColor === 'none') {return;}\r\n          return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\r\n        }\r\n        let bBoxUnits = (this.attr('gradientUnits') !== 'userSpaceOnUse'),\r\n            matrix = parseTranform(this.attr('gradientTransform')),\r\n            spread = this.attr('spreadMethod'),\r\n            grad,\r\n            x1, x2, y1, y2, r2,\r\n            nAfter = 0,\r\n            nBefore = 0,\r\n            nTotal = 1;\r\n        if (bBoxUnits) {\r\n          matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\r\n        }\r\n        if (matrix = validateMatrix(matrix)) {\r\n          if (this.name === 'linearGradient') {\r\n            x1 = this.getLength('x1', (bBoxUnits ? 1 : this.getVWidth()), 0);\r\n            x2 = this.getLength('x2', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 1 : this.getVWidth()));\r\n            y1 = this.getLength('y1', (bBoxUnits ? 1 : this.getVHeight()), 0);\r\n            y2 = this.getLength('y2', (bBoxUnits ? 1 : this.getVHeight()), 0);\r\n          } else {\r\n            x2 = this.getLength('cx', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 0.5 : 0.5 * this.getVWidth()));\r\n            y2 = this.getLength('cy', (bBoxUnits ? 1 : this.getVHeight()), (bBoxUnits ? 0.5 : 0.5 * this.getVHeight()));\r\n            r2 = this.getLength('r', (bBoxUnits ? 1 : this.getViewport()), (bBoxUnits ? 0.5 : 0.5 * this.getViewport()));\r\n            x1 = this.getLength('fx', (bBoxUnits ? 1 : this.getVWidth()), x2);\r\n            y1 = this.getLength('fy', (bBoxUnits ? 1 : this.getVHeight()), y2);\r\n            if (r2 < 0) {\r\n              warningCallback('SvgElemGradient: negative r value');\r\n            }\r\n            let d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\r\n                multiplier = 1;\r\n            if (d > r2) { // according to specification\r\n              multiplier = r2 / d;\r\n              x1 = x2 + (x1 - x2) * multiplier;\r\n              y1 = y2 + (y1 - y2) * multiplier;\r\n            }\r\n            r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\r\n          }\r\n          if (spread === 'reflect' || spread === 'repeat') {\r\n            let inv = inverseMatrix(matrix),\r\n                corner1 = transformPoint([bBox[0], bBox[1]], inv),\r\n                corner2 = transformPoint([bBox[2], bBox[1]], inv),\r\n                corner3 = transformPoint([bBox[2], bBox[3]], inv),\r\n                corner4 = transformPoint([bBox[0], bBox[3]], inv);\r\n            if (this.name === 'linearGradient') { // See file 'gradient-repeat-maths.png'\r\n              nAfter  = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1),\r\n                                 (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1),\r\n                                 (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1),\r\n                                 (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1))\r\n                                / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n              nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2),\r\n                                 (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2),\r\n                                 (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2),\r\n                                 (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2))\r\n                                / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n            } else {\r\n              nAfter  = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2),\r\n                                           Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2),\r\n                                           Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2),\r\n                                           Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\r\n            }\r\n            nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\r\n            nBefore = Math.ceil(nBefore + 0.5);\r\n            nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\r\n          }\r\n          if (this.name === 'linearGradient') {\r\n            grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\r\n          } else {\r\n            grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\r\n          }\r\n          for (let n = 0; n < nTotal; n++) {\r\n            let offset = 0,\r\n                inOrder = (spread !== 'reflect' || (n - nBefore) % 2 === 0);\r\n            for (let i = 0; i < children.length; i++) {\r\n              let child = children[inOrder ? i : children.length - 1 - i],\r\n                  stopColor = child.get('stop-color');\r\n              if (stopColor === 'none') {stopColor = DefaultColors.transparent;}\r\n              stopColor = opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\r\n              offset = Math.max(offset, inOrder ? child.getPercent('offset', 0) : 1 - child.getPercent('offset', 0));\r\n              if (i === 0 && stopColor[0].length === 4) {grad._colorSpace = 'DeviceCMYK';} // Fix until PR #763 is merged into PDFKit\r\n              if (i === 0 && offset > 0) {\r\n                grad.stop((n + 0) / nTotal, stopColor[0], stopColor[1]);\r\n              }\r\n              grad.stop((n + offset) / (nAfter + nBefore + 1), stopColor[0], stopColor[1]);\r\n              if (i === children.length - 1 && offset < 1) {\r\n                grad.stop((n + 1) / nTotal, stopColor[0], stopColor[1]);\r\n              }\r\n            }\r\n          }\r\n          grad.setTransform.apply(grad, matrix);\r\n          return [grad, 1];\r\n        } else {\r\n          return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\r\n        }\r\n      }\r\n    };\r\n\r\n    var SvgElemBasicShape = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      this.dashScale = 1;\r\n      this.getBoundingShape = function() {\r\n        return this.shape;\r\n      };\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        if (this.get('visibility') === 'hidden' || !this.shape) {return;}\r\n        doc.save();\r\n        if (this.get('vector-effect') === 'non-scaling-stroke') {\r\n          this.shape.transform(this.getTransformation());\r\n        } else {\r\n          this.transform();\r\n        }\r\n        this.clip();\r\n        if (!isClip) {\r\n          let masked = this.mask(),\r\n              group;\r\n          if (masked) {\r\n            group = docBeginGroup(getPageBBox());\r\n          }\r\n          let subPaths = this.shape.getSubPaths(),\r\n              fill = this.getFill(isClip, isMask),\r\n              stroke = this.getStroke(isClip, isMask),\r\n              lineWidth = this.get('stroke-width'),\r\n              lineCap = this.get('stroke-linecap');\r\n\r\n          if (this.get('vector-effect') === 'non-scaling-stroke') {\r\n            lineWidth = lineWidth / getPageScale();\r\n          }\r\n          \r\n          if (fill || stroke) {\r\n            if (fill) {\r\n              docFillColor(fill);\r\n            }\r\n            if (stroke) {\r\n              for (let j = 0; j < subPaths.length; j++) {\r\n                if (isEqual(subPaths[j].totalLength, 0)) {\r\n                  if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\r\n                    if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\r\n                      let x = subPaths[j].startPoint[0],\r\n                          y = subPaths[j].startPoint[1];\r\n                      docFillColor(stroke);\r\n                      if (lineCap === 'square') {\r\n                        doc.rect(x - 0.5 * lineWidth, y - 0.5 * lineWidth, lineWidth, lineWidth);\r\n                      } else if (lineCap === 'round') {\r\n                        doc.circle(x, y, 0.5 * lineWidth);\r\n                      }\r\n                      doc.fill();\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n              let dashArray = this.get('stroke-dasharray'),\r\n                  dashOffset = this.get('stroke-dashoffset');\r\n              if (isNotEqual(this.dashScale, 1)) {\r\n                for (let j = 0; j < dashArray.length; j++) {\r\n                  dashArray[j] *= this.dashScale;\r\n                }\r\n                dashOffset *= this.dashScale;\r\n              }\r\n              docStrokeColor(stroke);\r\n              doc.lineWidth(lineWidth)\r\n                 .miterLimit(this.get('stroke-miterlimit'))\r\n                 .lineJoin(this.get('stroke-linejoin'))\r\n                 .lineCap(lineCap);\r\n              docApplyDash(dashArray, dashOffset);\r\n            }\r\n            for (let j = 0; j < subPaths.length; j++) {\r\n              if (subPaths[j].totalLength > 0) {\r\n                subPaths[j].insertInDocument();\r\n              }\r\n            }\r\n            if (fill && stroke) {\r\n              doc.fillAndStroke(this.get('fill-rule'));\r\n            } else if (fill) {\r\n              doc.fill(this.get('fill-rule'));\r\n            } else if (stroke) {\r\n              doc.stroke();\r\n            }\r\n          }\r\n          let markerStart = this.get('marker-start'),\r\n              markerMid = this.get('marker-mid'),\r\n              markerEnd = this.get('marker-end');\r\n          if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\r\n            let markersPos = this.shape.getMarkers();\r\n            if (markerStart !== 'none' && markersPos.length > 0) {\r\n              let marker = new SvgElemMarker(markerStart, null);\r\n              marker.drawMarker(false, isMask, markersPos[0], lineWidth);\r\n            }\r\n            if (markerMid !== 'none') {\r\n              for (let i = 1; i < markersPos.length - 1; i++) {\r\n                let marker = new SvgElemMarker(markerMid, null);\r\n                marker.drawMarker(false, isMask, markersPos[i], lineWidth);\r\n              }\r\n            }\r\n            if (markerEnd !== 'none' && markersPos.length > 0) {\r\n              let marker = new SvgElemMarker(markerEnd, null);\r\n              marker.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\r\n            }\r\n          }\r\n          if (group) {\r\n            docEndGroup(group);\r\n            docInsertGroup(group);\r\n          }\r\n        } else {\r\n          this.shape.insertInDocument();\r\n          docFillColor(DefaultColors.white);\r\n          doc.fill(this.get('clip-rule'));\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    var SvgElemRect = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let x = this.getLength('x', this.getVWidth(), 0),\r\n          y = this.getLength('y', this.getVHeight(), 0),\r\n          w = this.getLength('width', this.getVWidth(), 0),\r\n          h = this.getLength('height', this.getVHeight(), 0),\r\n          rx = this.getLength('rx', this.getVWidth()),\r\n          ry = this.getLength('ry', this.getVHeight());\r\n      if (rx === undefined && ry === undefined) {rx = ry = 0;}\r\n      else if (rx === undefined && ry !== undefined) {rx = ry;}\r\n      else if (rx !== undefined && ry === undefined) {ry = rx;}\r\n      if (w > 0 && h > 0) {\r\n        if (rx && ry) {\r\n          rx = Math.min(rx, 0.5 * w);\r\n          ry = Math.min(ry, 0.5 * h);\r\n          this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry)\r\n                            .L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h)\r\n                            .A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\r\n        } else {\r\n          this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\r\n        }\r\n      } else {\r\n        this.shape = new SvgShape();\r\n      }\r\n    };\r\n\r\n    var SvgElemCircle = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let cx = this.getLength('cx', this.getVWidth(), 0),\r\n          cy = this.getLength('cy', this.getVHeight(), 0),\r\n          r = this.getLength('r', this.getViewport(), 0);\r\n      if (r > 0) {\r\n        this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\r\n      } else {\r\n        this.shape = new SvgShape();\r\n      }\r\n    };\r\n\r\n    var SvgElemEllipse = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let cx = this.getLength('cx', this.getVWidth(), 0),\r\n          cy = this.getLength('cy', this.getVHeight(), 0),\r\n          rx = this.getLength('rx', this.getVWidth(), 0),\r\n          ry = this.getLength('ry', this.getVHeight(), 0);\r\n      if (rx > 0 && ry > 0) {\r\n        this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\r\n      } else {\r\n        this.shape = new SvgShape();\r\n      }\r\n    };\r\n\r\n    var SvgElemLine = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let x1 = this.getLength('x1', this.getVWidth(), 0),\r\n          y1 = this.getLength('y1', this.getVHeight(), 0),\r\n          x2 = this.getLength('x2', this.getVWidth(), 0),\r\n          y2 = this.getLength('y2', this.getVHeight(), 0);\r\n      this.shape = new SvgShape().M(x1, y1).L(x2, y2);\r\n    };\r\n\r\n    var SvgElemPolyline = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let points = this.getNumberList('points');\r\n      this.shape = new SvgShape();\r\n      for (let i = 0; i < points.length - 1; i += 2) {\r\n        if (i === 0) {\r\n          this.shape.M(points[i], points[i+1]);\r\n        } else {\r\n          this.shape.L(points[i], points[i+1]);\r\n        }\r\n      }\r\n      if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\r\n      if (points.length % 2 === 1) {warningCallback('SvgElemPolyline: uneven number of coordinates');}\r\n    };\r\n\r\n    var SvgElemPolygon = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      let points = this.getNumberList('points');\r\n      this.shape = new SvgShape();\r\n      for (let i = 0; i < points.length - 1; i += 2) {\r\n        if (i === 0) {\r\n          this.shape.M(points[i], points[i+1]);\r\n        } else {\r\n          this.shape.L(points[i], points[i+1]);\r\n        }\r\n      }\r\n      this.shape.Z();\r\n      if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\r\n      if (points.length % 2 === 1) {warningCallback('SvgElemPolygon: uneven number of coordinates');}\r\n    };\r\n\r\n    var SvgElemPath = function(obj, inherits) {\r\n      SvgElemBasicShape.call(this, obj, inherits);\r\n      this.shape = new SvgShape().path(this.attr('d'));\r\n      let pathLength = this.getLength('pathLength', this.getViewport());\r\n      this.pathLength = pathLength > 0 ? pathLength : undefined;\r\n      this.dashScale = (this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1);\r\n    };\r\n\r\n    var SvgElemMarker = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      let width = this.getLength('markerWidth', this.getParentVWidth(), 3),\r\n          height = this.getLength('markerHeight', this.getParentVHeight(), 3),\r\n          viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n      this.getVWidth = function() {\r\n        return viewBox[2];\r\n      };\r\n      this.getVHeight = function() {\r\n        return viewBox[3];\r\n      };\r\n      this.drawMarker = function(isClip, isMask, posArray, strokeWidth) {\r\n        doc.save();\r\n        let orient = this.attr('orient'),\r\n            units = this.attr('markerUnits'),\r\n            rotate = (orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180),\r\n            scale = (units === 'userSpaceOnUse' ? 1 : strokeWidth);\r\n        doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\r\n        let refX = this.getLength('refX', this.getVWidth(), 0),\r\n            refY = this.getLength('refY', this.getVHeight(), 0),\r\n            aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\r\n        if (this.get('overflow') === 'hidden') {\r\n          doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\r\n        }\r\n        doc.transform.apply(doc, aspectRatioMatrix);\r\n        doc.translate(-refX, -refY);\r\n        let group;\r\n        if (this.get('opacity') < 1 && !isClip) {\r\n          group = docBeginGroup(getPageBBox());\r\n        }\r\n        this.drawChildren(isClip, isMask);\r\n        if (group) {\r\n          docEndGroup(group);\r\n          doc.fillOpacity(this.get('opacity'));\r\n          docInsertGroup(group);\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    var SvgElemClipPath = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.useMask = function(bBox) {\r\n        let group = docBeginGroup(getPageBBox());\r\n        doc.save();\r\n        doc.transform.apply(doc, this.get('transform'));\r\n        if (this.attr('clipPathUnits') === 'objectBoundingBox') {\r\n          doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\r\n        }\r\n        this.clip();\r\n        this.drawChildren(true, false);\r\n        doc.restore();\r\n        docEndGroup(group);\r\n        docApplyMask(group, true);\r\n      };\r\n    };\r\n\r\n    var SvgElemMask = function(obj, inherits) {\r\n      SvgElemHasChildren.call(this, obj, inherits);\r\n      this.useMask = function(bBox) {\r\n        let group = docBeginGroup(getPageBBox());\r\n        doc.save();\r\n        let x, y, w, h;\r\n        if (this.attr('maskUnits') === 'userSpaceOnUse') {\r\n          x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\r\n          y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\r\n          w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\r\n          h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\r\n        } else {\r\n          x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\r\n          y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\r\n          w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\r\n          h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\r\n        }\r\n        if (this.attr('maskContentUnits') === 'objectBoundingBox') {\r\n          doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\r\n        }\r\n        this.clip();\r\n        this.drawChildren(false, true);\r\n        doc.restore();\r\n        docEndGroup(group);\r\n        docApplyMask(group, true);\r\n      };\r\n    };\r\n\r\n    var SvgElemTextContainer = function(obj, inherits) {\r\n      SvgElemStylable.call(this, obj, inherits);\r\n      this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\r\n      this.isText = true;\r\n      this.getBoundingShape = function() {\r\n        let shape = new SvgShape();\r\n        for (let i = 0; i < this._pos.length; i++) {\r\n          let pos = this._pos[i];\r\n          if (!pos.hidden) {\r\n            let dx0 = pos.ascent * Math.sin(pos.rotate), dy0 = -pos.ascent * Math.cos(pos.rotate),\r\n                dx1 = pos.descent * Math.sin(pos.rotate), dy1 = -pos.descent * Math.cos(pos.rotate),\r\n                dx2 = pos.width * Math.cos(pos.rotate), dy2 = pos.width * Math.sin(pos.rotate);\r\n            shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2)\r\n                 .M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\r\n          }\r\n        }\r\n        return shape;\r\n      };\r\n      this.drawTextInDocument = function(isClip, isMask) {\r\n        if (this.link && !isClip && !isMask) {this.addLink();}\r\n        if (this.get('text-decoration') === 'underline') {\r\n          this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\r\n        }\r\n        if (this.get('text-decoration') === 'overline') {\r\n          this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\r\n        }\r\n        let fill = this.getFill(isClip, isMask),\r\n            stroke = this.getStroke(isClip, isMask),\r\n            strokeWidth = this.get('stroke-width');\r\n        if (this._font.fauxBold) {\r\n          if (!stroke) {\r\n            stroke = fill;\r\n            strokeWidth = this._font.size * 0.03;\r\n          } else {\r\n            strokeWidth += this._font.size * 0.03;\r\n          }\r\n        }\r\n        let children = this.getChildren();\r\n        for (let i = 0; i < children.length; i++) {\r\n          let childElem = children[i];\r\n          switch(childElem.name) {\r\n            case 'tspan': case 'textPath': case 'a':\r\n              if (childElem.get('display') !== 'none') {\r\n                childElem.drawTextInDocument(isClip, isMask);\r\n              }\r\n              break;\r\n            case '#text': case '#cdata-section':\r\n              if (this.get('visibility') === 'hidden') {continue;}\r\n              if (fill || stroke || isClip) {\r\n                if (fill) {\r\n                  docFillColor(fill);\r\n                }\r\n                if (stroke && strokeWidth) {\r\n                  docStrokeColor(stroke);\r\n                  doc.lineWidth(strokeWidth)\r\n                     .miterLimit(this.get('stroke-miterlimit'))\r\n                     .lineJoin(this.get('stroke-linejoin'))\r\n                     .lineCap(this.get('stroke-linecap'));\r\n                  docApplyDash(this.get('stroke-dasharray'), this.get('stroke-dashoffset'));\r\n                }\r\n                docBeginText(this._font.font, this._font.size);\r\n                docSetTextMode(!!fill, !!stroke);\r\n                docWriteGlyphs(childElem._pos, this._font);\r\n                docEndText();\r\n              }\r\n              break;\r\n          }\r\n        }\r\n        if (this.get('text-decoration') === 'line-through') {\r\n          this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\r\n        }\r\n      };\r\n      this.decorate = function(lineWidth, linePosition, isClip, isMask) {\r\n        let fill = this.getFill(isClip, isMask),\r\n            stroke = this.getStroke(isClip, isMask);\r\n        if (fill) {\r\n          docFillColor(fill);\r\n        }\r\n        if (stroke) {\r\n          docStrokeColor(stroke);\r\n          doc.lineWidth(this.get('stroke-width'))\r\n             .miterLimit(this.get('stroke-miterlimit'))\r\n             .lineJoin(this.get('stroke-linejoin'))\r\n             .lineCap(this.get('stroke-linecap'));\r\n          docApplyDash(this.get('stroke-dasharray'), this.get('stroke-dashoffset'));\r\n        }\r\n        for (let j = 0, pos = this._pos; j < pos.length; j++) {\r\n          if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\r\n            let dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\r\n                dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\r\n                dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\r\n                dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\r\n                dx2 = pos[j].width * Math.cos(pos[j].rotate),\r\n                dy2 = pos[j].width * Math.sin(pos[j].rotate);\r\n            new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0)\r\n                          .L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2)\r\n                          .L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2)\r\n                          .L(pos[j].x + dx1, pos[j].y + dy1).Z()\r\n                          .insertInDocument();\r\n            if (fill && stroke) {\r\n              doc.fillAndStroke();\r\n            } else if (fill) {\r\n              doc.fill();\r\n            } else if (stroke) {\r\n              doc.stroke();\r\n            }\r\n          }\r\n        }\r\n      };\r\n    };\r\n\r\n    var SvgElemTextNode = function(obj, inherits) {\r\n      this.name = obj.nodeName;\r\n      this.textContent = obj.nodeValue;\r\n    };\r\n\r\n    var SvgElemTspan = function(obj, inherits) {\r\n      SvgElemTextContainer.call(this, obj, inherits);\r\n    };\r\n\r\n    var SvgElemTextPath = function(obj, inherits) {\r\n      SvgElemTextContainer.call(this, obj, inherits);\r\n      let pathObject, pathLength, temp;\r\n      if ((temp = this.attr('path')) && temp.trim() !== '') {\r\n        let pathLength = this.getLength('pathLength', this.getViewport());\r\n        this.pathObject = new SvgShape().path(temp);\r\n        this.pathLength = pathLength > 0 ? pathLength : this.pathObject.totalLength;\r\n        this.pathScale = this.pathObject.totalLength / this.pathLength;\r\n      } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\r\n        let pathElem = new SvgElemPath(temp, this);\r\n        this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\r\n        this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\r\n        this.pathScale = this.pathObject.totalLength / this.pathLength;\r\n      }\r\n    };\r\n\r\n    var SvgElemText = function(obj, inherits) {\r\n      SvgElemTextContainer.call(this, obj, inherits);\r\n      this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\r\n      (function (textParentElem) {\r\n        let processedText = '', remainingText = obj.textContent, textPaths = [], currentChunk = [], currentAnchor, currentDirection, currentX = 0, currentY = 0;\r\n        function doAnchoring() {\r\n          if (currentChunk.length) {\r\n            let last = currentChunk[currentChunk.length - 1];\r\n            let first = currentChunk[0]\r\n            let width = last.x + last.width - first.x;\r\n            let anchordx = {'startltr': 0, 'middleltr': 0.5, 'endltr': 1, 'startrtl': 1, 'middlertl': 0.5, 'endrtl': 0}[currentAnchor + currentDirection] * width || 0;\r\n            for (let i = 0; i < currentChunk.length; i++) {\r\n              currentChunk[i].x -= anchordx;\r\n            }\r\n          }\r\n          currentChunk = [];\r\n        }\r\n        function adjustLength(pos, length, spacingAndGlyphs) {\r\n          let firstChar = pos[0], lastChar = pos[pos.length - 1],\r\n              startX = firstChar.x, endX = lastChar.x + lastChar.width;\r\n          if (spacingAndGlyphs) {\r\n            let textScale = length / (endX - startX);\r\n            if (textScale > 0 && textScale < Infinity) {\r\n              for (let j = 0; j < pos.length; j++) {\r\n                pos[j].continuous = false;\r\n                pos[j].x = startX + textScale * (pos[j].x - startX);\r\n                pos[j].scale *= textScale;\r\n                pos[j].width *= textScale;\r\n              }\r\n            }\r\n          } else {\r\n            if (pos.length >= 2) {\r\n              let spaceDiff = (length - (endX - startX)) / (pos.length - 1);\r\n              for (let j = 0; j < pos.length; j++) {\r\n                pos[j].continuous = false;\r\n                pos[j].x += j * spaceDiff;\r\n              }\r\n            }\r\n          }\r\n          currentX += length - (endX - startX);\r\n        }\r\n        function recursive(currentElem, parentElem) {\r\n          currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), (parentElem ? parentElem._x.slice(parentElem._pos.length) : []));\r\n          currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), (parentElem ? parentElem._y.slice(parentElem._pos.length) : []));\r\n          currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), (parentElem ? parentElem._dx.slice(parentElem._pos.length) : []));\r\n          currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), (parentElem ? parentElem._dy.slice(parentElem._pos.length) : []));\r\n          currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), (parentElem ? parentElem._rot.slice(parentElem._pos.length) : []));\r\n          currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\r\n          if (currentElem.name === 'textPath') {currentElem._y = [];}\r\n          let fontOptions = {fauxItalic: false, fauxBold: false},\r\n              fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight'), currentElem.get('font-style') === 'italic', fontOptions);\r\n          try {\r\n            doc.font(fontNameorLink);\r\n          } catch(e) {\r\n            warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit: ' + e.message);\r\n          }\r\n          currentElem._pos = [];\r\n          currentElem._index = 0;\r\n          currentElem._font = {font: doc._font, size: currentElem.get('font-size'), fauxItalic: fontOptions.fauxItalic, fauxBold: fontOptions.fauxBold};\r\n          let textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\r\n              spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\r\n              wordSpacing = currentElem.get('word-spacing'),\r\n              letterSpacing = currentElem.get('letter-spacing'),\r\n              textAnchor = currentElem.get('text-anchor'),\r\n              textDirection = currentElem.get('direction'),\r\n              // `alignment-baseline` and `baseline-shift` have no effect on\r\n              // `<text>` elements according to the SVG spec. So, detect when\r\n              // we're styling a `<text>` element and ignore\r\n              // `alignment-baseline` (only factoring in `dominant-baseline`)\r\n              // and `baseline-shift` (which can only have the default value of\r\n              // `baseline`).\r\n              //\r\n              // Note that Chrome (as of v99) incorrectly factors in\r\n              // `alignment-baseline` on `<text>` elements, while Firefox\r\n              // correctly follows the spec and ignores it. This means that our\r\n              // output will differ from Chrome's in these cases, but conform to\r\n              // SVG specification.\r\n              isTextElem = currentElem.name === 'text',\r\n              baselineAttr = isTextElem ? currentElem.get('dominant-baseline') : (currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline')),\r\n              baselineShiftAttr = isTextElem ? 'baseline' : currentElem.get('baseline-shift'),\r\n              baseline = getBaseline(currentElem._font.font, currentElem._font.size, baselineAttr, baselineShiftAttr);\r\n          if (currentElem.name === 'textPath') {\r\n            doAnchoring();\r\n            currentX = currentY = 0;\r\n          }\r\n          let children = currentElem.getChildren();\r\n          for (let i = 0; i < children.length; i++) {\r\n            let childElem = children[i];\r\n            switch(childElem.name) {\r\n              case 'tspan': case 'textPath': case 'a':\r\n                recursive(childElem, currentElem);\r\n                break;\r\n              case '#text': case '#cdata-section':\r\n                let rawText = childElem.textContent, renderedText = rawText, words;\r\n                childElem._font = currentElem._font;\r\n                childElem._pos = [];\r\n                remainingText = remainingText.substring(rawText.length);\r\n                if (currentElem.get('xml:space') === 'preserve') {\r\n                  renderedText = renderedText.replace(/[\\s]/g, ' ');\r\n                } else {\r\n                  renderedText = renderedText.replace(/[\\s]+/g, ' ');\r\n                  if (processedText.match(/[\\s]$|^$/)) {renderedText = renderedText.replace(/^[\\s]/, '');}\r\n                  if (remainingText.match(/^[\\s]*$/)) {renderedText = renderedText.replace(/[\\s]$/, '');}\r\n                }\r\n                processedText += rawText;\r\n                if (wordSpacing === 0) {\r\n                  words = [renderedText];\r\n                } else {\r\n                  words = renderedText.split(/(\\s)/);\r\n                }\r\n                for (let w = 0; w < words.length; w++) {\r\n                  let pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\r\n                  for (let j = 0; j < pos.length; j++) {\r\n                    let index = currentElem._index,\r\n                        xAttr = currentElem._x[index],\r\n                        yAttr = currentElem._y[index],\r\n                        dxAttr = currentElem._dx[index],\r\n                        dyAttr = currentElem._dy[index],\r\n                        rotAttr = currentElem._rot[index],\r\n                        continuous = !(w === 0 && j === 0);\r\n                    if (letterSpacing !== 0) {continuous = false}\r\n                    if (wordSpacing !== 0) {continuous = false}\r\n                    if (xAttr !== undefined) {continuous = false; doAnchoring(); currentX = xAttr;}\r\n                    if (yAttr !== undefined) {continuous = false; doAnchoring(); currentY = yAttr;}\r\n                    if (dxAttr !== undefined) {continuous = false; currentX += dxAttr;}\r\n                    if (dyAttr !== undefined) {continuous = false; currentY += dyAttr;}\r\n                    if (rotAttr !== undefined || currentElem._defRot !== 0) {continuous = false;}\r\n                    let position = {\r\n                      glyph: pos[j].glyph,\r\n                      rotate: (Math.PI / 180) * currentElem.chooseValue(rotAttr, currentElem._defRot),\r\n                      x: currentX + pos[j].xOffset,\r\n                      kern: pos[j].kern,\r\n                      y: currentY + baseline + pos[j].yOffset,\r\n                      width: pos[j].width,\r\n                      ascent: getAscent(currentElem._font.font, currentElem._font.size),\r\n                      descent: getDescent(currentElem._font.font, currentElem._font.size),\r\n                      scale: 1,\r\n                      hidden: false,\r\n                      continuous: continuous\r\n                    };\r\n                    currentChunk.push(position);\r\n                    childElem._pos.push(position);\r\n                    currentElem._pos.push(position);\r\n                    currentElem._index += pos[j].unicode.length;\r\n                    if (currentChunk.length === 1) {\r\n                      currentAnchor = textAnchor;\r\n                      currentDirection = textDirection;\r\n                    }\r\n                    currentX += pos[j].xAdvance + letterSpacing;\r\n                    currentY += pos[j].yAdvance;\r\n                  }\r\n                  if (words[w] === ' ') {\r\n                    currentX += wordSpacing;\r\n                  }\r\n                }\r\n                break;\r\n              default:\r\n                remainingText = remainingText.substring(childElem.textContent.length);\r\n            }\r\n          }\r\n          if (textLength && currentElem._pos.length) {\r\n            adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\r\n          }\r\n          if (currentElem.name === 'textPath' || currentElem.name === 'text') {\r\n            doAnchoring();\r\n          }\r\n          if (currentElem.name === 'textPath') {\r\n            textPaths.push(currentElem);\r\n            let pathObject = currentElem.pathObject;\r\n            if (pathObject) {\r\n              currentX = pathObject.endPoint[0]; currentY = pathObject.endPoint[1];\r\n            }\r\n          }\r\n          if (parentElem) {\r\n            parentElem._pos = parentElem._pos.concat(currentElem._pos);\r\n            parentElem._index += currentElem._index;\r\n          }\r\n        }\r\n        function textOnPath(currentElem) {\r\n          let pathObject = currentElem.pathObject,\r\n              pathLength = currentElem.pathLength,\r\n              pathScale = currentElem.pathScale;\r\n          if (pathObject) {\r\n            let textOffset = currentElem.getLength('startOffset', pathLength, 0);\r\n            for (let j = 0; j < currentElem._pos.length; j++) {\r\n              let charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\r\n              if (charMidX > pathLength || charMidX < 0) {\r\n                currentElem._pos[j].hidden = true;\r\n              } else {\r\n                let pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\r\n                if (isNotEqual(pathScale, 1)) {\r\n                  currentElem._pos[j].scale *= pathScale;\r\n                  currentElem._pos[j].width *= pathScale;\r\n                }\r\n                currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\r\n                currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\r\n                currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\r\n                currentElem._pos[j].continuous = false;\r\n              }\r\n            }\r\n          } else {\r\n            for (let j = 0; j < currentElem._pos.length; j++) {\r\n              currentElem._pos[j].hidden = true;\r\n            }\r\n          }\r\n        }\r\n        recursive(textParentElem, null);\r\n        for (let i = 0; i < textPaths.length; i++) {\r\n          textOnPath(textPaths[i]);\r\n        }\r\n      })(this);\r\n      this.getTransformation = function() {\r\n        return this.get('transform');\r\n      };\r\n      this.drawInDocument = function(isClip, isMask) {\r\n        doc.save();\r\n        this.transform();\r\n        this.clip();\r\n        let masked = this.mask(), group;\r\n        if (masked) {\r\n          group = docBeginGroup(getPageBBox());\r\n        }\r\n        this.drawTextInDocument(isClip, isMask);\r\n        if (group) {\r\n          docEndGroup(group);\r\n          docInsertGroup(group);\r\n        }\r\n        doc.restore();\r\n      };\r\n    };\r\n\r\n    options = options || {};\r\n    var pxToPt = options.assumePt ? 1 : (72/96), // 1px = 72/96pt, but only if assumePt is false\r\n        viewportWidth = (options.width || doc.page.width) / pxToPt,\r\n        viewportHeight = (options.height || doc.page.height) / pxToPt,\r\n        preserveAspectRatio = options.preserveAspectRatio || null, // default to null so that the attr can override if not passed\r\n        useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\r\n        warningCallback = options.warningCallback,\r\n        fontCallback = options.fontCallback,\r\n        imageCallback = options.imageCallback,\r\n        colorCallback = options.colorCallback,\r\n        documentCallback = options.documentCallback,\r\n        precision = Math.ceil(Math.max(1, options.precision)) || 3,\r\n        groupStack = [],\r\n        documentCache = {},\r\n        links = [],\r\n        styleRules = [];\r\n\r\n    if (typeof warningCallback !== 'function') {\r\n      warningCallback = function(str) {\r\n        if (typeof console !== undefined && typeof console.warn === 'function') {console.warn(str);}\r\n      };\r\n    }\r\n    if (typeof fontCallback !== 'function') {\r\n      fontCallback = function(family, bold, italic, fontOptions) {\r\n        // Check if the font is already registered in the document\r\n        if (bold && italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\r\n            return family + '-BoldItalic';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\r\n            fontOptions.fauxBold = true;\r\n            return family + '-Italic';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\r\n            fontOptions.fauxItalic = true;\r\n            return family + '-Bold';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            fontOptions.fauxBold = true;\r\n            fontOptions.fauxItalic = true;\r\n            return family;\r\n          }\r\n        }\r\n        if (bold && !italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\r\n            return family + '-Bold';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            fontOptions.fauxBold = true;\r\n            return family;\r\n          }\r\n        }\r\n        if (!bold && italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\r\n            return family + '-Italic';\r\n          } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            fontOptions.fauxItalic = true;\r\n            return family;\r\n          }\r\n        }\r\n        if (!bold && !italic) {\r\n          if (doc._registeredFonts.hasOwnProperty(family)) {\r\n            return family;\r\n          }\r\n        }\r\n        // Use standard fonts as fallback\r\n        if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\r\n          if (bold && italic) {return 'Times-BoldItalic';}\r\n          if (bold && !italic) {return 'Times-Bold';}\r\n          if (!bold && italic) {return 'Times-Italic';}\r\n          if (!bold && !italic) {return 'Times-Roman';}\r\n        } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\r\n          if (bold && italic) {return 'Courier-BoldOblique';}\r\n          if (bold && !italic) {return 'Courier-Bold';}\r\n          if (!bold && italic) {return 'Courier-Oblique';}\r\n          if (!bold && !italic) {return 'Courier';}\r\n        } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\r\n          if (bold && italic) {return 'Helvetica-BoldOblique';}\r\n          if (bold && !italic) {return 'Helvetica-Bold';}\r\n          if (!bold && italic) {return 'Helvetica-Oblique';}\r\n          if (!bold && !italic) {return 'Helvetica';}\r\n        }\r\n      };\r\n    }\r\n    if (typeof imageCallback !== 'function') {\r\n      imageCallback = function(link) {\r\n        return link.replace(/\\s+/g, '');\r\n      };\r\n    }\r\n    if (typeof colorCallback !== 'function') {\r\n      colorCallback = null;\r\n    } else {\r\n      for (let color in DefaultColors) {\r\n        let newColor = colorCallback(DefaultColors[color]);\r\n        DefaultColors[color][0] = newColor[0];\r\n        DefaultColors[color][1] = newColor[1];\r\n      }\r\n    }\r\n    if (typeof documentCallback !== 'function') {\r\n      documentCallback = null;\r\n    }\r\n\r\n    if (typeof svg === 'string') {svg = parseXml(svg);}\r\n    if (svg) {\r\n      let styles = svg.getElementsByTagName('style');\r\n      for (let i = 0; i < styles.length; i++) {\r\n        styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\r\n      }\r\n      let elem = createSVGElement(svg, null);\r\n      if (typeof elem.drawInDocument === 'function') {\r\n        if (options.useCSS && !useCSS) {\r\n          warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\r\n        }\r\n        let savedFillColor = doc._fillColor;\r\n        doc.save().translate(x || 0, y || 0).scale(pxToPt);\r\n        elem.drawInDocument();\r\n        for (let i = 0; i < links.length; i++) {\r\n          doc.page.annotations.push(links[i]);\r\n        }\r\n        doc.restore();\r\n        doc._fillColor = savedFillColor;\r\n      } else {\r\n        warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\r\n      }\r\n    } else {\r\n      warningCallback('SVGtoPDF: the input does not look like a valid SVG');\r\n    }\r\n\r\n};\r\n\r\nif (typeof module !== 'undefined' && module && typeof module.exports !== 'undefined') {\r\n  module.exports = SVGtoPDF;\r\n}\r\n"]}