PageSourceSearch

https://www.aagwa.org/assets/js/html2canvas_latest.js

js aagwa.org collected 2026-10-09 03:58:54 UTC 363,374 bytes, 9,183 lines download raw bytes

1/*!
2 * html2canvas 1.0.0-rc.7 <https://html2canvas.hertzen.com>
3 * Copyright (c) 2020 Niklas von Hertzen <https://hertzen.com>
4 * Released under MIT License
5 */
6(function (global, factory) {
7  typeof exports === "object" && typeof module !== "undefined"
8    ? (module.exports = factory())
9    : typeof define === "function" && define.amd
10    ? define(factory)
11    : ((global = global || self), (global.html2canvas = factory()));
12})(this, function () {
13  "use strict";
14
15  /*! *****************************************************************************
16    Copyright (c) Microsoft Corporation. All rights reserved.
17    Licensed under the Apache License, Version 2.0 (the "License"); you may not use
18    this file except in compliance with the License. You may obtain a copy of the
19    License at http://www.apache.org/licenses/LICENSE-2.0
20
21    THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
22    KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
23    WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
24    MERCHANTABLITY OR NON-INFRINGEMENT.
25
26    See the Apache Version 2.0 License for specific language governing permissions
27    and limitations under the License.
28    ***************************************************************************** */
29  /* global Reflect, Promise */
30
31  var extendStatics = function (d, b) {
32    extendStatics =
33      Object.setPrototypeOf ||
34      ({ __proto__: [] } instanceof Array &&
35        function (d, b) {
36          d.__proto__ = b;
37        }) ||
38      function (d, b) {
39        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
40      };
41    return extendStatics(d, b);
42  };
43
44  function __extends(d, b) {
45    extendStatics(d, b);
46    function __() {
47      this.constructor = d;
48    }
49    d.prototype =
50      b === null ? Object.create(b) : ((__.prototype = b.prototype), new __());
51  }
52
53  var __assign = function () {
54    __assign =
55      Object.assign ||
56      function __assign(t) {
57        for (var s, i = 1, n = arguments.length; i < n; i++) {
58          s = arguments[i];
59          for (var p in s)
60            if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
61        }
62        return t;
63      };
64    return __assign.apply(this, arguments);
65  };
66
67  function __awaiter(thisArg, _arguments, P, generator) {
68    return new (P || (P = Promise))(function (resolve, reject) {
69      function fulfilled(value) {
70        try {
71          step(generator.next(value));
72        } catch (e) {
73          reject(e);
74        }
75      }
76      function rejected(value) {
77        try {
78          step(generator["throw"](value));
79        } catch (e) {
80          reject(e);
81        }
82      }
83      function step(result) {
84        result.done
85          ? resolve(result.value)
86          : new P(function (resolve) {
87              resolve(result.value);
88            }).then(fulfilled, rejected);
89      }
90      step((generator = generator.apply(thisArg, _arguments || [])).next());
91    });
92  }
93
94  function __generator(thisArg, body) {
95    var _ = {
96        label: 0,
97        sent: function () {
98          if (t[0] & 1) throw t[1];
99          return t[1];
100        },
101        trys: [],
102        ops: [],
103      },
104      f,
105      y,
106      t,
107      g;
108    return (
109      (g = { next: verb(0), throw: verb(1), return: verb(2) }),
110      typeof Symbol === "function" &&
111        (g[Symbol.iterator] = function () {
112          return this;
113        }),
114      g
115    );
116    function verb(n) {
117      return function (v) {
118        return step([n, v]);
119      };
120    }
121    function step(op) {
122      if (f) throw new TypeError("Generator is already executing.");
123      while (_)
124        try {
125          if (
126            ((f = 1),
127            y &&
128              (t =
129                op[0] & 2
130                  ? y["return"]
131                  : op[0]
132                  ? y["throw"] || ((t = y["return"]) && t.call(y), 0)
133                  : y.next) &&
134              !(t = t.call(y, op[1])).done)
135          )
136            return t;
137          if (((y = 0), t)) op = [op[0] & 2, t.value];
138          switch (op[0]) {
139            case 0:
140            case 1:
141              t = op;
142              break;
143            case 4:
144              _.label++;
145              return { value: op[1], done: false };
146            case 5:
147              _.label++;
148              y = op[1];
149              op = [0];
150              continue;
151            case 7:
152              op = _.ops.pop();
153              _.trys.pop();
154              continue;
155            default:
156              if (
157                !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) &&
158                (op[0] === 6 || op[0] === 2)
159              ) {
160                _ = 0;
161                continue;
162              }
163              if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
164                _.label = op[1];
165                break;
166              }
167              if (op[0] === 6 && _.label < t[1]) {
168                _.label = t[1];
169                t = op;
170                break;
171              }
172              if (t && _.label < t[2]) {
173                _.label = t[2];
vendor: 12,266 bytes, lines 174-520
174                _.ops.push(op);
175                break;
176              }
177              if (t[2]) _.ops.pop();
178              _.trys.pop();
179              continue;
180          }
181          op = body.call(thisArg, _);
182        } catch (e) {
183          op = [6, e];
184          y = 0;
185        } finally {
186          f = t = 0;
187        }
188      if (op[0] & 5) throw op[1];
189      return { value: op[0] ? op[1] : void 0, done: true };
190    }
191  }
192
193  var Bounds = /** @class */ (function () {
194    function Bounds(x, y, w, h) {
195      this.left = x;
196      this.top = y;
197      this.width = w;
198      this.height = h;
199    }
200    Bounds.prototype.add = function (x, y, w, h) {
201      return new Bounds(
202        this.left + x,
203        this.top + y,
204        this.width + w,
205        this.height + h
206      );
207    };
208    Bounds.fromClientRect = function (clientRect) {
209      return new Bounds(
210        clientRect.left,
211        clientRect.top,
212        clientRect.width,
213        clientRect.height
214      );
215    };
216    return Bounds;
217  })();
218  var parseBounds = function (node) {
219    return Bounds.fromClientRect(node.getBoundingClientRect());
220  };
221  var parseDocumentSize = function (document) {
222    var body = document.body;
223    var documentElement = document.documentElement;
224    if (!body || !documentElement) {
225      throw new Error("Unable to get document size");
226    }
227    var width = Math.max(
228      Math.max(body.scrollWidth, documentElement.scrollWidth),
229      Math.max(body.offsetWidth, documentElement.offsetWidth),
230      Math.max(body.clientWidth, documentElement.clientWidth)
231    );
232    var height = Math.max(
233      Math.max(body.scrollHeight, documentElement.scrollHeight),
234      Math.max(body.offsetHeight, documentElement.offsetHeight),
235      Math.max(body.clientHeight, documentElement.clientHeight)
236    );
237    return new Bounds(0, 0, width, height);
238  };
239
240  /*
241   * css-line-break 1.1.1 <https://github.com/niklasvh/css-line-break#readme>
242   * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com>
243   * Released under MIT License
244   */
245  var toCodePoints = function (str) {
246    var codePoints = [];
247    var i = 0;
248    var length = str.length;
249    while (i < length) {
250      var value = str.charCodeAt(i++);
251      if (value >= 0xd800 && value <= 0xdbff && i < length) {
252        var extra = str.charCodeAt(i++);
253        if ((extra & 0xfc00) === 0xdc00) {
254          codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);
255        } else {
256          codePoints.push(value);
257          i--;
258        }
259      } else {
260        codePoints.push(value);
261      }
262    }
263    return codePoints;
264  };
265  var fromCodePoint = function () {
266    var codePoints = [];
267    for (var _i = 0; _i < arguments.length; _i++) {
268      codePoints[_i] = arguments[_i];
269    }
270    if (String.fromCodePoint) {
271      return String.fromCodePoint.apply(String, codePoints);
272    }
273    var length = codePoints.length;
274    if (!length) {
275      return "";
276    }
277    var codeUnits = [];
278    var index = -1;
279    var result = "";
280    while (++index < length) {
281      var codePoint = codePoints[index];
282      if (codePoint <= 0xffff) {
283        codeUnits.push(codePoint);
284      } else {
285        codePoint -= 0x10000;
286        codeUnits.push(
287          (codePoint >> 10) + 0xd800,
288          (codePoint % 0x400) + 0xdc00
289        );
290      }
291      if (index + 1 === length || codeUnits.length > 0x4000) {
292        result += String.fromCharCode.apply(String, codeUnits);
293        codeUnits.length = 0;
294      }
295    }
296    return result;
297  };
298  var chars =
299    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
300  // Use a lookup table to find the index.
301  var lookup = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
302  for (var i = 0; i < chars.length; i++) {
303    lookup[chars.charCodeAt(i)] = i;
304  }
305  var decode = function (base64) {
306    var bufferLength = base64.length * 0.75,
307      len = base64.length,
308      i,
309      p = 0,
310      encoded1,
311      encoded2,
312      encoded3,
313      encoded4;
314    if (base64[base64.length - 1] === "=") {
315      bufferLength--;
316      if (base64[base64.length - 2] === "=") {
317        bufferLength--;
318      }
319    }
320    var buffer =
321      typeof ArrayBuffer !== "undefined" &&
322      typeof Uint8Array !== "undefined" &&
323      typeof Uint8Array.prototype.slice !== "undefined"
324        ? new ArrayBuffer(bufferLength)
325        : new Array(bufferLength);
326    var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);
327    for (i = 0; i < len; i += 4) {
328      encoded1 = lookup[base64.charCodeAt(i)];
329      encoded2 = lookup[base64.charCodeAt(i + 1)];
330      encoded3 = lookup[base64.charCodeAt(i + 2)];
331      encoded4 = lookup[base64.charCodeAt(i + 3)];
332      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
333      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
334      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
335    }
336    return buffer;
337  };
338  var polyUint16Array = function (buffer) {
339    var length = buffer.length;
340    var bytes = [];
341    for (var i = 0; i < length; i += 2) {
342      bytes.push((buffer[i + 1] << 8) | buffer[i]);
343    }
344    return bytes;
345  };
346  var polyUint32Array = function (buffer) {
347    var length = buffer.length;
348    var bytes = [];
349    for (var i = 0; i < length; i += 4) {
350      bytes.push(
351        (buffer[i + 3] << 24) |
352          (buffer[i + 2] << 16) |
353          (buffer[i + 1] << 8) |
354          buffer[i]
355      );
356    }
357    return bytes;
358  };
359
360  /** Shift size for getting the index-2 table offset. */
361  var UTRIE2_SHIFT_2 = 5;
362  /** Shift size for getting the index-1 table offset. */
363  var UTRIE2_SHIFT_1 = 6 + 5;
364  /**
365   * Shift size for shifting left the index array values.
366   * Increases possible data size with 16-bit index values at the cost
367   * of compactability.
368   * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.
369   */
370  var UTRIE2_INDEX_SHIFT = 2;
371  /**
372   * Difference between the two shift sizes,
373   * for getting an index-1 offset from an index-2 offset. 6=11-5
374   */
375  var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;
376  /**
377   * The part of the index-2 table for U+D800..U+DBFF stores values for
378   * lead surrogate code _units_ not code _points_.
379   * Values for lead surrogate code _points_ are indexed with this portion of the table.
380   * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)
381   */
382  var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;
383  /** Number of entries in a data block. 32=0x20 */
384  var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;
385  /** Mask for getting the lower bits for the in-data-block offset. */
386  var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;
387  var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;
388  /** Count the lengths of both BMP pieces. 2080=0x820 */
389  var UTRIE2_INDEX_2_BMP_LENGTH =
390    UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;
391  /**
392   * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
393   * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.
394   */
395  var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;
396  var UTRIE2_UTF8_2B_INDEX_2_LENGTH =
397    0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */
398  /**
399   * The index-1 table, only used for supplementary code points, at offset 2112=0x840.
400   * Variable length, for code points up to highStart, where the last single-value range starts.
401   * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.
402   * (For 0x100000 supplementary code points U+10000..U+10ffff.)
403   *
404   * The part of the index-2 table for supplementary code points starts
405   * after this index-1 table.
406   *
407   * Both the index-1 table and the following part of the index-2 table
408   * are omitted completely if there is only BMP data.
409   */
410  var UTRIE2_INDEX_1_OFFSET =
411    UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;
412  /**
413   * Number of index-1 entries for the BMP. 32=0x20
414   * This part of the index-1 table is omitted from the serialized form.
415   */
416  var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;
417  /** Number of entries in an index-2 block. 64=0x40 */
418  var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;
419  /** Mask for getting the lower bits for the in-index-2-block offset. */
420  var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;
421  var slice16 = function (view, start, end) {
422    if (view.slice) {
423      return view.slice(start, end);
424    }
425    return new Uint16Array(Array.prototype.slice.call(view, start, end));
426  };
427  var slice32 = function (view, start, end) {
428    if (view.slice) {
429      return view.slice(start, end);
430    }
431    return new Uint32Array(Array.prototype.slice.call(view, start, end));
432  };
433  var createTrieFromBase64 = function (base64) {
434    var buffer = decode(base64);
435    var view32 = Array.isArray(buffer)
436      ? polyUint32Array(buffer)
437      : new Uint32Array(buffer);
438    var view16 = Array.isArray(buffer)
439      ? polyUint16Array(buffer)
440      : new Uint16Array(buffer);
441    var headerLength = 24;
442    var index = slice16(view16, headerLength / 2, view32[4] / 2);
443    var data =
444      view32[5] === 2
445        ? slice16(view16, (headerLength + view32[4]) / 2)
446        : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));
447    return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);
448  };
449  var Trie = /** @class */ (function () {
450    function Trie(
451      initialValue,
452      errorValue,
453      highStart,
454      highValueIndex,
455      index,
456      data
457    ) {
458      this.initialValue = initialValue;
459      this.errorValue = errorValue;
460      this.highStart = highStart;
461      this.highValueIndex = highValueIndex;
462      this.index = index;
463      this.data = data;
464    }
465    /**
466     * Get the value for a code point as stored in the Trie.
467     *
468     * @param codePoint the code point
469     * @return the value
470     */
471    Trie.prototype.get = function (codePoint) {
472      var ix;
473      if (codePoint >= 0) {
474        if (
475          codePoint < 0x0d800 ||
476          (codePoint > 0x0dbff && codePoint <= 0x0ffff)
477        ) {
478          // Ordinary BMP code point, excluding leading surrogates.
479          // BMP uses a single level lookup.  BMP index starts at offset 0 in the Trie2 index.
480          // 16 bit data is stored in the index array itself.
481          ix = this.index[codePoint >> UTRIE2_SHIFT_2];
482          ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
483          return this.data[ix];
484        }
485        if (codePoint <= 0xffff) {
486          // Lead Surrogate Code Point.  A Separate index section is stored for
487          // lead surrogate code units and code points.
488          //   The main index has the code unit data.
489          //   For this function, we need the code point data.
490          // Note: this expression could be refactored for slightly improved efficiency, but
491          //       surrogate code points will be so rare in practice that it's not worth it.
492          ix =
493            this.index[
494              UTRIE2_LSCP_INDEX_2_OFFSET +
495                ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)
496            ];
497          ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
498          return this.data[ix];
499        }
500        if (codePoint < this.highStart) {
501          // Supplemental code point, use two-level lookup.
502          ix =
503            UTRIE2_INDEX_1_OFFSET -
504            UTRIE2_OMITTED_BMP_INDEX_1_LENGTH +
505            (codePoint >> UTRIE2_SHIFT_1);
506          ix = this.index[ix];
507          ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;
508          ix = this.index[ix];
509          ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
510          return this.data[ix];
511        }
512        if (codePoint <= 0x10ffff) {
513          return this.data[this.highValueIndex];
514        }
515      }
516      // Fall through.  The code point is outside of the legal range of 0..0x10ffff.
517      return this.errorValue;
518    };
519    return Trie;
520  })();
521
522  var base64 =
523    
vendor: 50,626 bytes, line 523
523"KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA"
523;
524
525  /* @flow */
526  var LETTER_NUMBER_MODIFIER = 50;
527  // Non-tailorable Line Breaking Classes
528  var BK = 1; //  Cause a line break (after)
529  var CR = 2; //  Cause a line break (after), except between CR and LF
530  var LF = 3; //  Cause a line break (after)
531  var CM = 4; //  Prohibit a line break between the character and the preceding character
532  var NL = 5; //  Cause a line break (after)
533  var WJ = 7; //  Prohibit line breaks before and after
534  var ZW = 8; //  Provide a break opportunity
535  var GL = 9; //  Prohibit line breaks before and after
536  var SP = 10; // Enable indirect line breaks
537  var ZWJ = 11; // Prohibit line breaks within joiner sequences
538  // Break Opportunities
539  var B2 = 12; //  Provide a line break opportunity before and after the character
540  var BA = 13; //  Generally provide a line break opportunity after the character
541  var BB = 14; //  Generally provide a line break opportunity before the character
542  var HY = 15; //  Provide a line break opportunity after the character, except in numeric context
543  var CB = 16; //   Provide a line break opportunity contingent on additional information
544  // Characters Prohibiting Certain Breaks
545  var CL = 17; //  Prohibit line breaks before
546  var CP = 18; //  Prohibit line breaks before
547  var EX = 19; //  Prohibit line breaks before
548  var IN = 20; //  Allow only indirect line breaks between pairs
549  var NS = 21; //  Allow only indirect line breaks before
550  var OP = 22; //  Prohibit line breaks after
551  var QU = 23; //  Act like they are both opening and closing
552  // Numeric Context
553  var IS = 24; //  Prevent breaks after any and before numeric
554  var NU = 25; //  Form numeric expressions for line breaking purposes
555  var PO = 26; //  Do not break following a numeric expression
556  var PR = 27; //  Do not break in front of a numeric expression
557  var SY = 28; //  Prevent a break before; and allow a break after
558  // Other Characters
559  var AI = 29; //  Act like AL when the resolvedEAW is N; otherwise; act as ID
560  var AL = 30; //  Are alphabetic characters or symbols that are used with alphabetic characters
561  var CJ = 31; //  Treat as NS or ID for strict or normal breaking.
562  var EB = 32; //  Do not break from following Emoji Modifier
563  var EM = 33; //  Do not break from preceding Emoji Base
564  var H2 = 34; //  Form Korean syllable blocks
565  var H3 = 35; //  Form Korean syllable blocks
566  var HL = 36; //  Do not break around a following hyphen; otherwise act as Alphabetic
567  var ID = 37; //  Break before or after; except in some numeric context
568  var JL = 38; //  Form Korean syllable blocks
569  var JV = 39; //  Form Korean syllable blocks
570  var JT = 40; //  Form Korean syllable blocks
571  var RI = 41; //  Keep pairs together. For pairs; break before and after other classes
572  var SA = 42; //  Provide a line break opportunity contingent on additional, language-specific context analysis
573  var XX = 43; //  Have as yet unknown line breaking behavior or unassigned code positions
574  var BREAK_MANDATORY = "!";
575  var BREAK_NOT_ALLOWED = "×";
576  var BREAK_ALLOWED = "÷";
577  var UnicodeTrie = createTrieFromBase64(base64);
578  var ALPHABETICS = [AL, HL];
579  var HARD_LINE_BREAKS = [BK, CR, LF, NL];
580  var SPACE = [SP, ZW];
581  var PREFIX_POSTFIX = [PR, PO];
582  var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE);
583  var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];
584  var HYPHEN = [HY, BA];
585  var codePointsToCharacterClasses = function (codePoints, lineBreak) {
586    if (lineBreak === void 0) {
587      lineBreak = "strict";
588    }
589    var types = [];
590    var indicies = [];
591    var categories = [];
vendor: 11,163 bytes, lines 592-906
592    codePoints.forEach(function (codePoint, index) {
593      var classType = UnicodeTrie.get(codePoint);
594      if (classType > LETTER_NUMBER_MODIFIER) {
595        categories.push(true);
596        classType -= LETTER_NUMBER_MODIFIER;
597      } else {
598        categories.push(false);
599      }
600      if (["normal", "auto", "loose"].indexOf(lineBreak) !== -1) {
601        // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0
602        if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {
603          indicies.push(index);
604          return types.push(CB);
605        }
606      }
607      if (classType === CM || classType === ZWJ) {
608        // LB10 Treat any remaining combining mark or ZWJ as AL.
609        if (index === 0) {
610          indicies.push(index);
611          return types.push(AL);
612        }
613        // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of
614        // the base character in all of the following rules. Treat ZWJ as if it were CM.
615        var prev = types[index - 1];
616        if (LINE_BREAKS.indexOf(prev) === -1) {
617          indicies.push(indicies[index - 1]);
618          return types.push(prev);
619        }
620        indicies.push(index);
621        return types.push(AL);
622      }
623      indicies.push(index);
624      if (classType === CJ) {
625        return types.push(lineBreak === "strict" ? NS : ID);
626      }
627      if (classType === SA) {
628        return types.push(AL);
629      }
630      if (classType === AI) {
631        return types.push(AL);
632      }
633      // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL
634      // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised
635      // to take into account the actual line breaking properties for these characters.
636      if (classType === XX) {
637        if (
638          (codePoint >= 0x20000 && codePoint <= 0x2fffd) ||
639          (codePoint >= 0x30000 && codePoint <= 0x3fffd)
640        ) {
641          return types.push(ID);
642        } else {
643          return types.push(AL);
644        }
645      }
646      types.push(classType);
647    });
648    return [indicies, types, categories];
649  };
650  var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {
651    var current = classTypes[currentIndex];
652    if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {
653      var i = currentIndex;
654      while (i <= classTypes.length) {
655        i++;
656        var next = classTypes[i];
657        if (next === b) {
658          return true;
659        }
660        if (next !== SP) {
661          break;
662        }
663      }
664    }
665    if (current === SP) {
666      var i = currentIndex;
667      while (i > 0) {
668        i--;
669        var prev = classTypes[i];
670        if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {
671          var n = currentIndex;
672          while (n <= classTypes.length) {
673            n++;
674            var next = classTypes[n];
675            if (next === b) {
676              return true;
677            }
678            if (next !== SP) {
679              break;
680            }
681          }
682        }
683        if (prev !== SP) {
684          break;
685        }
686      }
687    }
688    return false;
689  };
690  var previousNonSpaceClassType = function (currentIndex, classTypes) {
691    var i = currentIndex;
692    while (i >= 0) {
693      var type = classTypes[i];
694      if (type === SP) {
695        i--;
696      } else {
697        return type;
698      }
699    }
700    return 0;
701  };
702  var _lineBreakAtIndex = function (
703    codePoints,
704    classTypes,
705    indicies,
706    index,
707    forbiddenBreaks
708  ) {
709    if (indicies[index] === 0) {
710      return BREAK_NOT_ALLOWED;
711    }
712    var currentIndex = index - 1;
713    if (
714      Array.isArray(forbiddenBreaks) &&
715      forbiddenBreaks[currentIndex] === true
716    ) {
717      return BREAK_NOT_ALLOWED;
718    }
719    var beforeIndex = currentIndex - 1;
720    var afterIndex = currentIndex + 1;
721    var current = classTypes[currentIndex];
722    // LB4 Always break after hard line breaks.
723    // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.
724    var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;
725    var next = classTypes[afterIndex];
726    if (current === CR && next === LF) {
727      return BREAK_NOT_ALLOWED;
728    }
729    if (HARD_LINE_BREAKS.indexOf(current) !== -1) {
730      return BREAK_MANDATORY;
731    }
732    // LB6 Do not break before hard line breaks.
733    if (HARD_LINE_BREAKS.indexOf(next) !== -1) {
734      return BREAK_NOT_ALLOWED;
735    }
736    // LB7 Do not break before spaces or zero width space.
737    if (SPACE.indexOf(next) !== -1) {
738      return BREAK_NOT_ALLOWED;
739    }
740    // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.
741    if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {
742      return BREAK_ALLOWED;
743    }
744    // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier.
745    if (
746      UnicodeTrie.get(codePoints[currentIndex]) === ZWJ &&
747      (next === ID || next === EB || next === EM)
748    ) {
749      return BREAK_NOT_ALLOWED;
750    }
751    // LB11 Do not break before or after Word joiner and related characters.
752    if (current === WJ || next === WJ) {
753      return BREAK_NOT_ALLOWED;
754    }
755    // LB12 Do not break after NBSP and related characters.
756    if (current === GL) {
757      return BREAK_NOT_ALLOWED;
758    }
759    // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.
760    if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {
761      return BREAK_NOT_ALLOWED;
762    }
763    // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.
764    if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {
765      return BREAK_NOT_ALLOWED;
766    }
767    // LB14 Do not break after ‘[’, even after spaces.
768    if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {
769      return BREAK_NOT_ALLOWED;
770    }
771    // LB15 Do not break within ‘”[’, even with intervening spaces.
772    if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {
773      return BREAK_NOT_ALLOWED;
774    }
775    // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.
776    if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {
777      return BREAK_NOT_ALLOWED;
778    }
779    // LB17 Do not break within ‘——’, even with intervening spaces.
780    if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {
781      return BREAK_NOT_ALLOWED;
782    }
783    // LB18 Break after spaces.
784    if (current === SP) {
785      return BREAK_ALLOWED;
786    }
787    // LB19 Do not break before or after quotation marks, such as ‘ ” ’.
788    if (current === QU || next === QU) {
789      return BREAK_NOT_ALLOWED;
790    }
791    // LB20 Break before and after unresolved CB.
792    if (next === CB || current === CB) {
793      return BREAK_ALLOWED;
794    }
795    // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.
796    if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {
797      return BREAK_NOT_ALLOWED;
798    }
799    // LB21a Don't break after Hebrew + Hyphen.
800    if (before === HL && HYPHEN.indexOf(current) !== -1) {
801      return BREAK_NOT_ALLOWED;
802    }
803    // LB21b Don’t break between Solidus and Hebrew letters.
804    if (current === SY && next === HL) {
805      return BREAK_NOT_ALLOWED;
806    }
807    // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis.
808    if (
809      next === IN &&
810      ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1
811    ) {
812      return BREAK_NOT_ALLOWED;
813    }
814    // LB23 Do not break between digits and letters.
815    if (
816      (ALPHABETICS.indexOf(next) !== -1 && current === NU) ||
817      (ALPHABETICS.indexOf(current) !== -1 && next === NU)
818    ) {
819      return BREAK_NOT_ALLOWED;
820    }
821    // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.
822    if (
823      (current === PR && [ID, EB, EM].indexOf(next) !== -1) ||
824      ([ID, EB, EM].indexOf(current) !== -1 && next === PO)
825    ) {
826      return BREAK_NOT_ALLOWED;
827    }
828    // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.
829    if (
830      (ALPHABETICS.indexOf(current) !== -1 &&
831        PREFIX_POSTFIX.indexOf(next) !== -1) ||
832      (PREFIX_POSTFIX.indexOf(current) !== -1 &&
833        ALPHABETICS.indexOf(next) !== -1)
834    ) {
835      return BREAK_NOT_ALLOWED;
836    }
837    // LB25 Do not break between the following pairs of classes relevant to numbers:
838    if (
839      // (PR | PO) × ( OP | HY )? NU
840      ([PR, PO].indexOf(current) !== -1 &&
841        (next === NU ||
842          ([OP, HY].indexOf(next) !== -1 &&
843            classTypes[afterIndex + 1] === NU))) ||
844      // ( OP | HY ) × NU
845      ([OP, HY].indexOf(current) !== -1 && next === NU) ||
846      // NU ×	(NU | SY | IS)
847      (current === NU && [NU, SY, IS].indexOf(next) !== -1)
848    ) {
849      return BREAK_NOT_ALLOWED;
850    }
851    // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)
852    if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {
853      var prevIndex = currentIndex;
854      while (prevIndex >= 0) {
855        var type = classTypes[prevIndex];
856        if (type === NU) {
857          return BREAK_NOT_ALLOWED;
858        } else if ([SY, IS].indexOf(type) !== -1) {
859          prevIndex--;
860        } else {
861          break;
862        }
863      }
864    }
865    // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))
866    if ([PR, PO].indexOf(next) !== -1) {
867      var prevIndex =
868        [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;
869      while (prevIndex >= 0) {
870        var type = classTypes[prevIndex];
871        if (type === NU) {
872          return BREAK_NOT_ALLOWED;
873        } else if ([SY, IS].indexOf(type) !== -1) {
874          prevIndex--;
875        } else {
876          break;
877        }
878      }
879    }
880    // LB26 Do not break a Korean syllable.
881    if (
882      (JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||
883      ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||
884      ([JT, H3].indexOf(current) !== -1 && next === JT)
885    ) {
886      return BREAK_NOT_ALLOWED;
887    }
888    // LB27 Treat a Korean Syllable Block the same as ID.
889    if (
890      (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 &&
891        [IN, PO].indexOf(next) !== -1) ||
892      (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)
893    ) {
894      return BREAK_NOT_ALLOWED;
895    }
896    // LB28 Do not break between alphabetics (“at”).
897    if (
898      ALPHABETICS.indexOf(current) !== -1 &&
899      ALPHABETICS.indexOf(next) !== -1
900    ) {
901      return BREAK_NOT_ALLOWED;
902    }
903    // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).
904    if (current === IS && ALPHABETICS.indexOf(next) !== -1) {
905      return BREAK_NOT_ALLOWED;
906    }
907    // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.
908    if (
909      (ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP) ||
910      (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)
911    ) {
912      return BREAK_NOT_ALLOWED;
913    }
914    // LB30a Break between two regional indicator symbols if and only if there are an even number of regional
915    // indicators preceding the position of the break.
916    if (current === RI && next === RI) {
917      var i = indicies[currentIndex];
918      var count = 1;
919      while (i > 0) {
920        i--;
921        if (classTypes[i] === RI) {
922          count++;
923        } else {
924          break;
925        }
926      }
927      if (count % 2 !== 0) {
928        return BREAK_NOT_ALLOWED;
929      }
930    }
931    // LB30b Do not break between an emoji base and an emoji modifier.
932    if (current === EB && next === EM) {
933      return BREAK_NOT_ALLOWED;
934    }
935    return BREAK_ALLOWED;
936  };
937  var cssFormattedClasses = function (codePoints, options) {
938    if (!options) {
939      options = { lineBreak: "normal", wordBreak: "normal" };
940    }
941    var _a = codePointsToCharacterClasses(codePoints, options.lineBreak),
942      indicies = _a[0],
943      classTypes = _a[1],
944      isLetterNumber = _a[2];
945    if (
946      options.wordBreak === "break-all" ||
947      options.wordBreak === "break-word"
948    ) {
949      classTypes = classTypes.map(function (type) {
950        return [NU, AL, SA].indexOf(type) !== -1 ? ID : type;
951      });
952    }
953    var forbiddenBreakpoints =
954      options.wordBreak === "keep-all"
955        ? isLetterNumber.map(function (letterNumber, i) {
956            return (
957              letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff
958            );
959          })
960        : undefined;
961    return [indicies, classTypes, forbiddenBreakpoints];
962  };
963  var Break = /** @class */ (function () {
964    function Break(codePoints, lineBreak, start, end) {
965      this.codePoints = codePoints;
966      this.required = lineBreak === BREAK_MANDATORY;
967      this.start = start;
968      this.end = end;
969    }
970    Break.prototype.slice = function () {
971      return fromCodePoint.apply(
972        void 0,
973        this.codePoints.slice(this.start, this.end)
974      );
975    };
976    return Break;
977  })();
978  var LineBreaker = function (str, options) {
979    var codePoints = toCodePoints(str);
980    var _a = cssFormattedClasses(codePoints, options),
981      indicies = _a[0],
982      classTypes = _a[1],
983      forbiddenBreakpoints = _a[2];
984    var length = codePoints.length;
985    var lastEnd = 0;
986    var nextIndex = 0;
987    return {
988      next: function () {
989        if (nextIndex >= length) {
990          return { done: true, value: null };
991        }
992        var lineBreak = BREAK_NOT_ALLOWED;
993        while (
994          nextIndex < length &&
995          (lineBreak = _lineBreakAtIndex(
996            codePoints,
997            classTypes,
998            indicies,
999            ++nextIndex,
1000            forbiddenBreakpoints
1001          )) === BREAK_NOT_ALLOWED
1002        ) {}
1003        if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) {
1004          var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);
1005          lastEnd = nextIndex;
1006          return { value: value, done: false };
1007        }
1008        return { done: true, value: null };
1009      },
1010    };
1011  };
1012
1013  // https://www.w3.org/TR/css-syntax-3
1014  var TokenType;
1015  (function (TokenType) {
1016    TokenType[(TokenType["STRING_TOKEN"] = 0)] = "STRING_TOKEN";
1017    TokenType[(TokenType["BAD_STRING_TOKEN"] = 1)] = "BAD_STRING_TOKEN";
1018    TokenType[(TokenType["LEFT_PARENTHESIS_TOKEN"] = 2)] =
1019      "LEFT_PARENTHESIS_TOKEN";
1020    TokenType[(TokenType["RIGHT_PARENTHESIS_TOKEN"] = 3)] =
1021      "RIGHT_PARENTHESIS_TOKEN";
1022    TokenType[(TokenType["COMMA_TOKEN"] = 4)] = "COMMA_TOKEN";
1023    TokenType[(TokenType["HASH_TOKEN"] = 5)] = "HASH_TOKEN";
1024    TokenType[(TokenType["DELIM_TOKEN"] = 6)] = "DELIM_TOKEN";
1025    TokenType[(TokenType["AT_KEYWORD_TOKEN"] = 7)] = "AT_KEYWORD_TOKEN";
1026    TokenType[(TokenType["PREFIX_MATCH_TOKEN"] = 8)] = "PREFIX_MATCH_TOKEN";
1027    TokenType[(TokenType["DASH_MATCH_TOKEN"] = 9)] = "DASH_MATCH_TOKEN";
1028    TokenType[(TokenType["INCLUDE_MATCH_TOKEN"] = 10)] = "INCLUDE_MATCH_TOKEN";
1029    TokenType[(TokenType["LEFT_CURLY_BRACKET_TOKEN"] = 11)] =
1030      "LEFT_CURLY_BRACKET_TOKEN";
1031    TokenType[(TokenType["RIGHT_CURLY_BRACKET_TOKEN"] = 12)] =
1032      "RIGHT_CURLY_BRACKET_TOKEN";
1033    TokenType[(TokenType["SUFFIX_MATCH_TOKEN"] = 13)] = "SUFFIX_MATCH_TOKEN";
1034    TokenType[(TokenType["SUBSTRING_MATCH_TOKEN"] = 14)] =
1035      "SUBSTRING_MATCH_TOKEN";
1036    TokenType[(TokenType["DIMENSION_TOKEN"] = 15)] = "DIMENSION_TOKEN";
1037    TokenType[(TokenType["PERCENTAGE_TOKEN"] = 16)] = "PERCENTAGE_TOKEN";
1038    TokenType[(TokenType["NUMBER_TOKEN"] = 17)] = "NUMBER_TOKEN";
1039    TokenType[(TokenType["FUNCTION"] = 18)] = "FUNCTION";
1040    TokenType[(TokenType["FUNCTION_TOKEN"] = 19)] = "FUNCTION_TOKEN";
1041    TokenType[(TokenType["IDENT_TOKEN"] = 20)] = "IDENT_TOKEN";
1042    TokenType[(TokenType["COLUMN_TOKEN"] = 21)] = "COLUMN_TOKEN";
1043    TokenType[(TokenType["URL_TOKEN"] = 22)] = "URL_TOKEN";
1044    TokenType[(TokenType["BAD_URL_TOKEN"] = 23)] = "BAD_URL_TOKEN";
1045    TokenType[(TokenType["CDC_TOKEN"] = 24)] = "CDC_TOKEN";
1046    TokenType[(TokenType["CDO_TOKEN"] = 25)] = "CDO_TOKEN";
1047    TokenType[(TokenType["COLON_TOKEN"] = 26)] = "COLON_TOKEN";
1048    TokenType[(TokenType["SEMICOLON_TOKEN"] = 27)] = "SEMICOLON_TOKEN";
1049    TokenType[(TokenType["LEFT_SQUARE_BRACKET_TOKEN"] = 28)] =
1050      "LEFT_SQUARE_BRACKET_TOKEN";
1051    TokenType[(TokenType["RIGHT_SQUARE_BRACKET_TOKEN"] = 29)] =
1052      "RIGHT_SQUARE_BRACKET_TOKEN";
1053    TokenType[(TokenType["UNICODE_RANGE_TOKEN"] = 30)] = "UNICODE_RANGE_TOKEN";
1054    TokenType[(TokenType["WHITESPACE_TOKEN"] = 31)] = "WHITESPACE_TOKEN";
1055    TokenType[(TokenType["EOF_TOKEN"] = 32)] = "EOF_TOKEN";
1056  })(TokenType || (TokenType = {}));
1057  var FLAG_UNRESTRICTED = 1 << 0;
1058  var FLAG_ID = 1 << 1;
1059  var FLAG_INTEGER = 1 << 2;
1060  var FLAG_NUMBER = 1 << 3;
1061  var LINE_FEED = 0x000a;
1062  var SOLIDUS = 0x002f;
1063  var REVERSE_SOLIDUS = 0x005c;
1064  var CHARACTER_TABULATION = 0x0009;
1065  var SPACE$1 = 0x0020;
1066  var QUOTATION_MARK = 0x0022;
1067  var EQUALS_SIGN = 0x003d;
1068  var NUMBER_SIGN = 0x0023;
1069  var DOLLAR_SIGN = 0x0024;
1070  var PERCENTAGE_SIGN = 0x0025;
1071  var APOSTROPHE = 0x0027;
1072  var LEFT_PARENTHESIS = 0x0028;
1073  var RIGHT_PARENTHESIS = 0x0029;
1074  var LOW_LINE = 0x005f;
1075  var HYPHEN_MINUS = 0x002d;
1076  var EXCLAMATION_MARK = 0x0021;
1077  var LESS_THAN_SIGN = 0x003c;
vendor: 4,335 bytes, lines 1078-1226
1078  var GREATER_THAN_SIGN = 0x003e;
1079  var COMMERCIAL_AT = 0x0040;
1080  var LEFT_SQUARE_BRACKET = 0x005b;
1081  var RIGHT_SQUARE_BRACKET = 0x005d;
1082  var CIRCUMFLEX_ACCENT = 0x003d;
1083  var LEFT_CURLY_BRACKET = 0x007b;
1084  var QUESTION_MARK = 0x003f;
1085  var RIGHT_CURLY_BRACKET = 0x007d;
1086  var VERTICAL_LINE = 0x007c;
1087  var TILDE = 0x007e;
1088  var CONTROL = 0x0080;
1089  var REPLACEMENT_CHARACTER = 0xfffd;
1090  var ASTERISK = 0x002a;
1091  var PLUS_SIGN = 0x002b;
1092  var COMMA = 0x002c;
1093  var COLON = 0x003a;
1094  var SEMICOLON = 0x003b;
1095  var FULL_STOP = 0x002e;
1096  var NULL = 0x0000;
1097  var BACKSPACE = 0x0008;
1098  var LINE_TABULATION = 0x000b;
1099  var SHIFT_OUT = 0x000e;
1100  var INFORMATION_SEPARATOR_ONE = 0x001f;
1101  var DELETE = 0x007f;
1102  var EOF = -1;
1103  var ZERO = 0x0030;
1104  var a = 0x0061;
1105  var e = 0x0065;
1106  var f = 0x0066;
1107  var u = 0x0075;
1108  var z = 0x007a;
1109  var A = 0x0041;
1110  var E = 0x0045;
1111  var F = 0x0046;
1112  var U = 0x0055;
1113  var Z = 0x005a;
1114  var isDigit = function (codePoint) {
1115    return codePoint >= ZERO && codePoint <= 0x0039;
1116  };
1117  var isSurrogateCodePoint = function (codePoint) {
1118    return codePoint >= 0xd800 && codePoint <= 0xdfff;
1119  };
1120  var isHex = function (codePoint) {
1121    return (
1122      isDigit(codePoint) ||
1123      (codePoint >= A && codePoint <= F) ||
1124      (codePoint >= a && codePoint <= f)
1125    );
1126  };
1127  var isLowerCaseLetter = function (codePoint) {
1128    return codePoint >= a && codePoint <= z;
1129  };
1130  var isUpperCaseLetter = function (codePoint) {
1131    return codePoint >= A && codePoint <= Z;
1132  };
1133  var isLetter = function (codePoint) {
1134    return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint);
1135  };
1136  var isNonASCIICodePoint = function (codePoint) {
1137    return codePoint >= CONTROL;
1138  };
1139  var isWhiteSpace = function (codePoint) {
1140    return (
1141      codePoint === LINE_FEED ||
1142      codePoint === CHARACTER_TABULATION ||
1143      codePoint === SPACE$1
1144    );
1145  };
1146  var isNameStartCodePoint = function (codePoint) {
1147    return (
1148      isLetter(codePoint) ||
1149      isNonASCIICodePoint(codePoint) ||
1150      codePoint === LOW_LINE
1151    );
1152  };
1153  var isNameCodePoint = function (codePoint) {
1154    return (
1155      isNameStartCodePoint(codePoint) ||
1156      isDigit(codePoint) ||
1157      codePoint === HYPHEN_MINUS
1158    );
1159  };
1160  var isNonPrintableCodePoint = function (codePoint) {
1161    return (
1162      (codePoint >= NULL && codePoint <= BACKSPACE) ||
1163      codePoint === LINE_TABULATION ||
1164      (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||
1165      codePoint === DELETE
1166    );
1167  };
1168  var isValidEscape = function (c1, c2) {
1169    if (c1 !== REVERSE_SOLIDUS) {
1170      return false;
1171    }
1172    return c2 !== LINE_FEED;
1173  };
1174  var isIdentifierStart = function (c1, c2, c3) {
1175    if (c1 === HYPHEN_MINUS) {
1176      return isNameStartCodePoint(c2) || isValidEscape(c2, c3);
1177    } else if (isNameStartCodePoint(c1)) {
1178      return true;
1179    } else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {
1180      return true;
1181    }
1182    return false;
1183  };
1184  var isNumberStart = function (c1, c2, c3) {
1185    if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
1186      if (isDigit(c2)) {
1187        return true;
1188      }
1189      return c2 === FULL_STOP && isDigit(c3);
1190    }
1191    if (c1 === FULL_STOP) {
1192      return isDigit(c2);
1193    }
1194    return isDigit(c1);
1195  };
1196  var stringToNumber = function (codePoints) {
1197    var c = 0;
1198    var sign = 1;
1199    if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
1200      if (codePoints[c] === HYPHEN_MINUS) {
1201        sign = -1;
1202      }
1203      c++;
1204    }
1205    var integers = [];
1206    while (isDigit(codePoints[c])) {
1207      integers.push(codePoints[c++]);
1208    }
1209    var int = integers.length
1210      ? parseInt(fromCodePoint.apply(void 0, integers), 10)
1211      : 0;
1212    if (codePoints[c] === FULL_STOP) {
1213      c++;
1214    }
1215    var fraction = [];
1216    while (isDigit(codePoints[c])) {
1217      fraction.push(codePoints[c++]);
1218    }
1219    var fracd = fraction.length;
1220    var frac = fracd ? parseInt(fromCodePoint.apply(void 0, fraction), 10) : 0;
1221    if (codePoints[c] === E || codePoints[c] === e) {
1222      c++;
1223    }
1224    var expsign = 1;
1225    if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
1226      if (codePoints[c] === HYPHEN_MINUS) {
vendor: 15,253 bytes, lines 1227-1669
1227        expsign = -1;
1228      }
1229      c++;
1230    }
1231    var exponent = [];
1232    while (isDigit(codePoints[c])) {
1233      exponent.push(codePoints[c++]);
1234    }
1235    var exp = exponent.length
1236      ? parseInt(fromCodePoint.apply(void 0, exponent), 10)
1237      : 0;
1238    return (
1239      sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp)
1240    );
1241  };
1242  var LEFT_PARENTHESIS_TOKEN = {
1243    type: TokenType.LEFT_PARENTHESIS_TOKEN,
1244  };
1245  var RIGHT_PARENTHESIS_TOKEN = {
1246    type: TokenType.RIGHT_PARENTHESIS_TOKEN,
1247  };
1248  var COMMA_TOKEN = { type: TokenType.COMMA_TOKEN };
1249  var SUFFIX_MATCH_TOKEN = { type: TokenType.SUFFIX_MATCH_TOKEN };
1250  var PREFIX_MATCH_TOKEN = { type: TokenType.PREFIX_MATCH_TOKEN };
1251  var COLUMN_TOKEN = { type: TokenType.COLUMN_TOKEN };
1252  var DASH_MATCH_TOKEN = { type: TokenType.DASH_MATCH_TOKEN };
1253  var INCLUDE_MATCH_TOKEN = { type: TokenType.INCLUDE_MATCH_TOKEN };
1254  var LEFT_CURLY_BRACKET_TOKEN = {
1255    type: TokenType.LEFT_CURLY_BRACKET_TOKEN,
1256  };
1257  var RIGHT_CURLY_BRACKET_TOKEN = {
1258    type: TokenType.RIGHT_CURLY_BRACKET_TOKEN,
1259  };
1260  var SUBSTRING_MATCH_TOKEN = { type: TokenType.SUBSTRING_MATCH_TOKEN };
1261  var BAD_URL_TOKEN = { type: TokenType.BAD_URL_TOKEN };
1262  var BAD_STRING_TOKEN = { type: TokenType.BAD_STRING_TOKEN };
1263  var CDO_TOKEN = { type: TokenType.CDO_TOKEN };
1264  var CDC_TOKEN = { type: TokenType.CDC_TOKEN };
1265  var COLON_TOKEN = { type: TokenType.COLON_TOKEN };
1266  var SEMICOLON_TOKEN = { type: TokenType.SEMICOLON_TOKEN };
1267  var LEFT_SQUARE_BRACKET_TOKEN = {
1268    type: TokenType.LEFT_SQUARE_BRACKET_TOKEN,
1269  };
1270  var RIGHT_SQUARE_BRACKET_TOKEN = {
1271    type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN,
1272  };
1273  var WHITESPACE_TOKEN = { type: TokenType.WHITESPACE_TOKEN };
1274  var EOF_TOKEN = { type: TokenType.EOF_TOKEN };
1275  var Tokenizer = /** @class */ (function () {
1276    function Tokenizer() {
1277      this._value = [];
1278    }
1279    Tokenizer.prototype.write = function (chunk) {
1280      this._value = this._value.concat(toCodePoints(chunk));
1281    };
1282    Tokenizer.prototype.read = function () {
1283      var tokens = [];
1284      var token = this.consumeToken();
1285      while (token !== EOF_TOKEN) {
1286        tokens.push(token);
1287        token = this.consumeToken();
1288      }
1289      return tokens;
1290    };
1291    Tokenizer.prototype.consumeToken = function () {
1292      var codePoint = this.consumeCodePoint();
1293      switch (codePoint) {
1294        case QUOTATION_MARK:
1295          return this.consumeStringToken(QUOTATION_MARK);
1296        case NUMBER_SIGN:
1297          var c1 = this.peekCodePoint(0);
1298          var c2 = this.peekCodePoint(1);
1299          var c3 = this.peekCodePoint(2);
1300          if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {
1301            var flags = isIdentifierStart(c1, c2, c3)
1302              ? FLAG_ID
1303              : FLAG_UNRESTRICTED;
1304            var value = this.consumeName();
1305            return { type: TokenType.HASH_TOKEN, value: value, flags: flags };
1306          }
1307          break;
1308        case DOLLAR_SIGN:
1309          if (this.peekCodePoint(0) === EQUALS_SIGN) {
1310            this.consumeCodePoint();
1311            return SUFFIX_MATCH_TOKEN;
1312          }
1313          break;
1314        case APOSTROPHE:
1315          return this.consumeStringToken(APOSTROPHE);
1316        case LEFT_PARENTHESIS:
1317          return LEFT_PARENTHESIS_TOKEN;
1318        case RIGHT_PARENTHESIS:
1319          return RIGHT_PARENTHESIS_TOKEN;
1320        case ASTERISK:
1321          if (this.peekCodePoint(0) === EQUALS_SIGN) {
1322            this.consumeCodePoint();
1323            return SUBSTRING_MATCH_TOKEN;
1324          }
1325          break;
1326        case PLUS_SIGN:
1327          if (
1328            isNumberStart(
1329              codePoint,
1330              this.peekCodePoint(0),
1331              this.peekCodePoint(1)
1332            )
1333          ) {
1334            this.reconsumeCodePoint(codePoint);
1335            return this.consumeNumericToken();
1336          }
1337          break;
1338        case COMMA:
1339          return COMMA_TOKEN;
1340        case HYPHEN_MINUS:
1341          var e1 = codePoint;
1342          var e2 = this.peekCodePoint(0);
1343          var e3 = this.peekCodePoint(1);
1344          if (isNumberStart(e1, e2, e3)) {
1345            this.reconsumeCodePoint(codePoint);
1346            return this.consumeNumericToken();
1347          }
1348          if (isIdentifierStart(e1, e2, e3)) {
1349            this.reconsumeCodePoint(codePoint);
1350            return this.consumeIdentLikeToken();
1351          }
1352          if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {
1353            this.consumeCodePoint();
1354            this.consumeCodePoint();
1355            return CDC_TOKEN;
1356          }
1357          break;
1358        case FULL_STOP:
1359          if (
1360            isNumberStart(
1361              codePoint,
1362              this.peekCodePoint(0),
1363              this.peekCodePoint(1)
1364            )
1365          ) {
1366            this.reconsumeCodePoint(codePoint);
1367            return this.consumeNumericToken();
1368          }
1369          break;
1370        case SOLIDUS:
1371          if (this.peekCodePoint(0) === ASTERISK) {
1372            this.consumeCodePoint();
1373            while (true) {
1374              var c = this.consumeCodePoint();
1375              if (c === ASTERISK) {
1376                c = this.consumeCodePoint();
1377                if (c === SOLIDUS) {
1378                  return this.consumeToken();
1379                }
1380              }
1381              if (c === EOF) {
1382                return this.consumeToken();
1383              }
1384            }
1385          }
1386          break;
1387        case COLON:
1388          return COLON_TOKEN;
1389        case SEMICOLON:
1390          return SEMICOLON_TOKEN;
1391        case LESS_THAN_SIGN:
1392          if (
1393            this.peekCodePoint(0) === EXCLAMATION_MARK &&
1394            this.peekCodePoint(1) === HYPHEN_MINUS &&
1395            this.peekCodePoint(2) === HYPHEN_MINUS
1396          ) {
1397            this.consumeCodePoint();
1398            this.consumeCodePoint();
1399            return CDO_TOKEN;
1400          }
1401          break;
1402        case COMMERCIAL_AT:
1403          var a1 = this.peekCodePoint(0);
1404          var a2 = this.peekCodePoint(1);
1405          var a3 = this.peekCodePoint(2);
1406          if (isIdentifierStart(a1, a2, a3)) {
1407            var value = this.consumeName();
1408            return { type: TokenType.AT_KEYWORD_TOKEN, value: value };
1409          }
1410          break;
1411        case LEFT_SQUARE_BRACKET:
1412          return LEFT_SQUARE_BRACKET_TOKEN;
1413        case REVERSE_SOLIDUS:
1414          if (isValidEscape(codePoint, this.peekCodePoint(0))) {
1415            this.reconsumeCodePoint(codePoint);
1416            return this.consumeIdentLikeToken();
1417          }
1418          break;
1419        case RIGHT_SQUARE_BRACKET:
1420          return RIGHT_SQUARE_BRACKET_TOKEN;
1421        case CIRCUMFLEX_ACCENT:
1422          if (this.peekCodePoint(0) === EQUALS_SIGN) {
1423            this.consumeCodePoint();
1424            return PREFIX_MATCH_TOKEN;
1425          }
1426          break;
1427        case LEFT_CURLY_BRACKET:
1428          return LEFT_CURLY_BRACKET_TOKEN;
1429        case RIGHT_CURLY_BRACKET:
1430          return RIGHT_CURLY_BRACKET_TOKEN;
1431        case u:
1432        case U:
1433          var u1 = this.peekCodePoint(0);
1434          var u2 = this.peekCodePoint(1);
1435          if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {
1436            this.consumeCodePoint();
1437            this.consumeUnicodeRangeToken();
1438          }
1439          this.reconsumeCodePoint(codePoint);
1440          return this.consumeIdentLikeToken();
1441        case VERTICAL_LINE:
1442          if (this.peekCodePoint(0) === EQUALS_SIGN) {
1443            this.consumeCodePoint();
1444            return DASH_MATCH_TOKEN;
1445          }
1446          if (this.peekCodePoint(0) === VERTICAL_LINE) {
1447            this.consumeCodePoint();
1448            return COLUMN_TOKEN;
1449          }
1450          break;
1451        case TILDE:
1452          if (this.peekCodePoint(0) === EQUALS_SIGN) {
1453            this.consumeCodePoint();
1454            return INCLUDE_MATCH_TOKEN;
1455          }
1456          break;
1457        case EOF:
1458          return EOF_TOKEN;
1459      }
1460      if (isWhiteSpace(codePoint)) {
1461        this.consumeWhiteSpace();
1462        return WHITESPACE_TOKEN;
1463      }
1464      if (isDigit(codePoint)) {
1465        this.reconsumeCodePoint(codePoint);
1466        return this.consumeNumericToken();
1467      }
1468      if (isNameStartCodePoint(codePoint)) {
1469        this.reconsumeCodePoint(codePoint);
1470        return this.consumeIdentLikeToken();
1471      }
1472      return { type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint) };
1473    };
1474    Tokenizer.prototype.consumeCodePoint = function () {
1475      var value = this._value.shift();
1476      return typeof value === "undefined" ? -1 : value;
1477    };
1478    Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {
1479      this._value.unshift(codePoint);
1480    };
1481    Tokenizer.prototype.peekCodePoint = function (delta) {
1482      if (delta >= this._value.length) {
1483        return -1;
1484      }
1485      return this._value[delta];
1486    };
1487    Tokenizer.prototype.consumeUnicodeRangeToken = function () {
1488      var digits = [];
1489      var codePoint = this.consumeCodePoint();
1490      while (isHex(codePoint) && digits.length < 6) {
1491        digits.push(codePoint);
1492        codePoint = this.consumeCodePoint();
1493      }
1494      var questionMarks = false;
1495      while (codePoint === QUESTION_MARK && digits.length < 6) {
1496        digits.push(codePoint);
1497        codePoint = this.consumeCodePoint();
1498        questionMarks = true;
1499      }
1500      if (questionMarks) {
1501        var start_1 = parseInt(
1502          fromCodePoint.apply(
1503            void 0,
1504            digits.map(function (digit) {
1505              return digit === QUESTION_MARK ? ZERO : digit;
1506            })
1507          ),
1508          16
1509        );
1510        var end = parseInt(
1511          fromCodePoint.apply(
1512            void 0,
1513            digits.map(function (digit) {
1514              return digit === QUESTION_MARK ? F : digit;
1515            })
1516          ),
1517          16
1518        );
1519        return {
1520          type: TokenType.UNICODE_RANGE_TOKEN,
1521          start: start_1,
1522          end: end,
1523        };
1524      }
1525      var start = parseInt(fromCodePoint.apply(void 0, digits), 16);
1526      if (
1527        this.peekCodePoint(0) === HYPHEN_MINUS &&
1528        isHex(this.peekCodePoint(1))
1529      ) {
1530        this.consumeCodePoint();
1531        codePoint = this.consumeCodePoint();
1532        var endDigits = [];
1533        while (isHex(codePoint) && endDigits.length < 6) {
1534          endDigits.push(codePoint);
1535          codePoint = this.consumeCodePoint();
1536        }
1537        var end = parseInt(fromCodePoint.apply(void 0, endDigits), 16);
1538        return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: end };
1539      } else {
1540        return {
1541          type: TokenType.UNICODE_RANGE_TOKEN,
1542          start: start,
1543          end: start,
1544        };
1545      }
1546    };
1547    Tokenizer.prototype.consumeIdentLikeToken = function () {
1548      var value = this.consumeName();
1549      if (
1550        value.toLowerCase() === "url" &&
1551        this.peekCodePoint(0) === LEFT_PARENTHESIS
1552      ) {
1553        this.consumeCodePoint();
1554        return this.consumeUrlToken();
1555      } else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {
1556        this.consumeCodePoint();
1557        return { type: TokenType.FUNCTION_TOKEN, value: value };
1558      }
1559      return { type: TokenType.IDENT_TOKEN, value: value };
1560    };
1561    Tokenizer.prototype.consumeUrlToken = function () {
1562      var value = [];
1563      this.consumeWhiteSpace();
1564      if (this.peekCodePoint(0) === EOF) {
1565        return { type: TokenType.URL_TOKEN, value: "" };
1566      }
1567      var next = this.peekCodePoint(0);
1568      if (next === APOSTROPHE || next === QUOTATION_MARK) {
1569        var stringToken = this.consumeStringToken(this.consumeCodePoint());
1570        if (stringToken.type === TokenType.STRING_TOKEN) {
1571          this.consumeWhiteSpace();
1572          if (
1573            this.peekCodePoint(0) === EOF ||
1574            this.peekCodePoint(0) === RIGHT_PARENTHESIS
1575          ) {
1576            this.consumeCodePoint();
1577            return { type: TokenType.URL_TOKEN, value: stringToken.value };
1578          }
1579        }
1580        this.consumeBadUrlRemnants();
1581        return BAD_URL_TOKEN;
1582      }
1583      while (true) {
1584        var codePoint = this.consumeCodePoint();
1585        if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {
1586          return {
1587            type: TokenType.URL_TOKEN,
1588            value: fromCodePoint.apply(void 0, value),
1589          };
1590        } else if (isWhiteSpace(codePoint)) {
1591          this.consumeWhiteSpace();
1592          if (
1593            this.peekCodePoint(0) === EOF ||
1594            this.peekCodePoint(0) === RIGHT_PARENTHESIS
1595          ) {
1596            this.consumeCodePoint();
1597            return {
1598              type: TokenType.URL_TOKEN,
1599              value: fromCodePoint.apply(void 0, value),
1600            };
1601          }
1602          this.consumeBadUrlRemnants();
1603          return BAD_URL_TOKEN;
1604        } else if (
1605          codePoint === QUOTATION_MARK ||
1606          codePoint === APOSTROPHE ||
1607          codePoint === LEFT_PARENTHESIS ||
1608          isNonPrintableCodePoint(codePoint)
1609        ) {
1610          this.consumeBadUrlRemnants();
1611          return BAD_URL_TOKEN;
1612        } else if (codePoint === REVERSE_SOLIDUS) {
1613          if (isValidEscape(codePoint, this.peekCodePoint(0))) {
1614            value.push(this.consumeEscapedCodePoint());
1615          } else {
1616            this.consumeBadUrlRemnants();
1617            return BAD_URL_TOKEN;
1618          }
1619        } else {
1620          value.push(codePoint);
1621        }
1622      }
1623    };
1624    Tokenizer.prototype.consumeWhiteSpace = function () {
1625      while (isWhiteSpace(this.peekCodePoint(0))) {
1626        this.consumeCodePoint();
1627      }
1628    };
1629    Tokenizer.prototype.consumeBadUrlRemnants = function () {
1630      while (true) {
1631        var codePoint = this.consumeCodePoint();
1632        if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {
1633          return;
1634        }
1635        if (isValidEscape(codePoint, this.peekCodePoint(0))) {
1636          this.consumeEscapedCodePoint();
1637        }
1638      }
1639    };
1640    Tokenizer.prototype.consumeStringSlice = function (count) {
1641      var SLICE_STACK_SIZE = 60000;
1642      var value = "";
1643      while (count > 0) {
1644        var amount = Math.min(SLICE_STACK_SIZE, count);
1645        value += fromCodePoint.apply(void 0, this._value.splice(0, amount));
1646        count -= amount;
1647      }
1648      this._value.shift();
1649      return value;
1650    };
1651    Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {
1652      var value = "";
1653      var i = 0;
1654      do {
1655        var codePoint = this._value[i];
1656        if (
1657          codePoint === EOF ||
1658          codePoint === undefined ||
1659          codePoint === endingCodePoint
1660        ) {
1661          value += this.consumeStringSlice(i);
1662          return { type: TokenType.STRING_TOKEN, value: value };
1663        }
1664        if (codePoint === LINE_FEED) {
1665          this._value.splice(0, i);
1666          return BAD_STRING_TOKEN;
1667        }
1668        if (codePoint === REVERSE_SOLIDUS) {
1669          var next = this._value[i + 1];
vendor: 3,863 bytes, lines 1670-1786
1670          if (next !== EOF && next !== undefined) {
1671            if (next === LINE_FEED) {
1672              value += this.consumeStringSlice(i);
1673              i = -1;
1674              this._value.shift();
1675            } else if (isValidEscape(codePoint, next)) {
1676              value += this.consumeStringSlice(i);
1677              value += fromCodePoint(this.consumeEscapedCodePoint());
1678              i = -1;
1679            }
1680          }
1681        }
1682        i++;
1683      } while (true);
1684    };
1685    Tokenizer.prototype.consumeNumber = function () {
1686      var repr = [];
1687      var type = FLAG_INTEGER;
1688      var c1 = this.peekCodePoint(0);
1689      if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
1690        repr.push(this.consumeCodePoint());
1691      }
1692      while (isDigit(this.peekCodePoint(0))) {
1693        repr.push(this.consumeCodePoint());
1694      }
1695      c1 = this.peekCodePoint(0);
1696      var c2 = this.peekCodePoint(1);
1697      if (c1 === FULL_STOP && isDigit(c2)) {
1698        repr.push(this.consumeCodePoint(), this.consumeCodePoint());
1699        type = FLAG_NUMBER;
1700        while (isDigit(this.peekCodePoint(0))) {
1701          repr.push(this.consumeCodePoint());
1702        }
1703      }
1704      c1 = this.peekCodePoint(0);
1705      c2 = this.peekCodePoint(1);
1706      var c3 = this.peekCodePoint(2);
1707      if (
1708        (c1 === E || c1 === e) &&
1709        (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) ||
1710          isDigit(c2))
1711      ) {
1712        repr.push(this.consumeCodePoint(), this.consumeCodePoint());
1713        type = FLAG_NUMBER;
1714        while (isDigit(this.peekCodePoint(0))) {
1715          repr.push(this.consumeCodePoint());
1716        }
1717      }
1718      return [stringToNumber(repr), type];
1719    };
1720    Tokenizer.prototype.consumeNumericToken = function () {
1721      var _a = this.consumeNumber(),
1722        number = _a[0],
1723        flags = _a[1];
1724      var c1 = this.peekCodePoint(0);
1725      var c2 = this.peekCodePoint(1);
1726      var c3 = this.peekCodePoint(2);
1727      if (isIdentifierStart(c1, c2, c3)) {
1728        var unit = this.consumeName();
1729        return {
1730          type: TokenType.DIMENSION_TOKEN,
1731          number: number,
1732          flags: flags,
1733          unit: unit,
1734        };
1735      }
1736      if (c1 === PERCENTAGE_SIGN) {
1737        this.consumeCodePoint();
1738        return {
1739          type: TokenType.PERCENTAGE_TOKEN,
1740          number: number,
1741          flags: flags,
1742        };
1743      }
1744      return { type: TokenType.NUMBER_TOKEN, number: number, flags: flags };
1745    };
1746    Tokenizer.prototype.consumeEscapedCodePoint = function () {
1747      var codePoint = this.consumeCodePoint();
1748      if (isHex(codePoint)) {
1749        var hex = fromCodePoint(codePoint);
1750        while (isHex(this.peekCodePoint(0)) && hex.length < 6) {
1751          hex += fromCodePoint(this.consumeCodePoint());
1752        }
1753        if (isWhiteSpace(this.peekCodePoint(0))) {
1754          this.consumeCodePoint();
1755        }
1756        var hexCodePoint = parseInt(hex, 16);
1757        if (
1758          hexCodePoint === 0 ||
1759          isSurrogateCodePoint(hexCodePoint) ||
1760          hexCodePoint > 0x10ffff
1761        ) {
1762          return REPLACEMENT_CHARACTER;
1763        }
1764        return hexCodePoint;
1765      }
1766      if (codePoint === EOF) {
1767        return REPLACEMENT_CHARACTER;
1768      }
1769      return codePoint;
1770    };
1771    Tokenizer.prototype.consumeName = function () {
1772      var result = "";
1773      while (true) {
1774        var codePoint = this.consumeCodePoint();
1775        if (isNameCodePoint(codePoint)) {
1776          result += fromCodePoint(codePoint);
1777        } else if (isValidEscape(codePoint, this.peekCodePoint(0))) {
1778          result += fromCodePoint(this.consumeEscapedCodePoint());
1779        } else {
1780          this.reconsumeCodePoint(codePoint);
1781          return result;
1782        }
1783      }
1784    };
1785    return Tokenizer;
1786  })();
1787
1788  var Parser = /** @class */ (function () {
1789    function Parser(tokens) {
1790      this._tokens = tokens;
1791    }
1792    Parser.create = function (value) {
1793      var tokenizer = new Tokenizer();
1794      tokenizer.write(value);
1795      return new Parser(tokenizer.read());
1796    };
1797    Parser.parseValue = function (value) {
1798      return Parser.create(value).parseComponentValue();
1799    };
1800    Parser.parseValues = function (value) {
1801      return Parser.create(value).parseComponentValues();
1802    };
1803    Parser.prototype.parseComponentValue = function () {
1804      var token = this.consumeToken();
1805      while (token.type === TokenType.WHITESPACE_TOKEN) {
1806        token = this.consumeToken();
1807      }
1808      if (token.type === TokenType.EOF_TOKEN) {
1809        throw new SyntaxError(
1810          "Error parsing CSS component value, unexpected EOF"
1811        );
1812      }
1813      this.reconsumeToken(token);
1814      var value = this.consumeComponentValue();
1815      do {
1816        token = this.consumeToken();
1817      } while (token.type === TokenType.WHITESPACE_TOKEN);
1818      if (token.type === TokenType.EOF_TOKEN) {
1819        return value;
1820      }
1821      throw new SyntaxError(
1822        "Error parsing CSS component value, multiple values found when expecting only one"
1823      );
1824    };
1825    Parser.prototype.parseComponentValues = function () {
1826      var values = [];
1827      while (true) {
1828        var value = this.consumeComponentValue();
1829        if (value.type === TokenType.EOF_TOKEN) {
1830          return values;
1831        }
1832        values.push(value);
1833        values.push();
1834      }
1835    };
1836    Parser.prototype.consumeComponentValue = function () {
1837      var token = this.consumeToken();
1838      switch (token.type) {
1839        case TokenType.LEFT_CURLY_BRACKET_TOKEN:
1840        case TokenType.LEFT_SQUARE_BRACKET_TOKEN:
1841        case TokenType.LEFT_PARENTHESIS_TOKEN:
1842          return this.consumeSimpleBlock(token.type);
1843        case TokenType.FUNCTION_TOKEN:
1844          return this.consumeFunction(token);
1845      }
1846      return token;
1847    };
1848    Parser.prototype.consumeSimpleBlock = function (type) {
1849      var block = { type: type, values: [] };
1850      var token = this.consumeToken();
1851      while (true) {
1852        if (
1853          token.type === TokenType.EOF_TOKEN ||
1854          isEndingTokenFor(token, type)
1855        ) {
1856          return block;
1857        }
1858        this.reconsumeToken(token);
1859        block.values.push(this.consumeComponentValue());
1860        token = this.consumeToken();
1861      }
1862    };
1863    Parser.prototype.consumeFunction = function (functionToken) {
1864      var cssFunction = {
1865        name: functionToken.value,
1866        values: [],
1867        type: TokenType.FUNCTION,
1868      };
1869      while (true) {
1870        var token = this.consumeToken();
1871        if (
1872          token.type === TokenType.EOF_TOKEN ||
1873          token.type === TokenType.RIGHT_PARENTHESIS_TOKEN
1874        ) {
1875          return cssFunction;
1876        }
1877        this.reconsumeToken(token);
1878        cssFunction.values.push(this.consumeComponentValue());
1879      }
1880    };
1881    Parser.prototype.consumeToken = function () {
1882      var token = this._tokens.shift();
1883      return typeof token === "undefined" ? EOF_TOKEN : token;
1884    };
1885    Parser.prototype.reconsumeToken = function (token) {
1886      this._tokens.unshift(token);
1887    };
1888    return Parser;
1889  })();
1890  var isDimensionToken = function (token) {
1891    return token.type === TokenType.DIMENSION_TOKEN;
1892  };
1893  var isNumberToken = function (token) {
1894    return token.type === TokenType.NUMBER_TOKEN;
1895  };
1896  var isIdentToken = function (token) {
1897    return token.type === TokenType.IDENT_TOKEN;
1898  };
1899  var isStringToken = function (token) {
1900    return token.type === TokenType.STRING_TOKEN;
1901  };
1902  var isIdentWithValue = function (token, value) {
1903    return isIdentToken(token) && token.value === value;
1904  };
1905  var nonWhiteSpace = function (token) {
1906    return token.type !== TokenType.WHITESPACE_TOKEN;
1907  };
1908  var nonFunctionArgSeparator = function (token) {
1909    return (
1910      token.type !== TokenType.WHITESPACE_TOKEN &&
1911      token.type !== TokenType.COMMA_TOKEN
1912    );
1913  };
1914  var parseFunctionArgs = function (tokens) {
1915    var args = [];
1916    var arg = [];
1917    tokens.forEach(function (token) {
1918      if (token.type === TokenType.COMMA_TOKEN) {
1919        if (arg.length === 0) {
1920          throw new Error("Error parsing function args, zero tokens for arg");
1921        }
1922        args.push(arg);
1923        arg = [];
1924        return;
1925      }
1926      if (token.type !== TokenType.WHITESPACE_TOKEN) {
1927        arg.push(token);
1928      }
1929    });
1930    if (arg.length) {
1931      args.push(arg);
1932    }
1933    return args;
1934  };
1935  var isEndingTokenFor = function (token, type) {
1936    if (
1937      type === TokenType.LEFT_CURLY_BRACKET_TOKEN &&
1938      token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN
1939    ) {
1940      return true;
1941    }
1942    if (
1943      type === TokenType.LEFT_SQUARE_BRACKET_TOKEN &&
1944      token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN
1945    ) {
1946      return true;
1947    }
1948    return (
1949      type === TokenType.LEFT_PARENTHESIS_TOKEN &&
1950      token.type === TokenType.RIGHT_PARENTHESIS_TOKEN
1951    );
1952  };
1953
1954  var isLength = function (token) {
1955    return (
1956      token.type === TokenType.NUMBER_TOKEN ||
1957      token.type === TokenType.DIMENSION_TOKEN
1958    );
1959  };
1960
1961  var isLengthPercentage = function (token) {
1962    return token.type === TokenType.PERCENTAGE_TOKEN || isLength(token);
1963  };
1964  var parseLengthPercentageTuple = function (tokens) {
1965    return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];
1966  };
1967  var ZERO_LENGTH = {
1968    type: TokenType.NUMBER_TOKEN,
1969    number: 0,
1970    flags: FLAG_INTEGER,
1971  };
1972  var FIFTY_PERCENT = {
1973    type: TokenType.PERCENTAGE_TOKEN,
1974    number: 50,
1975    flags: FLAG_INTEGER,
1976  };
1977  var HUNDRED_PERCENT = {
1978    type: TokenType.PERCENTAGE_TOKEN,
1979    number: 100,
1980    flags: FLAG_INTEGER,
1981  };
1982  var getAbsoluteValueForTuple = function (tuple, width, height) {
1983    var x = tuple[0],
1984      y = tuple[1];
vendor: 10,173 bytes, lines 1985-2338
1985    return [
1986      getAbsoluteValue(x, width),
1987      getAbsoluteValue(typeof y !== "undefined" ? y : x, height),
1988    ];
1989  };
1990  var getAbsoluteValue = function (token, parent) {
1991    if (token.type === TokenType.PERCENTAGE_TOKEN) {
1992      return (token.number / 100) * parent;
1993    }
1994    if (isDimensionToken(token)) {
1995      switch (token.unit) {
1996        case "rem":
1997        case "em":
1998          return 16 * token.number; // TODO use correct font-size
1999        case "px":
2000        default:
2001          return token.number;
2002      }
2003    }
2004    return token.number;
2005  };
2006
2007  var DEG = "deg";
2008  var GRAD = "grad";
2009  var RAD = "rad";
2010  var TURN = "turn";
2011  var angle = {
2012    name: "angle",
2013    parse: function (value) {
2014      if (value.type === TokenType.DIMENSION_TOKEN) {
2015        switch (value.unit) {
2016          case DEG:
2017            return (Math.PI * value.number) / 180;
2018          case GRAD:
2019            return (Math.PI / 200) * value.number;
2020          case RAD:
2021            return value.number;
2022          case TURN:
2023            return Math.PI * 2 * value.number;
2024        }
2025      }
2026      throw new Error("Unsupported angle type");
2027    },
2028  };
2029  var isAngle = function (value) {
2030    if (value.type === TokenType.DIMENSION_TOKEN) {
2031      if (
2032        value.unit === DEG ||
2033        value.unit === GRAD ||
2034        value.unit === RAD ||
2035        value.unit === TURN
2036      ) {
2037        return true;
2038      }
2039    }
2040    return false;
2041  };
2042  var parseNamedSide = function (tokens) {
2043    var sideOrCorner = tokens
2044      .filter(isIdentToken)
2045      .map(function (ident) {
2046        return ident.value;
2047      })
2048      .join(" ");
2049    switch (sideOrCorner) {
2050      case "to bottom right":
2051      case "to right bottom":
2052      case "left top":
2053      case "top left":
2054        return [ZERO_LENGTH, ZERO_LENGTH];
2055      case "to top":
2056      case "bottom":
2057        return deg(0);
2058      case "to bottom left":
2059      case "to left bottom":
2060      case "right top":
2061      case "top right":
2062        return [ZERO_LENGTH, HUNDRED_PERCENT];
2063      case "to right":
2064      case "left":
2065        return deg(90);
2066      case "to top left":
2067      case "to left top":
2068      case "right bottom":
2069      case "bottom right":
2070        return [HUNDRED_PERCENT, HUNDRED_PERCENT];
2071      case "to bottom":
2072      case "top":
2073        return deg(180);
2074      case "to top right":
2075      case "to right top":
2076      case "left bottom":
2077      case "bottom left":
2078        return [HUNDRED_PERCENT, ZERO_LENGTH];
2079      case "to left":
2080      case "right":
2081        return deg(270);
2082    }
2083    return 0;
2084  };
2085  var deg = function (deg) {
2086    return (Math.PI * deg) / 180;
2087  };
2088
2089  var color = {
2090    name: "color",
2091    parse: function (value) {
2092      if (value.type === TokenType.FUNCTION) {
2093        var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];
2094        if (typeof colorFunction === "undefined") {
2095          throw new Error(
2096            'Attempting to parse an unsupported color function "' +
2097              value.name +
2098              '"'
2099          );
2100        }
2101        return colorFunction(value.values);
2102      }
2103      if (value.type === TokenType.HASH_TOKEN) {
2104        if (value.value.length === 3) {
2105          var r = value.value.substring(0, 1);
2106          var g = value.value.substring(1, 2);
2107          var b = value.value.substring(2, 3);
2108          return pack(
2109            parseInt(r + r, 16),
2110            parseInt(g + g, 16),
2111            parseInt(b + b, 16),
2112            1
2113          );
2114        }
2115        if (value.value.length === 4) {
2116          var r = value.value.substring(0, 1);
2117          var g = value.value.substring(1, 2);
2118          var b = value.value.substring(2, 3);
2119          var a = value.value.substring(3, 4);
2120          return pack(
2121            parseInt(r + r, 16),
2122            parseInt(g + g, 16),
2123            parseInt(b + b, 16),
2124            parseInt(a + a, 16) / 255
2125          );
2126        }
2127        if (value.value.length === 6) {
2128          var r = value.value.substring(0, 2);
2129          var g = value.value.substring(2, 4);
2130          var b = value.value.substring(4, 6);
2131          return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);
2132        }
2133        if (value.value.length === 8) {
2134          var r = value.value.substring(0, 2);
2135          var g = value.value.substring(2, 4);
2136          var b = value.value.substring(4, 6);
2137          var a = value.value.substring(6, 8);
2138          return pack(
2139            parseInt(r, 16),
2140            parseInt(g, 16),
2141            parseInt(b, 16),
2142            parseInt(a, 16) / 255
2143          );
2144        }
2145      }
2146      if (value.type === TokenType.IDENT_TOKEN) {
2147        var namedColor = COLORS[value.value.toUpperCase()];
2148        if (typeof namedColor !== "undefined") {
2149          return namedColor;
2150        }
2151      }
2152      return COLORS.TRANSPARENT;
2153    },
2154  };
2155  var isTransparent = function (color) {
2156    return (0xff & color) === 0;
2157  };
2158  var asString = function (color) {
2159    var alpha = 0xff & color;
2160    var blue = 0xff & (color >> 8);
2161    var green = 0xff & (color >> 16);
2162    var red = 0xff & (color >> 24);
2163    return alpha < 255
2164      ? "rgba(" + red + "," + green + "," + blue + "," + alpha / 255 + ")"
2165      : "rgb(" + red + "," + green + "," + blue + ")";
2166  };
2167  var pack = function (r, g, b, a) {
2168    return (
2169      ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0
2170    );
2171  };
2172  var getTokenColorValue = function (token, i) {
2173    if (token.type === TokenType.NUMBER_TOKEN) {
2174      return token.number;
2175    }
2176    if (token.type === TokenType.PERCENTAGE_TOKEN) {
2177      var max = i === 3 ? 1 : 255;
2178      return i === 3
2179        ? (token.number / 100) * max
2180        : Math.round((token.number / 100) * max);
2181    }
2182    return 0;
2183  };
2184  var rgb = function (args) {
2185    var tokens = args.filter(nonFunctionArgSeparator);
2186    if (tokens.length === 3) {
2187      var _a = tokens.map(getTokenColorValue),
2188        r = _a[0],
2189        g = _a[1],
2190        b = _a[2];
2191      return pack(r, g, b, 1);
2192    }
2193    if (tokens.length === 4) {
2194      var _b = tokens.map(getTokenColorValue),
2195        r = _b[0],
2196        g = _b[1],
2197        b = _b[2],
2198        a = _b[3];
2199      return pack(r, g, b, a);
2200    }
2201    return 0;
2202  };
2203  function hue2rgb(t1, t2, hue) {
2204    if (hue < 0) {
2205      hue += 1;
2206    }
2207    if (hue >= 1) {
2208      hue -= 1;
2209    }
2210    if (hue < 1 / 6) {
2211      return (t2 - t1) * hue * 6 + t1;
2212    } else if (hue < 1 / 2) {
2213      return t2;
2214    } else if (hue < 2 / 3) {
2215      return (t2 - t1) * 6 * (2 / 3 - hue) + t1;
2216    } else {
2217      return t1;
2218    }
2219  }
2220  var hsl = function (args) {
2221    var tokens = args.filter(nonFunctionArgSeparator);
2222    var hue = tokens[0],
2223      saturation = tokens[1],
2224      lightness = tokens[2],
2225      alpha = tokens[3];
2226    var h =
2227      (hue.type === TokenType.NUMBER_TOKEN
2228        ? deg(hue.number)
2229        : angle.parse(hue)) /
2230      (Math.PI * 2);
2231    var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;
2232    var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;
2233    var a =
2234      typeof alpha !== "undefined" && isLengthPercentage(alpha)
2235        ? getAbsoluteValue(alpha, 1)
2236        : 1;
2237    if (s === 0) {
2238      return pack(l * 255, l * 255, l * 255, 1);
2239    }
2240    var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
2241    var t1 = l * 2 - t2;
2242    var r = hue2rgb(t1, t2, h + 1 / 3);
2243    var g = hue2rgb(t1, t2, h);
2244    var b = hue2rgb(t1, t2, h - 1 / 3);
2245    return pack(r * 255, g * 255, b * 255, a);
2246  };
2247  var SUPPORTED_COLOR_FUNCTIONS = {
2248    hsl: hsl,
2249    hsla: hsl,
2250    rgb: rgb,
2251    rgba: rgb,
2252  };
2253  var COLORS = {
2254    ALICEBLUE: 0xf0f8ffff,
2255    ANTIQUEWHITE: 0xfaebd7ff,
2256    AQUA: 0x00ffffff,
2257    AQUAMARINE: 0x7fffd4ff,
2258    AZURE: 0xf0ffffff,
2259    BEIGE: 0xf5f5dcff,
2260    BISQUE: 0xffe4c4ff,
2261    BLACK: 0x000000ff,
2262    BLANCHEDALMOND: 0xffebcdff,
2263    BLUE: 0x0000ffff,
2264    BLUEVIOLET: 0x8a2be2ff,
2265    BROWN: 0xa52a2aff,
2266    BURLYWOOD: 0xdeb887ff,
2267    CADETBLUE: 0x5f9ea0ff,
2268    CHARTREUSE: 0x7fff00ff,
2269    CHOCOLATE: 0xd2691eff,
2270    CORAL: 0xff7f50ff,
2271    CORNFLOWERBLUE: 0x6495edff,
2272    CORNSILK: 0xfff8dcff,
2273    CRIMSON: 0xdc143cff,
2274    CYAN: 0x00ffffff,
2275    DARKBLUE: 0x00008bff,
2276    DARKCYAN: 0x008b8bff,
2277    DARKGOLDENROD: 0xb886bbff,
2278    DARKGRAY: 0xa9a9a9ff,
2279    DARKGREEN: 0x006400ff,
2280    DARKGREY: 0xa9a9a9ff,
2281    DARKKHAKI: 0xbdb76bff,
2282    DARKMAGENTA: 0x8b008bff,
2283    DARKOLIVEGREEN: 0x556b2fff,
2284    DARKORANGE: 0xff8c00ff,
2285    DARKORCHID: 0x9932ccff,
2286    DARKRED: 0x8b0000ff,
2287    DARKSALMON: 0xe9967aff,
2288    DARKSEAGREEN: 0x8fbc8fff,
2289    DARKSLATEBLUE: 0x483d8bff,
2290    DARKSLATEGRAY: 0x2f4f4fff,
2291    DARKSLATEGREY: 0x2f4f4fff,
2292    DARKTURQUOISE: 0x00ced1ff,
2293    DARKVIOLET: 0x9400d3ff,
2294    DEEPPINK: 0xff1493ff,
2295    DEEPSKYBLUE: 0x00bfffff,
2296    DIMGRAY: 0x696969ff,
2297    DIMGREY: 0x696969ff,
2298    DODGERBLUE: 0x1e90ffff,
2299    FIREBRICK: 0xb22222ff,
2300    FLORALWHITE: 0xfffaf0ff,
2301    FORESTGREEN: 0x228b22ff,
2302    FUCHSIA: 0xff00ffff,
2303    GAINSBORO: 0xdcdcdcff,
2304    GHOSTWHITE: 0xf8f8ffff,
2305    GOLD: 0xffd700ff,
2306    GOLDENROD: 0xdaa520ff,
2307    GRAY: 0x808080ff,
2308    GREEN: 0x008000ff,
2309    GREENYELLOW: 0xadff2fff,
2310    GREY: 0x808080ff,
2311    HONEYDEW: 0xf0fff0ff,
2312    HOTPINK: 0xff69b4ff,
2313    INDIANRED: 0xcd5c5cff,
2314    INDIGO: 0x4b0082ff,
2315    IVORY: 0xfffff0ff,
2316    KHAKI: 0xf0e68cff,
2317    LAVENDER: 0xe6e6faff,
2318    LAVENDERBLUSH: 0xfff0f5ff,
2319    LAWNGREEN: 0x7cfc00ff,
2320    LEMONCHIFFON: 0xfffacdff,
2321    LIGHTBLUE: 0xadd8e6ff,
2322    LIGHTCORAL: 0xf08080ff,
2323    LIGHTCYAN: 0xe0ffffff,
2324    LIGHTGOLDENRODYELLOW: 0xfafad2ff,
2325    LIGHTGRAY: 0xd3d3d3ff,
2326    LIGHTGREEN: 0x90ee90ff,
2327    LIGHTGREY: 0xd3d3d3ff,
2328    LIGHTPINK: 0xffb6c1ff,
2329    LIGHTSALMON: 0xffa07aff,
2330    LIGHTSEAGREEN: 0x20b2aaff,
2331    LIGHTSKYBLUE: 0x87cefaff,
2332    LIGHTSLATEGRAY: 0x778899ff,
2333    LIGHTSLATEGREY: 0x778899ff,
2334    LIGHTSTEELBLUE: 0xb0c4deff,
2335    LIGHTYELLOW: 0xffffe0ff,
2336    LIME: 0x00ff00ff,
2337    LIMEGREEN: 0x32cd32ff,
2338    LINEN: 0xfaf0e6ff,
2339    MAGENTA: 0xff00ffff,
2340    MAROON: 0x800000ff,
2341    MEDIUMAQUAMARINE: 0x66cdaaff,
2342    MEDIUMBLUE: 0x0000cdff,
2343    MEDIUMORCHID: 0xba55d3ff,
2344    MEDIUMPURPLE: 0x9370dbff,
2345    MEDIUMSEAGREEN: 0x3cb371ff,
2346    MEDIUMSLATEBLUE: 0x7b68eeff,
2347    MEDIUMSPRINGGREEN: 0x00fa9aff,
2348    MEDIUMTURQUOISE: 0x48d1ccff,
2349    MEDIUMVIOLETRED: 0xc71585ff,
2350    MIDNIGHTBLUE: 0x191970ff,
2351    MINTCREAM: 0xf5fffaff,
2352    MISTYROSE: 0xffe4e1ff,
2353    MOCCASIN: 0xffe4b5ff,
2354    NAVAJOWHITE: 0xffdeadff,
2355    NAVY: 0x000080ff,
2356    OLDLACE: 0xfdf5e6ff,
2357    OLIVE: 0x808000ff,
2358    OLIVEDRAB: 0x6b8e23ff,
2359    ORANGE: 0xffa500ff,
2360    ORANGERED: 0xff4500ff,
2361    ORCHID: 0xda70d6ff,
2362    PALEGOLDENROD: 0xeee8aaff,
2363    PALEGREEN: 0x98fb98ff,
2364    PALETURQUOISE: 0xafeeeeff,
2365    PALEVIOLETRED: 0xdb7093ff,
2366    PAPAYAWHIP: 0xffefd5ff,
2367    PEACHPUFF: 0xffdab9ff,
2368    PERU: 0xcd853fff,
2369    PINK: 0xffc0cbff,
2370    PLUM: 0xdda0ddff,
2371    POWDERBLUE: 0xb0e0e6ff,
2372    PURPLE: 0x800080ff,
2373    REBECCAPURPLE: 0x663399ff,
2374    RED: 0xff0000ff,
2375    ROSYBROWN: 0xbc8f8fff,
2376    ROYALBLUE: 0x4169e1ff,
2377    SADDLEBROWN: 0x8b4513ff,
2378    SALMON: 0xfa8072ff,
2379    SANDYBROWN: 0xf4a460ff,
2380    SEAGREEN: 0x2e8b57ff,
2381    SEASHELL: 0xfff5eeff,
2382    SIENNA: 0xa0522dff,
2383    SILVER: 0xc0c0c0ff,
2384    SKYBLUE: 0x87ceebff,
2385    SLATEBLUE: 0x6a5acdff,
2386    SLATEGRAY: 0x708090ff,
2387    SLATEGREY: 0x708090ff,
2388    SNOW: 0xfffafaff,
2389    SPRINGGREEN: 0x00ff7fff,
2390    STEELBLUE: 0x4682b4ff,
2391    TAN: 0xd2b48cff,
2392    TEAL: 0x008080ff,
2393    THISTLE: 0xd8bfd8ff,
2394    TOMATO: 0xff6347ff,
2395    TRANSPARENT: 0x00000000,
2396    TURQUOISE: 0x40e0d0ff,
2397    VIOLET: 0xee82eeff,
2398    WHEAT: 0xf5deb3ff,
2399    WHITE: 0xffffffff,
2400    WHITESMOKE: 0xf5f5f5ff,
2401    YELLOW: 0xffff00ff,
2402    YELLOWGREEN: 0x9acd32ff,
2403  };
2404
2405  var PropertyDescriptorParsingType;
2406  (function (PropertyDescriptorParsingType) {
2407    PropertyDescriptorParsingType[
2408      (PropertyDescriptorParsingType["VALUE"] = 0)
2409    ] = "VALUE";
2410    PropertyDescriptorParsingType[(PropertyDescriptorParsingType["LIST"] = 1)] =
2411      "LIST";
2412    PropertyDescriptorParsingType[
2413      (PropertyDescriptorParsingType["IDENT_VALUE"] = 2)
2414    ] = "IDENT_VALUE";
2415    PropertyDescriptorParsingType[
2416      (PropertyDescriptorParsingType["TYPE_VALUE"] = 3)
2417    ] = "TYPE_VALUE";
2418    PropertyDescriptorParsingType[
2419      (PropertyDescriptorParsingType["TOKEN_VALUE"] = 4)
2420    ] = "TOKEN_VALUE";
2421  })(PropertyDescriptorParsingType || (PropertyDescriptorParsingType = {}));
2422
2423  var BACKGROUND_CLIP;
2424  (function (BACKGROUND_CLIP) {
2425    BACKGROUND_CLIP[(BACKGROUND_CLIP["BORDER_BOX"] = 0)] = "BORDER_BOX";
2426    BACKGROUND_CLIP[(BACKGROUND_CLIP["PADDING_BOX"] = 1)] = "PADDING_BOX";
2427    BACKGROUND_CLIP[(BACKGROUND_CLIP["CONTENT_BOX"] = 2)] = "CONTENT_BOX";
2428  })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {}));
2429  var backgroundClip = {
2430    name: "background-clip",
2431    initialValue: "border-box",
2432    prefix: false,
2433    type: PropertyDescriptorParsingType.LIST,
2434    parse: function (tokens) {
2435      return tokens.map(function (token) {
2436        if (isIdentToken(token)) {
2437          switch (token.value) {
2438            case "padding-box":
2439              return BACKGROUND_CLIP.PADDING_BOX;
2440            case "content-box":
2441              return BACKGROUND_CLIP.CONTENT_BOX;
2442          }
2443        }
2444        return BACKGROUND_CLIP.BORDER_BOX;
2445      });
2446    },
2447  };
2448
2449  var backgroundColor = {
2450    name: "background-color",
2451    initialValue: "transparent",
2452    prefix: false,
2453    type: PropertyDescriptorParsingType.TYPE_VALUE,
2454    format: "color",
2455  };
2456
2457  var parseColorStop = function (args) {
2458    var color$1 = color.parse(args[0]);
2459    var stop = args[1];
2460    return stop && isLengthPercentage(stop)
2461      ? { color: color$1, stop: stop }
2462      : { color: color$1, stop: null };
2463  };
2464  var processColorStops = function (stops, lineLength) {
2465    var first = stops[0];
2466    var last = stops[stops.length - 1];
2467    if (first.stop === null) {
2468      first.stop = ZERO_LENGTH;
2469    }
2470    if (last.stop === null) {
2471      last.stop = HUNDRED_PERCENT;
2472    }
2473    var processStops = [];
2474    var previous = 0;
2475    for (var i = 0; i < stops.length; i++) {
2476      var stop_1 = stops[i].stop;
2477      if (stop_1 !== null) {
2478        var absoluteValue = getAbsoluteValue(stop_1, lineLength);
2479        if (absoluteValue > previous) {
2480          processStops.push(absoluteValue);
2481        } else {
2482          processStops.push(previous);
2483        }
2484        previous = absoluteValue;
2485      } else {
2486        processStops.push(null);
2487      }
2488    }
2489    var gapBegin = null;
2490    for (var i = 0; i < processStops.length; i++) {
2491      var stop_2 = processStops[i];
2492      if (stop_2 === null) {
2493        if (gapBegin === null) {
2494          gapBegin = i;
2495        }
2496      } else if (gapBegin !== null) {
2497        var gapLength = i - gapBegin;
2498        var beforeGap = processStops[gapBegin - 1];
2499        var gapValue = (stop_2 - beforeGap) / (gapLength + 1);
2500        for (var g = 1; g <= gapLength; g++) {
2501          processStops[gapBegin + g - 1] = gapValue * g;
2502        }
2503        gapBegin = null;
2504      }
2505    }
2506    return stops.map(function (_a, i) {
2507      var color = _a.color;
2508      return {
2509        color: color,
2510        stop: Math.max(Math.min(1, processStops[i] / lineLength), 0),
2511      };
2512    });
vendor: 5,621 bytes, lines 2513-2660
2513  };
2514  var getAngleFromCorner = function (corner, width, height) {
2515    var centerX = width / 2;
2516    var centerY = height / 2;
2517    var x = getAbsoluteValue(corner[0], width) - centerX;
2518    var y = centerY - getAbsoluteValue(corner[1], height);
2519    return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);
2520  };
2521  var calculateGradientDirection = function (angle, width, height) {
2522    var radian =
2523      typeof angle === "number"
2524        ? angle
2525        : getAngleFromCorner(angle, width, height);
2526    var lineLength =
2527      Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));
2528    var halfWidth = width / 2;
2529    var halfHeight = height / 2;
2530    var halfLineLength = lineLength / 2;
2531    var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;
2532    var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;
2533    return [
2534      lineLength,
2535      halfWidth - xDiff,
2536      halfWidth + xDiff,
2537      halfHeight - yDiff,
2538      halfHeight + yDiff,
2539    ];
2540  };
2541  var distance = function (a, b) {
2542    return Math.sqrt(a * a + b * b);
2543  };
2544  var findCorner = function (width, height, x, y, closest) {
2545    var corners = [
2546      [0, 0],
2547      [0, height],
2548      [width, 0],
2549      [width, height],
2550    ];
2551    return corners.reduce(
2552      function (stat, corner) {
2553        var cx = corner[0],
2554          cy = corner[1];
2555        var d = distance(x - cx, y - cy);
2556        if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {
2557          return {
2558            optimumCorner: corner,
2559            optimumDistance: d,
2560          };
2561        }
2562        return stat;
2563      },
2564      {
2565        optimumDistance: closest ? Infinity : -Infinity,
2566        optimumCorner: null,
2567      }
2568    ).optimumCorner;
2569  };
2570  var calculateRadius = function (gradient, x, y, width, height) {
2571    var rx = 0;
2572    var ry = 0;
2573    switch (gradient.size) {
2574      case CSSRadialExtent.CLOSEST_SIDE:
2575        // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.
2576        // If the shape is an ellipse, it exactly meets the closest side in each dimension.
2577        if (gradient.shape === CSSRadialShape.CIRCLE) {
2578          rx = ry = Math.min(
2579            Math.abs(x),
2580            Math.abs(x - width),
2581            Math.abs(y),
2582            Math.abs(y - height)
2583          );
2584        } else if (gradient.shape === CSSRadialShape.ELLIPSE) {
2585          rx = Math.min(Math.abs(x), Math.abs(x - width));
2586          ry = Math.min(Math.abs(y), Math.abs(y - height));
2587        }
2588        break;
2589      case CSSRadialExtent.CLOSEST_CORNER:
2590        // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.
2591        // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.
2592        if (gradient.shape === CSSRadialShape.CIRCLE) {
2593          rx = ry = Math.min(
2594            distance(x, y),
2595            distance(x, y - height),
2596            distance(x - width, y),
2597            distance(x - width, y - height)
2598          );
2599        } else if (gradient.shape === CSSRadialShape.ELLIPSE) {
2600          // Compute the ratio ry/rx (which is to be the same as for "closest-side")
2601          var c =
2602            Math.min(Math.abs(y), Math.abs(y - height)) /
2603            Math.min(Math.abs(x), Math.abs(x - width));
2604          var _a = findCorner(width, height, x, y, true),
2605            cx = _a[0],
2606            cy = _a[1];
2607          rx = distance(cx - x, (cy - y) / c);
2608          ry = c * rx;
2609        }
2610        break;
2611      case CSSRadialExtent.FARTHEST_SIDE:
2612        // Same as closest-side, except the ending shape is sized based on the farthest side(s)
2613        if (gradient.shape === CSSRadialShape.CIRCLE) {
2614          rx = ry = Math.max(
2615            Math.abs(x),
2616            Math.abs(x - width),
2617            Math.abs(y),
2618            Math.abs(y - height)
2619          );
2620        } else if (gradient.shape === CSSRadialShape.ELLIPSE) {
2621          rx = Math.max(Math.abs(x), Math.abs(x - width));
2622          ry = Math.max(Math.abs(y), Math.abs(y - height));
2623        }
2624        break;
2625      case CSSRadialExtent.FARTHEST_CORNER:
2626        // Same as closest-corner, except the ending shape is sized based on the farthest corner.
2627        // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.
2628        if (gradient.shape === CSSRadialShape.CIRCLE) {
2629          rx = ry = Math.max(
2630            distance(x, y),
2631            distance(x, y - height),
2632            distance(x - width, y),
2633            distance(x - width, y - height)
2634          );
2635        } else if (gradient.shape === CSSRadialShape.ELLIPSE) {
2636          // Compute the ratio ry/rx (which is to be the same as for "farthest-side")
2637          var c =
2638            Math.max(Math.abs(y), Math.abs(y - height)) /
2639            Math.max(Math.abs(x), Math.abs(x - width));
2640          var _b = findCorner(width, height, x, y, false),
2641            cx = _b[0],
2642            cy = _b[1];
2643          rx = distance(cx - x, (cy - y) / c);
2644          ry = c * rx;
2645        }
2646        break;
2647    }
2648    if (Array.isArray(gradient.size)) {
2649      rx = getAbsoluteValue(gradient.size[0], width);
2650      ry =
2651        gradient.size.length === 2
2652          ? getAbsoluteValue(gradient.size[1], height)
2653          : rx;
2654    }
2655    return [rx, ry];
2656  };
2657
2658  var linearGradient = function (tokens) {
2659    var angle$1 = deg(180);
2660    var stops = [];
vendor: 5,513 bytes, lines 2661-2819
2661    parseFunctionArgs(tokens).forEach(function (arg, i) {
2662      if (i === 0) {
2663        var firstToken = arg[0];
2664        if (
2665          firstToken.type === TokenType.IDENT_TOKEN &&
2666          firstToken.value === "to"
2667        ) {
2668          angle$1 = parseNamedSide(arg);
2669          return;
2670        } else if (isAngle(firstToken)) {
2671          angle$1 = angle.parse(firstToken);
2672          return;
2673        }
2674      }
2675      var colorStop = parseColorStop(arg);
2676      stops.push(colorStop);
2677    });
2678    return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT };
2679  };
2680
2681  var prefixLinearGradient = function (tokens) {
2682    var angle$1 = deg(180);
2683    var stops = [];
2684    parseFunctionArgs(tokens).forEach(function (arg, i) {
2685      if (i === 0) {
2686        var firstToken = arg[0];
2687        if (
2688          firstToken.type === TokenType.IDENT_TOKEN &&
2689          ["top", "left", "right", "bottom"].indexOf(firstToken.value) !== -1
2690        ) {
2691          angle$1 = parseNamedSide(arg);
2692          return;
2693        } else if (isAngle(firstToken)) {
2694          angle$1 = (angle.parse(firstToken) + deg(270)) % deg(360);
2695          return;
2696        }
2697      }
2698      var colorStop = parseColorStop(arg);
2699      stops.push(colorStop);
2700    });
2701    return {
2702      angle: angle$1,
2703      stops: stops,
2704      type: CSSImageType.LINEAR_GRADIENT,
2705    };
2706  };
2707
2708  var testRangeBounds = function (document) {
2709    var TEST_HEIGHT = 123;
2710    if (document.createRange) {
2711      var range = document.createRange();
2712      if (range.getBoundingClientRect) {
2713        var testElement = document.createElement("boundtest");
2714        testElement.style.height = TEST_HEIGHT + "px";
2715        testElement.style.display = "block";
2716        document.body.appendChild(testElement);
2717        range.selectNode(testElement);
2718        var rangeBounds = range.getBoundingClientRect();
2719        var rangeHeight = Math.round(rangeBounds.height);
2720        document.body.removeChild(testElement);
2721        if (rangeHeight === TEST_HEIGHT) {
2722          return true;
2723        }
2724      }
2725    }
2726    return false;
2727  };
2728  var testCORS = function () {
2729    return typeof new Image().crossOrigin !== "undefined";
2730  };
2731  var testResponseType = function () {
2732    return typeof new XMLHttpRequest().responseType === "string";
2733  };
2734  var testSVG = function (document) {
2735    var img = new Image();
2736    var canvas = document.createElement("canvas");
2737    var ctx = canvas.getContext("2d");
2738    if (!ctx) {
2739      return false;
2740    }
2741    img.src =
2742      "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>";
2743    try {
2744      ctx.drawImage(img, 0, 0);
2745      canvas.toDataURL();
2746    } catch (e) {
2747      return false;
2748    }
2749    return true;
2750  };
2751  var isGreenPixel = function (data) {
2752    return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;
2753  };
2754  var testForeignObject = function (document) {
2755    var canvas = document.createElement("canvas");
2756    var size = 100;
2757    canvas.width = size;
2758    canvas.height = size;
2759    var ctx = canvas.getContext("2d");
2760    if (!ctx) {
2761      return Promise.reject(false);
2762    }
2763    ctx.fillStyle = "rgb(0, 255, 0)";
2764    ctx.fillRect(0, 0, size, size);
2765    var img = new Image();
2766    var greenImageSrc = canvas.toDataURL();
2767    img.src = greenImageSrc;
2768    var svg = createForeignObjectSVG(size, size, 0, 0, img);
2769    ctx.fillStyle = "red";
2770    ctx.fillRect(0, 0, size, size);
2771    return loadSerializedSVG(svg)
2772      .then(function (img) {
2773        ctx.drawImage(img, 0, 0);
2774        var data = ctx.getImageData(0, 0, size, size).data;
2775        ctx.fillStyle = "red";
2776        ctx.fillRect(0, 0, size, size);
2777        var node = document.createElement("div");
2778        node.style.backgroundImage = "url(" + greenImageSrc + ")";
2779        node.style.height = size + "px";
2780        // Firefox 55 does not render inline <img /> tags
2781        return isGreenPixel(data)
2782          ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node))
2783          : Promise.reject(false);
2784      })
2785      .then(function (img) {
2786        ctx.drawImage(img, 0, 0);
2787        // Edge does not render background-images
2788        return isGreenPixel(ctx.getImageData(0, 0, size, size).data);
2789      })
2790      .catch(function () {
2791        return false;
2792      });
2793  };
2794  var createForeignObjectSVG = function (width, height, x, y, node) {
2795    var xmlns = "http://www.w3.org/2000/svg";
2796    var svg = document.createElementNS(xmlns, "svg");
2797    var foreignObject = document.createElementNS(xmlns, "foreignObject");
2798    svg.setAttributeNS(null, "width", width.toString());
2799    svg.setAttributeNS(null, "height", height.toString());
2800    foreignObject.setAttributeNS(null, "width", "100%");
2801    foreignObject.setAttributeNS(null, "height", "100%");
2802    foreignObject.setAttributeNS(null, "x", x.toString());
2803    foreignObject.setAttributeNS(null, "y", y.toString());
2804    foreignObject.setAttributeNS(null, "externalResourcesRequired", "true");
2805    svg.appendChild(foreignObject);
2806    foreignObject.appendChild(node);
2807    return svg;
2808  };
2809  var loadSerializedSVG = function (svg) {
2810    return new Promise(function (resolve, reject) {
2811      var img = new Image();
2812      img.onload = function () {
2813        return resolve(img);
2814      };
2815      img.onerror = reject;
2816      img.src =
2817        "data:image/svg+xml;charset=utf-8," +
2818        encodeURIComponent(new XMLSerializer().serializeToString(svg));
2819    });
2820  };
2821  var FEATURES = {
2822    get SUPPORT_RANGE_BOUNDS() {
2823      var value = testRangeBounds(document);
2824      Object.defineProperty(FEATURES, "SUPPORT_RANGE_BOUNDS", { value: value });
2825      return value;
2826    },
2827    get SUPPORT_SVG_DRAWING() {
2828      var value = testSVG(document);
2829      Object.defineProperty(FEATURES, "SUPPORT_SVG_DRAWING", { value: value });
2830      return value;
2831    },
2832    get SUPPORT_FOREIGNOBJECT_DRAWING() {
2833      var value =
2834        typeof Array.from === "function" && typeof window.fetch === "function"
2835          ? testForeignObject(document)
2836          : Promise.resolve(false);
2837      Object.defineProperty(FEATURES, "SUPPORT_FOREIGNOBJECT_DRAWING", {
2838        value: value,
2839      });
2840      return value;
2841    },
2842    get SUPPORT_CORS_IMAGES() {
2843      var value = testCORS();
2844      Object.defineProperty(FEATURES, "SUPPORT_CORS_IMAGES", { value: value });
2845      return value;
2846    },
2847    get SUPPORT_RESPONSE_TYPE() {
2848      var value = testResponseType();
2849      Object.defineProperty(FEATURES, "SUPPORT_RESPONSE_TYPE", {
2850        value: value,
2851      });
2852      return value;
2853    },
2854    get SUPPORT_CORS_XHR() {
2855      var value = "withCredentials" in new XMLHttpRequest();
2856      Object.defineProperty(FEATURES, "SUPPORT_CORS_XHR", { value: value });
2857      return value;
2858    },
2859  };
2860
2861  var Logger = /** @class */ (function () {
2862    function Logger(_a) {
2863      var id = _a.id,
2864        enabled = _a.enabled;
2865      this.id = id;
2866      this.enabled = enabled;
2867      this.start = Date.now();
2868    }
2869    // eslint-disable-next-line @typescript-eslint/no-explicit-any
2870    Logger.prototype.debug = function () {
2871      var args = [];
2872      for (var _i = 0; _i < arguments.length; _i++) {
2873        args[_i] = arguments[_i];
2874      }
2875      if (this.enabled) {
2876        // eslint-disable-next-line no-console
2877        if (
2878          typeof window !== "undefined" &&
2879          window.console &&
2880          typeof console.debug === "function"
2881        ) {
2882          // eslint-disable-next-line no-console
2883          console.debug.apply(
2884            console,
2885            [this.id, this.getTime() + "ms"].concat(args)
2886          );
2887        } else {
2888          this.info.apply(this, args);
2889        }
2890      }
2891    };
2892    Logger.prototype.getTime = function () {
2893      return Date.now() - this.start;
2894    };
2895    Logger.create = function (options) {
2896      Logger.instances[options.id] = new Logger(options);
2897    };
2898    Logger.destroy = function (id) {
2899      delete Logger.instances[id];
2900    };
2901    Logger.getInstance = function (id) {
2902      var instance = Logger.instances[id];
2903      if (typeof instance === "undefined") {
2904        throw new Error("No logger instance found with id " + id);
2905      }
2906      return instance;
2907    };
2908    // eslint-disable-next-line @typescript-eslint/no-explicit-any
2909    Logger.prototype.info = function () {
2910      var args = [];
2911      for (var _i = 0; _i < arguments.length; _i++) {
2912        args[_i] = arguments[_i];
2913      }
2914      if (this.enabled) {
2915        // eslint-disable-next-line no-console
2916        if (
2917          typeof window !== "undefined" &&
2918          window.console &&
2919          typeof console.info === "function"
2920        ) {
2921          // eslint-disable-next-line no-console
2922          console.info.apply(
2923            console,
2924            [this.id, this.getTime() + "ms"].concat(args)
2925          );
2926        }
2927      }
2928    };
2929    // eslint-disable-next-line @typescript-eslint/no-explicit-any
2930    Logger.prototype.error = function () {
2931      var args = [];
2932      for (var _i = 0; _i < arguments.length; _i++) {
2933        args[_i] = arguments[_i];
2934      }
2935      if (this.enabled) {
2936        // eslint-disable-next-line no-console
2937        if (
2938          typeof window !== "undefined" &&
2939          window.console &&
2940          typeof console.error === "function"
2941        ) {
2942          // eslint-disable-next-line no-console
2943          console.error.apply(
2944            console,
2945            [this.id, this.getTime() + "ms"].concat(args)
2946          );
2947        } else {
2948          this.info.apply(this, args);
2949        }
2950      }
2951    };
2952    Logger.instances = {};
2953    return Logger;
2954  })();
2955
2956  var CacheStorage = /** @class */ (function () {
2957    function CacheStorage() {}
2958    CacheStorage.create = function (name, options) {
2959      return (CacheStorage._caches[name] = new Cache(name, options));
2960    };
2961    CacheStorage.destroy = function (name) {
2962      delete CacheStorage._caches[name];
2963    };
2964    CacheStorage.open = function (name) {
2965      var cache = CacheStorage._caches[name];
2966      if (typeof cache !== "undefined") {
2967        return cache;
2968      }
2969      throw new Error('Cache with key "' + name + '" not found');
2970    };
2971    CacheStorage.getOrigin = function (url) {
2972      var link = CacheStorage._link;
2973      if (!link) {
2974        return "about:blank";
2975      }
2976      link.href = url;
2977      link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/
2978      return link.protocol + link.hostname + link.port;
2979    };
2980    CacheStorage.isSameOrigin = function (src) {
2981      return CacheStorage.getOrigin(src) === CacheStorage._origin;
2982    };
2983    CacheStorage.setContext = function (window) {
2984      CacheStorage._link = window.document.createElement("a");
2985      CacheStorage._origin = CacheStorage.getOrigin(window.location.href);
2986    };
2987    CacheStorage.getInstance = function () {
2988      var current = CacheStorage._current;
2989      if (current === null) {
2990        throw new Error("No cache instance attached");
2991      }
2992      return current;
2993    };
2994    CacheStorage.attachInstance = function (cache) {
2995      CacheStorage._current = cache;
2996    };
2997    CacheStorage.detachInstance = function () {
2998      CacheStorage._current = null;
2999    };
3000    CacheStorage._caches = {};
3001    CacheStorage._origin = "about:blank";
3002    CacheStorage._current = null;
3003    return CacheStorage;
3004  })();
3005  var Cache = /** @class */ (function () {
3006    function Cache(id, options) {
3007      this.id = id;
3008      this._options = options;
3009      this._cache = {};
3010    }
3011    Cache.prototype.addImage = function (src) {
3012      var result = Promise.resolve();
3013      if (this.has(src)) {
3014        return result;
3015      }
3016      if (isBlobImage(src) || isRenderable(src)) {
3017        this._cache[src] = this.loadImage(src);
3018        return result;
3019      }
3020      return result;
3021    };
3022    // eslint-disable-next-line @typescript-eslint/no-explicit-any
3023    Cache.prototype.match = function (src) {
3024      return this._cache[src];
3025    };
3026    Cache.prototype.loadImage = function (key) {
3027      return __awaiter(this, void 0, void 0, function () {
3028        var isSameOrigin, useCORS, useProxy, src;
3029        var _this = this;
3030        return __generator(this, function (_a) {
3031          switch (_a.label) {
3032            case 0:
3033              isSameOrigin = CacheStorage.isSameOrigin(key);
3034              useCORS =
3035                !isInlineImage(key) &&
3036                this._options.useCORS === true &&
3037                FEATURES.SUPPORT_CORS_IMAGES &&
3038                !isSameOrigin;
3039              useProxy =
3040                !isInlineImage(key) &&
3041                !isSameOrigin &&
3042                typeof this._options.proxy === "string" &&
3043                FEATURES.SUPPORT_CORS_XHR &&
3044                !useCORS;
3045              if (
3046                !isSameOrigin &&
3047                this._options.allowTaint === false &&
3048                !isInlineImage(key) &&
3049                !useProxy &&
3050                !useCORS
3051              ) {
3052                return [2 /*return*/];
3053              }
3054              src = key;
3055              if (!useProxy) return [3 /*break*/, 2];
3056              return [4 /*yield*/, this.proxy(src)];
3057            case 1:
3058              src = _a.sent();
3059              _a.label = 2;
3060            case 2:
3061              Logger.getInstance(this.id).debug(
3062                "Added image " + key.substring(0, 256)
3063              );
3064              return [
3065                4 /*yield*/,
3066                new Promise(function (resolve, reject) {
3067                  var img = new Image();
3068                  img.onload = function () {
3069                    return resolve(img);
3070                  };
3071                  img.onerror = reject;
3072                  //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous
3073                  if (isInlineBase64Image(src) || useCORS) {
3074                    img.crossOrigin = "anonymous";
3075                  }
3076                  img.src = src;
3077                  if (img.complete === true) {
3078                    // Inline XML images may fail to parse, throwing an Error later on
3079                    setTimeout(function () {
3080                      return resolve(img);
3081                    }, 500);
3082                  }
3083                  if (_this._options.imageTimeout > 0) {
3084                    setTimeout(function () {
3085                      return reject(
3086                        "Timed out (" +
3087                          _this._options.imageTimeout +
3088                          "ms) loading image"
3089                      );
3090                    }, _this._options.imageTimeout);
3091                  }
3092                }),
3093              ];
3094            case 3:
3095              return [2 /*return*/, _a.sent()];
3096          }
3097        });
3098      });
3099    };
3100    Cache.prototype.has = function (key) {
3101      return typeof this._cache[key] !== "undefined";
3102    };
3103    Cache.prototype.keys = function () {
3104      return Promise.resolve(Object.keys(this._cache));
3105    };
3106    Cache.prototype.proxy = function (src) {
3107      var _this = this;
3108      var proxy = this._options.proxy;
3109      if (!proxy) {
3110        throw new Error("No proxy defined");
3111      }
3112      var key = src.substring(0, 256);
3113      return new Promise(function (resolve, reject) {
3114        var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? "blob" : "text";
3115        var xhr = new XMLHttpRequest();
3116        xhr.onload = function () {
3117          if (xhr.status === 200) {
3118            if (responseType === "text") {
3119              resolve(xhr.response);
3120            } else {
3121              var reader_1 = new FileReader();
3122              reader_1.addEventListener(
3123                "load",
3124                function () {
3125                  return resolve(reader_1.result);
3126                },
3127                false
3128              );
3129              reader_1.addEventListener(
3130                "error",
3131                function (e) {
3132                  return reject(e);
3133                },
3134                false
3135              );
3136              reader_1.readAsDataURL(xhr.response);
3137            }
3138          } else {
3139            reject(
3140              "Failed to proxy resource " +
3141                key +
3142                " with status code " +
3143                xhr.status
3144            );
3145          }
3146        };
3147        xhr.onerror = reject;
3148        xhr.open(
3149          "GET",
3150          proxy +
3151            "?url=" +
3152            encodeURIComponent(src) +
3153            "&responseType=" +
3154            responseType
3155        );
3156        if (responseType !== "text" && xhr instanceof XMLHttpRequest) {
3157          xhr.responseType = responseType;
3158        }
3159        if (_this._options.imageTimeout) {
3160          var timeout_1 = _this._options.imageTimeout;
3161          xhr.timeout = timeout_1;
3162          xhr.ontimeout = function () {
3163            return reject("Timed out (" + timeout_1 + "ms) proxying " + key);
3164          };
3165        }
3166        xhr.send();
3167      });
3168    };
3169    return Cache;
3170  })();
3171  var INLINE_SVG = /^data:image\/svg\+xml/i;
3172  var INLINE_BASE64 = /^data:image\/.*;base64,/i;
3173  var INLINE_IMG = /^data:image\/.*/i;
3174  var isRenderable = function (src) {
3175    return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src);
3176  };
3177  var isInlineImage = function (src) {
3178    return INLINE_IMG.test(src);
3179  };
3180  var isInlineBase64Image = function (src) {
3181    return INLINE_BASE64.test(src);
3182  };
3183  var isBlobImage = function (src) {
3184    return src.substr(0, 4) === "blob";
3185  };
3186  var isSVG = function (src) {
3187    return src.substr(-3).toLowerCase() === "svg" || INLINE_SVG.test(src);
3188  };
3189
3190  var webkitGradient = function (tokens) {
3191    var angle = deg(180);
3192    var stops = [];
3193    var type = CSSImageType.LINEAR_GRADIENT;
3194    var shape = CSSRadialShape.CIRCLE;
3195    var size = CSSRadialExtent.FARTHEST_CORNER;
3196    var position = [];
3197    parseFunctionArgs(tokens).forEach(function (arg, i) {
3198      var firstToken = arg[0];
3199      if (i === 0) {
3200        if (isIdentToken(firstToken) && firstToken.value === "linear") {
3201          type = CSSImageType.LINEAR_GRADIENT;
3202          return;
3203        } else if (isIdentToken(firstToken) && firstToken.value === "radial") {
3204          type = CSSImageType.RADIAL_GRADIENT;
3205          return;
3206        }
3207      }
3208      if (firstToken.type === TokenType.FUNCTION) {
3209        if (firstToken.name === "from") {
3210          var color$1 = color.parse(firstToken.values[0]);
3211          stops.push({ stop: ZERO_LENGTH, color: color$1 });
3212        } else if (firstToken.name === "to") {
3213          var color$1 = color.parse(firstToken.values[0]);
3214          stops.push({ stop: HUNDRED_PERCENT, color: color$1 });
3215        } else if (firstToken.name === "color-stop") {
3216          var values = firstToken.values.filter(nonFunctionArgSeparator);
3217          if (values.length === 2) {
3218            var color$1 = color.parse(values[1]);
3219            var stop_1 = values[0];
3220            if (isNumberToken(stop_1)) {
3221              stops.push({
3222                stop: {
3223                  type: TokenType.PERCENTAGE_TOKEN,
3224                  number: stop_1.number * 100,
3225                  flags: stop_1.flags,
3226                },
3227                color: color$1,
3228              });
3229            }
3230          }
3231        }
3232      }
3233    });
3234    return type === CSSImageType.LINEAR_GRADIENT
3235      ? {
3236          angle: (angle + deg(180)) % deg(360),
3237          stops: stops,
3238          type: type,
3239        }
3240      : {
3241          size: size,
3242          shape: shape,
3243          stops: stops,
3244          position: position,
3245          type: type,
3246        };
3247  };
3248
3249  var CLOSEST_SIDE = "closest-side";
3250  var FARTHEST_SIDE = "farthest-side";
3251  var CLOSEST_CORNER = "closest-corner";
3252  var FARTHEST_CORNER = "farthest-corner";
3253  var CIRCLE = "circle";
3254  var ELLIPSE = "ellipse";
3255  var COVER = "cover";
3256  var CONTAIN = "contain";
3257  var radialGradient = function (tokens) {
3258    var shape = CSSRadialShape.CIRCLE;
3259    var size = CSSRadialExtent.FARTHEST_CORNER;
3260    var stops = [];
3261    var position = [];
3262    parseFunctionArgs(tokens).forEach(function (arg, i) {
3263      var isColorStop = true;
3264      if (i === 0) {
3265        var isAtPosition_1 = false;
3266        isColorStop = arg.reduce(function (acc, token) {
3267          if (isAtPosition_1) {
3268            if (isIdentToken(token)) {
3269              switch (token.value) {
3270                case "center":
3271                  position.push(FIFTY_PERCENT);
3272                  return acc;
3273                case "top":
3274                case "left":
3275                  position.push(ZERO_LENGTH);
3276                  return acc;
3277                case "right":
3278                case "bottom":
3279                  position.push(HUNDRED_PERCENT);
3280                  return acc;
3281              }
3282            } else if (isLengthPercentage(token) || isLength(token)) {
3283              position.push(token);
3284            }
3285          } else if (isIdentToken(token)) {
3286            switch (token.value) {
3287              case CIRCLE:
3288                shape = CSSRadialShape.CIRCLE;
3289                return false;
3290              case ELLIPSE:
3291                shape = CSSRadialShape.ELLIPSE;
3292                return false;
3293              case "at":
3294                isAtPosition_1 = true;
3295                return false;
3296              case CLOSEST_SIDE:
3297                size = CSSRadialExtent.CLOSEST_SIDE;
3298                return false;
3299              case COVER:
3300              case FARTHEST_SIDE:
3301                size = CSSRadialExtent.FARTHEST_SIDE;
3302                return false;
3303              case CONTAIN:
3304              case CLOSEST_CORNER:
3305                size = CSSRadialExtent.CLOSEST_CORNER;
3306                return false;
3307              case FARTHEST_CORNER:
3308                size = CSSRadialExtent.FARTHEST_CORNER;
3309                return false;
3310            }
3311          } else if (isLength(token) || isLengthPercentage(token)) {
3312            if (!Array.isArray(size)) {
3313              size = [];
3314            }
3315            size.push(token);
3316            return false;
3317          }
3318          return acc;
3319        }, isColorStop);
3320      }
3321      if (isColorStop) {
3322        var colorStop = parseColorStop(arg);
3323        stops.push(colorStop);
3324      }
3325    });
3326    return {
3327      size: size,
3328      shape: shape,
3329      stops: stops,
3330      position: position,
3331      type: CSSImageType.RADIAL_GRADIENT,
3332    };
3333  };
3334
3335  var prefixRadialGradient = function (tokens) {
3336    var shape = CSSRadialShape.CIRCLE;
3337    var size = CSSRadialExtent.FARTHEST_CORNER;
3338    var stops = [];
3339    var position = [];
3340    parseFunctionArgs(tokens).forEach(function (arg, i) {
3341      var isColorStop = true;
3342      if (i === 0) {
3343        isColorStop = arg.reduce(function (acc, token) {
3344          if (isIdentToken(token)) {
3345            switch (token.value) {
3346              case "center":
3347                position.push(FIFTY_PERCENT);
3348                return false;
3349              case "top":
3350              case "left":
3351                position.push(ZERO_LENGTH);
3352                return false;
3353              case "right":
3354              case "bottom":
3355                position.push(HUNDRED_PERCENT);
3356                return false;
3357            }
3358          } else if (isLengthPercentage(token) || isLength(token)) {
3359            position.push(token);
3360            return false;
3361          }
3362          return acc;
3363        }, isColorStop);
3364      } else if (i === 1) {
3365        isColorStop = arg.reduce(function (acc, token) {
3366          if (isIdentToken(token)) {
3367            switch (token.value) {
3368              case CIRCLE:
3369                shape = CSSRadialShape.CIRCLE;
3370                return false;
3371              case ELLIPSE:
3372                shape = CSSRadialShape.ELLIPSE;
3373                return false;
3374              case CONTAIN:
3375              case CLOSEST_SIDE:
3376                size = CSSRadialExtent.CLOSEST_SIDE;
3377                return false;
3378              case FARTHEST_SIDE:
3379                size = CSSRadialExtent.FARTHEST_SIDE;
3380                return false;
3381              case CLOSEST_CORNER:
3382                size = CSSRadialExtent.CLOSEST_CORNER;
3383                return false;
3384              case COVER:
3385              case FARTHEST_CORNER:
3386                size = CSSRadialExtent.FARTHEST_CORNER;
3387                return false;
3388            }
3389          } else if (isLength(token) || isLengthPercentage(token)) {
3390            if (!Array.isArray(size)) {
3391              size = [];
3392            }
3393            size.push(token);
3394            return false;
3395          }
3396          return acc;
3397        }, isColorStop);
3398      }
3399      if (isColorStop) {
3400        var colorStop = parseColorStop(arg);
3401        stops.push(colorStop);
3402      }
3403    });
3404    return {
3405      size: size,
3406      shape: shape,
3407      stops: stops,
3408      position: position,
3409      type: CSSImageType.RADIAL_GRADIENT,
3410    };
3411  };
3412
3413  var CSSImageType;
3414  (function (CSSImageType) {
3415    CSSImageType[(CSSImageType["URL"] = 0)] = "URL";
3416    CSSImageType[(CSSImageType["LINEAR_GRADIENT"] = 1)] = "LINEAR_GRADIENT";
3417    CSSImageType[(CSSImageType["RADIAL_GRADIENT"] = 2)] = "RADIAL_GRADIENT";
3418  })(CSSImageType || (CSSImageType = {}));
3419  var isLinearGradient = function (background) {
3420    return background.type === CSSImageType.LINEAR_GRADIENT;
3421  };
3422  var isRadialGradient = function (background) {
3423    return background.type === CSSImageType.RADIAL_GRADIENT;
3424  };
3425  var CSSRadialShape;
3426  (function (CSSRadialShape) {
3427    CSSRadialShape[(CSSRadialShape["CIRCLE"] = 0)] = "CIRCLE";
3428    CSSRadialShape[(CSSRadialShape["ELLIPSE"] = 1)] = "ELLIPSE";
3429  })(CSSRadialShape || (CSSRadialShape = {}));
3430  var CSSRadialExtent;
3431  (function (CSSRadialExtent) {
3432    CSSRadialExtent[(CSSRadialExtent["CLOSEST_SIDE"] = 0)] = "CLOSEST_SIDE";
3433    CSSRadialExtent[(CSSRadialExtent["FARTHEST_SIDE"] = 1)] = "FARTHEST_SIDE";
3434    CSSRadialExtent[(CSSRadialExtent["CLOSEST_CORNER"] = 2)] = "CLOSEST_CORNER";
3435    CSSRadialExtent[(CSSRadialExtent["FARTHEST_CORNER"] = 3)] =
3436      "FARTHEST_CORNER";
3437  })(CSSRadialExtent || (CSSRadialExtent = {}));
3438  var image = {
3439    name: "image",
3440    parse: function (value) {
3441      if (value.type === TokenType.URL_TOKEN) {
3442        var image_1 = { url: value.value, type: CSSImageType.URL };
3443        CacheStorage.getInstance().addImage(value.value);
3444        return image_1;
3445      }
3446      if (value.type === TokenType.FUNCTION) {
3447        var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];
3448        if (typeof imageFunction === "undefined") {
3449          throw new Error(
3450            'Attempting to parse an unsupported image function "' +
3451              value.name +
3452              '"'
3453          );
3454        }
3455        return imageFunction(value.values);
3456      }
3457      throw new Error("Unsupported image type");
3458    },
3459  };
3460  function isSupportedImage(value) {
3461    return (
3462      value.type !== TokenType.FUNCTION || SUPPORTED_IMAGE_FUNCTIONS[value.name]
3463    );
3464  }
3465  var SUPPORTED_IMAGE_FUNCTIONS = {
3466    "linear-gradient": linearGradient,
3467    "-moz-linear-gradient": prefixLinearGradient,
3468    "-ms-linear-gradient": prefixLinearGradient,
3469    "-o-linear-gradient": prefixLinearGradient,
3470    "-webkit-linear-gradient": prefixLinearGradient,
3471    "radial-gradient": radialGradient,
3472    "-moz-radial-gradient": prefixRadialGradient,
3473    "-ms-radial-gradient": prefixRadialGradient,
3474    "-o-radial-gradient": prefixRadialGradient,
3475    "-webkit-radial-gradient": prefixRadialGradient,
3476    "-webkit-gradient": webkitGradient,
3477  };
3478
3479  var backgroundImage = {
3480    name: "background-image",
3481    initialValue: "none",
3482    type: PropertyDescriptorParsingType.LIST,
3483    prefix: false,
3484    parse: function (tokens) {
3485      if (tokens.length === 0) {
3486        return [];
3487      }
3488      var first = tokens[0];
3489      if (first.type === TokenType.IDENT_TOKEN && first.value === "none") {
3490        return [];
3491      }
3492      return tokens
3493        .filter(function (value) {
3494          return nonFunctionArgSeparator(value) && isSupportedImage(value);
3495        })
3496        .map(image.parse);
3497    },
3498  };
3499
3500  var backgroundOrigin = {
3501    name: "background-origin",
3502    initialValue: "border-box",
3503    prefix: false,
3504    type: PropertyDescriptorParsingType.LIST,
3505    parse: function (tokens) {
3506      return tokens.map(function (token) {
3507        if (isIdentToken(token)) {
3508          switch (token.value) {
3509            case "padding-box":
3510              return 1 /* PADDING_BOX */;
3511            case "content-box":
3512              return 2 /* CONTENT_BOX */;
3513          }
3514        }
3515        return 0 /* BORDER_BOX */;
3516      });
3517    },
3518  };
3519
3520  var backgroundPosition = {
3521    name: "background-position",
3522    initialValue: "0% 0%",
3523    type: PropertyDescriptorParsingType.LIST,
3524    prefix: false,
3525    parse: function (tokens) {
3526      return parseFunctionArgs(tokens)
3527        .map(function (values) {
3528          return values.filter(isLengthPercentage);
3529        })
3530        .map(parseLengthPercentageTuple);
3531    },
3532  };
3533
3534  var BACKGROUND_REPEAT;
3535  (function (BACKGROUND_REPEAT) {
3536    BACKGROUND_REPEAT[(BACKGROUND_REPEAT["REPEAT"] = 0)] = "REPEAT";
3537    BACKGROUND_REPEAT[(BACKGROUND_REPEAT["NO_REPEAT"] = 1)] = "NO_REPEAT";
3538    BACKGROUND_REPEAT[(BACKGROUND_REPEAT["REPEAT_X"] = 2)] = "REPEAT_X";
3539    BACKGROUND_REPEAT[(BACKGROUND_REPEAT["REPEAT_Y"] = 3)] = "REPEAT_Y";
3540  })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {}));
3541  var backgroundRepeat = {
3542    name: "background-repeat",
3543    initialValue: "repeat",
3544    prefix: false,
3545    type: PropertyDescriptorParsingType.LIST,
3546    parse: function (tokens) {
3547      return parseFunctionArgs(tokens)
3548        .map(function (values) {
3549          return values
3550            .filter(isIdentToken)
3551            .map(function (token) {
3552              return token.value;
3553            })
3554            .join(" ");
3555        })
3556        .map(parseBackgroundRepeat);
3557    },
3558  };
3559  var parseBackgroundRepeat = function (value) {
3560    switch (value) {
3561      case "no-repeat":
3562        return BACKGROUND_REPEAT.NO_REPEAT;
3563      case "repeat-x":
3564      case "repeat no-repeat":
3565        return BACKGROUND_REPEAT.REPEAT_X;
3566      case "repeat-y":
3567      case "no-repeat repeat":
3568        return BACKGROUND_REPEAT.REPEAT_Y;
3569      case "repeat":
3570      default:
3571        return BACKGROUND_REPEAT.REPEAT;
3572    }
3573  };
3574
3575  var BACKGROUND_SIZE;
3576  (function (BACKGROUND_SIZE) {
3577    BACKGROUND_SIZE["AUTO"] = "auto";
3578    BACKGROUND_SIZE["CONTAIN"] = "contain";
3579    BACKGROUND_SIZE["COVER"] = "cover";
3580  })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));
3581  var backgroundSize = {
3582    name: "background-size",
3583    initialValue: "0",
3584    prefix: false,
3585    type: PropertyDescriptorParsingType.LIST,
3586    parse: function (tokens) {
3587      return parseFunctionArgs(tokens).map(function (values) {
3588        return values.filter(isBackgroundSizeInfoToken);
3589      });
3590    },
3591  };
3592  var isBackgroundSizeInfoToken = function (value) {
3593    return isIdentToken(value) || isLengthPercentage(value);
3594  };
3595
3596  var borderColorForSide = function (side) {
3597    return {
3598      name: "border-" + side + "-color",
3599      initialValue: "transparent",
3600      prefix: false,
3601      type: PropertyDescriptorParsingType.TYPE_VALUE,
3602      format: "color",
3603    };
3604  };
3605  var borderTopColor = borderColorForSide("top");
3606  var borderRightColor = borderColorForSide("right");
3607  var borderBottomColor = borderColorForSide("bottom");
3608  var borderLeftColor = borderColorForSide("left");
3609
3610  var borderRadiusForSide = function (side) {
3611    return {
3612      name: "border-radius-" + side,
3613      initialValue: "0 0",
3614      prefix: false,
3615      type: PropertyDescriptorParsingType.LIST,
3616      parse: function (tokens) {
3617        return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));
3618      },
3619    };
3620  };
3621  var borderTopLeftRadius = borderRadiusForSide("top-left");
3622  var borderTopRightRadius = borderRadiusForSide("top-right");
3623  var borderBottomRightRadius = borderRadiusForSide("bottom-right");
3624  var borderBottomLeftRadius = borderRadiusForSide("bottom-left");
3625
3626  var BORDER_STYLE;
3627  (function (BORDER_STYLE) {
3628    BORDER_STYLE[(BORDER_STYLE["NONE"] = 0)] = "NONE";
3629    BORDER_STYLE[(BORDER_STYLE["SOLID"] = 1)] = "SOLID";
3630  })(BORDER_STYLE || (BORDER_STYLE = {}));
3631  var borderStyleForSide = function (side) {
3632    return {
3633      name: "border-" + side + "-style",
3634      initialValue: "solid",
3635      prefix: false,
3636      type: PropertyDescriptorParsingType.IDENT_VALUE,
3637      parse: function (style) {
3638        switch (style) {
3639          case "none":
3640            return BORDER_STYLE.NONE;
3641        }
3642        return BORDER_STYLE.SOLID;
3643      },
3644    };
3645  };
3646  var borderTopStyle = borderStyleForSide("top");
3647  var borderRightStyle = borderStyleForSide("right");
3648  var borderBottomStyle = borderStyleForSide("bottom");
3649  var borderLeftStyle = borderStyleForSide("left");
3650
3651  var borderWidthForSide = function (side) {
3652    return {
3653      name: "border-" + side + "-width",
3654      initialValue: "0",
3655      type: PropertyDescriptorParsingType.VALUE,
3656      prefix: false,
3657      parse: function (token) {
3658        if (isDimensionToken(token)) {
3659          return token.number;
3660        }
3661        return 0;
3662      },
3663    };
3664  };
3665  var borderTopWidth = borderWidthForSide("top");
3666  var borderRightWidth = borderWidthForSide("right");
3667  var borderBottomWidth = borderWidthForSide("bottom");
3668  var borderLeftWidth = borderWidthForSide("left");
3669
3670  var color$1 = {
3671    name: "color",
3672    initialValue: "transparent",
3673    prefix: false,
3674    type: PropertyDescriptorParsingType.TYPE_VALUE,
3675    format: "color",
3676  };
3677
3678  var display = {
3679    name: "display",
3680    initialValue: "inline-block",
3681    prefix: false,
3682    type: PropertyDescriptorParsingType.LIST,
3683    parse: function (tokens) {
3684      return tokens.filter(isIdentToken).reduce(function (bit, token) {
3685        return bit | parseDisplayValue(token.value);
3686      }, 0 /* NONE */);
3687    },
3688  };
3689  var parseDisplayValue = function (display) {
3690    switch (display) {
3691      case "block":
3692        return 2 /* BLOCK */;
3693      case "inline":
3694        return 4 /* INLINE */;
3695      case "run-in":
3696        return 8 /* RUN_IN */;
3697      case "flow":
3698        return 16 /* FLOW */;
3699      case "flow-root":
3700        return 32 /* FLOW_ROOT */;
3701      case "table":
3702        return 64 /* TABLE */;
3703      case "flex":
3704      case "-webkit-flex":
3705        return 128 /* FLEX */;
3706      case "grid":
3707      case "-ms-grid":
3708        return 256 /* GRID */;
3709      case "ruby":
3710        return 512 /* RUBY */;
3711      case "subgrid":
3712        return 1024 /* SUBGRID */;
3713      case "list-item":
3714        return 2048 /* LIST_ITEM */;
3715      case "table-row-group":
3716        return 4096 /* TABLE_ROW_GROUP */;
3717      case "table-header-group":
3718        return 8192 /* TABLE_HEADER_GROUP */;
3719      case "table-footer-group":
3720        return 16384 /* TABLE_FOOTER_GROUP */;
3721      case "table-row":
3722        return 32768 /* TABLE_ROW */;
3723      case "table-cell":
3724        return 65536 /* TABLE_CELL */;
3725      case "table-column-group":
3726        return 131072 /* TABLE_COLUMN_GROUP */;
3727      case "table-column":
3728        return 262144 /* TABLE_COLUMN */;
3729      case "table-caption":
3730        return 524288 /* TABLE_CAPTION */;
3731      case "ruby-base":
3732        return 1048576 /* RUBY_BASE */;
3733      case "ruby-text":
3734        return 2097152 /* RUBY_TEXT */;
3735      case "ruby-base-container":
3736        return 4194304 /* RUBY_BASE_CONTAINER */;
3737      case "ruby-text-container":
3738        return 8388608 /* RUBY_TEXT_CONTAINER */;
3739      case "contents":
3740        return 16777216 /* CONTENTS */;
3741      case "inline-block":
3742        return 33554432 /* INLINE_BLOCK */;
3743      case "inline-list-item":
3744        return 67108864 /* INLINE_LIST_ITEM */;
3745      case "inline-table":
3746        return 134217728 /* INLINE_TABLE */;
3747      case "inline-flex":
3748        return 268435456 /* INLINE_FLEX */;
3749      case "inline-grid":
3750        return 536870912 /* INLINE_GRID */;
3751    }
3752    return 0 /* NONE */;
3753  };
3754
3755  var FLOAT;
3756  (function (FLOAT) {
3757    FLOAT[(FLOAT["NONE"] = 0)] = "NONE";
3758    FLOAT[(FLOAT["LEFT"] = 1)] = "LEFT";
3759    FLOAT[(FLOAT["RIGHT"] = 2)] = "RIGHT";
3760    FLOAT[(FLOAT["INLINE_START"] = 3)] = "INLINE_START";
3761    FLOAT[(FLOAT["INLINE_END"] = 4)] = "INLINE_END";
3762  })(FLOAT || (FLOAT = {}));
3763  var float = {
3764    name: "float",
3765    initialValue: "none",
3766    prefix: false,
3767    type: PropertyDescriptorParsingType.IDENT_VALUE,
3768    parse: function (float) {
3769      switch (float) {
3770        case "left":
3771          return FLOAT.LEFT;
3772        case "right":
3773          return FLOAT.RIGHT;
3774        case "inline-start":
3775          return FLOAT.INLINE_START;
3776        case "inline-end":
3777          return FLOAT.INLINE_END;
3778      }
3779      return FLOAT.NONE;
3780    },
3781  };
3782
3783  var letterSpacing = {
3784    name: "letter-spacing",
3785    initialValue: "0",
3786    prefix: false,
3787    type: PropertyDescriptorParsingType.VALUE,
3788    parse: function (token) {
3789      if (token.type === TokenType.IDENT_TOKEN && token.value === "normal") {
3790        return 0;
3791      }
3792      if (token.type === TokenType.NUMBER_TOKEN) {
3793        return token.number;
3794      }
3795      if (token.type === TokenType.DIMENSION_TOKEN) {
3796        return token.number;
3797      }
3798      return 0;
3799    },
3800  };
3801
3802  var LINE_BREAK;
3803  (function (LINE_BREAK) {
3804    LINE_BREAK["NORMAL"] = "normal";
3805    LINE_BREAK["STRICT"] = "strict";
3806  })(LINE_BREAK || (LINE_BREAK = {}));
3807  var lineBreak = {
3808    name: "line-break",
3809    initialValue: "normal",
3810    prefix: false,
3811    type: PropertyDescriptorParsingType.IDENT_VALUE,
3812    parse: function (lineBreak) {
3813      switch (lineBreak) {
3814        case "strict":
3815          return LINE_BREAK.STRICT;
3816        case "normal":
3817        default:
3818          return LINE_BREAK.NORMAL;
3819      }
3820    },
3821  };
3822
3823  var lineHeight = {
3824    name: "line-height",
3825    initialValue: "normal",
3826    prefix: false,
3827    type: PropertyDescriptorParsingType.TOKEN_VALUE,
3828  };
3829  var computeLineHeight = function (token, fontSize) {
3830    if (isIdentToken(token) && token.value === "normal") {
3831      return 1.2 * fontSize;
3832    } else if (token.type === TokenType.NUMBER_TOKEN) {
3833      return fontSize * token.number;
3834    } else if (isLengthPercentage(token)) {
3835      return getAbsoluteValue(token, fontSize);
3836    }
3837    return fontSize;
3838  };
3839
3840  var listStyleImage = {
3841    name: "list-style-image",
3842    initialValue: "none",
3843    type: PropertyDescriptorParsingType.VALUE,
3844    prefix: false,
3845    parse: function (token) {
3846      if (token.type === TokenType.IDENT_TOKEN && token.value === "none") {
3847        return null;
3848      }
3849      return image.parse(token);
3850    },
3851  };
3852
3853  var LIST_STYLE_POSITION;
3854  (function (LIST_STYLE_POSITION) {
3855    LIST_STYLE_POSITION[(LIST_STYLE_POSITION["INSIDE"] = 0)] = "INSIDE";
3856    LIST_STYLE_POSITION[(LIST_STYLE_POSITION["OUTSIDE"] = 1)] = "OUTSIDE";
3857  })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {}));
3858  var listStylePosition = {
3859    name: "list-style-position",
3860    initialValue: "outside",
3861    prefix: false,
3862    type: PropertyDescriptorParsingType.IDENT_VALUE,
3863    parse: function (position) {
3864      switch (position) {
3865        case "inside":
3866          return LIST_STYLE_POSITION.INSIDE;
3867        case "outside":
3868        default:
3869          return LIST_STYLE_POSITION.OUTSIDE;
3870      }
3871    },
3872  };
3873
3874  var LIST_STYLE_TYPE;
3875  (function (LIST_STYLE_TYPE) {
3876    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["NONE"] = -1)] = "NONE";
3877    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["DISC"] = 0)] = "DISC";
3878    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["CIRCLE"] = 1)] = "CIRCLE";
3879    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["SQUARE"] = 2)] = "SQUARE";
3880    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["DECIMAL"] = 3)] = "DECIMAL";
3881    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["CJK_DECIMAL"] = 4)] = "CJK_DECIMAL";
3882    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["DECIMAL_LEADING_ZERO"] = 5)] =
3883      "DECIMAL_LEADING_ZERO";
3884    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["LOWER_ROMAN"] = 6)] = "LOWER_ROMAN";
3885    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["UPPER_ROMAN"] = 7)] = "UPPER_ROMAN";
3886    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["LOWER_GREEK"] = 8)] = "LOWER_GREEK";
3887    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["LOWER_ALPHA"] = 9)] = "LOWER_ALPHA";
3888    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["UPPER_ALPHA"] = 10)] = "UPPER_ALPHA";
3889    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["ARABIC_INDIC"] = 11)] = "ARABIC_INDIC";
3890    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["ARMENIAN"] = 12)] = "ARMENIAN";
3891    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["BENGALI"] = 13)] = "BENGALI";
3892    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["CAMBODIAN"] = 14)] = "CAMBODIAN";
3893    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["CJK_EARTHLY_BRANCH"] = 15)] =
3894      "CJK_EARTHLY_BRANCH";
3895    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["CJK_HEAVENLY_STEM"] = 16)] =
3896      "CJK_HEAVENLY_STEM";
3897    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["CJK_IDEOGRAPHIC"] = 17)] =
3898      "CJK_IDEOGRAPHIC";
3899    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["DEVANAGARI"] = 18)] = "DEVANAGARI";
3900    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["ETHIOPIC_NUMERIC"] = 19)] =
3901      "ETHIOPIC_NUMERIC";
3902    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["GEORGIAN"] = 20)] = "GEORGIAN";
3903    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["GUJARATI"] = 21)] = "GUJARATI";
3904    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["GURMUKHI"] = 22)] = "GURMUKHI";
3905    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["HEBREW"] = 22)] = "HEBREW";
3906    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["HIRAGANA"] = 23)] = "HIRAGANA";
3907    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["HIRAGANA_IROHA"] = 24)] =
3908      "HIRAGANA_IROHA";
3909    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["JAPANESE_FORMAL"] = 25)] =
3910      "JAPANESE_FORMAL";
3911    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["JAPANESE_INFORMAL"] = 26)] =
3912      "JAPANESE_INFORMAL";
3913    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KANNADA"] = 27)] = "KANNADA";
3914    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KATAKANA"] = 28)] = "KATAKANA";
3915    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KATAKANA_IROHA"] = 29)] =
3916      "KATAKANA_IROHA";
3917    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KHMER"] = 30)] = "KHMER";
3918    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KOREAN_HANGUL_FORMAL"] = 31)] =
3919      "KOREAN_HANGUL_FORMAL";
3920    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KOREAN_HANJA_FORMAL"] = 32)] =
3921      "KOREAN_HANJA_FORMAL";
3922    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["KOREAN_HANJA_INFORMAL"] = 33)] =
3923      "KOREAN_HANJA_INFORMAL";
3924    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["LAO"] = 34)] = "LAO";
3925    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["LOWER_ARMENIAN"] = 35)] =
3926      "LOWER_ARMENIAN";
3927    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["MALAYALAM"] = 36)] = "MALAYALAM";
3928    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["MONGOLIAN"] = 37)] = "MONGOLIAN";
3929    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["MYANMAR"] = 38)] = "MYANMAR";
3930    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["ORIYA"] = 39)] = "ORIYA";
3931    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["PERSIAN"] = 40)] = "PERSIAN";
3932    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["SIMP_CHINESE_FORMAL"] = 41)] =
3933      "SIMP_CHINESE_FORMAL";
3934    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["SIMP_CHINESE_INFORMAL"] = 42)] =
3935      "SIMP_CHINESE_INFORMAL";
3936    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["TAMIL"] = 43)] = "TAMIL";
3937    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["TELUGU"] = 44)] = "TELUGU";
3938    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["THAI"] = 45)] = "THAI";
3939    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["TIBETAN"] = 46)] = "TIBETAN";
3940    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["TRAD_CHINESE_FORMAL"] = 47)] =
3941      "TRAD_CHINESE_FORMAL";
3942    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["TRAD_CHINESE_INFORMAL"] = 48)] =
3943      "TRAD_CHINESE_INFORMAL";
3944    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["UPPER_ARMENIAN"] = 49)] =
3945      "UPPER_ARMENIAN";
3946    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["DISCLOSURE_OPEN"] = 50)] =
3947      "DISCLOSURE_OPEN";
3948    LIST_STYLE_TYPE[(LIST_STYLE_TYPE["DISCLOSURE_CLOSED"] = 51)] =
3949      "DISCLOSURE_CLOSED";
3950  })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {}));
3951  var listStyleType = {
3952    name: "list-style-type",
3953    initialValue: "none",
3954    prefix: false,
3955    type: PropertyDescriptorParsingType.IDENT_VALUE,
3956    parse: function (type) {
3957      switch (type) {
3958        case "disc":
3959          return LIST_STYLE_TYPE.DISC;
3960        case "circle":
3961          return LIST_STYLE_TYPE.CIRCLE;
3962        case "square":
3963          return LIST_STYLE_TYPE.SQUARE;
3964        case "decimal":
3965          return LIST_STYLE_TYPE.DECIMAL;
3966        case "cjk-decimal":
3967          return LIST_STYLE_TYPE.CJK_DECIMAL;
3968        case "decimal-leading-zero":
3969          return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;
3970        case "lower-roman":
3971          return LIST_STYLE_TYPE.LOWER_ROMAN;
3972        case "upper-roman":
3973          return LIST_STYLE_TYPE.UPPER_ROMAN;
3974        case "lower-greek":
3975          return LIST_STYLE_TYPE.LOWER_GREEK;
3976        case "lower-alpha":
3977          return LIST_STYLE_TYPE.LOWER_ALPHA;
3978        case "upper-alpha":
3979          return LIST_STYLE_TYPE.UPPER_ALPHA;
3980        case "arabic-indic":
3981          return LIST_STYLE_TYPE.ARABIC_INDIC;
3982        case "armenian":
3983          return LIST_STYLE_TYPE.ARMENIAN;
3984        case "bengali":
3985          return LIST_STYLE_TYPE.BENGALI;
3986        case "cambodian":
3987          return LIST_STYLE_TYPE.CAMBODIAN;
3988        case "cjk-earthly-branch":
3989          return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;
3990        case "cjk-heavenly-stem":
3991          return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;
3992        case "cjk-ideographic":
3993          return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;
3994        case "devanagari":
3995          return LIST_STYLE_TYPE.DEVANAGARI;
3996        case "ethiopic-numeric":
3997          return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;
3998        case "georgian":
3999          return LIST_STYLE_TYPE.GEORGIAN;
4000        case "gujarati":
4001          return LIST_STYLE_TYPE.GUJARATI;
4002        case "gurmukhi":
4003          return LIST_STYLE_TYPE.GURMUKHI;
4004        case "hebrew":
4005          return LIST_STYLE_TYPE.HEBREW;
4006        case "hiragana":
4007          return LIST_STYLE_TYPE.HIRAGANA;
4008        case "hiragana-iroha":
4009          return LIST_STYLE_TYPE.HIRAGANA_IROHA;
4010        case "japanese-formal":
4011          return LIST_STYLE_TYPE.JAPANESE_FORMAL;
4012        case "japanese-informal":
4013          return LIST_STYLE_TYPE.JAPANESE_INFORMAL;
4014        case "kannada":
4015          return LIST_STYLE_TYPE.KANNADA;
4016        case "katakana":
4017          return LIST_STYLE_TYPE.KATAKANA;
4018        case "katakana-iroha":
4019          return LIST_STYLE_TYPE.KATAKANA_IROHA;
4020        case "khmer":
4021          return LIST_STYLE_TYPE.KHMER;
4022        case "korean-hangul-formal":
4023          return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;
4024        case "korean-hanja-formal":
4025          return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;
4026        case "korean-hanja-informal":
4027          return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;
4028        case "lao":
4029          return LIST_STYLE_TYPE.LAO;
4030        case "lower-armenian":
4031          return LIST_STYLE_TYPE.LOWER_ARMENIAN;
4032        case "malayalam":
4033          return LIST_STYLE_TYPE.MALAYALAM;
4034        case "mongolian":
4035          return LIST_STYLE_TYPE.MONGOLIAN;
4036        case "myanmar":
4037          return LIST_STYLE_TYPE.MYANMAR;
4038        case "oriya":
4039          return LIST_STYLE_TYPE.ORIYA;
4040        case "persian":
4041          return LIST_STYLE_TYPE.PERSIAN;
4042        case "simp-chinese-formal":
4043          return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;
4044        case "simp-chinese-informal":
4045          return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;
4046        case "tamil":
4047          return LIST_STYLE_TYPE.TAMIL;
4048        case "telugu":
4049          return LIST_STYLE_TYPE.TELUGU;
4050        case "thai":
4051          return LIST_STYLE_TYPE.THAI;
4052        case "tibetan":
4053          return LIST_STYLE_TYPE.TIBETAN;
4054        case "trad-chinese-formal":
4055          return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;
4056        case "trad-chinese-informal":
4057          return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;
4058        case "upper-armenian":
4059          return LIST_STYLE_TYPE.UPPER_ARMENIAN;
4060        case "disclosure-open":
4061          return LIST_STYLE_TYPE.DISCLOSURE_OPEN;
4062        case "disclosure-closed":
4063          return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;
4064        case "none":
4065        default:
4066          return LIST_STYLE_TYPE.NONE;
4067      }
4068    },
4069  };
4070
4071  var marginForSide = function (side) {
4072    return {
4073      name: "margin-" + side,
4074      initialValue: "0",
4075      prefix: false,
4076      type: PropertyDescriptorParsingType.TOKEN_VALUE,
4077    };
4078  };
4079  var marginTop = marginForSide("top");
4080  var marginRight = marginForSide("right");
4081  var marginBottom = marginForSide("bottom");
4082  var marginLeft = marginForSide("left");
4083
4084  var OVERFLOW;
4085  (function (OVERFLOW) {
4086    OVERFLOW[(OVERFLOW["VISIBLE"] = 0)] = "VISIBLE";
4087    OVERFLOW[(OVERFLOW["HIDDEN"] = 1)] = "HIDDEN";
4088    OVERFLOW[(OVERFLOW["SCROLL"] = 2)] = "SCROLL";
4089    OVERFLOW[(OVERFLOW["AUTO"] = 3)] = "AUTO";
4090  })(OVERFLOW || (OVERFLOW = {}));
4091  var overflow = {
4092    name: "overflow",
4093    initialValue: "visible",
4094    prefix: false,
4095    type: PropertyDescriptorParsingType.LIST,
4096    parse: function (tokens) {
4097      return tokens.filter(isIdentToken).map(function (overflow) {
4098        switch (overflow.value) {
4099          case "hidden":
4100            return OVERFLOW.HIDDEN;
4101          case "scroll":
4102            return OVERFLOW.SCROLL;
4103          case "auto":
4104            return OVERFLOW.AUTO;
4105          case "visible":
4106          default:
4107            return OVERFLOW.VISIBLE;
4108        }
4109      });
4110    },
4111  };
4112
4113  var OVERFLOW_WRAP;
4114  (function (OVERFLOW_WRAP) {
4115    OVERFLOW_WRAP["NORMAL"] = "normal";
4116    OVERFLOW_WRAP["BREAK_WORD"] = "break-word";
4117  })(OVERFLOW_WRAP || (OVERFLOW_WRAP = {}));
4118  var overflowWrap = {
4119    name: "overflow-wrap",
4120    initialValue: "normal",
4121    prefix: false,
4122    type: PropertyDescriptorParsingType.IDENT_VALUE,
4123    parse: function (overflow) {
4124      switch (overflow) {
4125        case "break-word":
4126          return OVERFLOW_WRAP.BREAK_WORD;
4127        case "normal":
4128        default:
4129          return OVERFLOW_WRAP.NORMAL;
4130      }
4131    },
4132  };
4133
4134  var paddingForSide = function (side) {
4135    return {
4136      name: "padding-" + side,
4137      initialValue: "0",
4138      prefix: false,
4139      type: PropertyDescriptorParsingType.TYPE_VALUE,
4140      format: "length-percentage",
4141    };
4142  };
4143  var paddingTop = paddingForSide("top");
4144  var paddingRight = paddingForSide("right");
4145  var paddingBottom = paddingForSide("bottom");
4146  var paddingLeft = paddingForSide("left");
4147
4148  var TEXT_ALIGN;
4149  (function (TEXT_ALIGN) {
4150    TEXT_ALIGN[(TEXT_ALIGN["LEFT"] = 0)] = "LEFT";
4151    TEXT_ALIGN[(TEXT_ALIGN["CENTER"] = 1)] = "CENTER";
4152    TEXT_ALIGN[(TEXT_ALIGN["RIGHT"] = 2)] = "RIGHT";
4153  })(TEXT_ALIGN || (TEXT_ALIGN = {}));
4154  var textAlign = {
4155    name: "text-align",
4156    initialValue: "left",
4157    prefix: false,
4158    type: PropertyDescriptorParsingType.IDENT_VALUE,
4159    parse: function (textAlign) {
4160      switch (textAlign) {
4161        case "right":
4162          return TEXT_ALIGN.RIGHT;
4163        case "center":
4164        case "justify":
4165          return TEXT_ALIGN.CENTER;
4166        case "left":
4167        default:
4168          return TEXT_ALIGN.LEFT;
4169      }
4170    },
4171  };
4172
4173  var POSITION;
4174  (function (POSITION) {
4175    POSITION[(POSITION["STATIC"] = 0)] = "STATIC";
4176    POSITION[(POSITION["RELATIVE"] = 1)] = "RELATIVE";
4177    POSITION[(POSITION["ABSOLUTE"] = 2)] = "ABSOLUTE";
4178    POSITION[(POSITION["FIXED"] = 3)] = "FIXED";
4179    POSITION[(POSITION["STICKY"] = 4)] = "STICKY";
4180  })(POSITION || (POSITION = {}));
4181  var position = {
4182    name: "position",
4183    initialValue: "static",
4184    prefix: false,
4185    type: PropertyDescriptorParsingType.IDENT_VALUE,
4186    parse: function (position) {
4187      switch (position) {
4188        case "relative":
4189          return POSITION.RELATIVE;
4190        case "absolute":
4191          return POSITION.ABSOLUTE;
4192        case "fixed":
4193          return POSITION.FIXED;
4194        case "sticky":
4195          return POSITION.STICKY;
4196      }
4197      return POSITION.STATIC;
4198    },
4199  };
4200
4201  var textShadow = {
4202    name: "text-shadow",
4203    initialValue: "none",
4204    type: PropertyDescriptorParsingType.LIST,
4205    prefix: false,
4206    parse: function (tokens) {
4207      if (tokens.length === 1 && isIdentWithValue(tokens[0], "none")) {
4208        return [];
4209      }
4210      return parseFunctionArgs(tokens).map(function (values) {
4211        var shadow = {
4212          color: COLORS.TRANSPARENT,
4213          offsetX: ZERO_LENGTH,
4214          offsetY: ZERO_LENGTH,
4215          blur: ZERO_LENGTH,
4216        };
4217        var c = 0;
4218        for (var i = 0; i < values.length; i++) {
4219          var token = values[i];
4220          if (isLength(token)) {
4221            if (c === 0) {
4222              shadow.offsetX = token;
4223            } else if (c === 1) {
4224              shadow.offsetY = token;
4225            } else {
4226              shadow.blur = token;
4227            }
4228            c++;
4229          } else {
4230            shadow.color = color.parse(token);
4231          }
4232        }
4233        return shadow;
4234      });
4235    },
4236  };
4237
4238  var TEXT_TRANSFORM;
4239  (function (TEXT_TRANSFORM) {
4240    TEXT_TRANSFORM[(TEXT_TRANSFORM["NONE"] = 0)] = "NONE";
4241    TEXT_TRANSFORM[(TEXT_TRANSFORM["LOWERCASE"] = 1)] = "LOWERCASE";
4242    TEXT_TRANSFORM[(TEXT_TRANSFORM["UPPERCASE"] = 2)] = "UPPERCASE";
4243    TEXT_TRANSFORM[(TEXT_TRANSFORM["CAPITALIZE"] = 3)] = "CAPITALIZE";
4244  })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {}));
4245  var textTransform = {
4246    name: "text-transform",
4247    initialValue: "none",
4248    prefix: false,
4249    type: PropertyDescriptorParsingType.IDENT_VALUE,
4250    parse: function (textTransform) {
4251      switch (textTransform) {
4252        case "uppercase":
4253          return TEXT_TRANSFORM.UPPERCASE;
4254        case "lowercase":
4255          return TEXT_TRANSFORM.LOWERCASE;
4256        case "capitalize":
4257          return TEXT_TRANSFORM.CAPITALIZE;
4258      }
4259      return TEXT_TRANSFORM.NONE;
4260    },
4261  };
4262
4263  var transform = {
4264    name: "transform",
4265    initialValue: "none",
4266    prefix: true,
4267    type: PropertyDescriptorParsingType.VALUE,
4268    parse: function (token) {
4269      if (token.type === TokenType.IDENT_TOKEN && token.value === "none") {
4270        return null;
4271      }
4272      if (token.type === TokenType.FUNCTION) {
4273        var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];
4274        if (typeof transformFunction === "undefined") {
4275          throw new Error(
4276            'Attempting to parse an unsupported transform function "' +
4277              token.name +
4278              '"'
4279          );
4280        }
4281        return transformFunction(token.values);
4282      }
4283      return null;
4284    },
4285  };
4286  var matrix = function (args) {
4287    var values = args
4288      .filter(function (arg) {
4289        return arg.type === TokenType.NUMBER_TOKEN;
4290      })
4291      .map(function (arg) {
4292        return arg.number;
4293      });
4294    return values.length === 6 ? values : null;
4295  };
4296  // doesn't support 3D transforms at the moment
4297  var matrix3d = function (args) {
4298    var values = args
4299      .filter(function (arg) {
4300        return arg.type === TokenType.NUMBER_TOKEN;
4301      })
4302      .map(function (arg) {
4303        return arg.number;
4304      });
4305    var a1 = values[0],
4306      b1 = values[1],
4307      _a = values[2],
4308      _b = values[3],
4309      a2 = values[4],
4310      b2 = values[5],
4311      _c = values[6],
4312      _d = values[7],
4313      _e = values[8],
4314      _f = values[9],
4315      _g = values[10],
4316      _h = values[11],
4317      a4 = values[12],
4318      b4 = values[13],
4319      _j = values[14],
4320      _k = values[15];
4321    return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;
4322  };
4323  var SUPPORTED_TRANSFORM_FUNCTIONS = {
4324    matrix: matrix,
4325    matrix3d: matrix3d,
4326  };
4327
4328  var DEFAULT_VALUE = {
4329    type: TokenType.PERCENTAGE_TOKEN,
4330    number: 50,
4331    flags: FLAG_INTEGER,
4332  };
4333  var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];
4334  var transformOrigin = {
4335    name: "transform-origin",
4336    initialValue: "50% 50%",
4337    prefix: true,
4338    type: PropertyDescriptorParsingType.LIST,
4339    parse: function (tokens) {
4340      var origins = tokens.filter(isLengthPercentage);
4341      if (origins.length !== 2) {
4342        return DEFAULT;
4343      }
4344      return [origins[0], origins[1]];
4345    },
4346  };
4347
4348  var VISIBILITY;
4349  (function (VISIBILITY) {
4350    VISIBILITY[(VISIBILITY["VISIBLE"] = 0)] = "VISIBLE";
4351    VISIBILITY[(VISIBILITY["HIDDEN"] = 1)] = "HIDDEN";
4352    VISIBILITY[(VISIBILITY["COLLAPSE"] = 2)] = "COLLAPSE";
4353  })(VISIBILITY || (VISIBILITY = {}));
4354  var visibility = {
4355    name: "visible",
4356    initialValue: "none",
4357    prefix: false,
4358    type: PropertyDescriptorParsingType.IDENT_VALUE,
4359    parse: function (visibility) {
4360      switch (visibility) {
4361        case "hidden":
4362          return VISIBILITY.HIDDEN;
4363        case "collapse":
4364          return VISIBILITY.COLLAPSE;
4365        case "visible":
4366        default:
4367          return VISIBILITY.VISIBLE;
4368      }
4369    },
4370  };
4371
4372  var WORD_BREAK;
4373  (function (WORD_BREAK) {
4374    WORD_BREAK["NORMAL"] = "normal";
4375    WORD_BREAK["BREAK_ALL"] = "break-all";
4376    WORD_BREAK["KEEP_ALL"] = "keep-all";
4377  })(WORD_BREAK || (WORD_BREAK = {}));
4378  var wordBreak = {
4379    name: "word-break",
4380    initialValue: "normal",
4381    prefix: false,
4382    type: PropertyDescriptorParsingType.IDENT_VALUE,
4383    parse: function (wordBreak) {
4384      switch (wordBreak) {
4385        case "break-all":
4386          return WORD_BREAK.BREAK_ALL;
4387        case "keep-all":
4388          return WORD_BREAK.KEEP_ALL;
4389        case "normal":
4390        default:
4391          return WORD_BREAK.NORMAL;
4392      }
4393    },
4394  };
4395
4396  var zIndex = {
4397    name: "z-index",
4398    initialValue: "auto",
4399    prefix: false,
4400    type: PropertyDescriptorParsingType.VALUE,
4401    parse: function (token) {
4402      if (token.type === TokenType.IDENT_TOKEN) {
4403        return { auto: true, order: 0 };
4404      }
4405      if (isNumberToken(token)) {
4406        return { auto: false, order: token.number };
4407      }
4408      throw new Error("Invalid z-index number parsed");
4409    },
4410  };
4411
4412  var opacity = {
4413    name: "opacity",
4414    initialValue: "1",
4415    type: PropertyDescriptorParsingType.VALUE,
4416    prefix: false,
4417    parse: function (token) {
4418      if (isNumberToken(token)) {
4419        return token.number;
4420      }
4421      return 1;
4422    },
4423  };
4424
4425  var textDecorationColor = {
4426    name: "text-decoration-color",
4427    initialValue: "transparent",
4428    prefix: false,
4429    type: PropertyDescriptorParsingType.TYPE_VALUE,
4430    format: "color",
4431  };
4432
4433  var textDecorationLine = {
4434    name: "text-decoration-line",
4435    initialValue: "none",
4436    prefix: false,
4437    type: PropertyDescriptorParsingType.LIST,
4438    parse: function (tokens) {
4439      return tokens
4440        .filter(isIdentToken)
4441        .map(function (token) {
4442          switch (token.value) {
4443            case "underline":
4444              return 1 /* UNDERLINE */;
4445            case "overline":
4446              return 2 /* OVERLINE */;
4447            case "line-through":
4448              return 3 /* LINE_THROUGH */;
4449            case "none":
4450              return 4 /* BLINK */;
4451          }
4452          return 0 /* NONE */;
4453        })
4454        .filter(function (line) {
4455          return line !== 0 /* NONE */;
4456        });
4457    },
4458  };
4459
4460  var fontFamily = {
4461    name: "font-family",
4462    initialValue: "",
4463    prefix: false,
4464    type: PropertyDescriptorParsingType.LIST,
4465    parse: function (tokens) {
4466      var accumulator = [];
4467      var results = [];
4468      tokens.forEach(function (token) {
4469        switch (token.type) {
4470          case TokenType.IDENT_TOKEN:
4471          case TokenType.STRING_TOKEN:
4472            accumulator.push(token.value);
4473            break;
4474          case TokenType.NUMBER_TOKEN:
4475            accumulator.push(token.number.toString());
4476            break;
4477          case TokenType.COMMA_TOKEN:
4478            results.push(accumulator.join(" "));
4479            accumulator.length = 0;
4480            break;
4481        }
4482      });
4483      if (accumulator.length) {
4484        results.push(accumulator.join(" "));
4485      }
4486      return results.map(function (result) {
4487        return result.indexOf(" ") === -1 ? result : "'" + result + "'";
4488      });
4489    },
4490  };
4491
4492  var fontSize = {
4493    name: "font-size",
4494    initialValue: "0",
4495    prefix: false,
4496    type: PropertyDescriptorParsingType.TYPE_VALUE,
4497    format: "length",
4498  };
4499
4500  var fontWeight = {
4501    name: "font-weight",
4502    initialValue: "normal",
4503    type: PropertyDescriptorParsingType.VALUE,
4504    prefix: false,
4505    parse: function (token) {
4506      if (isNumberToken(token)) {
4507        return token.number;
4508      }
4509      if (isIdentToken(token)) {
4510        switch (token.value) {
4511          case "bold":
4512            return 700;
4513          case "normal":
4514          default:
4515            return 400;
4516        }
4517      }
4518      return 400;
4519    },
4520  };
4521
4522  var fontVariant = {
4523    name: "font-variant",
4524    initialValue: "none",
4525    type: PropertyDescriptorParsingType.LIST,
4526    prefix: false,
4527    parse: function (tokens) {
4528      return tokens.filter(isIdentToken).map(function (token) {
4529        return token.value;
4530      });
4531    },
4532  };
4533
4534  var FONT_STYLE;
4535  (function (FONT_STYLE) {
4536    FONT_STYLE["NORMAL"] = "normal";
4537    FONT_STYLE["ITALIC"] = "italic";
4538    FONT_STYLE["OBLIQUE"] = "oblique";
4539  })(FONT_STYLE || (FONT_STYLE = {}));
4540  var fontStyle = {
4541    name: "font-style",
4542    initialValue: "normal",
4543    prefix: false,
4544    type: PropertyDescriptorParsingType.IDENT_VALUE,
4545    parse: function (overflow) {
4546      switch (overflow) {
4547        case "oblique":
4548          return FONT_STYLE.OBLIQUE;
4549        case "italic":
4550          return FONT_STYLE.ITALIC;
4551        case "normal":
4552        default:
4553          return FONT_STYLE.NORMAL;
4554      }
4555    },
4556  };
4557
4558  var contains = function (bit, value) {
4559    return (bit & value) !== 0;
4560  };
4561
4562  var content = {
4563    name: "content",
4564    initialValue: "none",
4565    type: PropertyDescriptorParsingType.LIST,
4566    prefix: false,
4567    parse: function (tokens) {
4568      if (tokens.length === 0) {
4569        return [];
4570      }
4571      var first = tokens[0];
4572      if (first.type === TokenType.IDENT_TOKEN && first.value === "none") {
4573        return [];
4574      }
4575      return tokens;
4576    },
4577  };
4578
4579  var counterIncrement = {
4580    name: "counter-increment",
4581    initialValue: "none",
4582    prefix: true,
4583    type: PropertyDescriptorParsingType.LIST,
4584    parse: function (tokens) {
4585      if (tokens.length === 0) {
4586        return null;
4587      }
4588      var first = tokens[0];
4589      if (first.type === TokenType.IDENT_TOKEN && first.value === "none") {
4590        return null;
4591      }
4592      var increments = [];
4593      var filtered = tokens.filter(nonWhiteSpace);
4594      for (var i = 0; i < filtered.length; i++) {
4595        var counter = filtered[i];
4596        var next = filtered[i + 1];
4597        if (counter.type === TokenType.IDENT_TOKEN) {
4598          var increment = next && isNumberToken(next) ? next.number : 1;
4599          increments.push({ counter: counter.value, increment: increment });
4600        }
4601      }
4602      return increments;
4603    },
4604  };
4605
4606  var counterReset = {
4607    name: "counter-reset",
4608    initialValue: "none",
4609    prefix: true,
4610    type: PropertyDescriptorParsingType.LIST,
4611    parse: function (tokens) {
4612      if (tokens.length === 0) {
4613        return [];
4614      }
4615      var resets = [];
4616      var filtered = tokens.filter(nonWhiteSpace);
4617      for (var i = 0; i < filtered.length; i++) {
4618        var counter = filtered[i];
4619        var next = filtered[i + 1];
4620        if (isIdentToken(counter) && counter.value !== "none") {
4621          var reset = next && isNumberToken(next) ? next.number : 0;
4622          resets.push({ counter: counter.value, reset: reset });
4623        }
4624      }
4625      return resets;
4626    },
4627  };
4628
4629  var quotes = {
4630    name: "quotes",
4631    initialValue: "none",
4632    prefix: true,
4633    type: PropertyDescriptorParsingType.LIST,
4634    parse: function (tokens) {
4635      if (tokens.length === 0) {
4636        return null;
4637      }
4638      var first = tokens[0];
4639      if (first.type === TokenType.IDENT_TOKEN && first.value === "none") {
4640        return null;
4641      }
4642      var quotes = [];
4643      var filtered = tokens.filter(isStringToken);
4644      if (filtered.length % 2 !== 0) {
4645        return null;
4646      }
4647      for (var i = 0; i < filtered.length; i += 2) {
4648        var open_1 = filtered[i].value;
4649        var close_1 = filtered[i + 1].value;
4650        quotes.push({ open: open_1, close: close_1 });
4651      }
4652      return quotes;
4653    },
4654  };
4655  var getQuote = function (quotes, depth, open) {
4656    if (!quotes) {
4657      return "";
4658    }
4659    var quote = quotes[Math.min(depth, quotes.length - 1)];
4660    if (!quote) {
4661      return "";
4662    }
4663    return open ? quote.open : quote.close;
4664  };
4665
4666  var boxShadow = {
4667    name: "box-shadow",
4668    initialValue: "none",
4669    type: PropertyDescriptorParsingType.LIST,
4670    prefix: false,
4671    parse: function (tokens) {
4672      if (tokens.length === 1 && isIdentWithValue(tokens[0], "none")) {
4673        return [];
4674      }
4675      return parseFunctionArgs(tokens).map(function (values) {
4676        var shadow = {
4677          color: 0x000000ff,
4678          offsetX: ZERO_LENGTH,
4679          offsetY: ZERO_LENGTH,
4680          blur: ZERO_LENGTH,
4681          spread: ZERO_LENGTH,
4682          inset: false,
4683        };
4684        var c = 0;
4685        for (var i = 0; i < values.length; i++) {
4686          var token = values[i];
4687          if (isIdentWithValue(token, "inset")) {
4688            shadow.inset = true;
4689          } else if (isLength(token)) {
4690            if (c === 0) {
4691              shadow.offsetX = token;
4692            } else if (c === 1) {
4693              shadow.offsetY = token;
4694            } else if (c === 2) {
4695              shadow.blur = token;
4696            } else {
4697              shadow.spread = token;
4698            }
4699            c++;
4700          } else {
4701            shadow.color = color.parse(token);
4702          }
4703        }
4704        return shadow;
4705      });
4706    },
4707  };
4708
4709  var CSSParsedDeclaration = /** @class */ (function () {
4710    function CSSParsedDeclaration(declaration) {
4711      this.backgroundClip = parse(backgroundClip, declaration.backgroundClip);
4712      this.backgroundColor = parse(
4713        backgroundColor,
4714        declaration.backgroundColor
4715      );
4716      this.backgroundImage = parse(
4717        backgroundImage,
4718        declaration.backgroundImage
4719      );
4720      this.backgroundOrigin = parse(
4721        backgroundOrigin,
4722        declaration.backgroundOrigin
4723      );
4724      this.backgroundPosition = parse(
4725        backgroundPosition,
4726        declaration.backgroundPosition
4727      );
4728      this.backgroundRepeat = parse(
4729        backgroundRepeat,
4730        declaration.backgroundRepeat
4731      );
4732      this.backgroundSize = parse(backgroundSize, declaration.backgroundSize);
4733      this.borderTopColor = parse(borderTopColor, declaration.borderTopColor);
4734      this.borderRightColor = parse(
4735        borderRightColor,
4736        declaration.borderRightColor
4737      );
4738      this.borderBottomColor = parse(
4739        borderBottomColor,
4740        declaration.borderBottomColor
4741      );
4742      this.borderLeftColor = parse(
4743        borderLeftColor,
4744        declaration.borderLeftColor
4745      );
4746      this.borderTopLeftRadius = parse(
4747        borderTopLeftRadius,
4748        declaration.borderTopLeftRadius
4749      );
4750      this.borderTopRightRadius = parse(
4751        borderTopRightRadius,
4752        declaration.borderTopRightRadius
4753      );
4754      this.borderBottomRightRadius = parse(
4755        borderBottomRightRadius,
4756        declaration.borderBottomRightRadius
4757      );
4758      this.borderBottomLeftRadius = parse(
4759        borderBottomLeftRadius,
4760        declaration.borderBottomLeftRadius
4761      );
4762      this.borderTopStyle = parse(borderTopStyle, declaration.borderTopStyle);
4763      this.borderRightStyle = parse(
4764        borderRightStyle,
4765        declaration.borderRightStyle
4766      );
4767      this.borderBottomStyle = parse(
4768        borderBottomStyle,
4769        declaration.borderBottomStyle
4770      );
4771      this.borderLeftStyle = parse(
4772        borderLeftStyle,
4773        declaration.borderLeftStyle
4774      );
4775      this.borderTopWidth = parse(borderTopWidth, declaration.borderTopWidth);
4776      this.borderRightWidth = parse(
4777        borderRightWidth,
4778        declaration.borderRightWidth
4779      );
4780      this.borderBottomWidth = parse(
4781        borderBottomWidth,
4782        declaration.borderBottomWidth
4783      );
4784      this.borderLeftWidth = parse(
4785        borderLeftWidth,
4786        declaration.borderLeftWidth
4787      );
4788      this.boxShadow = parse(boxShadow, declaration.boxShadow);
4789      this.color = parse(color$1, declaration.color);
4790      this.display = parse(display, declaration.display);
4791      this.float = parse(float, declaration.cssFloat);
4792      this.fontFamily = parse(fontFamily, declaration.fontFamily);
4793      this.fontSize = parse(fontSize, declaration.fontSize);
4794      this.fontStyle = parse(fontStyle, declaration.fontStyle);
4795      this.fontVariant = parse(fontVariant, declaration.fontVariant);
4796      this.fontWeight = parse(fontWeight, declaration.fontWeight);
4797      this.letterSpacing = parse(letterSpacing, declaration.letterSpacing);
4798      this.lineBreak = parse(lineBreak, declaration.lineBreak);
4799      this.lineHeight = parse(lineHeight, declaration.lineHeight);
4800      this.listStyleImage = parse(listStyleImage, declaration.listStyleImage);
4801      this.listStylePosition = parse(
4802        listStylePosition,
4803        declaration.listStylePosition
4804      );
4805      this.listStyleType = parse(listStyleType, declaration.listStyleType);
4806      this.marginTop = parse(marginTop, declaration.marginTop);
4807      this.marginRight = parse(marginRight, declaration.marginRight);
4808      this.marginBottom = parse(marginBottom, declaration.marginBottom);
4809      this.marginLeft = parse(marginLeft, declaration.marginLeft);
4810      this.opacity = parse(opacity, declaration.opacity);
4811      var overflowTuple = parse(overflow, declaration.overflow);
4812      this.overflowX = overflowTuple[0];
4813      this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];
4814      this.overflowWrap = parse(overflowWrap, declaration.overflowWrap);
4815      this.paddingTop = parse(paddingTop, declaration.paddingTop);
4816      this.paddingRight = parse(paddingRight, declaration.paddingRight);
4817      this.paddingBottom = parse(paddingBottom, declaration.paddingBottom);
4818      this.paddingLeft = parse(paddingLeft, declaration.paddingLeft);
4819      this.position = parse(position, declaration.position);
4820      this.textAlign = parse(textAlign, declaration.textAlign);
4821      this.textDecorationColor = parse(
4822        textDecorationColor,
4823        declaration.textDecorationColor || declaration.color
4824      );
4825      this.textDecorationLine = parse(
4826        textDecorationLine,
4827        declaration.textDecorationLine
4828      );
4829      this.textShadow = parse(textShadow, declaration.textShadow);
4830      this.textTransform = parse(textTransform, declaration.textTransform);
4831      this.transform = parse(transform, declaration.transform);
4832      this.transformOrigin = parse(
4833        transformOrigin,
4834        declaration.transformOrigin
4835      );
4836      this.visibility = parse(visibility, declaration.visibility);
4837      this.wordBreak = parse(wordBreak, declaration.wordBreak);
4838      this.zIndex = parse(zIndex, declaration.zIndex);
4839    }
4840    CSSParsedDeclaration.prototype.isVisible = function () {
4841      return (
4842        this.display > 0 &&
4843        this.opacity > 0 &&
4844        this.visibility === VISIBILITY.VISIBLE
4845      );
4846    };
4847    CSSParsedDeclaration.prototype.isTransparent = function () {
4848      return isTransparent(this.backgroundColor);
4849    };
4850    CSSParsedDeclaration.prototype.isTransformed = function () {
4851      return this.transform !== null;
4852    };
4853    CSSParsedDeclaration.prototype.isPositioned = function () {
4854      return this.position !== POSITION.STATIC;
4855    };
4856    CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {
4857      return this.isPositioned() && !this.zIndex.auto;
4858    };
4859    CSSParsedDeclaration.prototype.isFloating = function () {
4860      return this.float !== FLOAT.NONE;
4861    };
4862    CSSParsedDeclaration.prototype.isInlineLevel = function () {
4863      return (
4864        contains(this.display, 4 /* INLINE */) ||
4865        contains(this.display, 33554432 /* INLINE_BLOCK */) ||
4866        contains(this.display, 268435456 /* INLINE_FLEX */) ||
4867        contains(this.display, 536870912 /* INLINE_GRID */) ||
4868        contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||
4869        contains(this.display, 134217728 /* INLINE_TABLE */)
4870      );
4871    };
4872    return CSSParsedDeclaration;
4873  })();
4874  var CSSParsedPseudoDeclaration = /** @class */ (function () {
4875    function CSSParsedPseudoDeclaration(declaration) {
4876      this.content = parse(content, declaration.content);
4877      this.quotes = parse(quotes, declaration.quotes);
4878    }
4879    return CSSParsedPseudoDeclaration;
4880  })();
4881  var CSSParsedCounterDeclaration = /** @class */ (function () {
4882    function CSSParsedCounterDeclaration(declaration) {
4883      this.counterIncrement = parse(
4884        counterIncrement,
4885        declaration.counterIncrement
4886      );
4887      this.counterReset = parse(counterReset, declaration.counterReset);
4888    }
4889    return CSSParsedCounterDeclaration;
4890  })();
4891  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4892  var parse = function (descriptor, style) {
4893    var tokenizer = new Tokenizer();
4894    var value =
4895      style !== null && typeof style !== "undefined"
4896        ? style.toString()
4897        : descriptor.initialValue;
4898    tokenizer.write(value);
4899    var parser = new Parser(tokenizer.read());
4900    switch (descriptor.type) {
4901      case PropertyDescriptorParsingType.IDENT_VALUE:
4902        var token = parser.parseComponentValue();
4903        return descriptor.parse(
4904          isIdentToken(token) ? token.value : descriptor.initialValue
4905        );
4906      case PropertyDescriptorParsingType.VALUE:
4907        return descriptor.parse(parser.parseComponentValue());
4908      case PropertyDescriptorParsingType.LIST:
4909        return descriptor.parse(parser.parseComponentValues());
4910      case PropertyDescriptorParsingType.TOKEN_VALUE:
4911        return parser.parseComponentValue();
4912      case PropertyDescriptorParsingType.TYPE_VALUE:
4913        switch (descriptor.format) {
4914          case "angle":
4915            return angle.parse(parser.parseComponentValue());
4916          case "color":
4917            return color.parse(parser.parseComponentValue());
4918          case "image":
4919            return image.parse(parser.parseComponentValue());
4920          case "length":
4921            var length_1 = parser.parseComponentValue();
4922            return isLength(length_1) ? length_1 : ZERO_LENGTH;
4923          case "length-percentage":
4924            var value_1 = parser.parseComponentValue();
4925            return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;
4926        }
4927    }
4928    throw new Error(
4929      "Attempting to parse unsupported css format type " + descriptor.format
4930    );
4931  };
4932
4933  var ElementContainer = /** @class */ (function () {
4934    function ElementContainer(element) {
4935      this.styles = new CSSParsedDeclaration(
4936        window.getComputedStyle(element, null)
4937      );
4938      this.textNodes = [];
4939      this.elements = [];
4940      if (this.styles.transform !== null && isHTMLElementNode(element)) {
4941        // getBoundingClientRect takes transforms into account
4942        element.style.transform = "none";
4943      }
4944      this.bounds = parseBounds(element);
4945      this.flags = 0;
4946    }
4947    return ElementContainer;
4948  })();
4949
4950  var TextBounds = /** @class */ (function () {
4951    function TextBounds(text, bounds) {
4952      this.text = text;
4953      this.bounds = bounds;
4954    }
4955    return TextBounds;
4956  })();
4957  var parseTextBounds = function (value, styles, node) {
4958    var textList = breakText(value, styles);
4959    var textBounds = [];
4960    var offset = 0;
4961    textList.forEach(function (text) {
4962      if (styles.textDecorationLine.length || text.trim().length > 0) {
4963        if (FEATURES.SUPPORT_RANGE_BOUNDS) {
4964          textBounds.push(
4965            new TextBounds(text, getRangeBounds(node, offset, text.length))
4966          );
4967        } else {
4968          var replacementNode = node.splitText(text.length);
4969          textBounds.push(new TextBounds(text, getWrapperBounds(node)));
4970          node = replacementNode;
4971        }
4972      } else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {
4973        node = node.splitText(text.length);
4974      }
4975      offset += text.length;
4976    });
4977    return textBounds;
4978  };
4979  var getWrapperBounds = function (node) {
4980    var ownerDocument = node.ownerDocument;
4981    if (ownerDocument) {
4982      var wrapper = ownerDocument.createElement("html2canvaswrapper");
4983      wrapper.appendChild(node.cloneNode(true));
4984      var parentNode = node.parentNode;
4985      if (parentNode) {
4986        parentNode.replaceChild(wrapper, node);
4987        var bounds = parseBounds(wrapper);
4988        if (wrapper.firstChild) {
4989          parentNode.replaceChild(wrapper.firstChild, wrapper);
4990        }
4991        return bounds;
4992      }
4993    }
4994    return new Bounds(0, 0, 0, 0);
4995  };
4996  var getRangeBounds = function (node, offset, length) {
4997    var ownerDocument = node.ownerDocument;
4998    if (!ownerDocument) {
4999      throw new Error("Node has no owner document");
5000    }
5001    var range = ownerDocument.createRange();
5002    range.setStart(node, offset);
5003    range.setEnd(node, offset + length);
5004    return Bounds.fromClientRect(range.getBoundingClientRect());
5005  };
5006  var breakText = function (value, styles) {
5007    return styles.letterSpacing !== 0
5008      ? toCodePoints(value).map(function (i) {
5009          return fromCodePoint(i);
5010        })
5011      : breakWords(value, styles);
5012  };
5013  var breakWords = function (str, styles) {
5014    var breaker = LineBreaker(str, {
5015      lineBreak: styles.lineBreak,
5016      wordBreak:
5017        styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD
5018          ? "break-word"
5019          : styles.wordBreak,
5020    });
5021    var words = [];
5022    var bk;
5023    while (!(bk = breaker.next()).done) {
5024      if (bk.value) {
5025        words.push(bk.value.slice());
5026      }
5027    }
5028    return words;
5029  };
5030
5031  var TextContainer = /** @class */ (function () {
5032    function TextContainer(node, styles) {
5033      this.text = transform$1(node.data, styles.textTransform);
5034      this.textBounds = parseTextBounds(this.text, styles, node);
5035    }
5036    return TextContainer;
5037  })();
5038  var transform$1 = function (text, transform) {
5039    switch (transform) {
5040      case TEXT_TRANSFORM.LOWERCASE:
5041        return text.toLowerCase();
5042      case TEXT_TRANSFORM.CAPITALIZE:
5043        return text.replace(CAPITALIZE, capitalize);
5044      case TEXT_TRANSFORM.UPPERCASE:
5045        return text.toUpperCase();
5046      default:
5047        return text;
5048    }
5049  };
5050  var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g;
5051  var capitalize = function (m, p1, p2) {
5052    if (m.length > 0) {
5053      return p1 + p2.toUpperCase();
5054    }
5055    return m;
5056  };
5057
5058  var ImageElementContainer = /** @class */ (function (_super) {
5059    __extends(ImageElementContainer, _super);
5060    function ImageElementContainer(img) {
5061      var _this = _super.call(this, img) || this;
5062      _this.src = img.currentSrc || img.src;
5063      _this.intrinsicWidth = img.naturalWidth;
5064      _this.intrinsicHeight = img.naturalHeight;
5065      CacheStorage.getInstance().addImage(_this.src);
5066      return _this;
5067    }
5068    return ImageElementContainer;
5069  })(ElementContainer);
5070
5071  var CanvasElementContainer = /** @class */ (function (_super) {
5072    __extends(CanvasElementContainer, _super);
5073    function CanvasElementContainer(canvas) {
5074      var _this = _super.call(this, canvas) || this;
5075      _this.canvas = canvas;
5076      _this.intrinsicWidth = canvas.width;
5077      _this.intrinsicHeight = canvas.height;
5078      return _this;
5079    }
5080    return CanvasElementContainer;
5081  })(ElementContainer);
5082
5083  var SVGElementContainer = /** @class */ (function (_super) {
5084    __extends(SVGElementContainer, _super);
5085    function SVGElementContainer(img) {
5086      var _this = _super.call(this, img) || this;
5087      var s = new XMLSerializer();
5088      _this.svg =
5089        "data:image/svg+xml," + encodeURIComponent(s.serializeToString(img));
5090      _this.intrinsicWidth = img.width.baseVal.value;
5091      _this.intrinsicHeight = img.height.baseVal.value;
5092      CacheStorage.getInstance().addImage(_this.svg);
5093      return _this;
5094    }
5095    return SVGElementContainer;
5096  })(ElementContainer);
5097
5098  var LIElementContainer = /** @class */ (function (_super) {
5099    __extends(LIElementContainer, _super);
5100    function LIElementContainer(element) {
5101      var _this = _super.call(this, element) || this;
5102      _this.value = element.value;
5103      return _this;
5104    }
5105    return LIElementContainer;
5106  })(ElementContainer);
5107
5108  var OLElementContainer = /** @class */ (function (_super) {
5109    __extends(OLElementContainer, _super);
5110    function OLElementContainer(element) {
5111      var _this = _super.call(this, element) || this;
5112      _this.start = element.start;
5113      _this.reversed =
5114        typeof element.reversed === "boolean" && element.reversed === true;
5115      return _this;
5116    }
5117    return OLElementContainer;
5118  })(ElementContainer);
5119
5120  var CHECKBOX_BORDER_RADIUS = [
5121    {
5122      type: TokenType.DIMENSION_TOKEN,
5123      flags: 0,
5124      unit: "px",
5125      number: 3,
5126    },
5127  ];
5128  var RADIO_BORDER_RADIUS = [
5129    {
5130      type: TokenType.PERCENTAGE_TOKEN,
5131      flags: 0,
5132      number: 50,
5133    },
5134  ];
5135  var reformatInputBounds = function (bounds) {
5136    if (bounds.width > bounds.height) {
5137      return new Bounds(
5138        bounds.left + (bounds.width - bounds.height) / 2,
5139        bounds.top,
5140        bounds.height,
5141        bounds.height
5142      );
5143    } else if (bounds.width < bounds.height) {
5144      return new Bounds(
5145        bounds.left,
5146        bounds.top + (bounds.height - bounds.width) / 2,
5147        bounds.width,
5148        bounds.width
5149      );
5150    }
5151    return bounds;
5152  };
5153  var getInputValue = function (node) {
5154    var value =
5155      node.type === PASSWORD
5156        ? new Array(node.value.length + 1).join("\u2022")
5157        : node.value;
5158    return value.length === 0 ? node.placeholder || "" : value;
5159  };
5160  var CHECKBOX = "checkbox";
5161  var RADIO = "radio";
5162  var PASSWORD = "password";
5163  var INPUT_COLOR = 0x2a2a2aff;
5164  var InputElementContainer = /** @class */ (function (_super) {
5165    __extends(InputElementContainer, _super);
5166    function InputElementContainer(input) {
5167      var _this = _super.call(this, input) || this;
5168      _this.type = input.type.toLowerCase();
5169      _this.checked = input.checked;
5170      _this.value = getInputValue(input);
5171      if (_this.type === CHECKBOX || _this.type === RADIO) {
5172        _this.styles.backgroundColor = 0xdededeff;
5173        _this.styles.borderTopColor =
5174          _this.styles.borderRightColor =
5175          _this.styles.borderBottomColor =
5176          _this.styles.borderLeftColor =
5177            0xa5a5a5ff;
5178        _this.styles.borderTopWidth =
5179          _this.styles.borderRightWidth =
5180          _this.styles.borderBottomWidth =
5181          _this.styles.borderLeftWidth =
5182            1;
5183        _this.styles.borderTopStyle =
5184          _this.styles.borderRightStyle =
5185          _this.styles.borderBottomStyle =
5186          _this.styles.borderLeftStyle =
5187            BORDER_STYLE.SOLID;
5188        _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX];
5189        _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];
5190        _this.bounds = reformatInputBounds(_this.bounds);
5191      }
5192      switch (_this.type) {
5193        case CHECKBOX:
5194          _this.styles.borderTopRightRadius =
5195            _this.styles.borderTopLeftRadius =
5196            _this.styles.borderBottomRightRadius =
5197            _this.styles.borderBottomLeftRadius =
5198              CHECKBOX_BORDER_RADIUS;
5199          break;
5200        case RADIO:
5201          _this.styles.borderTopRightRadius =
5202            _this.styles.borderTopLeftRadius =
5203            _this.styles.borderBottomRightRadius =
5204            _this.styles.borderBottomLeftRadius =
5205              RADIO_BORDER_RADIUS;
5206          break;
5207      }
5208      return _this;
5209    }
5210    return InputElementContainer;
5211  })(ElementContainer);
5212
5213  var SelectElementContainer = /** @class */ (function (_super) {
5214    __extends(SelectElementContainer, _super);
5215    function SelectElementContainer(element) {
5216      var _this = _super.call(this, element) || this;
5217      var option = element.options[element.selectedIndex || 0];
5218      _this.value = option ? option.text || "" : "";
5219      return _this;
5220    }
5221    return SelectElementContainer;
5222  })(ElementContainer);
5223
5224  var TextareaElementContainer = /** @class */ (function (_super) {
5225    __extends(TextareaElementContainer, _super);
5226    function TextareaElementContainer(element) {
5227      var _this = _super.call(this, element) || this;
5228      _this.value = element.value;
5229      return _this;
5230    }
5231    return TextareaElementContainer;
5232  })(ElementContainer);
5233
5234  var parseColor = function (value) {
5235    return color.parse(Parser.create(value).parseComponentValue());
5236  };
5237  var IFrameElementContainer = /** @class */ (function (_super) {
5238    __extends(IFrameElementContainer, _super);
5239    function IFrameElementContainer(iframe) {
5240      var _this = _super.call(this, iframe) || this;
5241      _this.src = iframe.src;
5242      _this.width = parseInt(iframe.width, 10) || 0;
5243      _this.height = parseInt(iframe.height, 10) || 0;
5244      _this.backgroundColor = _this.styles.backgroundColor;
5245      try {
5246        if (
5247          iframe.contentWindow &&
5248          iframe.contentWindow.document &&
5249          iframe.contentWindow.document.documentElement
5250        ) {
5251          _this.tree = parseTree(iframe.contentWindow.document.documentElement);
5252          // http://www.w3.org/TR/css3-background/#special-backgrounds
5253          var documentBackgroundColor = iframe.contentWindow.document
5254            .documentElement
5255            ? parseColor(
5256                getComputedStyle(iframe.contentWindow.document.documentElement)
5257                  .backgroundColor
5258              )
5259            : COLORS.TRANSPARENT;
5260          var bodyBackgroundColor = iframe.contentWindow.document.body
5261            ? parseColor(
5262                getComputedStyle(iframe.contentWindow.document.body)
5263                  .backgroundColor
5264              )
5265            : COLORS.TRANSPARENT;
5266          _this.backgroundColor = isTransparent(documentBackgroundColor)
5267            ? isTransparent(bodyBackgroundColor)
5268              ? _this.styles.backgroundColor
5269              : bodyBackgroundColor
5270            : documentBackgroundColor;
5271        }
5272      } catch (e) {}
5273      return _this;
5274    }
5275    return IFrameElementContainer;
5276  })(ElementContainer);
5277
5278  var LIST_OWNERS = ["OL", "UL", "MENU"];
5279  var parseNodeTree = function (node, parent, root) {
5280    for (
5281      var childNode = node.firstChild, nextNode = void 0;
5282      childNode;
5283      childNode = nextNode
5284    ) {
5285      nextNode = childNode.nextSibling;
5286      if (isTextNode(childNode) && childNode.data.trim().length > 0) {
5287        parent.textNodes.push(new TextContainer(childNode, parent.styles));
5288      } else if (isElementNode(childNode)) {
5289        var container = createContainer(childNode);
5290        if (container.styles.isVisible()) {
5291          if (createsRealStackingContext(childNode, container, root)) {
5292            container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;
5293          } else if (createsStackingContext(container.styles)) {
5294            container.flags |= 2 /* CREATES_STACKING_CONTEXT */;
5295          }
5296          if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {
5297            container.flags |= 8 /* IS_LIST_OWNER */;
5298          }
5299          parent.elements.push(container);
5300          if (
5301            !isTextareaElement(childNode) &&
5302            !isSVGElement(childNode) &&
5303            !isSelectElement(childNode)
5304          ) {
5305            parseNodeTree(childNode, container, root);
5306          }
5307        }
5308      }
5309    }
5310  };
5311  var createContainer = function (element) {
5312    if (isImageElement(element)) {
5313      return new ImageElementContainer(element);
5314    }
5315    if (isCanvasElement(element)) {
5316      return new CanvasElementContainer(element);
5317    }
5318    if (isSVGElement(element)) {
5319      return new SVGElementContainer(element);
5320    }
5321    if (isLIElement(element)) {
5322      return new LIElementContainer(element);
5323    }
5324    if (isOLElement(element)) {
5325      return new OLElementContainer(element);
5326    }
5327    if (isInputElement(element)) {
5328      return new InputElementContainer(element);
5329    }
5330    if (isSelectElement(element)) {
5331      return new SelectElementContainer(element);
5332    }
5333    if (isTextareaElement(element)) {
5334      return new TextareaElementContainer(element);
5335    }
5336    if (isIFrameElement(element)) {
5337      return new IFrameElementContainer(element);
5338    }
5339    return new ElementContainer(element);
5340  };
5341  var parseTree = function (element) {
5342    var container = createContainer(element);
5343    container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;
5344    parseNodeTree(element, container, container);
5345    return container;
5346  };
5347  var createsRealStackingContext = function (node, container, root) {
5348    return (
5349      container.styles.isPositionedWithZIndex() ||
5350      container.styles.opacity < 1 ||
5351      container.styles.isTransformed() ||
vendor: 8,487 bytes, lines 5352-5716
5352      (isBodyElement(node) && root.styles.isTransparent())
5353    );
5354  };
5355  var createsStackingContext = function (styles) {
5356    return styles.isPositioned() || styles.isFloating();
5357  };
5358  var isTextNode = function (node) {
5359    return node.nodeType === Node.TEXT_NODE;
5360  };
5361  var isElementNode = function (node) {
5362    return node.nodeType === Node.ELEMENT_NODE;
5363  };
5364  var isHTMLElementNode = function (node) {
5365    return (
5366      isElementNode(node) &&
5367      typeof node.style !== "undefined" &&
5368      !isSVGElementNode(node)
5369    );
5370  };
5371  var isSVGElementNode = function (element) {
5372    return typeof element.className === "object";
5373  };
5374  var isLIElement = function (node) {
5375    return node.tagName === "LI";
5376  };
5377  var isOLElement = function (node) {
5378    return node.tagName === "OL";
5379  };
5380  var isInputElement = function (node) {
5381    return node.tagName === "INPUT";
5382  };
5383  var isHTMLElement = function (node) {
5384    return node.tagName === "HTML";
5385  };
5386  var isSVGElement = function (node) {
5387    return node.tagName === "svg";
5388  };
5389  var isBodyElement = function (node) {
5390    return node.tagName === "BODY";
5391  };
5392  var isCanvasElement = function (node) {
5393    return node.tagName === "CANVAS";
5394  };
5395  var isImageElement = function (node) {
5396    return node.tagName === "IMG";
5397  };
5398  var isIFrameElement = function (node) {
5399    return node.tagName === "IFRAME";
5400  };
5401  var isStyleElement = function (node) {
5402    return node.tagName === "STYLE";
5403  };
5404  var isScriptElement = function (node) {
5405    return node.tagName === "SCRIPT";
5406  };
5407  var isTextareaElement = function (node) {
5408    return node.tagName === "TEXTAREA";
5409  };
5410  var isSelectElement = function (node) {
5411    return node.tagName === "SELECT";
5412  };
5413
5414  var CounterState = /** @class */ (function () {
5415    function CounterState() {
5416      this.counters = {};
5417    }
5418    CounterState.prototype.getCounterValue = function (name) {
5419      var counter = this.counters[name];
5420      if (counter && counter.length) {
5421        return counter[counter.length - 1];
5422      }
5423      return 1;
5424    };
5425    CounterState.prototype.getCounterValues = function (name) {
5426      var counter = this.counters[name];
5427      return counter ? counter : [];
5428    };
5429    CounterState.prototype.pop = function (counters) {
5430      var _this = this;
5431      counters.forEach(function (counter) {
5432        return _this.counters[counter].pop();
5433      });
5434    };
5435    CounterState.prototype.parse = function (style) {
5436      var _this = this;
5437      var counterIncrement = style.counterIncrement;
5438      var counterReset = style.counterReset;
5439      var canReset = true;
5440      if (counterIncrement !== null) {
5441        counterIncrement.forEach(function (entry) {
5442          var counter = _this.counters[entry.counter];
5443          if (counter && entry.increment !== 0) {
5444            canReset = false;
5445            counter[Math.max(0, counter.length - 1)] += entry.increment;
5446          }
5447        });
5448      }
5449      var counterNames = [];
5450      if (canReset) {
5451        counterReset.forEach(function (entry) {
5452          var counter = _this.counters[entry.counter];
5453          counterNames.push(entry.counter);
5454          if (!counter) {
5455            counter = _this.counters[entry.counter] = [];
5456          }
5457          counter.push(entry.reset);
5458        });
5459      }
5460      return counterNames;
5461    };
5462    return CounterState;
5463  })();
5464  var ROMAN_UPPER = {
5465    integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
5466    values: [
5467      "M",
5468      "CM",
5469      "D",
5470      "CD",
5471      "C",
5472      "XC",
5473      "L",
5474      "XL",
5475      "X",
5476      "IX",
5477      "V",
5478      "IV",
5479      "I",
5480    ],
5481  };
5482  var ARMENIAN = {
5483    integers: [
5484      9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600,
5485      500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6,
5486      5, 4, 3, 2, 1,
5487    ],
5488    values: [
5489      "Ք",
5490      "Փ",
5491      "Ւ",
5492      "Ց",
5493      "Ր",
5494      "Տ",
5495      "Վ",
5496      "Ս",
5497      "Ռ",
5498      "Ջ",
5499      "Պ",
5500      "Չ",
5501      "Ո",
5502      "Շ",
5503      "Ն",
5504      "Յ",
5505      "Մ",
5506      "Ճ",
5507      "Ղ",
5508      "Ձ",
5509      "Հ",
5510      "Ô¿",
5511      "Ô¾",
5512      "Ô½",
5513      "Ô¼",
5514      "Ô»",
5515      "Ôº",
5516      "Ô¹",
5517      "Ô¸",
5518      "Ô·",
5519      "Ô¶",
5520      "Ôµ",
5521      "Ô´",
5522      "Ô³",
5523      "Ô²",
5524      "Ô±",
5525    ],
5526  };
5527  var HEBREW = {
5528    integers: [
5529      10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300,
5530      200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 19, 18, 17, 16, 15, 10, 9, 8, 7,
5531      6, 5, 4, 3, 2, 1,
5532    ],
5533    values: [
5534      "י׳",
5535      "ט׳",
5536      "ח׳",
5537      "ז׳",
5538      "ו׳",
5539      "ה׳",
5540      "ד׳",
5541      "ג׳",
5542      "ב׳",
5543      "א׳",
5544      "ת",
5545      "ש",
5546      "ר",
5547      "×§",
5548      "צ",
5549      "פ",
5550      "×¢",
5551      "ס",
5552      "× ",
5553      "מ",
5554      "ל",
5555      "כ",
5556      "יט",
5557      "יח",
5558      "יז",
5559      "טז",
5560      "טו",
5561      "י",
5562      "ט",
5563      "ח",
5564      "ז",
5565      "ו",
5566      "ה",
5567      "ד",
5568      "ג",
5569      "ב",
5570      "א",
5571    ],
5572  };
5573  var GEORGIAN = {
5574    integers: [
5575      10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800,
5576      700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 9,
5577      8, 7, 6, 5, 4, 3, 2, 1,
5578    ],
5579    values: [
5580      "ჵ",
5581      "ჰ",
5582      "ჯ",
5583      "ჴ",
5584      "ხ",
5585      "ჭ",
5586      "წ",
5587      "ძ",
5588      "ც",
5589      "ჩ",
5590      "შ",
5591      "ყ",
5592      "ღ",
5593      "ქ",
5594      "ფ",
5595      "ჳ",
5596      "ტ",
5597      "ს",
5598      "რ",
5599      "ჟ",
5600      "პ",
5601      "ო",
5602      "ჲ",
5603      "ნ",
5604      "მ",
5605      "ლ",
5606      "კ",
5607      "ი",
5608      "თ",
5609      "ჱ",
5610      "ზ",
5611      "ვ",
5612      "ე",
5613      "დ",
5614      "გ",
5615      "ბ",
5616      "ა",
5617    ],
5618  };
5619  var createAdditiveCounter = function (
5620    value,
5621    min,
5622    max,
5623    symbols,
5624    fallback,
5625    suffix
5626  ) {
5627    if (value < min || value > max) {
5628      return createCounterText(value, fallback, suffix.length > 0);
5629    }
5630    return (
5631      symbols.integers.reduce(function (string, integer, index) {
5632        while (value >= integer) {
5633          value -= integer;
5634          string += symbols.values[index];
5635        }
5636        return string;
5637      }, "") + suffix
5638    );
5639  };
5640  var createCounterStyleWithSymbolResolver = function (
5641    value,
5642    codePointRangeLength,
5643    isNumeric,
5644    resolver
5645  ) {
5646    var string = "";
5647    do {
5648      if (!isNumeric) {
5649        value--;
5650      }
5651      string = resolver(value) + string;
5652      value /= codePointRangeLength;
5653    } while (value * codePointRangeLength >= codePointRangeLength);
5654    return string;
5655  };
5656  var createCounterStyleFromRange = function (
5657    value,
5658    codePointRangeStart,
5659    codePointRangeEnd,
5660    isNumeric,
5661    suffix
5662  ) {
5663    var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;
5664    return (
5665      (value < 0 ? "-" : "") +
5666      (createCounterStyleWithSymbolResolver(
5667        Math.abs(value),
5668        codePointRangeLength,
5669        isNumeric,
5670        function (codePoint) {
5671          return fromCodePoint(
5672            Math.floor(codePoint % codePointRangeLength) + codePointRangeStart
5673          );
5674        }
5675      ) +
5676        suffix)
5677    );
5678  };
5679  var createCounterStyleFromSymbols = function (value, symbols, suffix) {
5680    if (suffix === void 0) {
5681      suffix = ". ";
5682    }
5683    var codePointRangeLength = symbols.length;
5684    return (
5685      createCounterStyleWithSymbolResolver(
5686        Math.abs(value),
5687        codePointRangeLength,
5688        false,
5689        function (codePoint) {
5690          return symbols[Math.floor(codePoint % codePointRangeLength)];
5691        }
5692      ) + suffix
5693    );
5694  };
5695  var CJK_ZEROS = 1 << 0;
5696  var CJK_TEN_COEFFICIENTS = 1 << 1;
5697  var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;
5698  var CJK_HUNDRED_COEFFICIENTS = 1 << 3;
5699  var createCJKCounter = function (
5700    value,
5701    numbers,
5702    multipliers,
5703    negativeSign,
5704    suffix,
5705    flags
5706  ) {
5707    if (value < -9999 || value > 9999) {
5708      return createCounterText(
5709        value,
5710        LIST_STYLE_TYPE.CJK_DECIMAL,
5711        suffix.length > 0
5712      );
5713    }
5714    var tmp = Math.abs(value);
5715    var string = suffix;
5716    if (tmp === 0) {
5717      return numbers[0] + string;
5718    }
5719    for (var digit = 0; tmp > 0 && digit <= 4; digit++) {
5720      var coefficient = tmp % 10;
5721      if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== "") {
5722        string = numbers[coefficient] + string;
5723      } else if (
5724        coefficient > 1 ||
5725        (coefficient === 1 && digit === 0) ||
5726        (coefficient === 1 &&
5727          digit === 1 &&
5728          contains(flags, CJK_TEN_COEFFICIENTS)) ||
5729        (coefficient === 1 &&
5730          digit === 1 &&
5731          contains(flags, CJK_TEN_HIGH_COEFFICIENTS) &&
5732          value > 100) ||
5733        (coefficient === 1 &&
5734          digit > 1 &&
5735          contains(flags, CJK_HUNDRED_COEFFICIENTS))
5736      ) {
5737        string =
5738          numbers[coefficient] +
5739          (digit > 0 ? multipliers[digit - 1] : "") +
5740          string;
5741      } else if (coefficient === 1 && digit > 0) {
5742        string = multipliers[digit - 1] + string;
5743      }
5744      tmp = Math.floor(tmp / 10);
5745    }
5746    return (value < 0 ? negativeSign : "") + string;
5747  };
5748  var CHINESE_INFORMAL_MULTIPLIERS = "十百千萬";
5749  var CHINESE_FORMAL_MULTIPLIERS = "拾佰仟萬";
5750  var JAPANESE_NEGATIVE = "マイナス";
5751  var KOREAN_NEGATIVE = "마이너스";
5752  var createCounterText = function (value, type, appendSuffix) {
5753    var defaultSuffix = appendSuffix ? ". " : "";
5754    var cjkSuffix = appendSuffix ? "、" : "";
5755    var koreanSuffix = appendSuffix ? ", " : "";
5756    var spaceSuffix = appendSuffix ? " " : "";
5757    switch (type) {
5758      case LIST_STYLE_TYPE.DISC:
5759        return "•" + spaceSuffix;
5760      case LIST_STYLE_TYPE.CIRCLE:
5761        return "◦" + spaceSuffix;
5762      case LIST_STYLE_TYPE.SQUARE:
5763        return "◾" + spaceSuffix;
5764      case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:
5765        var string = createCounterStyleFromRange(
5766          value,
5767          48,
5768          57,
5769          true,
5770          defaultSuffix
5771        );
5772        return string.length < 4 ? "0" + string : string;
5773      case LIST_STYLE_TYPE.CJK_DECIMAL:
5774        return createCounterStyleFromSymbols(
5775          value,
5776          "〇一二三四五六七八九",
5777          cjkSuffix
5778        );
5779      case LIST_STYLE_TYPE.LOWER_ROMAN:
5780        return createAdditiveCounter(
5781          value,
5782          1,
5783          3999,
5784          ROMAN_UPPER,
5785          LIST_STYLE_TYPE.DECIMAL,
5786          defaultSuffix
5787        ).toLowerCase();
5788      case LIST_STYLE_TYPE.UPPER_ROMAN:
5789        return createAdditiveCounter(
5790          value,
5791          1,
5792          3999,
5793          ROMAN_UPPER,
5794          LIST_STYLE_TYPE.DECIMAL,
5795          defaultSuffix
5796        );
5797      case LIST_STYLE_TYPE.LOWER_GREEK:
5798        return createCounterStyleFromRange(
5799          value,
5800          945,
5801          969,
5802          false,
5803          defaultSuffix
5804        );
5805      case LIST_STYLE_TYPE.LOWER_ALPHA:
5806        return createCounterStyleFromRange(
5807          value,
5808          97,
5809          122,
5810          false,
5811          defaultSuffix
5812        );
5813      case LIST_STYLE_TYPE.UPPER_ALPHA:
5814        return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);
5815      case LIST_STYLE_TYPE.ARABIC_INDIC:
5816        return createCounterStyleFromRange(
5817          value,
5818          1632,
5819          1641,
5820          true,
5821          defaultSuffix
5822        );
5823      case LIST_STYLE_TYPE.ARMENIAN:
5824      case LIST_STYLE_TYPE.UPPER_ARMENIAN:
5825        return createAdditiveCounter(
5826          value,
5827          1,
5828          9999,
5829          ARMENIAN,
5830          LIST_STYLE_TYPE.DECIMAL,
5831          defaultSuffix
5832        );
5833      case LIST_STYLE_TYPE.LOWER_ARMENIAN:
5834        return createAdditiveCounter(
5835          value,
5836          1,
5837          9999,
5838          ARMENIAN,
5839          LIST_STYLE_TYPE.DECIMAL,
5840          defaultSuffix
5841        ).toLowerCase();
5842      case LIST_STYLE_TYPE.BENGALI:
5843        return createCounterStyleFromRange(
5844          value,
5845          2534,
5846          2543,
5847          true,
5848          defaultSuffix
5849        );
5850      case LIST_STYLE_TYPE.CAMBODIAN:
5851      case LIST_STYLE_TYPE.KHMER:
5852        return createCounterStyleFromRange(
5853          value,
5854          6112,
5855          6121,
5856          true,
5857          defaultSuffix
5858        );
5859      case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:
5860        return createCounterStyleFromSymbols(
5861          value,
5862          "子丑寅卯辰巳午未申酉戌亥",
5863          cjkSuffix
5864        );
5865      case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:
5866        return createCounterStyleFromSymbols(
5867          value,
5868          "甲乙丙丁戊己庚辛壬癸",
5869          cjkSuffix
5870        );
5871      case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:
5872      case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:
5873        return createCJKCounter(
5874          value,
5875          "零一二三四五六七八九",
5876          CHINESE_INFORMAL_MULTIPLIERS,
5877          "è² ",
5878          cjkSuffix,
5879          CJK_TEN_COEFFICIENTS |
5880            CJK_TEN_HIGH_COEFFICIENTS |
5881            CJK_HUNDRED_COEFFICIENTS
5882        );
5883      case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:
5884        return createCJKCounter(
5885          value,
5886          "零壹貳參肆伍陸柒捌玖",
5887          CHINESE_FORMAL_MULTIPLIERS,
5888          "è² ",
5889          cjkSuffix,
5890          CJK_ZEROS |
5891            CJK_TEN_COEFFICIENTS |
5892            CJK_TEN_HIGH_COEFFICIENTS |
5893            CJK_HUNDRED_COEFFICIENTS
5894        );
5895      case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:
5896        return createCJKCounter(
5897          value,
5898          "零一二三四五六七八九",
5899          CHINESE_INFORMAL_MULTIPLIERS,
5900          "负",
5901          cjkSuffix,
5902          CJK_TEN_COEFFICIENTS |
5903            CJK_TEN_HIGH_COEFFICIENTS |
5904            CJK_HUNDRED_COEFFICIENTS
5905        );
5906      case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:
5907        return createCJKCounter(
5908          value,
5909          "零壹贰叁肆伍陆柒捌玖",
5910          CHINESE_FORMAL_MULTIPLIERS,
5911          "负",
5912          cjkSuffix,
5913          CJK_ZEROS |
5914            CJK_TEN_COEFFICIENTS |
5915            CJK_TEN_HIGH_COEFFICIENTS |
5916            CJK_HUNDRED_COEFFICIENTS
5917        );
5918      case LIST_STYLE_TYPE.JAPANESE_INFORMAL:
5919        return createCJKCounter(
5920          value,
5921          "〇一二三四五六七八九",
5922          "十百千万",
5923          JAPANESE_NEGATIVE,
5924          cjkSuffix,
5925          0
5926        );
5927      case LIST_STYLE_TYPE.JAPANESE_FORMAL:
5928        return createCJKCounter(
5929          value,
5930          "零壱弐参四伍六七八九",
5931          "拾百千万",
5932          JAPANESE_NEGATIVE,
5933          cjkSuffix,
5934          CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
5935        );
5936      case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:
5937        return createCJKCounter(
5938          value,
5939          "영일이삼사오육칠팔구",
5940          "십백천만",
5941          KOREAN_NEGATIVE,
5942          koreanSuffix,
5943          CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
5944        );
5945      case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:
5946        return createCJKCounter(
5947          value,
5948          "零一二三四五六七八九",
5949          "十百千萬",
5950          KOREAN_NEGATIVE,
5951          koreanSuffix,
5952          0
5953        );
5954      case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:
5955        return createCJKCounter(
5956          value,
5957          "零壹貳參四五六七八九",
5958          "拾百千",
5959          KOREAN_NEGATIVE,
5960          koreanSuffix,
5961          CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
5962        );
5963      case LIST_STYLE_TYPE.DEVANAGARI:
5964        return createCounterStyleFromRange(
5965          value,
5966          0x966,
5967          0x96f,
5968          true,
5969          defaultSuffix
5970        );
5971      case LIST_STYLE_TYPE.GEORGIAN:
5972        return createAdditiveCounter(
5973          value,
5974          1,
5975          19999,
5976          GEORGIAN,
5977          LIST_STYLE_TYPE.DECIMAL,
5978          defaultSuffix
5979        );
5980      case LIST_STYLE_TYPE.GUJARATI:
5981        return createCounterStyleFromRange(
5982          value,
5983          0xae6,
5984          0xaef,
5985          true,
5986          defaultSuffix
5987        );
5988      case LIST_STYLE_TYPE.GURMUKHI:
5989        return createCounterStyleFromRange(
5990          value,
5991          0xa66,
5992          0xa6f,
5993          true,
5994          defaultSuffix
5995        );
5996      case LIST_STYLE_TYPE.HEBREW:
5997        return createAdditiveCounter(
5998          value,
5999          1,
6000          10999,
6001          HEBREW,
6002          LIST_STYLE_TYPE.DECIMAL,
6003          defaultSuffix
6004        );
6005      case LIST_STYLE_TYPE.HIRAGANA:
6006        return createCounterStyleFromSymbols(
6007          value,
6008          "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん"
6009        );
6010      case LIST_STYLE_TYPE.HIRAGANA_IROHA:
6011        return createCounterStyleFromSymbols(
6012          value,
6013          "いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす"
6014        );
6015      case LIST_STYLE_TYPE.KANNADA:
6016        return createCounterStyleFromRange(
6017          value,
6018          0xce6,
6019          0xcef,
6020          true,
6021          defaultSuffix
6022        );
6023      case LIST_STYLE_TYPE.KATAKANA:
6024        return createCounterStyleFromSymbols(
6025          value,
6026          "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン",
6027          cjkSuffix
6028        );
6029      case LIST_STYLE_TYPE.KATAKANA_IROHA:
6030        return createCounterStyleFromSymbols(
6031          value,
6032          "イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス",
6033          cjkSuffix
6034        );
6035      case LIST_STYLE_TYPE.LAO:
6036        return createCounterStyleFromRange(
6037          value,
6038          0xed0,
6039          0xed9,
6040          true,
6041          defaultSuffix
6042        );
6043      case LIST_STYLE_TYPE.MONGOLIAN:
6044        return createCounterStyleFromRange(
6045          value,
6046          0x1810,
6047          0x1819,
6048          true,
6049          defaultSuffix
6050        );
6051      case LIST_STYLE_TYPE.MYANMAR:
6052        return createCounterStyleFromRange(
6053          value,
6054          0x1040,
6055          0x1049,
6056          true,
6057          defaultSuffix
6058        );
6059      case LIST_STYLE_TYPE.ORIYA:
6060        return createCounterStyleFromRange(
6061          value,
6062          0xb66,
6063          0xb6f,
6064          true,
6065          defaultSuffix
6066        );
6067      case LIST_STYLE_TYPE.PERSIAN:
6068        return createCounterStyleFromRange(
6069          value,
6070          0x6f0,
6071          0x6f9,
6072          true,
6073          defaultSuffix
6074        );
6075      case LIST_STYLE_TYPE.TAMIL:
6076        return createCounterStyleFromRange(
6077          value,
6078          0xbe6,
6079          0xbef,
6080          true,
6081          defaultSuffix
6082        );
6083      case LIST_STYLE_TYPE.TELUGU:
6084        return createCounterStyleFromRange(
6085          value,
6086          0xc66,
6087          0xc6f,
6088          true,
6089          defaultSuffix
6090        );
6091      case LIST_STYLE_TYPE.THAI:
6092        return createCounterStyleFromRange(
6093          value,
6094          0xe50,
6095          0xe59,
6096          true,
6097          defaultSuffix
6098        );
6099      case LIST_STYLE_TYPE.TIBETAN:
6100        return createCounterStyleFromRange(
6101          value,
6102          0xf20,
6103          0xf29,
6104          true,
6105          defaultSuffix
6106        );
6107      case LIST_STYLE_TYPE.DECIMAL:
6108      default:
6109        return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
6110    }
6111  };
6112
6113  var IGNORE_ATTRIBUTE = "data-html2canvas-ignore";
6114  var DocumentCloner = /** @class */ (function () {
6115    function DocumentCloner(element, options) {
6116      this.options = options;
6117      this.scrolledElements = [];
6118      this.referenceElement = element;
6119      this.counters = new CounterState();
6120      this.quoteDepth = 0;
6121      if (!element.ownerDocument) {
6122        throw new Error("Cloned element does not have an owner document");
6123      }
6124      this.documentElement = this.cloneNode(
6125        element.ownerDocument.documentElement
6126      );
6127    }
6128    DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {
6129      var _this = this;
6130      var iframe = createIFrameContainer(ownerDocument, windowSize);
6131      if (!iframe.contentWindow) {
6132        return Promise.reject("Unable to find iframe window");
6133      }
6134      var scrollX = ownerDocument.defaultView.pageXOffset;
6135      var scrollY = ownerDocument.defaultView.pageYOffset;
6136      var cloneWindow = iframe.contentWindow;
6137      var documentClone = cloneWindow.document;
6138      /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle
6139             if window url is about:blank, we can assign the url to current by writing onto the document
6140             */
6141      var iframeLoad = iframeLoader(iframe).then(function () {
6142        return __awaiter(_this, void 0, void 0, function () {
6143          var onclone;
6144          return __generator(this, function (_a) {
6145            switch (_a.label) {
6146              case 0:
6147                this.scrolledElements.forEach(restoreNodeScroll);
6148                if (cloneWindow) {
6149                  cloneWindow.scrollTo(windowSize.left, windowSize.top);
6150                  if (
6151                    /(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&
6152                    (cloneWindow.scrollY !== windowSize.top ||
6153                      cloneWindow.scrollX !== windowSize.left)
6154                  ) {
6155                    documentClone.documentElement.style.top =
6156                      -windowSize.top + "px";
6157                    documentClone.documentElement.style.left =
6158                      -windowSize.left + "px";
6159                    documentClone.documentElement.style.position = "absolute";
6160                  }
6161                }
6162                onclone = this.options.onclone;
6163                if (typeof this.clonedReferenceElement === "undefined") {
6164                  return [
6165                    2 /*return*/,
6166                    Promise.reject(
6167                      "Error finding the " +
6168                        this.referenceElement.nodeName +
6169                        " in the cloned document"
6170                    ),
6171                  ];
6172                }
6173                if (!(documentClone.fonts && documentClone.fonts.ready))
6174                  return [3 /*break*/, 2];
6175                return [4 /*yield*/, documentClone.fonts.ready];
6176              case 1:
6177                _a.sent();
6178                _a.label = 2;
6179              case 2:
6180                if (typeof onclone === "function") {
6181                  return [
6182                    2 /*return*/,
6183                    Promise.resolve()
6184                      .then(function () {
6185                        return onclone(documentClone);
6186                      })
6187                      .then(function () {
6188                        return iframe;
6189                      }),
6190                  ];
6191                }
6192                return [2 /*return*/, iframe];
6193            }
6194          });
6195        });
6196      });
6197      documentClone.open();
6198      documentClone.write(serializeDoctype(document.doctype) + "<html></html>");
6199      // Chrome scrolls the parent document for some reason after the write to the cloned window???
6200      restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);
6201      documentClone.replaceChild(
6202        documentClone.adoptNode(this.documentElement),
6203        documentClone.documentElement
6204      );
6205      documentClone.close();
6206      return iframeLoad;
6207    };
6208    DocumentCloner.prototype.createElementClone = function (node) {
6209      if (isCanvasElement(node)) {
6210        return this.createCanvasClone(node);
6211      }
6212      /*
6213            if (isIFrameElement(node)) {
6214                return this.createIFrameClone(node);
6215            }
6216    */
6217      if (isStyleElement(node)) {
6218        return this.createStyleClone(node);
6219      }
6220      var clone = node.cloneNode(false);
6221      // @ts-ignore
6222      if (isImageElement(clone) && clone.loading === "lazy") {
6223        // @ts-ignore
6224        clone.loading = "eager";
6225      }
6226      return clone;
6227    };
6228    DocumentCloner.prototype.createStyleClone = function (node) {
vendor: 7,651 bytes, lines 6229-6418
6229      try {
6230        var sheet = node.sheet;
6231        if (sheet && sheet.cssRules) {
6232          var css = [].slice
6233            .call(sheet.cssRules, 0)
6234            .reduce(function (css, rule) {
6235              if (rule && typeof rule.cssText === "string") {
6236                return css + rule.cssText;
6237              }
6238              return css;
6239            }, "");
6240          var style = node.cloneNode(false);
6241          style.textContent = css;
6242          return style;
6243        }
6244      } catch (e) {
6245        // accessing node.sheet.cssRules throws a DOMException
6246        Logger.getInstance(this.options.id).error(
6247          "Unable to access cssRules property",
6248          e
6249        );
6250        if (e.name !== "SecurityError") {
6251          throw e;
6252        }
6253      }
6254      return node.cloneNode(false);
6255    };
6256    DocumentCloner.prototype.createCanvasClone = function (canvas) {
6257      if (this.options.inlineImages && canvas.ownerDocument) {
6258        var img = canvas.ownerDocument.createElement("img");
6259        try {
6260          img.src = canvas.toDataURL();
6261          return img;
6262        } catch (e) {
6263          Logger.getInstance(this.options.id).info(
6264            "Unable to clone canvas contents, canvas is tainted"
6265          );
6266        }
6267      }
6268      var clonedCanvas = canvas.cloneNode(false);
6269      try {
6270        clonedCanvas.width = canvas.width;
6271        clonedCanvas.height = canvas.height;
6272        var ctx = canvas.getContext("2d");
6273        var clonedCtx = clonedCanvas.getContext("2d");
6274        if (clonedCtx) {
6275          if (ctx) {
6276            clonedCtx.putImageData(
6277              ctx.getImageData(0, 0, canvas.width, canvas.height),
6278              0,
6279              0
6280            );
6281          } else {
6282            clonedCtx.drawImage(canvas, 0, 0);
6283          }
6284        }
6285        return clonedCanvas;
6286      } catch (e) {}
6287      return clonedCanvas;
6288    };
6289    /*
6290        createIFrameClone(iframe: HTMLIFrameElement) {
6291            const tempIframe = <HTMLIFrameElement>iframe.cloneNode(false);
6292            const iframeKey = generateIframeKey();
6293            tempIframe.setAttribute('data-html2canvas-internal-iframe-key', iframeKey);
6294
6295            const {width, height} = parseBounds(iframe);
6296
6297            this.resourceLoader.cache[iframeKey] = getIframeDocumentElement(iframe, this.options)
6298                .then(documentElement => {
6299                    return this.renderer(
6300                        documentElement,
6301                        {
6302                            allowTaint: this.options.allowTaint,
6303                            backgroundColor: '#ffffff',
6304                            canvas: null,
6305                            imageTimeout: this.options.imageTimeout,
6306                            logging: this.options.logging,
6307                            proxy: this.options.proxy,
6308                            removeContainer: this.options.removeContainer,
6309                            scale: this.options.scale,
6310                            foreignObjectRendering: this.options.foreignObjectRendering,
6311                            useCORS: this.options.useCORS,
6312                            target: new CanvasRenderer(),
6313                            width,
6314                            height,
6315                            x: 0,
6316                            y: 0,
6317                            windowWidth: documentElement.ownerDocument.defaultView.innerWidth,
6318                            windowHeight: documentElement.ownerDocument.defaultView.innerHeight,
6319                            scrollX: documentElement.ownerDocument.defaultView.pageXOffset,
6320                            scrollY: documentElement.ownerDocument.defaultView.pageYOffset
6321                        },
6322                    );
6323                })
6324                .then(
6325                    (canvas: HTMLCanvasElement) =>
6326                        new Promise((resolve, reject) => {
6327                            const iframeCanvas = document.createElement('img');
6328                            iframeCanvas.onload = () => resolve(canvas);
6329                            iframeCanvas.onerror = (event) => {
6330                                // Empty iframes may result in empty "data:," URLs, which are invalid from the <img>'s point of view
6331                                // and instead of `onload` cause `onerror` and unhandled rejection warnings
6332                                // https://github.com/niklasvh/html2canvas/issues/1502
6333                                iframeCanvas.src == 'data:,' ? resolve(canvas) : reject(event);
6334                            };
6335                            iframeCanvas.src = canvas.toDataURL();
6336                            if (tempIframe.parentNode && iframe.ownerDocument && iframe.ownerDocument.defaultView) {
6337                                tempIframe.parentNode.replaceChild(
6338                                    copyCSSStyles(
6339                                        iframe.ownerDocument.defaultView.getComputedStyle(iframe),
6340                                        iframeCanvas
6341                                    ),
6342                                    tempIframe
6343                                );
6344                            }
6345                        })
6346                );
6347            return tempIframe;
6348        }
6349    */
6350    DocumentCloner.prototype.cloneNode = function (node) {
6351      if (isTextNode(node)) {
6352        return document.createTextNode(node.data);
6353      }
6354      if (!node.ownerDocument) {
6355        return node.cloneNode(false);
6356      }
6357      var window = node.ownerDocument.defaultView;
6358      if (
6359        window &&
6360        isElementNode(node) &&
6361        (isHTMLElementNode(node) || isSVGElementNode(node))
6362      ) {
6363        var clone = this.createElementClone(node);
6364        var style = window.getComputedStyle(node);
6365        var styleBefore = window.getComputedStyle(node, ":before");
6366        var styleAfter = window.getComputedStyle(node, ":after");
6367        if (this.referenceElement === node && isHTMLElementNode(clone)) {
6368          this.clonedReferenceElement = clone;
6369        }
6370        if (isBodyElement(clone)) {
6371          createPseudoHideStyles(clone);
6372        }
6373        var counters = this.counters.parse(
6374          new CSSParsedCounterDeclaration(style)
6375        );
6376        var before = this.resolvePseudoContent(
6377          node,
6378          clone,
6379          styleBefore,
6380          PseudoElementType.BEFORE
6381        );
6382        for (var child = node.firstChild; child; child = child.nextSibling) {
6383          if (
6384            !isElementNode(child) ||
6385            (!isScriptElement(child) &&
6386              !child.hasAttribute(IGNORE_ATTRIBUTE) &&
6387              (typeof this.options.ignoreElements !== "function" ||
6388                !this.options.ignoreElements(child)))
6389          ) {
6390            if (
6391              !this.options.copyStyles ||
6392              !isElementNode(child) ||
6393              !isStyleElement(child)
6394            ) {
6395              clone.appendChild(this.cloneNode(child));
6396            }
6397          }
6398        }
6399        if (before) {
6400          clone.insertBefore(before, clone.firstChild);
6401        }
6402        var after = this.resolvePseudoContent(
6403          node,
6404          clone,
6405          styleAfter,
6406          PseudoElementType.AFTER
6407        );
6408        if (after) {
6409          clone.appendChild(after);
6410        }
6411        this.counters.pop(counters);
6412        if (
6413          style &&
6414          (this.options.copyStyles || isSVGElementNode(node)) &&
6415          !isIFrameElement(node)
6416        ) {
6417          copyCSSStyles(style, clone);
6418        }
6419        //this.inlineAllImages(clone);
6420        if (node.scrollTop !== 0 || node.scrollLeft !== 0) {
6421          this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);
6422        }
6423        if (
6424          (isTextareaElement(node) || isSelectElement(node)) &&
6425          (isTextareaElement(clone) || isSelectElement(clone))
6426        ) {
6427          clone.value = node.value;
6428        }
6429        return clone;
6430      }
6431      return node.cloneNode(false);
6432    };
6433    DocumentCloner.prototype.resolvePseudoContent = function (
6434      node,
6435      clone,
6436      style,
6437      pseudoElt
6438    ) {
6439      var _this = this;
6440      if (!style) {
6441        return;
6442      }
6443      var value = style.content;
6444      var document = clone.ownerDocument;
6445      if (
6446        !document ||
6447        !value ||
6448        value === "none" ||
6449        value === "-moz-alt-content" ||
6450        style.display === "none"
6451      ) {
6452        return;
6453      }
6454      this.counters.parse(new CSSParsedCounterDeclaration(style));
6455      var declaration = new CSSParsedPseudoDeclaration(style);
6456      var anonymousReplacedElement = document.createElement(
6457        "html2canvaspseudoelement"
6458      );
6459      copyCSSStyles(style, anonymousReplacedElement);
6460      declaration.content.forEach(function (token) {
6461        if (token.type === TokenType.STRING_TOKEN) {
6462          anonymousReplacedElement.appendChild(
6463            document.createTextNode(token.value)
6464          );
6465        } else if (token.type === TokenType.URL_TOKEN) {
6466          var img = document.createElement("img");
6467          img.src = token.value;
6468          img.style.opacity = "1";
6469          anonymousReplacedElement.appendChild(img);
6470        } else if (token.type === TokenType.FUNCTION) {
6471          if (token.name === "attr") {
6472            var attr = token.values.filter(isIdentToken);
6473            if (attr.length) {
6474              anonymousReplacedElement.appendChild(
6475                document.createTextNode(node.getAttribute(attr[0].value) || "")
6476              );
6477            }
6478          } else if (token.name === "counter") {
6479            var _a = token.values.filter(nonFunctionArgSeparator),
6480              counter = _a[0],
6481              counterStyle = _a[1];
6482            if (counter && isIdentToken(counter)) {
6483              var counterState = _this.counters.getCounterValue(counter.value);
6484              var counterType =
6485                counterStyle && isIdentToken(counterStyle)
6486                  ? listStyleType.parse(counterStyle.value)
6487                  : LIST_STYLE_TYPE.DECIMAL;
6488              anonymousReplacedElement.appendChild(
6489                document.createTextNode(
6490                  createCounterText(counterState, counterType, false)
6491                )
6492              );
6493            }
6494          } else if (token.name === "counters") {
6495            var _b = token.values.filter(nonFunctionArgSeparator),
6496              counter = _b[0],
6497              delim = _b[1],
6498              counterStyle = _b[2];
6499            if (counter && isIdentToken(counter)) {
6500              var counterStates = _this.counters.getCounterValues(
6501                counter.value
6502              );
6503              var counterType_1 =
6504                counterStyle && isIdentToken(counterStyle)
6505                  ? listStyleType.parse(counterStyle.value)
6506                  : LIST_STYLE_TYPE.DECIMAL;
6507              var separator =
6508                delim && delim.type === TokenType.STRING_TOKEN
6509                  ? delim.value
6510                  : "";
6511              var text = counterStates
6512                .map(function (value) {
6513                  return createCounterText(value, counterType_1, false);
6514                })
6515                .join(separator);
6516              anonymousReplacedElement.appendChild(
6517                document.createTextNode(text)
6518              );
6519            }
6520          }
6521        } else if (token.type === TokenType.IDENT_TOKEN) {
6522          switch (token.value) {
6523            case "open-quote":
6524              anonymousReplacedElement.appendChild(
6525                document.createTextNode(
6526                  getQuote(declaration.quotes, _this.quoteDepth++, true)
6527                )
6528              );
6529              break;
6530            case "close-quote":
6531              anonymousReplacedElement.appendChild(
6532                document.createTextNode(
6533                  getQuote(declaration.quotes, --_this.quoteDepth, false)
6534                )
6535              );
6536              break;
6537            default:
6538              // safari doesn't parse string tokens correctly because of lack of quotes
6539              anonymousReplacedElement.appendChild(
6540                document.createTextNode(token.value)
6541              );
6542          }
6543        }
6544      });
6545      anonymousReplacedElement.className =
6546        PSEUDO_HIDE_ELEMENT_CLASS_BEFORE +
6547        " " +
6548        PSEUDO_HIDE_ELEMENT_CLASS_AFTER;
6549      var newClassName =
6550        pseudoElt === PseudoElementType.BEFORE
6551          ? " " + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE
6552          : " " + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;
6553      if (isSVGElementNode(clone)) {
6554        clone.className.baseValue += newClassName;
6555      } else {
6556        clone.className += newClassName;
6557      }
6558      return anonymousReplacedElement;
6559    };
6560    DocumentCloner.destroy = function (container) {
6561      if (container.parentNode) {
6562        container.parentNode.removeChild(container);
6563        return true;
6564      }
6565      return false;
6566    };
6567    return DocumentCloner;
6568  })();
vendor: 4,298 bytes, lines 6569-6694
6569  var PseudoElementType;
6570  (function (PseudoElementType) {
6571    PseudoElementType[(PseudoElementType["BEFORE"] = 0)] = "BEFORE";
6572    PseudoElementType[(PseudoElementType["AFTER"] = 1)] = "AFTER";
6573  })(PseudoElementType || (PseudoElementType = {}));
6574  var createIFrameContainer = function (ownerDocument, bounds) {
6575    var cloneIframeContainer = ownerDocument.createElement("iframe");
6576    cloneIframeContainer.className = "html2canvas-container";
6577    cloneIframeContainer.style.visibility = "hidden";
6578    cloneIframeContainer.style.position = "fixed";
6579    cloneIframeContainer.style.left = "-10000px";
6580    cloneIframeContainer.style.top = "0px";
6581    cloneIframeContainer.style.border = "0";
6582    cloneIframeContainer.width = bounds.width.toString();
6583    cloneIframeContainer.height = bounds.height.toString();
6584    cloneIframeContainer.scrolling = "no"; // ios won't scroll without it
6585    cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, "true");
6586    ownerDocument.body.appendChild(cloneIframeContainer);
6587    return cloneIframeContainer;
6588  };
6589  var iframeLoader = function (iframe) {
6590    return new Promise(function (resolve, reject) {
6591      var cloneWindow = iframe.contentWindow;
6592      if (!cloneWindow) {
6593        return reject("No window assigned for iframe");
6594      }
6595      var documentClone = cloneWindow.document;
6596      cloneWindow.onload =
6597        iframe.onload =
6598        documentClone.onreadystatechange =
6599          function () {
6600            cloneWindow.onload =
6601              iframe.onload =
6602              documentClone.onreadystatechange =
6603                null;
6604            var interval = setInterval(function () {
6605              if (
6606                documentClone.body.childNodes.length > 0 &&
6607                documentClone.readyState === "complete"
6608              ) {
6609                clearInterval(interval);
6610                resolve(iframe);
6611              }
6612            }, 50);
6613          };
6614    });
6615  };
6616  var copyCSSStyles = function (style, target) {
6617    // Edge does not provide value for cssText
6618    for (var i = style.length - 1; i >= 0; i--) {
6619      var property = style.item(i);
6620      // Safari shows pseudoelements if content is set
6621      if (property !== "content") {
6622        target.style.setProperty(property, style.getPropertyValue(property));
6623      }
6624    }
6625    return target;
6626  };
6627  var serializeDoctype = function (doctype) {
6628    var str = "";
6629    if (doctype) {
6630      str += "<!DOCTYPE ";
6631      if (doctype.name) {
6632        str += doctype.name;
6633      }
6634      if (doctype.internalSubset) {
6635        str += doctype.internalSubset;
6636      }
6637      if (doctype.publicId) {
6638        str += '"' + doctype.publicId + '"';
6639      }
6640      if (doctype.systemId) {
6641        str += '"' + doctype.systemId + '"';
6642      }
6643      str += ">";
6644    }
6645    return str;
6646  };
6647  var restoreOwnerScroll = function (ownerDocument, x, y) {
6648    if (
6649      ownerDocument &&
6650      ownerDocument.defaultView &&
6651      (x !== ownerDocument.defaultView.pageXOffset ||
6652        y !== ownerDocument.defaultView.pageYOffset)
6653    ) {
6654      ownerDocument.defaultView.scrollTo(x, y);
6655    }
6656  };
6657  var restoreNodeScroll = function (_a) {
6658    var element = _a[0],
6659      x = _a[1],
6660      y = _a[2];
6661    element.scrollLeft = x;
6662    element.scrollTop = y;
6663  };
6664  var PSEUDO_BEFORE = ":before";
6665  var PSEUDO_AFTER = ":after";
6666  var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE =
6667    "___html2canvas___pseudoelement_before";
6668  var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = "___html2canvas___pseudoelement_after";
6669  var PSEUDO_HIDE_ELEMENT_STYLE =
6670    '{\n    content: "" !important;\n    display: none !important;\n}';
6671  var createPseudoHideStyles = function (body) {
6672    createStyles(
6673      body,
6674      "." +
6675        PSEUDO_HIDE_ELEMENT_CLASS_BEFORE +
6676        PSEUDO_BEFORE +
6677        PSEUDO_HIDE_ELEMENT_STYLE +
6678        "\n         ." +
6679        PSEUDO_HIDE_ELEMENT_CLASS_AFTER +
6680        PSEUDO_AFTER +
6681        PSEUDO_HIDE_ELEMENT_STYLE
6682    );
6683  };
6684  var createStyles = function (body, styles) {
6685    var document = body.ownerDocument;
6686    if (document) {
6687      var style = document.createElement("style");
6688      style.textContent = styles;
6689      body.appendChild(style);
6690    }
6691  };
6692
6693  var PathType;
6694  (function (PathType) {
vendor: 10,832 bytes, lines 6695-7008
6695    PathType[(PathType["VECTOR"] = 0)] = "VECTOR";
6696    PathType[(PathType["BEZIER_CURVE"] = 1)] = "BEZIER_CURVE";
6697  })(PathType || (PathType = {}));
6698  var equalPath = function (a, b) {
6699    if (a.length === b.length) {
6700      return a.some(function (v, i) {
6701        return v === b[i];
6702      });
6703    }
6704    return false;
6705  };
6706  var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {
6707    return path.map(function (point, index) {
6708      switch (index) {
6709        case 0:
6710          return point.add(deltaX, deltaY);
6711        case 1:
6712          return point.add(deltaX + deltaW, deltaY);
6713        case 2:
6714          return point.add(deltaX + deltaW, deltaY + deltaH);
6715        case 3:
6716          return point.add(deltaX, deltaY + deltaH);
6717      }
6718      return point;
6719    });
6720  };
6721
6722  var Vector = /** @class */ (function () {
6723    function Vector(x, y) {
6724      this.type = PathType.VECTOR;
6725      this.x = x;
6726      this.y = y;
6727    }
6728    Vector.prototype.add = function (deltaX, deltaY) {
6729      return new Vector(this.x + deltaX, this.y + deltaY);
6730    };
6731    return Vector;
6732  })();
6733
6734  var lerp = function (a, b, t) {
6735    return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);
6736  };
6737  var BezierCurve = /** @class */ (function () {
6738    function BezierCurve(start, startControl, endControl, end) {
6739      this.type = PathType.BEZIER_CURVE;
6740      this.start = start;
6741      this.startControl = startControl;
6742      this.endControl = endControl;
6743      this.end = end;
6744    }
6745    BezierCurve.prototype.subdivide = function (t, firstHalf) {
6746      var ab = lerp(this.start, this.startControl, t);
6747      var bc = lerp(this.startControl, this.endControl, t);
6748      var cd = lerp(this.endControl, this.end, t);
6749      var abbc = lerp(ab, bc, t);
6750      var bccd = lerp(bc, cd, t);
6751      var dest = lerp(abbc, bccd, t);
6752      return firstHalf
6753        ? new BezierCurve(this.start, ab, abbc, dest)
6754        : new BezierCurve(dest, bccd, cd, this.end);
6755    };
6756    BezierCurve.prototype.add = function (deltaX, deltaY) {
6757      return new BezierCurve(
6758        this.start.add(deltaX, deltaY),
6759        this.startControl.add(deltaX, deltaY),
6760        this.endControl.add(deltaX, deltaY),
6761        this.end.add(deltaX, deltaY)
6762      );
6763    };
6764    BezierCurve.prototype.reverse = function () {
6765      return new BezierCurve(
6766        this.end,
6767        this.endControl,
6768        this.startControl,
6769        this.start
6770      );
6771    };
6772    return BezierCurve;
6773  })();
6774  var isBezierCurve = function (path) {
6775    return path.type === PathType.BEZIER_CURVE;
6776  };
6777
6778  var BoundCurves = /** @class */ (function () {
6779    function BoundCurves(element) {
6780      var styles = element.styles;
6781      var bounds = element.bounds;
6782      var _a = getAbsoluteValueForTuple(
6783          styles.borderTopLeftRadius,
6784          bounds.width,
6785          bounds.height
6786        ),
6787        tlh = _a[0],
6788        tlv = _a[1];
6789      var _b = getAbsoluteValueForTuple(
6790          styles.borderTopRightRadius,
6791          bounds.width,
6792          bounds.height
6793        ),
6794        trh = _b[0],
6795        trv = _b[1];
6796      var _c = getAbsoluteValueForTuple(
6797          styles.borderBottomRightRadius,
6798          bounds.width,
6799          bounds.height
6800        ),
6801        brh = _c[0],
6802        brv = _c[1];
6803      var _d = getAbsoluteValueForTuple(
6804          styles.borderBottomLeftRadius,
6805          bounds.width,
6806          bounds.height
6807        ),
6808        blh = _d[0],
6809        blv = _d[1];
6810      var factors = [];
6811      factors.push((tlh + trh) / bounds.width);
6812      factors.push((blh + brh) / bounds.width);
6813      factors.push((tlv + blv) / bounds.height);
6814      factors.push((trv + brv) / bounds.height);
6815      var maxFactor = Math.max.apply(Math, factors);
6816      if (maxFactor > 1) {
6817        tlh /= maxFactor;
6818        tlv /= maxFactor;
6819        trh /= maxFactor;
6820        trv /= maxFactor;
6821        brh /= maxFactor;
6822        brv /= maxFactor;
6823        blh /= maxFactor;
6824        blv /= maxFactor;
6825      }
6826      var topWidth = bounds.width - trh;
6827      var rightHeight = bounds.height - brv;
6828      var bottomWidth = bounds.width - brh;
6829      var leftHeight = bounds.height - blv;
6830      var borderTopWidth = styles.borderTopWidth;
6831      var borderRightWidth = styles.borderRightWidth;
6832      var borderBottomWidth = styles.borderBottomWidth;
6833      var borderLeftWidth = styles.borderLeftWidth;
6834      var paddingTop = getAbsoluteValue(
6835        styles.paddingTop,
6836        element.bounds.width
6837      );
6838      var paddingRight = getAbsoluteValue(
6839        styles.paddingRight,
6840        element.bounds.width
6841      );
6842      var paddingBottom = getAbsoluteValue(
6843        styles.paddingBottom,
6844        element.bounds.width
6845      );
6846      var paddingLeft = getAbsoluteValue(
6847        styles.paddingLeft,
6848        element.bounds.width
6849      );
6850      this.topLeftBorderBox =
6851        tlh > 0 || tlv > 0
6852          ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)
6853          : new Vector(bounds.left, bounds.top);
6854      this.topRightBorderBox =
6855        trh > 0 || trv > 0
6856          ? getCurvePoints(
6857              bounds.left + topWidth,
6858              bounds.top,
6859              trh,
6860              trv,
6861              CORNER.TOP_RIGHT
6862            )
6863          : new Vector(bounds.left + bounds.width, bounds.top);
6864      this.bottomRightBorderBox =
6865        brh > 0 || brv > 0
6866          ? getCurvePoints(
6867              bounds.left + bottomWidth,
6868              bounds.top + rightHeight,
6869              brh,
6870              brv,
6871              CORNER.BOTTOM_RIGHT
6872            )
6873          : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);
6874      this.bottomLeftBorderBox =
6875        blh > 0 || blv > 0
6876          ? getCurvePoints(
6877              bounds.left,
6878              bounds.top + leftHeight,
6879              blh,
6880              blv,
6881              CORNER.BOTTOM_LEFT
6882            )
6883          : new Vector(bounds.left, bounds.top + bounds.height);
6884      this.topLeftPaddingBox =
6885        tlh > 0 || tlv > 0
6886          ? getCurvePoints(
6887              bounds.left + borderLeftWidth,
6888              bounds.top + borderTopWidth,
6889              Math.max(0, tlh - borderLeftWidth),
6890              Math.max(0, tlv - borderTopWidth),
6891              CORNER.TOP_LEFT
6892            )
6893          : new Vector(
6894              bounds.left + borderLeftWidth,
6895              bounds.top + borderTopWidth
6896            );
6897      this.topRightPaddingBox =
6898        trh > 0 || trv > 0
6899          ? getCurvePoints(
6900              bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth),
6901              bounds.top + borderTopWidth,
6902              topWidth > bounds.width + borderLeftWidth
6903                ? 0
6904                : trh - borderLeftWidth,
6905              trv - borderTopWidth,
6906              CORNER.TOP_RIGHT
6907            )
6908          : new Vector(
6909              bounds.left + bounds.width - borderRightWidth,
6910              bounds.top + borderTopWidth
6911            );
6912      this.bottomRightPaddingBox =
6913        brh > 0 || brv > 0
6914          ? getCurvePoints(
6915              bounds.left +
6916                Math.min(bottomWidth, bounds.width - borderLeftWidth),
6917              bounds.top +
6918                Math.min(rightHeight, bounds.height + borderTopWidth),
6919              Math.max(0, brh - borderRightWidth),
6920              brv - borderBottomWidth,
6921              CORNER.BOTTOM_RIGHT
6922            )
6923          : new Vector(
6924              bounds.left + bounds.width - borderRightWidth,
6925              bounds.top + bounds.height - borderBottomWidth
6926            );
6927      this.bottomLeftPaddingBox =
6928        blh > 0 || blv > 0
6929          ? getCurvePoints(
6930              bounds.left + borderLeftWidth,
6931              bounds.top + leftHeight,
6932              Math.max(0, blh - borderLeftWidth),
6933              blv - borderBottomWidth,
6934              CORNER.BOTTOM_LEFT
6935            )
6936          : new Vector(
6937              bounds.left + borderLeftWidth,
6938              bounds.top + bounds.height - borderBottomWidth
6939            );
6940      this.topLeftContentBox =
6941        tlh > 0 || tlv > 0
6942          ? getCurvePoints(
6943              bounds.left + borderLeftWidth + paddingLeft,
6944              bounds.top + borderTopWidth + paddingTop,
6945              Math.max(0, tlh - (borderLeftWidth + paddingLeft)),
6946              Math.max(0, tlv - (borderTopWidth + paddingTop)),
6947              CORNER.TOP_LEFT
6948            )
6949          : new Vector(
6950              bounds.left + borderLeftWidth + paddingLeft,
6951              bounds.top + borderTopWidth + paddingTop
6952            );
6953      this.topRightContentBox =
6954        trh > 0 || trv > 0
6955          ? getCurvePoints(
6956              bounds.left +
6957                Math.min(
6958                  topWidth,
6959                  bounds.width + borderLeftWidth + paddingLeft
6960                ),
6961              bounds.top + borderTopWidth + paddingTop,
6962              topWidth > bounds.width + borderLeftWidth + paddingLeft
6963                ? 0
6964                : trh - borderLeftWidth + paddingLeft,
6965              trv - (borderTopWidth + paddingTop),
6966              CORNER.TOP_RIGHT
6967            )
6968          : new Vector(
6969              bounds.left + bounds.width - (borderRightWidth + paddingRight),
6970              bounds.top + borderTopWidth + paddingTop
6971            );
6972      this.bottomRightContentBox =
6973        brh > 0 || brv > 0
6974          ? getCurvePoints(
6975              bounds.left +
6976                Math.min(
6977                  bottomWidth,
6978                  bounds.width - (borderLeftWidth + paddingLeft)
6979                ),
6980              bounds.top +
6981                Math.min(
6982                  rightHeight,
6983                  bounds.height + borderTopWidth + paddingTop
6984                ),
6985              Math.max(0, brh - (borderRightWidth + paddingRight)),
6986              brv - (borderBottomWidth + paddingBottom),
6987              CORNER.BOTTOM_RIGHT
6988            )
6989          : new Vector(
6990              bounds.left + bounds.width - (borderRightWidth + paddingRight),
6991              bounds.top + bounds.height - (borderBottomWidth + paddingBottom)
6992            );
6993      this.bottomLeftContentBox =
6994        blh > 0 || blv > 0
6995          ? getCurvePoints(
6996              bounds.left + borderLeftWidth + paddingLeft,
6997              bounds.top + leftHeight,
6998              Math.max(0, blh - (borderLeftWidth + paddingLeft)),
6999              blv - (borderBottomWidth + paddingBottom),
7000              CORNER.BOTTOM_LEFT
7001            )
7002          : new Vector(
7003              bounds.left + borderLeftWidth + paddingLeft,
7004              bounds.top + bounds.height - (borderBottomWidth + paddingBottom)
7005            );
7006    }
7007    return BoundCurves;
7008  })();
7009  var CORNER;
7010  (function (CORNER) {
7011    CORNER[(CORNER["TOP_LEFT"] = 0)] = "TOP_LEFT";
7012    CORNER[(CORNER["TOP_RIGHT"] = 1)] = "TOP_RIGHT";
7013    CORNER[(CORNER["BOTTOM_RIGHT"] = 2)] = "BOTTOM_RIGHT";
7014    CORNER[(CORNER["BOTTOM_LEFT"] = 3)] = "BOTTOM_LEFT";
7015  })(CORNER || (CORNER = {}));
7016  var getCurvePoints = function (x, y, r1, r2, position) {
7017    var kappa = 4 * ((Math.sqrt(2) - 1) / 3);
7018    var ox = r1 * kappa; // control point offset horizontal
7019    var oy = r2 * kappa; // control point offset vertical
7020    var xm = x + r1; // x-middle
7021    var ym = y + r2; // y-middle
7022    switch (position) {
7023      case CORNER.TOP_LEFT:
7024        return new BezierCurve(
7025          new Vector(x, ym),
7026          new Vector(x, ym - oy),
7027          new Vector(xm - ox, y),
7028          new Vector(xm, y)
7029        );
7030      case CORNER.TOP_RIGHT:
7031        return new BezierCurve(
7032          new Vector(x, y),
7033          new Vector(x + ox, y),
7034          new Vector(xm, ym - oy),
7035          new Vector(xm, ym)
7036        );
7037      case CORNER.BOTTOM_RIGHT:
7038        return new BezierCurve(
7039          new Vector(xm, y),
7040          new Vector(xm, y + oy),
7041          new Vector(x + ox, ym),
7042          new Vector(x, ym)
7043        );
7044      case CORNER.BOTTOM_LEFT:
7045      default:
7046        return new BezierCurve(
7047          new Vector(xm, ym),
7048          new Vector(xm - ox, ym),
7049          new Vector(x, y + oy),
7050          new Vector(x, y)
7051        );
7052    }
7053  };
7054  var calculateBorderBoxPath = function (curves) {
7055    return [
7056      curves.topLeftBorderBox,
7057      curves.topRightBorderBox,
7058      curves.bottomRightBorderBox,
7059      curves.bottomLeftBorderBox,
7060    ];
7061  };
7062  var calculateContentBoxPath = function (curves) {
7063    return [
7064      curves.topLeftContentBox,
7065      curves.topRightContentBox,
7066      curves.bottomRightContentBox,
7067      curves.bottomLeftContentBox,
7068    ];
7069  };
7070  var calculatePaddingBoxPath = function (curves) {
7071    return [
7072      curves.topLeftPaddingBox,
7073      curves.topRightPaddingBox,
7074      curves.bottomRightPaddingBox,
7075      curves.bottomLeftPaddingBox,
7076    ];
7077  };
7078
7079  var TransformEffect = /** @class */ (function () {
7080    function TransformEffect(offsetX, offsetY, matrix) {
7081      this.type = 0 /* TRANSFORM */;
7082      this.offsetX = offsetX;
7083      this.offsetY = offsetY;
7084      this.matrix = matrix;
7085      this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;
7086    }
7087    return TransformEffect;
7088  })();
7089  var ClipEffect = /** @class */ (function () {
7090    function ClipEffect(path, target) {
7091      this.type = 1 /* CLIP */;
7092      this.target = target;
7093      this.path = path;
7094    }
7095    return ClipEffect;
7096  })();
7097  var isTransformEffect = function (effect) {
7098    return effect.type === 0 /* TRANSFORM */;
7099  };
7100  var isClipEffect = function (effect) {
7101    return effect.type === 1 /* CLIP */;
7102  };
7103
7104  var StackingContext = /** @class */ (function () {
7105    function StackingContext(container) {
7106      this.element = container;
7107      this.inlineLevel = [];
7108      this.nonInlineLevel = [];
7109      this.negativeZIndex = [];
7110      this.zeroOrAutoZIndexOrTransformedOrOpacity = [];
7111      this.positiveZIndex = [];
7112      this.nonPositionedFloats = [];
7113      this.nonPositionedInlineLevel = [];
7114    }
7115    return StackingContext;
7116  })();
7117  var ElementPaint = /** @class */ (function () {
7118    function ElementPaint(element, parentStack) {
7119      this.container = element;
7120      this.effects = parentStack.slice(0);
7121      this.curves = new BoundCurves(element);
7122      if (element.styles.transform !== null) {
7123        var offsetX =
7124          element.bounds.left + element.styles.transformOrigin[0].number;
7125        var offsetY =
7126          element.bounds.top + element.styles.transformOrigin[1].number;
7127        var matrix = element.styles.transform;
7128        this.effects.push(new TransformEffect(offsetX, offsetY, matrix));
7129      }
7130      if (element.styles.overflowX !== OVERFLOW.VISIBLE) {
7131        var borderBox = calculateBorderBoxPath(this.curves);
7132        var paddingBox = calculatePaddingBoxPath(this.curves);
7133        if (equalPath(borderBox, paddingBox)) {
7134          this.effects.push(
7135            new ClipEffect(
7136              borderBox,
7137              2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */
7138            )
7139          );
7140        } else {
7141          this.effects.push(
7142            new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */)
7143          );
7144          this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));
7145        }
7146      }
7147    }
7148    ElementPaint.prototype.getParentEffects = function () {
7149      var effects = this.effects.slice(0);
7150      if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) {
7151        var borderBox = calculateBorderBoxPath(this.curves);
7152        var paddingBox = calculatePaddingBoxPath(this.curves);
7153        if (!equalPath(borderBox, paddingBox)) {
7154          effects.push(
7155            new ClipEffect(
7156              paddingBox,
7157              2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */
7158            )
7159          );
7160        }
7161      }
7162      return effects;
7163    };
7164    return ElementPaint;
7165  })();
vendor: 4,080 bytes, lines 7166-7281
7166  var parseStackTree = function (
7167    parent,
7168    stackingContext,
7169    realStackingContext,
7170    listItems
7171  ) {
7172    parent.container.elements.forEach(function (child) {
7173      var treatAsRealStackingContext = contains(
7174        child.flags,
7175        4 /* CREATES_REAL_STACKING_CONTEXT */
7176      );
7177      var createsStackingContext = contains(
7178        child.flags,
7179        2 /* CREATES_STACKING_CONTEXT */
7180      );
7181      var paintContainer = new ElementPaint(child, parent.getParentEffects());
7182      if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {
7183        listItems.push(paintContainer);
7184      }
7185      var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */)
7186        ? []
7187        : listItems;
7188      if (treatAsRealStackingContext || createsStackingContext) {
7189        var parentStack =
7190          treatAsRealStackingContext || child.styles.isPositioned()
7191            ? realStackingContext
7192            : stackingContext;
7193        var stack = new StackingContext(paintContainer);
7194        if (
7195          child.styles.isPositioned() ||
7196          child.styles.opacity < 1 ||
7197          child.styles.isTransformed()
7198        ) {
7199          var order_1 = child.styles.zIndex.order;
7200          if (order_1 < 0) {
7201            var index_1 = 0;
7202            parentStack.negativeZIndex.some(function (current, i) {
7203              if (order_1 > current.element.container.styles.zIndex.order) {
7204                index_1 = i;
7205                return false;
7206              } else if (index_1 > 0) {
7207                return true;
7208              }
7209              return false;
7210            });
7211            parentStack.negativeZIndex.splice(index_1, 0, stack);
7212          } else if (order_1 > 0) {
7213            var index_2 = 0;
7214            parentStack.positiveZIndex.some(function (current, i) {
7215              if (order_1 >= current.element.container.styles.zIndex.order) {
7216                index_2 = i + 1;
7217                return false;
7218              } else if (index_2 > 0) {
7219                return true;
7220              }
7221              return false;
7222            });
7223            parentStack.positiveZIndex.splice(index_2, 0, stack);
7224          } else {
7225            parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);
7226          }
7227        } else {
7228          if (child.styles.isFloating()) {
7229            parentStack.nonPositionedFloats.push(stack);
7230          } else {
7231            parentStack.nonPositionedInlineLevel.push(stack);
7232          }
7233        }
7234        parseStackTree(
7235          paintContainer,
7236          stack,
7237          treatAsRealStackingContext ? stack : realStackingContext,
7238          listOwnerItems
7239        );
7240      } else {
7241        if (child.styles.isInlineLevel()) {
7242          stackingContext.inlineLevel.push(paintContainer);
7243        } else {
7244          stackingContext.nonInlineLevel.push(paintContainer);
7245        }
7246        parseStackTree(
7247          paintContainer,
7248          stackingContext,
7249          realStackingContext,
7250          listOwnerItems
7251        );
7252      }
7253      if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {
7254        processListItems(child, listOwnerItems);
7255      }
7256    });
7257  };
7258  var processListItems = function (owner, elements) {
7259    var numbering = owner instanceof OLElementContainer ? owner.start : 1;
7260    var reversed = owner instanceof OLElementContainer ? owner.reversed : false;
7261    for (var i = 0; i < elements.length; i++) {
7262      var item = elements[i];
7263      if (
7264        item.container instanceof LIElementContainer &&
7265        typeof item.container.value === "number" &&
7266        item.container.value !== 0
7267      ) {
7268        numbering = item.container.value;
7269      }
7270      item.listValue = createCounterText(
7271        numbering,
7272        item.container.styles.listStyleType,
7273        true
7274      );
7275      numbering += reversed ? -1 : 1;
7276    }
7277  };
7278  var parseStackingContexts = function (container) {
7279    var paintContainer = new ElementPaint(container, []);
7280    var root = new StackingContext(paintContainer);
7281    var listItems = [];
vendor: 15,860 bytes, lines 7282-7711
7282    parseStackTree(paintContainer, root, root, listItems);
7283    processListItems(paintContainer.container, listItems);
7284    return root;
7285  };
7286
7287  var parsePathForBorder = function (curves, borderSide) {
7288    switch (borderSide) {
7289      case 0:
7290        return createPathFromCurves(
7291          curves.topLeftBorderBox,
7292          curves.topLeftPaddingBox,
7293          curves.topRightBorderBox,
7294          curves.topRightPaddingBox
7295        );
7296      case 1:
7297        return createPathFromCurves(
7298          curves.topRightBorderBox,
7299          curves.topRightPaddingBox,
7300          curves.bottomRightBorderBox,
7301          curves.bottomRightPaddingBox
7302        );
7303      case 2:
7304        return createPathFromCurves(
7305          curves.bottomRightBorderBox,
7306          curves.bottomRightPaddingBox,
7307          curves.bottomLeftBorderBox,
7308          curves.bottomLeftPaddingBox
7309        );
7310      case 3:
7311      default:
7312        return createPathFromCurves(
7313          curves.bottomLeftBorderBox,
7314          curves.bottomLeftPaddingBox,
7315          curves.topLeftBorderBox,
7316          curves.topLeftPaddingBox
7317        );
7318    }
7319  };
7320  var createPathFromCurves = function (outer1, inner1, outer2, inner2) {
7321    var path = [];
7322    if (isBezierCurve(outer1)) {
7323      path.push(outer1.subdivide(0.5, false));
7324    } else {
7325      path.push(outer1);
7326    }
7327    if (isBezierCurve(outer2)) {
7328      path.push(outer2.subdivide(0.5, true));
7329    } else {
7330      path.push(outer2);
7331    }
7332    if (isBezierCurve(inner2)) {
7333      path.push(inner2.subdivide(0.5, true).reverse());
7334    } else {
7335      path.push(inner2);
7336    }
7337    if (isBezierCurve(inner1)) {
7338      path.push(inner1.subdivide(0.5, false).reverse());
7339    } else {
7340      path.push(inner1);
7341    }
7342    return path;
7343  };
7344
7345  var paddingBox = function (element) {
7346    var bounds = element.bounds;
7347    var styles = element.styles;
7348    return bounds.add(
7349      styles.borderLeftWidth,
7350      styles.borderTopWidth,
7351      -(styles.borderRightWidth + styles.borderLeftWidth),
7352      -(styles.borderTopWidth + styles.borderBottomWidth)
7353    );
7354  };
7355  var contentBox = function (element) {
7356    var styles = element.styles;
7357    var bounds = element.bounds;
7358    var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);
7359    var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);
7360    var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);
7361    var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);
7362    return bounds.add(
7363      paddingLeft + styles.borderLeftWidth,
7364      paddingTop + styles.borderTopWidth,
7365      -(
7366        styles.borderRightWidth +
7367        styles.borderLeftWidth +
7368        paddingLeft +
7369        paddingRight
7370      ),
7371      -(
7372        styles.borderTopWidth +
7373        styles.borderBottomWidth +
7374        paddingTop +
7375        paddingBottom
7376      )
7377    );
7378  };
7379
7380  var calculateBackgroundPositioningArea = function (
7381    backgroundOrigin,
7382    element
7383  ) {
7384    if (backgroundOrigin === 0 /* BORDER_BOX */) {
7385      return element.bounds;
7386    }
7387    if (backgroundOrigin === 2 /* CONTENT_BOX */) {
7388      return contentBox(element);
7389    }
7390    return paddingBox(element);
7391  };
7392  var calculateBackgroundPaintingArea = function (backgroundClip, element) {
7393    if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) {
7394      return element.bounds;
7395    }
7396    if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) {
7397      return contentBox(element);
7398    }
7399    return paddingBox(element);
7400  };
7401  var calculateBackgroundRendering = function (
7402    container,
7403    index,
7404    intrinsicSize
7405  ) {
7406    var backgroundPositioningArea = calculateBackgroundPositioningArea(
7407      getBackgroundValueForIndex(container.styles.backgroundOrigin, index),
7408      container
7409    );
7410    var backgroundPaintingArea = calculateBackgroundPaintingArea(
7411      getBackgroundValueForIndex(container.styles.backgroundClip, index),
7412      container
7413    );
7414    var backgroundImageSize = calculateBackgroundSize(
7415      getBackgroundValueForIndex(container.styles.backgroundSize, index),
7416      intrinsicSize,
7417      backgroundPositioningArea
7418    );
7419    var sizeWidth = backgroundImageSize[0],
7420      sizeHeight = backgroundImageSize[1];
7421    var position = getAbsoluteValueForTuple(
7422      getBackgroundValueForIndex(container.styles.backgroundPosition, index),
7423      backgroundPositioningArea.width - sizeWidth,
7424      backgroundPositioningArea.height - sizeHeight
7425    );
7426    var path = calculateBackgroundRepeatPath(
7427      getBackgroundValueForIndex(container.styles.backgroundRepeat, index),
7428      position,
7429      backgroundImageSize,
7430      backgroundPositioningArea,
7431      backgroundPaintingArea
7432    );
7433    var offsetX = Math.round(backgroundPositioningArea.left + position[0]);
7434    var offsetY = Math.round(backgroundPositioningArea.top + position[1]);
7435    return [path, offsetX, offsetY, sizeWidth, sizeHeight];
7436  };
7437  var isAuto = function (token) {
7438    return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO;
7439  };
7440  var hasIntrinsicValue = function (value) {
7441    return typeof value === "number";
7442  };
7443  var calculateBackgroundSize = function (size, _a, bounds) {
7444    var intrinsicWidth = _a[0],
7445      intrinsicHeight = _a[1],
7446      intrinsicProportion = _a[2];
7447    var first = size[0],
7448      second = size[1];
7449    if (isLengthPercentage(first) && second && isLengthPercentage(second)) {
7450      return [
7451        getAbsoluteValue(first, bounds.width),
7452        getAbsoluteValue(second, bounds.height),
7453      ];
7454    }
7455    var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);
7456    if (
7457      isIdentToken(first) &&
7458      (first.value === BACKGROUND_SIZE.CONTAIN ||
7459        first.value === BACKGROUND_SIZE.COVER)
7460    ) {
7461      if (hasIntrinsicValue(intrinsicProportion)) {
7462        var targetRatio = bounds.width / bounds.height;
7463        return targetRatio < intrinsicProportion !==
7464          (first.value === BACKGROUND_SIZE.COVER)
7465          ? [bounds.width, bounds.width / intrinsicProportion]
7466          : [bounds.height * intrinsicProportion, bounds.height];
7467      }
7468      return [bounds.width, bounds.height];
7469    }
7470    var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);
7471    var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);
7472    var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;
7473    // If the background-size is auto or auto auto:
7474    if (isAuto(first) && (!second || isAuto(second))) {
7475      // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.
7476      if (hasIntrinsicWidth && hasIntrinsicHeight) {
7477        return [intrinsicWidth, intrinsicHeight];
7478      }
7479      // If the image has no intrinsic dimensions and has no intrinsic proportions,
7480      // it's rendered at the size of the background positioning area.
7481      if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {
7482        return [bounds.width, bounds.height];
7483      }
7484      // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.
7485      // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.
7486      // The other dimension is computed using the specified dimension and the intrinsic proportions.
7487      if (hasIntrinsicDimensions && hasIntrinsicProportion) {
7488        var width_1 = hasIntrinsicWidth
7489          ? intrinsicWidth
7490          : intrinsicHeight * intrinsicProportion;
7491        var height_1 = hasIntrinsicHeight
7492          ? intrinsicHeight
7493          : intrinsicWidth / intrinsicProportion;
7494        return [width_1, height_1];
7495      }
7496      // If the image has only one intrinsic dimension but has no intrinsic proportions,
7497      // it's rendered using the specified dimension and the other dimension of the background positioning area.
7498      var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;
7499      var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;
7500      return [width_2, height_2];
7501    }
7502    // If the image has intrinsic proportions, it's stretched to the specified dimension.
7503    // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.
7504    if (hasIntrinsicProportion) {
7505      var width_3 = 0;
7506      var height_3 = 0;
7507      if (isLengthPercentage(first)) {
7508        width_3 = getAbsoluteValue(first, bounds.width);
7509      } else if (isLengthPercentage(second)) {
7510        height_3 = getAbsoluteValue(second, bounds.height);
7511      }
7512      if (isAuto(first)) {
7513        width_3 = height_3 * intrinsicProportion;
7514      } else if (!second || isAuto(second)) {
7515        height_3 = width_3 / intrinsicProportion;
7516      }
7517      return [width_3, height_3];
7518    }
7519    // If the image has no intrinsic proportions, it's stretched to the specified dimension.
7520    // The unspecified dimension is computed using the image's corresponding intrinsic dimension,
7521    // if there is one. If there is no such intrinsic dimension,
7522    // it becomes the corresponding dimension of the background positioning area.
7523    var width = null;
7524    var height = null;
7525    if (isLengthPercentage(first)) {
7526      width = getAbsoluteValue(first, bounds.width);
7527    } else if (second && isLengthPercentage(second)) {
7528      height = getAbsoluteValue(second, bounds.height);
7529    }
7530    if (width !== null && (!second || isAuto(second))) {
7531      height =
7532        hasIntrinsicWidth && hasIntrinsicHeight
7533          ? (width / intrinsicWidth) * intrinsicHeight
7534          : bounds.height;
7535    }
7536    if (height !== null && isAuto(first)) {
7537      width =
7538        hasIntrinsicWidth && hasIntrinsicHeight
7539          ? (height / intrinsicHeight) * intrinsicWidth
7540          : bounds.width;
7541    }
7542    if (width !== null && height !== null) {
7543      return [width, height];
7544    }
7545    throw new Error("Unable to calculate background-size for element");
7546  };
7547  var getBackgroundValueForIndex = function (values, index) {
7548    var value = values[index];
7549    if (typeof value === "undefined") {
7550      return values[0];
7551    }
7552    return value;
7553  };
7554  var calculateBackgroundRepeatPath = function (
7555    repeat,
7556    _a,
7557    _b,
7558    backgroundPositioningArea,
7559    backgroundPaintingArea
7560  ) {
7561    var x = _a[0],
7562      y = _a[1];
7563    var width = _b[0],
7564      height = _b[1];
7565    switch (repeat) {
7566      case BACKGROUND_REPEAT.REPEAT_X:
7567        return [
7568          new Vector(
7569            Math.round(backgroundPositioningArea.left),
7570            Math.round(backgroundPositioningArea.top + y)
7571          ),
7572          new Vector(
7573            Math.round(
7574              backgroundPositioningArea.left + backgroundPositioningArea.width
7575            ),
7576            Math.round(backgroundPositioningArea.top + y)
7577          ),
7578          new Vector(
7579            Math.round(
7580              backgroundPositioningArea.left + backgroundPositioningArea.width
7581            ),
7582            Math.round(height + backgroundPositioningArea.top + y)
7583          ),
7584          new Vector(
7585            Math.round(backgroundPositioningArea.left),
7586            Math.round(height + backgroundPositioningArea.top + y)
7587          ),
7588        ];
7589      case BACKGROUND_REPEAT.REPEAT_Y:
7590        return [
7591          new Vector(
7592            Math.round(backgroundPositioningArea.left + x),
7593            Math.round(backgroundPositioningArea.top)
7594          ),
7595          new Vector(
7596            Math.round(backgroundPositioningArea.left + x + width),
7597            Math.round(backgroundPositioningArea.top)
7598          ),
7599          new Vector(
7600            Math.round(backgroundPositioningArea.left + x + width),
7601            Math.round(
7602              backgroundPositioningArea.height + backgroundPositioningArea.top
7603            )
7604          ),
7605          new Vector(
7606            Math.round(backgroundPositioningArea.left + x),
7607            Math.round(
7608              backgroundPositioningArea.height + backgroundPositioningArea.top
7609            )
7610          ),
7611        ];
7612      case BACKGROUND_REPEAT.NO_REPEAT:
7613        return [
7614          new Vector(
7615            Math.round(backgroundPositioningArea.left + x),
7616            Math.round(backgroundPositioningArea.top + y)
7617          ),
7618          new Vector(
7619            Math.round(backgroundPositioningArea.left + x + width),
7620            Math.round(backgroundPositioningArea.top + y)
7621          ),
7622          new Vector(
7623            Math.round(backgroundPositioningArea.left + x + width),
7624            Math.round(backgroundPositioningArea.top + y + height)
7625          ),
7626          new Vector(
7627            Math.round(backgroundPositioningArea.left + x),
7628            Math.round(backgroundPositioningArea.top + y + height)
7629          ),
7630        ];
7631      default:
7632        return [
7633          new Vector(
7634            Math.round(backgroundPaintingArea.left),
7635            Math.round(backgroundPaintingArea.top)
7636          ),
7637          new Vector(
7638            Math.round(
7639              backgroundPaintingArea.left + backgroundPaintingArea.width
7640            ),
7641            Math.round(backgroundPaintingArea.top)
7642          ),
7643          new Vector(
7644            Math.round(
7645              backgroundPaintingArea.left + backgroundPaintingArea.width
7646            ),
7647            Math.round(
7648              backgroundPaintingArea.height + backgroundPaintingArea.top
7649            )
7650          ),
7651          new Vector(
7652            Math.round(backgroundPaintingArea.left),
7653            Math.round(
7654              backgroundPaintingArea.height + backgroundPaintingArea.top
7655            )
7656          ),
7657        ];
7658    }
7659  };
7660
7661  var SMALL_IMAGE =
7662    "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
7663
7664  var SAMPLE_TEXT = "Hidden Text";
7665  var FontMetrics = /** @class */ (function () {
7666    function FontMetrics(document) {
7667      this._data = {};
7668      this._document = document;
7669    }
7670    FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {
7671      var container = this._document.createElement("div");
7672      var img = this._document.createElement("img");
7673      var span = this._document.createElement("span");
7674      var body = this._document.body;
7675      container.style.visibility = "hidden";
7676      container.style.fontFamily = fontFamily;
7677      container.style.fontSize = fontSize;
7678      container.style.margin = "0";
7679      container.style.padding = "0";
7680      body.appendChild(container);
7681      img.src = SMALL_IMAGE;
7682      img.width = 1;
7683      img.height = 1;
7684      img.style.margin = "0";
7685      img.style.padding = "0";
7686      img.style.verticalAlign = "baseline";
7687      span.style.fontFamily = fontFamily;
7688      span.style.fontSize = fontSize;
7689      span.style.margin = "0";
7690      span.style.padding = "0";
7691      span.appendChild(this._document.createTextNode(SAMPLE_TEXT));
7692      container.appendChild(span);
7693      container.appendChild(img);
7694      var baseline = img.offsetTop - span.offsetTop + 2;
7695      container.removeChild(span);
7696      container.appendChild(this._document.createTextNode(SAMPLE_TEXT));
7697      container.style.lineHeight = "normal";
7698      img.style.verticalAlign = "super";
7699      var middle = img.offsetTop - container.offsetTop + 2;
7700      body.removeChild(container);
7701      return { baseline: baseline, middle: middle };
7702    };
7703    FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {
7704      var key = fontFamily + " " + fontSize;
7705      if (typeof this._data[key] === "undefined") {
7706        this._data[key] = this.parseMetrics(fontFamily, fontSize);
7707      }
7708      return this._data[key];
7709    };
7710    return FontMetrics;
7711  })();
7712
7713  var MASK_OFFSET = 10000;
7714  var CanvasRenderer = /** @class */ (function () {
7715    function CanvasRenderer(options) {
7716      this._activeEffects = [];
7717      this.canvas = options.canvas
7718        ? options.canvas
7719        : document.createElement("canvas");
7720      this.ctx = this.canvas.getContext("2d");
7721      this.options = options;
7722      if (!options.canvas) {
7723        this.canvas.width = Math.floor(options.width * options.scale);
7724        this.canvas.height = Math.floor(options.height * options.scale);
7725        this.canvas.style.width = options.width + "px";
7726        this.canvas.style.height = options.height + "px";
7727      }
7728      this.fontMetrics = new FontMetrics(document);
7729      this.ctx.scale(this.options.scale, this.options.scale);
7730      this.ctx.translate(
7731        -options.x + options.scrollX,
7732        -options.y + options.scrollY
7733      );
7734      this.ctx.textBaseline = "bottom";
7735      this._activeEffects = [];
7736      Logger.getInstance(options.id).debug(
7737        "Canvas renderer initialized (" +
7738          options.width +
7739          "x" +
7740          options.height +
7741          " at " +
7742          options.x +
7743          "," +
7744          options.y +
7745          ") with scale " +
7746          options.scale
7747      );
7748    }
7749    CanvasRenderer.prototype.applyEffects = function (effects, target) {
7750      var _this = this;
7751      while (this._activeEffects.length) {
7752        this.popEffect();
7753      }
7754      effects
7755        .filter(function (effect) {
7756          return contains(effect.target, target);
7757        })
7758        .forEach(function (effect) {
7759          return _this.applyEffect(effect);
7760        });
7761    };
7762    CanvasRenderer.prototype.applyEffect = function (effect) {
7763      this.ctx.save();
7764      if (isTransformEffect(effect)) {
7765        this.ctx.translate(effect.offsetX, effect.offsetY);
7766        this.ctx.transform(
7767          effect.matrix[0],
7768          effect.matrix[1],
7769          effect.matrix[2],
7770          effect.matrix[3],
7771          effect.matrix[4],
7772          effect.matrix[5]
7773        );
7774        this.ctx.translate(-effect.offsetX, -effect.offsetY);
7775      }
7776      if (isClipEffect(effect)) {
7777        this.path(effect.path);
7778        this.ctx.clip();
7779      }
7780      this._activeEffects.push(effect);
7781    };
7782    CanvasRenderer.prototype.popEffect = function () {
7783      this._activeEffects.pop();
7784      this.ctx.restore();
7785    };
7786    CanvasRenderer.prototype.renderStack = function (stack) {
7787      return __awaiter(this, void 0, void 0, function () {
7788        var styles;
7789        return __generator(this, function (_a) {
7790          switch (_a.label) {
7791            case 0:
7792              styles = stack.element.container.styles;
7793              if (!styles.isVisible()) return [3 /*break*/, 2];
7794              this.ctx.globalAlpha = styles.opacity;
7795              return [4 /*yield*/, this.renderStackContent(stack)];
7796            case 1:
7797              _a.sent();
7798              _a.label = 2;
7799            case 2:
7800              return [2 /*return*/];
7801          }
7802        });
7803      });
7804    };
7805    CanvasRenderer.prototype.renderNode = function (paint) {
7806      return __awaiter(this, void 0, void 0, function () {
7807        return __generator(this, function (_a) {
7808          switch (_a.label) {
7809            case 0:
7810              if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];
7811              return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];
7812            case 1:
7813              _a.sent();
7814              return [4 /*yield*/, this.renderNodeContent(paint)];
7815            case 2:
7816              _a.sent();
7817              _a.label = 3;
7818            case 3:
7819              return [2 /*return*/];
7820          }
7821        });
7822      });
7823    };
7824    CanvasRenderer.prototype.renderTextWithLetterSpacing = function (
7825      text,
7826      letterSpacing
7827    ) {
7828      var _this = this;
7829      if (letterSpacing === 0) {
7830        this.ctx.fillText(
7831          text.text,
7832          text.bounds.left,
7833          text.bounds.top + text.bounds.height
7834        );
7835      } else {
7836        var letters = toCodePoints(text.text).map(function (i) {
7837          return fromCodePoint(i);
7838        });
7839        letters.reduce(function (left, letter) {
7840          _this.ctx.fillText(
7841            letter,
7842            left,
7843            text.bounds.top + text.bounds.height
7844          );
7845          return left + _this.ctx.measureText(letter).width;
7846        }, text.bounds.left);
7847      }
7848    };
7849    CanvasRenderer.prototype.createFontStyle = function (styles) {
7850      var fontVariant = styles.fontVariant
7851        .filter(function (variant) {
7852          return variant === "normal" || variant === "small-caps";
7853        })
7854        .join("");
7855      var fontFamily = styles.fontFamily.join(", ");
7856      var fontSize = isDimensionToken(styles.fontSize)
7857        ? "" + styles.fontSize.number + styles.fontSize.unit
7858        : styles.fontSize.number + "px";
7859      return [
7860        [
7861          styles.fontStyle,
7862          fontVariant,
7863          styles.fontWeight,
7864          fontSize,
7865          fontFamily,
7866        ].join(" "),
7867        fontFamily,
7868        fontSize,
7869      ];
7870    };
7871    CanvasRenderer.prototype.renderTextNode = function (text, styles) {
7872      return __awaiter(this, void 0, void 0, function () {
7873        var _a, font, fontFamily, fontSize;
7874        var _this = this;
7875        return __generator(this, function (_b) {
7876          (_a = this.createFontStyle(styles)),
7877            (font = _a[0]),
7878            (fontFamily = _a[1]),
7879            (fontSize = _a[2]);
7880          this.ctx.font = font;
7881          text.textBounds.forEach(function (text) {
7882            _this.ctx.fillStyle = asString(styles.color);
7883            _this.renderTextWithLetterSpacing(text, styles.letterSpacing);
7884            var textShadows = styles.textShadow;
7885            if (textShadows.length && text.text.trim().length) {
7886              textShadows
7887                .slice(0)
7888                .reverse()
7889                .forEach(function (textShadow) {
7890                  _this.ctx.shadowColor = asString(textShadow.color);
7891                  _this.ctx.shadowOffsetX =
7892                    textShadow.offsetX.number * _this.options.scale;
7893                  _this.ctx.shadowOffsetY =
7894                    textShadow.offsetY.number * _this.options.scale;
7895                  _this.ctx.shadowBlur = textShadow.blur.number;
7896                  _this.ctx.fillText(
7897                    text.text,
7898                    text.bounds.left,
7899                    text.bounds.top + text.bounds.height
7900                  );
7901                });
7902              _this.ctx.shadowColor = "";
7903              _this.ctx.shadowOffsetX = 0;
7904              _this.ctx.shadowOffsetY = 0;
7905              _this.ctx.shadowBlur = 0;
7906            }
7907            if (styles.textDecorationLine.length) {
7908              _this.ctx.fillStyle = asString(
7909                styles.textDecorationColor || styles.color
7910              );
7911              styles.textDecorationLine.forEach(function (textDecorationLine) {
7912                switch (textDecorationLine) {
7913                  case 1 /* UNDERLINE */:
7914                    // Draws a line at the baseline of the font
7915                    // TODO As some browsers display the line as more than 1px if the font-size is big,
7916                    // need to take that into account both in position and size
7917                    var baseline = _this.fontMetrics.getMetrics(
7918                      fontFamily,
7919                      fontSize
7920                    ).baseline;
7921                    _this.ctx.fillRect(
7922                      text.bounds.left,
7923                      Math.round(text.bounds.top + baseline),
7924                      text.bounds.width,
7925                      1
7926                    );
7927                    break;
7928                  case 2 /* OVERLINE */:
7929                    _this.ctx.fillRect(
7930                      text.bounds.left,
7931                      Math.round(text.bounds.top),
7932                      text.bounds.width,
7933                      1
7934                    );
7935                    break;
7936                  case 3 /* LINE_THROUGH */:
7937                    // TODO try and find exact position for line-through
7938                    var middle = _this.fontMetrics.getMetrics(
7939                      fontFamily,
7940                      fontSize
7941                    ).middle;
7942                    _this.ctx.fillRect(
7943                      text.bounds.left,
7944                      Math.ceil(text.bounds.top + middle),
7945                      text.bounds.width,
7946                      1
7947                    );
7948                    break;
7949                }
7950              });
7951            }
7952          });
7953          return [2 /*return*/];
7954        });
7955      });
7956    };
7957    CanvasRenderer.prototype.renderReplacedElement = function (
7958      container,
7959      curves,
7960      image
7961    ) {
7962      if (
7963        image &&
7964        container.intrinsicWidth > 0 &&
7965        container.intrinsicHeight > 0
7966      ) {
7967        var box = contentBox(container);
7968        var path = calculatePaddingBoxPath(curves);
7969        this.path(path);
7970        this.ctx.save();
7971        this.ctx.clip();
7972        this.ctx.drawImage(
7973          image,
7974          0,
7975          0,
7976          container.intrinsicWidth,
7977          container.intrinsicHeight,
7978          box.left,
7979          box.top,
7980          box.width,
7981          box.height
7982        );
7983        this.ctx.restore();
7984      }
7985    };
7986    CanvasRenderer.prototype.renderNodeContent = function (paint) {
7987      return __awaiter(this, void 0, void 0, function () {
7988        var container,
7989          curves,
7990          styles,
7991          _i,
7992          _a,
7993          child,
7994          image,
7995          e_1,
7996          image,
7997          e_2,
7998          iframeRenderer,
7999          canvas,
8000          size,
8001          bounds,
8002          x,
8003          textBounds,
8004          img,
8005          image,
8006          url,
8007          e_3,
8008          bounds;
8009        return __generator(this, function (_b) {
8010          switch (_b.label) {
8011            case 0:
8012              this.applyEffects(paint.effects, 4 /* CONTENT */);
8013              container = paint.container;
8014              curves = paint.curves;
8015              styles = container.styles;
8016              (_i = 0), (_a = container.textNodes);
8017              _b.label = 1;
8018            case 1:
8019              if (!(_i < _a.length)) return [3 /*break*/, 4];
8020              child = _a[_i];
8021              return [4 /*yield*/, this.renderTextNode(child, styles)];
8022            case 2:
8023              _b.sent();
8024              _b.label = 3;
8025            case 3:
8026              _i++;
8027              return [3 /*break*/, 1];
8028            case 4:
8029              if (!(container instanceof ImageElementContainer))
8030                return [3 /*break*/, 8];
8031              _b.label = 5;
8032            case 5:
8033              _b.trys.push([5, 7, , 8]);
8034              return [4 /*yield*/, this.options.cache.match(container.src)];
8035            case 6:
8036              image = _b.sent();
8037              this.renderReplacedElement(container, curves, image);
8038              return [3 /*break*/, 8];
8039            case 7:
8040              e_1 = _b.sent();
8041              Logger.getInstance(this.options.id).error(
8042                "Error loading image " + container.src
8043              );
8044              return [3 /*break*/, 8];
8045            case 8:
8046              if (container instanceof CanvasElementContainer) {
8047                this.renderReplacedElement(container, curves, container.canvas);
8048              }
8049              if (!(container instanceof SVGElementContainer))
8050                return [3 /*break*/, 12];
8051              _b.label = 9;
8052            case 9:
8053              _b.trys.push([9, 11, , 12]);
8054              return [4 /*yield*/, this.options.cache.match(container.svg)];
8055            case 10:
8056              image = _b.sent();
8057              this.renderReplacedElement(container, curves, image);
8058              return [3 /*break*/, 12];
8059            case 11:
8060              e_2 = _b.sent();
8061              Logger.getInstance(this.options.id).error(
8062                "Error loading svg " + container.svg.substring(0, 255)
8063              );
8064              return [3 /*break*/, 12];
8065            case 12:
8066              if (
8067                !(container instanceof IFrameElementContainer && container.tree)
8068              )
8069                return [3 /*break*/, 14];
8070              iframeRenderer = new CanvasRenderer({
8071                id: this.options.id,
8072                scale: this.options.scale,
8073                backgroundColor: container.backgroundColor,
8074                x: 0,
8075                y: 0,
8076                scrollX: 0,
8077                scrollY: 0,
8078                width: container.width,
8079                height: container.height,
8080                cache: this.options.cache,
8081                windowWidth: container.width,
8082                windowHeight: container.height,
8083              });
8084              return [4 /*yield*/, iframeRenderer.render(container.tree)];
8085            case 13:
8086              canvas = _b.sent();
8087              if (container.width && container.height) {
8088                this.ctx.drawImage(
8089                  canvas,
8090                  0,
8091                  0,
8092                  container.width,
8093                  container.height,
8094                  container.bounds.left,
8095                  container.bounds.top,
8096                  container.bounds.width,
8097                  container.bounds.height
8098                );
8099              }
8100              _b.label = 14;
8101            case 14:
8102              if (container instanceof InputElementContainer) {
8103                size = Math.min(
8104                  container.bounds.width,
8105                  container.bounds.height
8106                );
8107                if (container.type === CHECKBOX) {
8108                  if (container.checked) {
8109                    this.ctx.save();
8110                    this.path([
8111                      new Vector(
8112                        container.bounds.left + size * 0.39363,
8113                        container.bounds.top + size * 0.79
8114                      ),
8115                      new Vector(
8116                        container.bounds.left + size * 0.16,
8117                        container.bounds.top + size * 0.5549
8118                      ),
8119                      new Vector(
8120                        container.bounds.left + size * 0.27347,
8121                        container.bounds.top + size * 0.44071
8122                      ),
8123                      new Vector(
8124                        container.bounds.left + size * 0.39694,
8125                        container.bounds.top + size * 0.5649
8126                      ),
8127                      new Vector(
8128                        container.bounds.left + size * 0.72983,
8129                        container.bounds.top + size * 0.23
8130                      ),
8131                      new Vector(
8132                        container.bounds.left + size * 0.84,
8133                        container.bounds.top + size * 0.34085
8134                      ),
8135                      new Vector(
8136                        container.bounds.left + size * 0.39363,
8137                        container.bounds.top + size * 0.79
8138                      ),
8139                    ]);
8140                    this.ctx.fillStyle = asString(INPUT_COLOR);
8141                    this.ctx.fill();
8142                    this.ctx.restore();
8143                  }
8144                } else if (container.type === RADIO) {
8145                  if (container.checked) {
8146                    this.ctx.save();
8147                    this.ctx.beginPath();
8148                    this.ctx.arc(
8149                      container.bounds.left + size / 2,
8150                      container.bounds.top + size / 2,
8151                      size / 4,
8152                      0,
8153                      Math.PI * 2,
8154                      true
8155                    );
8156                    this.ctx.fillStyle = asString(INPUT_COLOR);
8157                    this.ctx.fill();
8158                    this.ctx.restore();
8159                  }
8160                }
8161              }
8162              if (isTextInputElement(container) && container.value.length) {
8163                this.ctx.font = this.createFontStyle(styles)[0];
8164                this.ctx.fillStyle = asString(styles.color);
8165                this.ctx.textBaseline = "middle";
8166                this.ctx.textAlign = canvasTextAlign(
8167                  container.styles.textAlign
8168                );
8169                bounds = contentBox(container);
8170                x = 0;
8171                switch (container.styles.textAlign) {
8172                  case TEXT_ALIGN.CENTER:
8173                    x += bounds.width / 2;
8174                    break;
8175                  case TEXT_ALIGN.RIGHT:
8176                    x += bounds.width;
8177                    break;
8178                }
8179                textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);
8180                this.ctx.save();
8181                this.path([
8182                  new Vector(bounds.left, bounds.top),
8183                  new Vector(bounds.left + bounds.width, bounds.top),
8184                  new Vector(
8185                    bounds.left + bounds.width,
8186                    bounds.top + bounds.height
8187                  ),
8188                  new Vector(bounds.left, bounds.top + bounds.height),
8189                ]);
8190                this.ctx.clip();
8191                this.renderTextWithLetterSpacing(
8192                  new TextBounds(container.value, textBounds),
8193                  styles.letterSpacing
8194                );
8195                this.ctx.restore();
8196                this.ctx.textBaseline = "bottom";
8197                this.ctx.textAlign = "left";
8198              }
8199              if (!contains(container.styles.display, 2048 /* LIST_ITEM */))
8200                return [3 /*break*/, 20];
8201              if (!(container.styles.listStyleImage !== null))
8202                return [3 /*break*/, 19];
8203              img = container.styles.listStyleImage;
8204              if (!(img.type === CSSImageType.URL)) return [3 /*break*/, 18];
8205              image = void 0;
8206              url = img.url;
8207              _b.label = 15;
8208            case 15:
8209              _b.trys.push([15, 17, , 18]);
8210              return [4 /*yield*/, this.options.cache.match(url)];
8211            case 16:
8212              image = _b.sent();
8213              this.ctx.drawImage(
8214                image,
8215                container.bounds.left - (image.width + 10),
8216                container.bounds.top
8217              );
8218              return [3 /*break*/, 18];
8219            case 17:
8220              e_3 = _b.sent();
8221              Logger.getInstance(this.options.id).error(
8222                "Error loading list-style-image " + url
8223              );
8224              return [3 /*break*/, 18];
8225            case 18:
8226              return [3 /*break*/, 20];
8227            case 19:
8228              if (
8229                paint.listValue &&
8230                container.styles.listStyleType !== LIST_STYLE_TYPE.NONE
8231              ) {
8232                this.ctx.font = this.createFontStyle(styles)[0];
8233                this.ctx.fillStyle = asString(styles.color);
8234                this.ctx.textBaseline = "middle";
8235                this.ctx.textAlign = "right";
8236                bounds = new Bounds(
8237                  container.bounds.left,
8238                  container.bounds.top +
8239                    getAbsoluteValue(
8240                      container.styles.paddingTop,
8241                      container.bounds.width
8242                    ),
8243                  container.bounds.width,
8244                  computeLineHeight(styles.lineHeight, styles.fontSize.number) /
8245                    2 +
8246                    1
8247                );
8248                this.renderTextWithLetterSpacing(
8249                  new TextBounds(paint.listValue, bounds),
8250                  styles.letterSpacing
8251                );
8252                this.ctx.textBaseline = "bottom";
8253                this.ctx.textAlign = "left";
8254              }
8255              _b.label = 20;
8256            case 20:
8257              return [2 /*return*/];
8258          }
8259        });
8260      });
8261    };
8262    CanvasRenderer.prototype.renderStackContent = function (stack) {
8263      return __awaiter(this, void 0, void 0, function () {
8264        var _i,
8265          _a,
8266          child,
8267          _b,
8268          _c,
8269          child,
8270          _d,
8271          _e,
8272          child,
8273          _f,
8274          _g,
8275          child,
8276          _h,
8277          _j,
8278          child,
8279          _k,
8280          _l,
8281          child,
8282          _m,
8283          _o,
8284          child;
8285        return __generator(this, function (_p) {
8286          switch (_p.label) {
8287            case 0:
8288              // https://www.w3.org/TR/css-position-3/#painting-order
8289              // 1. the background and borders of the element forming the stacking context.
8290              return [
8291                4 /*yield*/,
vendor: 5,191 bytes, lines 8292-8441
8292                this.renderNodeBackgroundAndBorders(stack.element),
8293              ];
8294            case 1:
8295              // https://www.w3.org/TR/css-position-3/#painting-order
8296              // 1. the background and borders of the element forming the stacking context.
8297              _p.sent();
8298              (_i = 0), (_a = stack.negativeZIndex);
8299              _p.label = 2;
8300            case 2:
8301              if (!(_i < _a.length)) return [3 /*break*/, 5];
8302              child = _a[_i];
8303              return [4 /*yield*/, this.renderStack(child)];
8304            case 3:
8305              _p.sent();
8306              _p.label = 4;
8307            case 4:
8308              _i++;
8309              return [3 /*break*/, 2];
8310            case 5:
8311              // 3. For all its in-flow, non-positioned, block-level descendants in tree order:
8312              return [4 /*yield*/, this.renderNodeContent(stack.element)];
8313            case 6:
8314              // 3. For all its in-flow, non-positioned, block-level descendants in tree order:
8315              _p.sent();
8316              (_b = 0), (_c = stack.nonInlineLevel);
8317              _p.label = 7;
8318            case 7:
8319              if (!(_b < _c.length)) return [3 /*break*/, 10];
8320              child = _c[_b];
8321              return [4 /*yield*/, this.renderNode(child)];
8322            case 8:
8323              _p.sent();
8324              _p.label = 9;
8325            case 9:
8326              _b++;
8327              return [3 /*break*/, 7];
8328            case 10:
8329              (_d = 0), (_e = stack.nonPositionedFloats);
8330              _p.label = 11;
8331            case 11:
8332              if (!(_d < _e.length)) return [3 /*break*/, 14];
8333              child = _e[_d];
8334              return [4 /*yield*/, this.renderStack(child)];
8335            case 12:
8336              _p.sent();
8337              _p.label = 13;
8338            case 13:
8339              _d++;
8340              return [3 /*break*/, 11];
8341            case 14:
8342              (_f = 0), (_g = stack.nonPositionedInlineLevel);
8343              _p.label = 15;
8344            case 15:
8345              if (!(_f < _g.length)) return [3 /*break*/, 18];
8346              child = _g[_f];
8347              return [4 /*yield*/, this.renderStack(child)];
8348            case 16:
8349              _p.sent();
8350              _p.label = 17;
8351            case 17:
8352              _f++;
8353              return [3 /*break*/, 15];
8354            case 18:
8355              (_h = 0), (_j = stack.inlineLevel);
8356              _p.label = 19;
8357            case 19:
8358              if (!(_h < _j.length)) return [3 /*break*/, 22];
8359              child = _j[_h];
8360              return [4 /*yield*/, this.renderNode(child)];
8361            case 20:
8362              _p.sent();
8363              _p.label = 21;
8364            case 21:
8365              _h++;
8366              return [3 /*break*/, 19];
8367            case 22:
8368              (_k = 0), (_l = stack.zeroOrAutoZIndexOrTransformedOrOpacity);
8369              _p.label = 23;
8370            case 23:
8371              if (!(_k < _l.length)) return [3 /*break*/, 26];
8372              child = _l[_k];
8373              return [4 /*yield*/, this.renderStack(child)];
8374            case 24:
8375              _p.sent();
8376              _p.label = 25;
8377            case 25:
8378              _k++;
8379              return [3 /*break*/, 23];
8380            case 26:
8381              (_m = 0), (_o = stack.positiveZIndex);
8382              _p.label = 27;
8383            case 27:
8384              if (!(_m < _o.length)) return [3 /*break*/, 30];
8385              child = _o[_m];
8386              return [4 /*yield*/, this.renderStack(child)];
8387            case 28:
8388              _p.sent();
8389              _p.label = 29;
8390            case 29:
8391              _m++;
8392              return [3 /*break*/, 27];
8393            case 30:
8394              return [2 /*return*/];
8395          }
8396        });
8397      });
8398    };
8399    CanvasRenderer.prototype.mask = function (paths) {
8400      this.ctx.beginPath();
8401      this.ctx.moveTo(0, 0);
8402      this.ctx.lineTo(this.canvas.width, 0);
8403      this.ctx.lineTo(this.canvas.width, this.canvas.height);
8404      this.ctx.lineTo(0, this.canvas.height);
8405      this.ctx.lineTo(0, 0);
8406      this.formatPath(paths.slice(0).reverse());
8407      this.ctx.closePath();
8408    };
8409    CanvasRenderer.prototype.path = function (paths) {
8410      this.ctx.beginPath();
8411      this.formatPath(paths);
8412      this.ctx.closePath();
8413    };
8414    CanvasRenderer.prototype.formatPath = function (paths) {
8415      var _this = this;
8416      paths.forEach(function (point, index) {
8417        var start = isBezierCurve(point) ? point.start : point;
8418        if (index === 0) {
8419          _this.ctx.moveTo(start.x, start.y);
8420        } else {
8421          _this.ctx.lineTo(start.x, start.y);
8422        }
8423        if (isBezierCurve(point)) {
8424          _this.ctx.bezierCurveTo(
8425            point.startControl.x,
8426            point.startControl.y,
8427            point.endControl.x,
8428            point.endControl.y,
8429            point.end.x,
8430            point.end.y
8431          );
8432        }
8433      });
8434    };
8435    CanvasRenderer.prototype.renderRepeat = function (
8436      path,
8437      pattern,
8438      offsetX,
8439      offsetY
8440    ) {
8441      this.path(path);
8442      this.ctx.fillStyle = pattern;
8443      this.ctx.translate(offsetX, offsetY);
8444      this.ctx.fill();
8445      this.ctx.translate(-offsetX, -offsetY);
8446    };
8447    CanvasRenderer.prototype.resizeImage = function (image, width, height) {
8448      if (image.width === width && image.height === height) {
8449        return image;
8450      }
8451      var canvas = this.canvas.ownerDocument.createElement("canvas");
8452      canvas.width = width;
8453      canvas.height = height;
8454      var ctx = canvas.getContext("2d");
8455      ctx.drawImage(
8456        image,
8457        0,
8458        0,
8459        image.width,
8460        image.height,
8461        0,
8462        0,
8463        width,
8464        height
8465      );
8466      return canvas;
8467    };
8468    CanvasRenderer.prototype.renderBackgroundImage = function (container) {
8469      return __awaiter(this, void 0, void 0, function () {
8470        var index, _loop_1, this_1, _i, _a, backgroundImage;
8471        return __generator(this, function (_b) {
8472          switch (_b.label) {
8473            case 0:
8474              index = container.styles.backgroundImage.length - 1;
8475              _loop_1 = function (backgroundImage) {
8476                var image,
8477                  url,
8478                  e_4,
8479                  _a,
8480                  path,
8481                  x,
8482                  y,
8483                  width,
8484                  height,
8485                  pattern,
8486                  _b,
8487                  path,
8488                  x,
8489                  y,
8490                  width,
8491                  height,
8492                  _c,
8493                  lineLength,
8494                  x0,
8495                  x1,
8496                  y0,
8497                  y1,
8498                  canvas,
8499                  ctx,
8500                  gradient_1,
8501                  pattern,
8502                  _d,
8503                  path,
8504                  left,
8505                  top_1,
8506                  width,
8507                  height,
8508                  position,
8509                  x,
8510                  y,
8511                  _e,
8512                  rx,
8513                  ry,
8514                  radialGradient_1,
8515                  midX,
8516                  midY,
8517                  f,
8518                  invF;
8519                return __generator(this, function (_f) {
8520                  switch (_f.label) {
8521                    case 0:
8522                      if (!(backgroundImage.type === CSSImageType.URL))
8523                        return [3 /*break*/, 5];
8524                      image = void 0;
8525                      url = backgroundImage.url;
8526                      _f.label = 1;
8527                    case 1:
8528                      _f.trys.push([1, 3, , 4]);
8529                      return [4 /*yield*/, this_1.options.cache.match(url)];
8530                    case 2:
8531                      image = _f.sent();
8532                      return [3 /*break*/, 4];
8533                    case 3:
8534                      e_4 = _f.sent();
8535                      Logger.getInstance(this_1.options.id).error(
8536                        "Error loading background-image " + url
8537                      );
8538                      return [3 /*break*/, 4];
8539                    case 4:
8540                      if (image) {
8541                        (_a = calculateBackgroundRendering(container, index, [
8542                          image.width,
8543                          image.height,
8544                          image.width / image.height,
8545                        ])),
8546                          (path = _a[0]),
8547                          (x = _a[1]),
8548                          (y = _a[2]),
8549                          (width = _a[3]),
8550                          (height = _a[4]);
8551                        pattern = this_1.ctx.createPattern(
8552                          this_1.resizeImage(image, width, height),
8553                          "repeat"
8554                        );
8555                        this_1.renderRepeat(path, pattern, x, y);
8556                      }
8557                      return [3 /*break*/, 6];
8558                    case 5:
8559                      if (isLinearGradient(backgroundImage)) {
8560                        (_b = calculateBackgroundRendering(container, index, [
8561                          null,
8562                          null,
8563                          null,
8564                        ])),
8565                          (path = _b[0]),
8566                          (x = _b[1]),
8567                          (y = _b[2]),
8568                          (width = _b[3]),
8569                          (height = _b[4]);
8570                        (_c = calculateGradientDirection(
8571                          backgroundImage.angle,
8572                          width,
8573                          height
8574                        )),
8575                          (lineLength = _c[0]),
8576                          (x0 = _c[1]),
8577                          (x1 = _c[2]),
8578                          (y0 = _c[3]),
8579                          (y1 = _c[4]);
8580                        canvas = document.createElement("canvas");
8581                        canvas.width = width;
8582                        canvas.height = height;
8583                        ctx = canvas.getContext("2d");
8584                        gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);
8585                        processColorStops(
8586                          backgroundImage.stops,
8587                          lineLength
8588                        ).forEach(function (colorStop) {
8589                          return gradient_1.addColorStop(
8590                            colorStop.stop,
8591                            asString(colorStop.color)
8592                          );
8593                        });
8594                        ctx.fillStyle = gradient_1;
8595                        ctx.fillRect(0, 0, width, height);
8596                        if (width > 0 && height > 0) {
8597                          pattern = this_1.ctx.createPattern(canvas, "repeat");
8598                          this_1.renderRepeat(path, pattern, x, y);
8599                        }
8600                      } else if (isRadialGradient(backgroundImage)) {
8601                        (_d = calculateBackgroundRendering(container, index, [
8602                          null,
8603                          null,
8604                          null,
8605                        ])),
8606                          (path = _d[0]),
8607                          (left = _d[1]),
8608                          (top_1 = _d[2]),
8609                          (width = _d[3]),
8610                          (height = _d[4]);
8611                        position =
8612                          backgroundImage.position.length === 0
8613                            ? [FIFTY_PERCENT]
8614                            : backgroundImage.position;
8615                        x = getAbsoluteValue(position[0], width);
8616                        y = getAbsoluteValue(
8617                          position[position.length - 1],
8618                          height
8619                        );
8620                        (_e = calculateRadius(
8621                          backgroundImage,
8622                          x,
8623                          y,
8624                          width,
8625                          height
8626                        )),
8627                          (rx = _e[0]),
8628                          (ry = _e[1]);
8629                        if (rx > 0 && rx > 0) {
8630                          radialGradient_1 = this_1.ctx.createRadialGradient(
8631                            left + x,
8632                            top_1 + y,
8633                            0,
8634                            left + x,
8635                            top_1 + y,
8636                            rx
8637                          );
8638                          processColorStops(
8639                            backgroundImage.stops,
8640                            rx * 2
8641                          ).forEach(function (colorStop) {
8642                            return radialGradient_1.addColorStop(
8643                              colorStop.stop,
8644                              asString(colorStop.color)
8645                            );
8646                          });
8647                          this_1.path(path);
8648                          this_1.ctx.fillStyle = radialGradient_1;
8649                          if (rx !== ry) {
8650                            midX =
8651                              container.bounds.left +
8652                              0.5 * container.bounds.width;
8653                            midY =
8654                              container.bounds.top +
8655                              0.5 * container.bounds.height;
8656                            f = ry / rx;
8657                            invF = 1 / f;
8658                            this_1.ctx.save();
8659                            this_1.ctx.translate(midX, midY);
8660                            this_1.ctx.transform(1, 0, 0, f, 0, 0);
8661                            this_1.ctx.translate(-midX, -midY);
8662                            this_1.ctx.fillRect(
8663                              left,
8664                              invF * (top_1 - midY) + midY,
8665                              width,
8666                              height * invF
8667                            );
vendor: 5,048 bytes, lines 8668-8797
8668                            this_1.ctx.restore();
8669                          } else {
8670                            this_1.ctx.fill();
8671                          }
8672                        }
8673                      }
8674                      _f.label = 6;
8675                    case 6:
8676                      index--;
8677                      return [2 /*return*/];
8678                  }
8679                });
8680              };
8681              this_1 = this;
8682              (_i = 0),
8683                (_a = container.styles.backgroundImage.slice(0).reverse());
8684              _b.label = 1;
8685            case 1:
8686              if (!(_i < _a.length)) return [3 /*break*/, 4];
8687              backgroundImage = _a[_i];
8688              return [5 /*yield**/, _loop_1(backgroundImage)];
8689            case 2:
8690              _b.sent();
8691              _b.label = 3;
8692            case 3:
8693              _i++;
8694              return [3 /*break*/, 1];
8695            case 4:
8696              return [2 /*return*/];
8697          }
8698        });
8699      });
8700    };
8701    CanvasRenderer.prototype.renderBorder = function (
8702      color,
8703      side,
8704      curvePoints
8705    ) {
8706      return __awaiter(this, void 0, void 0, function () {
8707        return __generator(this, function (_a) {
8708          this.path(parsePathForBorder(curvePoints, side));
8709          this.ctx.fillStyle = asString(color);
8710          this.ctx.fill();
8711          return [2 /*return*/];
8712        });
8713      });
8714    };
8715    CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {
8716      return __awaiter(this, void 0, void 0, function () {
8717        var styles,
8718          hasBackground,
8719          borders,
8720          backgroundPaintingArea,
8721          side,
8722          _i,
8723          borders_1,
8724          border;
8725        var _this = this;
8726        return __generator(this, function (_a) {
8727          switch (_a.label) {
8728            case 0:
8729              this.applyEffects(paint.effects, 2 /* BACKGROUND_BORDERS */);
8730              styles = paint.container.styles;
8731              hasBackground =
8732                !isTransparent(styles.backgroundColor) ||
8733                styles.backgroundImage.length;
8734              borders = [
8735                { style: styles.borderTopStyle, color: styles.borderTopColor },
8736                {
8737                  style: styles.borderRightStyle,
8738                  color: styles.borderRightColor,
8739                },
8740                {
8741                  style: styles.borderBottomStyle,
8742                  color: styles.borderBottomColor,
8743                },
8744                {
8745                  style: styles.borderLeftStyle,
8746                  color: styles.borderLeftColor,
8747                },
8748              ];
8749              backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(
8750                getBackgroundValueForIndex(styles.backgroundClip, 0),
8751                paint.curves
8752              );
8753              if (!(hasBackground || styles.boxShadow.length))
8754                return [3 /*break*/, 2];
8755              this.ctx.save();
8756              this.path(backgroundPaintingArea);
8757              this.ctx.clip();
8758              if (!isTransparent(styles.backgroundColor)) {
8759                this.ctx.fillStyle = asString(styles.backgroundColor);
8760                this.ctx.fill();
8761              }
8762              return [4 /*yield*/, this.renderBackgroundImage(paint.container)];
8763            case 1:
8764              _a.sent();
8765              this.ctx.restore();
8766              styles.boxShadow
8767                .slice(0)
8768                .reverse()
8769                .forEach(function (shadow) {
8770                  _this.ctx.save();
8771                  var borderBoxArea = calculateBorderBoxPath(paint.curves);
8772                  var maskOffset = shadow.inset ? 0 : MASK_OFFSET;
8773                  var shadowPaintingArea = transformPath(
8774                    borderBoxArea,
8775                    -maskOffset +
8776                      (shadow.inset ? 1 : -1) * shadow.spread.number,
8777                    (shadow.inset ? 1 : -1) * shadow.spread.number,
8778                    shadow.spread.number * (shadow.inset ? -2 : 2),
8779                    shadow.spread.number * (shadow.inset ? -2 : 2)
8780                  );
8781                  if (shadow.inset) {
8782                    _this.path(borderBoxArea);
8783                    _this.ctx.clip();
8784                    _this.mask(shadowPaintingArea);
8785                  } else {
8786                    _this.mask(borderBoxArea);
8787                    _this.ctx.clip();
8788                    _this.path(shadowPaintingArea);
8789                  }
8790                  _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;
8791                  _this.ctx.shadowOffsetY = shadow.offsetY.number;
8792                  _this.ctx.shadowColor = asString(shadow.color);
8793                  _this.ctx.shadowBlur = shadow.blur.number;
8794                  _this.ctx.fillStyle = shadow.inset
8795                    ? asString(shadow.color)
8796                    : "rgba(0,0,0,1)";
8797                  _this.ctx.fill();
8798                  _this.ctx.restore();
8799                });
8800              _a.label = 2;
8801            case 2:
8802              side = 0;
8803              (_i = 0), (borders_1 = borders);
8804              _a.label = 3;
8805            case 3:
8806              if (!(_i < borders_1.length)) return [3 /*break*/, 7];
8807              border = borders_1[_i];
8808              if (
8809                !(
8810                  border.style !== BORDER_STYLE.NONE &&
8811                  !isTransparent(border.color)
8812                )
8813              )
8814                return [3 /*break*/, 5];
8815              return [
8816                4 /*yield*/,
8817                this.renderBorder(border.color, side, paint.curves),
8818              ];
8819            case 4:
8820              _a.sent();
8821              _a.label = 5;
8822            case 5:
8823              side++;
8824              _a.label = 6;
8825            case 6:
8826              _i++;
8827              return [3 /*break*/, 3];
8828            case 7:
8829              return [2 /*return*/];
8830          }
8831        });
8832      });
8833    };
8834    CanvasRenderer.prototype.render = function (element) {
8835      return __awaiter(this, void 0, void 0, function () {
8836        var stack;
8837        return __generator(this, function (_a) {
8838          switch (_a.label) {
8839            case 0:
8840              if (this.options.backgroundColor) {
8841                this.ctx.fillStyle = asString(this.options.backgroundColor);
8842                this.ctx.fillRect(
8843                  this.options.x - this.options.scrollX,
8844                  this.options.y - this.options.scrollY,
8845                  this.options.width,
8846                  this.options.height
8847                );
8848              }
8849              stack = parseStackingContexts(element);
8850              return [4 /*yield*/, this.renderStack(stack)];
8851            case 1:
8852              _a.sent();
8853              this.applyEffects([], 2 /* BACKGROUND_BORDERS */);
8854              return [2 /*return*/, this.canvas];
8855          }
8856        });
8857      });
8858    };
8859    return CanvasRenderer;
8860  })();
8861  var isTextInputElement = function (container) {
8862    if (container instanceof TextareaElementContainer) {
8863      return true;
8864    } else if (container instanceof SelectElementContainer) {
8865      return true;
8866    } else if (
8867      container instanceof InputElementContainer &&
8868      container.type !== RADIO &&
8869      container.type !== CHECKBOX
8870    ) {
8871      return true;
8872    }
8873    return false;
8874  };
8875  var calculateBackgroundCurvedPaintingArea = function (clip, curves) {
8876    switch (clip) {
8877      case BACKGROUND_CLIP.BORDER_BOX:
8878        return calculateBorderBoxPath(curves);
8879      case BACKGROUND_CLIP.CONTENT_BOX:
8880        return calculateContentBoxPath(curves);
8881      case BACKGROUND_CLIP.PADDING_BOX:
8882      default:
8883        return calculatePaddingBoxPath(curves);
8884    }
8885  };
8886  var canvasTextAlign = function (textAlign) {
8887    switch (textAlign) {
8888      case TEXT_ALIGN.CENTER:
8889        return "center";
8890      case TEXT_ALIGN.RIGHT:
8891        return "right";
8892      case TEXT_ALIGN.LEFT:
8893      default:
8894        return "left";
8895    }
8896  };
8897
8898  var ForeignObjectRenderer = /** @class */ (function () {
8899    function ForeignObjectRenderer(options) {
8900      this.canvas = options.canvas
8901        ? options.canvas
8902        : document.createElement("canvas");
8903      this.ctx = this.canvas.getContext("2d");
8904      this.options = options;
8905      this.canvas.width = Math.floor(options.width * options.scale);
8906      this.canvas.height = Math.floor(options.height * options.scale);
8907      this.canvas.style.width = options.width + "px";
8908      this.canvas.style.height = options.height + "px";
8909      this.ctx.scale(this.options.scale, this.options.scale);
8910      this.ctx.translate(
8911        -options.x + options.scrollX,
8912        -options.y + options.scrollY
8913      );
8914      Logger.getInstance(options.id).debug(
8915        "EXPERIMENTAL ForeignObject renderer initialized (" +
8916          options.width +
8917          "x" +
8918          options.height +
8919          " at " +
8920          options.x +
8921          "," +
8922          options.y +
8923          ") with scale " +
8924          options.scale
8925      );
8926    }
8927    ForeignObjectRenderer.prototype.render = function (element) {
8928      return __awaiter(this, void 0, void 0, function () {
8929        var svg, img;
8930        return __generator(this, function (_a) {
8931          switch (_a.label) {
8932            case 0:
8933              svg = createForeignObjectSVG(
8934                Math.max(this.options.windowWidth, this.options.width) *
8935                  this.options.scale,
8936                Math.max(this.options.windowHeight, this.options.height) *
8937                  this.options.scale,
8938                this.options.scrollX * this.options.scale,
8939                this.options.scrollY * this.options.scale,
8940                element
8941              );
8942              return [4 /*yield*/, loadSerializedSVG$1(svg)];
8943            case 1:
8944              img = _a.sent();
8945              if (this.options.backgroundColor) {
8946                this.ctx.fillStyle = asString(this.options.backgroundColor);
8947                this.ctx.fillRect(
8948                  0,
8949                  0,
8950                  this.options.width * this.options.scale,
8951                  this.options.height * this.options.scale
8952                );
8953              }
8954              this.ctx.drawImage(
8955                img,
8956                -this.options.x * this.options.scale,
8957                -this.options.y * this.options.scale
8958              );
8959              return [2 /*return*/, this.canvas];
8960          }
8961        });
8962      });
8963    };
8964    return ForeignObjectRenderer;
8965  })();
8966  var loadSerializedSVG$1 = function (svg) {
8967    return new Promise(function (resolve, reject) {
8968      var img = new Image();
8969      img.onload = function () {
8970        resolve(img);
8971      };
8972      img.onerror = reject;
8973      img.src =
8974        "data:image/svg+xml;charset=utf-8," +
8975        encodeURIComponent(new XMLSerializer().serializeToString(svg));
8976    });
8977  };
8978
8979  var _this = undefined;
8980  var parseColor$1 = function (value) {
8981    return color.parse(Parser.create(value).parseComponentValue());
8982  };
8983  var html2canvas = function (element, options) {
8984    if (options === void 0) {
8985      options = {};
8986    }
8987    return renderElement(element, options);
8988  };
8989  if (typeof window !== "undefined") {
8990    CacheStorage.setContext(window);
8991  }
8992  var renderElement = function (element, opts) {
8993    return __awaiter(_this, void 0, void 0, function () {
8994      var ownerDocument,
8995        defaultView,
8996        instanceName,
8997        _a,
8998        width,
8999        height,
9000        left,
9001        top,
9002        defaultResourceOptions,
9003        resourceOptions,
9004        defaultOptions,
9005        options,
9006        windowBounds,
9007        documentCloner,
9008        clonedElement,
9009        container,
9010        documentBackgroundColor,
9011        bodyBackgroundColor,
9012        bgColor,
9013        defaultBackgroundColor,
9014        backgroundColor,
9015        renderOptions,
9016        canvas,
9017        renderer,
9018        root,
9019        renderer;
9020      return __generator(this, function (_b) {
9021        switch (_b.label) {
9022          case 0:
9023            ownerDocument = element.ownerDocument;
9024            if (!ownerDocument) {
9025              throw new Error("Element is not attached to a Document");
9026            }
9027            defaultView = ownerDocument.defaultView;
9028            if (!defaultView) {
9029              throw new Error("Document is not attached to a Window");
9030            }
9031            instanceName = (
9032              Math.round(Math.random() * 1000) + Date.now()
9033            ).toString(16);
9034            (_a =
9035              isBodyElement(element) || isHTMLElement(element)
9036                ? parseDocumentSize(ownerDocument)
9037                : parseBounds(element)),
9038              (width = _a.width),
9039              (height = _a.height),
9040              (left = _a.left),
9041              (top = _a.top);
9042            defaultResourceOptions = {
9043              allowTaint: false,
9044              imageTimeout: 15000,
9045              proxy: undefined,
9046              useCORS: false,
9047            };
9048            resourceOptions = __assign({}, defaultResourceOptions, opts);
9049            defaultOptions = {
9050              backgroundColor: "#ffffff",
9051              cache: opts.cache
9052                ? opts.cache
9053                : CacheStorage.create(instanceName, resourceOptions),
9054              logging: true,
9055              removeContainer: true,
9056              foreignObjectRendering: false,
9057              scale: defaultView.devicePixelRatio || 1,
9058              windowWidth: defaultView.innerWidth,
9059              windowHeight: defaultView.innerHeight,
9060              scrollX: defaultView.pageXOffset,
9061              scrollY: defaultView.pageYOffset,
9062              x: left,
9063              y: top,
9064              width: Math.ceil(width),
9065              height: Math.ceil(height),
9066              id: instanceName,
9067            };
9068            options = __assign({}, defaultOptions, resourceOptions, opts);
9069            windowBounds = new Bounds(
9070              options.scrollX,
9071              options.scrollY,
9072              options.windowWidth,
9073              options.windowHeight
9074            );
9075            Logger.create({ id: instanceName, enabled: options.logging });
9076            Logger.getInstance(instanceName).debug("Starting document clone");
9077            documentCloner = new DocumentCloner(element, {
9078              id: instanceName,
9079              onclone: options.onclone,
9080              ignoreElements: options.ignoreElements,
9081              inlineImages: options.foreignObjectRendering,
9082              copyStyles: options.foreignObjectRendering,
9083            });
9084            clonedElement = documentCloner.clonedReferenceElement;
9085            if (!clonedElement) {
9086              return [
9087                2 /*return*/,
9088                Promise.reject("Unable to find element in cloned iframe"),
9089              ];
9090            }
9091            return [
9092              4 /*yield*/,
9093              documentCloner.toIFrame(ownerDocument, windowBounds),
9094            ];
9095          case 1:
9096            container = _b.sent();
9097            documentBackgroundColor = ownerDocument.documentElement
9098              ? parseColor$1(
9099                  getComputedStyle(ownerDocument.documentElement)
9100                    .backgroundColor
9101                )
9102              : COLORS.TRANSPARENT;
9103            bodyBackgroundColor = ownerDocument.body
9104              ? parseColor$1(
9105                  getComputedStyle(ownerDocument.body).backgroundColor
9106                )
9107              : COLORS.TRANSPARENT;
9108            bgColor = opts.backgroundColor;
9109            defaultBackgroundColor =
9110              typeof bgColor === "string"
9111                ? parseColor$1(bgColor)
9112                : bgColor === null
9113                ? COLORS.TRANSPARENT
9114                : 0xffffffff;
9115            backgroundColor =
9116              element === ownerDocument.documentElement
9117                ? isTransparent(documentBackgroundColor)
9118                  ? isTransparent(bodyBackgroundColor)
9119                    ? defaultBackgroundColor
9120                    : bodyBackgroundColor
9121                  : documentBackgroundColor
9122                : defaultBackgroundColor;
9123            renderOptions = {
9124              id: instanceName,
9125              cache: options.cache,
9126              canvas: options.canvas,
9127              backgroundColor: backgroundColor,
9128              scale: options.scale,
9129              x: options.x,
9130              y: options.y,
9131              scrollX: options.scrollX,
9132              scrollY: options.scrollY,
9133              width: options.width,
9134              height: options.height,
9135              windowWidth: options.windowWidth,
9136              windowHeight: options.windowHeight,
9137            };
9138            if (!options.foreignObjectRendering) return [3 /*break*/, 3];
9139            Logger.getInstance(instanceName).debug(
9140              "Document cloned, using foreign object rendering"
9141            );
9142            renderer = new ForeignObjectRenderer(renderOptions);
9143            return [4 /*yield*/, renderer.render(clonedElement)];
9144          case 2:
9145            canvas = _b.sent();
9146            return [3 /*break*/, 5];
9147          case 3:
9148            Logger.getInstance(instanceName).debug(
9149              "Document cloned, using computed rendering"
9150            );
9151            CacheStorage.attachInstance(options.cache);
9152            Logger.getInstance(instanceName).debug("Starting DOM parsing");
9153            root = parseTree(clonedElement);
9154            CacheStorage.detachInstance();
9155            if (backgroundColor === root.styles.backgroundColor) {
9156              root.styles.backgroundColor = COLORS.TRANSPARENT;
9157            }
9158            Logger.getInstance(instanceName).debug("Starting renderer");
9159            renderer = new CanvasRenderer(renderOptions);
9160            return [4 /*yield*/, renderer.render(root)];
9161          case 4:
9162            canvas = _b.sent();
9163            _b.label = 5;
9164          case 5:
9165            if (options.removeContainer === true) {
9166              if (!DocumentCloner.destroy(container)) {
9167                Logger.getInstance(instanceName).error(
9168                  "Cannot detach cloned iframe as it is not in the DOM anymore"
9169                );
9170              }
9171            }
9172            Logger.getInstance(instanceName).debug("Finished rendering");
9173            Logger.destroy(instanceName);
9174            CacheStorage.destroy(instanceName);
9175            return [2 /*return*/, canvas];
9176        }
9177      });
9178    });
9179  };
9180
9181  return html2canvas;
9182});
9183//# sourceMappingURL=html2canvas.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.