{"version":3,"file":"xrd-analysis.min.js","sources":["../node_modules/common-spectrum/src/jsgraph/addStyle.js","../node_modules/common-spectrum/src/jsgraph/colors.js","../node_modules/common-spectrum/src/reactPlot/getReactPlotJSON.js","../node_modules/common-spectrum/src/util/appendDistinctParameter.js","../node_modules/common-spectrum/src/util/appendDistinctValue.js","../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xAdd.js","../node_modules/ml-spectra-processing/src/x/xMultiply.js","../node_modules/ml-spectra-processing/src/x/xDivide.js","../node_modules/ml-spectra-processing/src/x/xIsMonotone.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xSubtract.js","../node_modules/d3-array/build/d3-array.js","../node_modules/assign-symbols/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/assign-deep/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-zones/src/normalize.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-zones/src/invert.js","../node_modules/ml-zones/src/zonesWithPoints.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-filter-x/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-regression-base/node_modules/is-any-array/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-stat/array.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/src/util/convertUnit.js","../node_modules/common-spectrum/src/util/ensureRegexp.js","../node_modules/common-spectrum/src/util/getConvertedVariable.js","../node_modules/common-spectrum/src/util/getXYSpectrum.js","../node_modules/common-spectrum/src/Analysis.js","../node_modules/common-spectrum/src/util/getNormalizedSpectrum.js","../node_modules/jcampconverter/src/complexChromatogram.js","../node_modules/jcampconverter/src/convertToFloatArray.js","../node_modules/jcampconverter/src/parse/fastParseXYData.js","../node_modules/jcampconverter/src/parse/parsePeakTable.js","../node_modules/jcampconverter/src/parse/parseXYA.js","../node_modules/jcampconverter/src/2d/add2D.js","../node_modules/jcampconverter/src/2d/convertTo3DZ.js","../node_modules/jcampconverter/src/2d/generateContourLines.js","../node_modules/ml-fft/src/fftlib.js","../node_modules/nmr-processing/src/constants/gyromagneticRatio.js","../node_modules/jcampconverter/src/profiling.js","../node_modules/jcampconverter/src/simpleChromatogram.js","../node_modules/jcampconverter/src/postProcessing.js","../node_modules/jcampconverter/src/postProcessingNMR.js","../node_modules/jcampconverter/src/prepareNtuplesDatatable.js","../node_modules/jcampconverter/src/prepareSpectrum.js","../node_modules/jcampconverter/src/convert.js","../node_modules/convert-to-jcamp/src/fromVariables.js","../node_modules/convert-to-jcamp/src/fromJSON.js","../node_modules/convert-to-jcamp/src/creatorNtuples.js","../node_modules/common-spectrum/src/to/toJcamps.js","../node_modules/common-spectrum/src/index.js","../node_modules/common-spectrum/src/jsgraph/getJSGraph.js","../node_modules/common-spectrum/src/jsgraph/getNormalizationAnnotations.js","../node_modules/fast-xml-parser/src/util.js","../node_modules/fast-xml-parser/src/node2json.js","../node_modules/fast-xml-parser/src/xmlNode.js","../node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","../node_modules/fast-xml-parser/src/validator.js","../node_modules/fast-xml-parser/src/nimndata.js","../node_modules/fast-xml-parser/src/node2json_str.js","../node_modules/fast-xml-parser/src/json2xml.js","../node_modules/fast-xml-parser/src/parser.js","../node_modules/jszip/dist/jszip.min.js","../src/from/parseBRML.js","../src/from/parsePowDLLXY.js","../node_modules/common-spectrum/src/AnalysesManager.js","../src/from/fromBRML.js","../node_modules/common-spectrum/src/from/fromJcamp.js","../src/from/fromPowDLLXY.js","../src/constants/wavelengths.js","../node_modules/common-spectrum/src/to/toJcamp.js"],"sourcesContent":["export function addStyle(serie, spectrum, options = {}) {\n  let { color = '#A9A9A9', opacity = 1, lineWidth = 1 } = options;\n  if (color.match(/#[0-9A-F]{6}$/i)) {\n    color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n  } else {\n    color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n  }\n  serie.style = [\n    {\n      name: 'unselected',\n      style: {\n        line: {\n          color,\n          width: lineWidth,\n          dash: 1,\n        },\n      },\n    },\n    {\n      name: 'selected',\n      style: {\n        line: {\n          color,\n          width: lineWidth + 2,\n          dash: 1,\n        },\n      },\n    },\n  ];\n  serie.name = spectrum.label || spectrum.id;\n}\n","export const COLORS = [\n  '#FFB300',\n  '#803E75',\n  '#FF6800',\n  '#A6BDD7',\n  '#C10020',\n  '#CEA262',\n  '#817066',\n  '#007D34',\n  '#F6768E',\n  '#00538A',\n  '#FF7A5C',\n  '#53377A',\n  '#FF8E00',\n  '#B32851',\n  '#F4C800',\n  '#7F180D',\n  '#93AA00',\n  '#593315',\n  '#F13A13',\n  '#232C16',\n];\n","/**\n * Parses from {x[], y[]} to [{x,y}]\n * @param {Array<number>} x\n * @param {Array<number>} y\n */\nfunction getData(x, y) {\n  let data = new Array(x.length);\n  for (let i = 0; i < x.length; i++) {\n    data[i] = { x: x[i], y: y[i] };\n  }\n  return data;\n}\n\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param {Array<Analysis>} analyses\n * @param {object} query\n * @param {object} [options]\n * @param {object} [options.xAxis]\n * @param {object} [options.yAxis]\n * @param {object} [options.series]\n * @param {object} [options.dimentions]\n */\nexport function getReactPlotJSON(analyses, query, options = {}) {\n  const {\n    xAxis: xAxisOptions = {},\n    yAxis: yAxisOptions = { labelSpace: 40 },\n    series: seriesOptions = { displayMarker: true },\n    dimentions = { width: 550, height: 500 },\n  } = options;\n  let series = [];\n  let meta = [];\n  let xAxis;\n  let yAxis;\n\n  for (let i = 0; i < analyses.length; i++) {\n    const analysis = analyses[i];\n    const spectra = analysis.getXYSpectrum(query);\n    if (!spectra) continue;\n\n    meta.push(spectra.meta);\n\n    xAxis = {\n      id: 'x',\n      label: spectra.variables.x.label,\n      ...xAxisOptions,\n      position: 'bottom',\n    };\n    yAxis = {\n      id: 'y',\n      label: spectra.variables.y.label,\n      ...yAxisOptions,\n      position: 'left',\n    };\n\n    const data = getData(spectra.variables.x.data, spectra.variables.y.data);\n    const serie = {\n      type: 'line',\n      label: spectra.title,\n      data,\n      ...seriesOptions,\n    };\n    series.push(serie);\n  }\n\n  return {\n    series,\n    axes: [xAxis, yAxis],\n    dimentions,\n    meta,\n  };\n}\n","export function appendDistinctParameter(values, key, value) {\n  if (!values[key]) {\n    values[key] = {\n      key,\n      values: [],\n      count: 0,\n    };\n  }\n  if (!values[key].values.includes(value)) {\n    values[key].values.push(value);\n  }\n  values[key].count++;\n}\n","export function appendDistinctValue(values, key) {\n  if (!values[key]) {\n    values[key] = {\n      key,\n      count: 0,\n    };\n  }\n  values[key].count++;\n}\n","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import isArray from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","/**\n\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param {Array<Number>} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Array}\n */\nexport function xAdd(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (Array.isArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] + constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] + array2[i];\n    }\n  }\n\n  return array3;\n}\n","/**\n\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param {Array} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Float64Array}\n */\nexport function xMultiply(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (Array.isArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Float64Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] * constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] * array2[i];\n    }\n  }\n\n  return array3;\n}\n","/**\n\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param {Array<Number>} array1 - the array that will be rotated\n * @param {Array<Number>|Number} array2\n * @return {Array}\n */\nexport function xDivide(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (Array.isArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] / constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] / array2[i];\n    }\n  }\n\n  return array3;\n}\n","/**\n * Returns true if x is monotone\n * @param {Array} array\n * @return {boolean}\n */\nexport function xIsMonotone(array) {\n  if (array.length < 3) return true;\n  if (array[0] < array[1]) {\n    for (let i = 0; i < array.length - 1; i++) {\n      if (array[i] >= array[i + 1]) return false;\n    }\n  } else {\n    for (let i = 0; i < array.length - 1; i++) {\n      if (array[i] <= array[i + 1]) return false;\n    }\n  }\n  return true;\n}\n","import isArray from 'is-any-array';\n\nfunction sum(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += input[i];\n  }\n\n  return sumValue;\n}\n\nexport default sum;\n","/**\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\n * @param {Array} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Array}\n */\nexport function xSubtract(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (Array.isArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] - constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] - array2[i];\n    }\n  }\n\n  return array3;\n}\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3_array = {})));\n}(this, function (exports) { 'use strict';\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n  var bisectLeft = ascendingBisect.left;\n\n  function descending(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  }\n\n  function number$1(x) {\n    return x === null ? NaN : +x;\n  }\n\n  function variance(array, f) {\n    var n = array.length,\n        m = 0,\n        a,\n        d,\n        s = 0,\n        i = -1,\n        j = 0;\n\n    if (f == null) {\n      while (++i < n) {\n        if (!isNaN(a = number$1(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    else {\n      while (++i < n) {\n        if (!isNaN(a = number$1(f(array[i], i, array)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    if (j > 1) return s / (j - 1);\n  }\n\n  function deviation(array, f) {\n    var v = variance(array, f);\n    return v ? Math.sqrt(v) : v;\n  }\n\n  function extent(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b,\n        c;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    return [a, c];\n  }\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function identity(x) {\n    return x;\n  }\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50);\n  var e5 = Math.sqrt(10);\n  var e2 = Math.sqrt(2);\n  function ticks(start, stop, count) {\n    var step = tickStep(start, stop, count);\n    return range(\n      Math.ceil(start / step) * step,\n      Math.floor(stop / step) * step + step / 2, // inclusive\n      step\n    );\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function sturges(values) {\n    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n  }\n\n  function number(x) {\n    return +x;\n  }\n\n  function histogram() {\n    var value = identity,\n        domain = extent,\n        threshold = sturges;\n\n    function histogram(data) {\n      var i,\n          n = data.length,\n          x,\n          values = new Array(n);\n\n      // Coerce values to numbers.\n      for (i = 0; i < n; ++i) {\n        values[i] = +value(data[i], i, data);\n      }\n\n      var xz = domain(values),\n          x0 = +xz[0],\n          x1 = +xz[1],\n          tz = threshold(values, x0, x1);\n\n      // Convert number of thresholds into uniform thresholds.\n      if (!Array.isArray(tz)) tz = ticks(x0, x1, +tz);\n\n      // Coerce thresholds to numbers, ignoring any outside the domain.\n      var m = tz.length;\n      for (i = 0; i < m; ++i) tz[i] = +tz[i];\n      while (tz[0] <= x0) tz.shift(), --m;\n      while (tz[m - 1] >= x1) tz.pop(), --m;\n\n      var bins = new Array(m + 1),\n          bin;\n\n      // Initialize bins.\n      for (i = 0; i <= m; ++i) {\n        bin = bins[i] = [];\n        bin.x0 = i > 0 ? tz[i - 1] : x0;\n        bin.x1 = i < m ? tz[i] : x1;\n      }\n\n      // Assign data to bins by value, ignoring any outside the domain.\n      for (i = 0; i < n; ++i) {\n        x = values[i];\n        if (x0 <= x && x <= x1) {\n          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n        }\n      }\n\n      return bins;\n    }\n\n    histogram.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), histogram) : value;\n    };\n\n    histogram.domain = function(_) {\n      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), histogram) : domain;\n    };\n\n    histogram.thresholds = function(_) {\n      if (!arguments.length) return threshold;\n      threshold = typeof _ === \"function\" ? _\n          : Array.isArray(_) ? constant(Array.prototype.map.call(_, number))\n          : constant(+_);\n      return histogram;\n    };\n\n    return histogram;\n  }\n\n  function quantile(array, p, f) {\n    if (f == null) f = number$1;\n    if (!(n = array.length)) return;\n    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n    if (p >= 1) return +f(array[n - 1], n - 1, array);\n    var n,\n        h = (n - 1) * p,\n        i = Math.floor(h),\n        a = +f(array[i], i, array),\n        b = +f(array[i + 1], i + 1, array);\n    return a + (b - a) * (h - i);\n  }\n\n  function freedmanDiaconis(values, min, max) {\n    values.sort(ascending);\n    return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function scott(values, min, max) {\n    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function max(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n    }\n\n    return a;\n  }\n\n  function mean(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1,\n        j = n;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number$1(array[i]))) s += a; else --j;\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) s += a; else --j;\n    }\n\n    if (j) return s / j;\n  }\n\n  function median(array, f) {\n    var numbers = [],\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number$1(array[i]))) numbers.push(a);\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) numbers.push(a);\n    }\n\n    return quantile(numbers.sort(ascending), 0.5);\n  }\n\n  function merge(arrays) {\n    var n = arrays.length,\n        m,\n        i = -1,\n        j = 0,\n        merged,\n        array;\n\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n\n    return merged;\n  }\n\n  function min(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n    }\n\n    return a;\n  }\n\n  function pairs(array) {\n    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [p, p = array[++i]];\n    return pairs;\n  }\n\n  function permute(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  }\n\n  function scan(array, compare) {\n    if (!(n = array.length)) return;\n    var i = 0,\n        n,\n        j = 0,\n        xi,\n        xj = array[j];\n\n    if (!compare) compare = ascending;\n\n    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\n    if (compare(xj, xj) === 0) return j;\n  }\n\n  function shuffle(array, i0, i1) {\n    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n        t,\n        i;\n\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n\n    return array;\n  }\n\n  function sum(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n    }\n\n    else {\n      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n    }\n\n    return s;\n  }\n\n  function transpose(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  }\n\n  function length(d) {\n    return d.length;\n  }\n\n  function zip() {\n    return transpose(arguments);\n  }\n\n  var version = \"0.7.1\";\n\n  exports.version = version;\n  exports.bisect = bisectRight;\n  exports.bisectRight = bisectRight;\n  exports.bisectLeft = bisectLeft;\n  exports.ascending = ascending;\n  exports.bisector = bisector;\n  exports.descending = descending;\n  exports.deviation = deviation;\n  exports.extent = extent;\n  exports.histogram = histogram;\n  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n  exports.thresholdScott = scott;\n  exports.thresholdSturges = sturges;\n  exports.max = max;\n  exports.mean = mean;\n  exports.median = median;\n  exports.merge = merge;\n  exports.min = min;\n  exports.pairs = pairs;\n  exports.permute = permute;\n  exports.quantile = quantile;\n  exports.range = range;\n  exports.scan = scan;\n  exports.shuffle = shuffle;\n  exports.sum = sum;\n  exports.ticks = ticks;\n  exports.tickStep = tickStep;\n  exports.transpose = transpose;\n  exports.variance = variance;\n  exports.zip = zip;\n\n}));","/*!\n * assign-symbols <https://github.com/jonschlinkert/assign-symbols>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst isEnumerable = Object.prototype.propertyIsEnumerable;\nconst getSymbols = Object.getOwnPropertySymbols;\n\nmodule.exports = (target, ...args) => {\n  if (!isObject(target)) {\n    throw new TypeError('expected the first argument to be an object');\n  }\n\n  if (args.length === 0 || typeof Symbol !== 'function' || typeof getSymbols !== 'function') {\n    return target;\n  }\n\n  for (let arg of args) {\n    let names = getSymbols(arg);\n\n    for (let key of names) {\n      if (isEnumerable.call(arg, key)) {\n        target[key] = arg[key];\n      }\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]' || Array.isArray(val);\n}\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport default rescale;\n","/*!\n * assign-deep <https://github.com/jonschlinkert/assign-deep>\n *\n * Copyright (c) 2017-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst assignSymbols = require('assign-symbols');\n\nconst isValidKey = key => {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n};\n\nconst assign = module.exports = (target, ...args) => {\n  let i = 0;\n  if (isPrimitive(target)) target = args[i++];\n  if (!target) target = {};\n  for (; i < args.length; i++) {\n    if (isObject(args[i])) {\n      for (const key of Object.keys(args[i])) {\n        if (isValidKey(key)) {\n          if (isObject(target[key]) && isObject(args[i][key])) {\n            assign(target[key], args[i][key]);\n          } else {\n            target[key] = args[i][key];\n          }\n        }\n      }\n      assignSymbols(target, args[i]);\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]';\n}\n\nfunction isPrimitive(val) {\n  return typeof val === 'object' ? val === null : typeof val !== 'function';\n}\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min: min,\n          max: max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns >= 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (Array.isArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), value));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\n  };\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n","import BaseView from './base';\n\nexport default class MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n","export function hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let iter = 0;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          iter = iter + 1;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          iter = 0;\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport sum from 'ml-array-sum';\n\nfunction norm(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$algorithm = options.algorithm,\n      algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm,\n      _options$sumValue = options.sumValue,\n      sumValue = _options$sumValue === void 0 ? 1 : _options$sumValue,\n      _options$maxValue = options.maxValue,\n      maxValue = _options$maxValue === void 0 ? 1 : _options$maxValue;\n\n  if (!isArray(input)) {\n    throw new Error('input must be an array');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  if (input.length === 0) {\n    throw new Error('input must not be empty');\n  }\n\n  switch (algorithm.toLowerCase()) {\n    case 'absolute':\n      {\n        var absoluteSumValue = absoluteSum(input) / sumValue;\n        if (absoluteSumValue === 0) return input.slice(0);\n\n        for (var i = 0; i < input.length; i++) {\n          output[i] = input[i] / absoluteSumValue;\n        }\n\n        return output;\n      }\n\n    case 'max':\n      {\n        var currentMaxValue = max(input);\n        if (currentMaxValue === 0) return input.slice(0);\n        var factor = maxValue / currentMaxValue;\n\n        for (var _i = 0; _i < input.length; _i++) {\n          output[_i] = input[_i] * factor;\n        }\n\n        return output;\n      }\n\n    case 'sum':\n      {\n        var sumFactor = sum(input) / sumValue;\n        if (sumFactor === 0) return input.slice(0);\n\n        for (var _i2 = 0; _i2 < input.length; _i2++) {\n          output[_i2] = input[_i2] / sumFactor;\n        }\n\n        return output;\n      }\n\n    default:\n      throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n  }\n}\n\nfunction absoluteSum(input) {\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += Math.abs(input[i]);\n  }\n\n  return sumValue;\n}\n\nexport default norm;\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\r\n * Fill an array with sequential numbers\r\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\r\n * @param {object} [options={}]\r\n * @param {number} [options.from=0] - first value in the array\r\n * @param {number} [options.to=10] - last value in the array\r\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\r\n * @param {number} [options.step] - if not provided calculated from size\r\n * @return {Array<number>}\r\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport default sequentialFill;\n","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [zones=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function normalize(zones = [], options = {}) {\n  if (zones.length === 0) return [];\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  zones = JSON.parse(JSON.stringify(zones)).map((zone) =>\n    zone.from > zone.to ? { from: zone.to, to: zone.from } : zone,\n  );\n  zones = zones.sort((a, b) => {\n    if (a.from !== b.from) return a.from - b.from;\n    return a.to - b.to;\n  });\n\n  zones.forEach((zone) => {\n    if (from > zone.from) zone.from = from;\n    if (to < zone.to) zone.to = to;\n  });\n\n  zones = zones.filter((zone) => zone.from <= zone.to);\n  if (zones.length === 0) return [];\n\n  let currentZone = zones[0];\n  let result = [currentZone];\n  for (let i = 1; i < zones.length; i++) {\n    let zone = zones[i];\n    if (zone.from <= currentZone.to) {\n      currentZone.to = zone.to;\n    } else {\n      currentZone = zone;\n      result.push(currentZone);\n    }\n  }\n  return result;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n  return (\n    0.5 * slope * x1 * x1 +\n    intercept * x1 -\n    (0.5 * slope * x0 * x0 + intercept * x0)\n  );\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { zonesWithPoints, invert } from 'ml-zones';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\n\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in the new array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in the new array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @param {Array} [options.zones=[]] array of from / to that should be kept\n * @return {object<x: Array, y:Array>} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n  let { x, y } = arrayXY;\n  let xLength = x.length;\n  let reverse = false;\n  if (x.length > 1 && x[0] > x[1]) {\n    x = x.slice().reverse();\n    y = y.slice().reverse();\n    reverse = true;\n  }\n\n  let {\n    from = x[0],\n    to = x[xLength - 1],\n    variant = 'smooth',\n    numberOfPoints = 100,\n    exclusions = [],\n    zones = [],\n  } = options;\n\n  if (xLength !== y.length) {\n    throw new RangeError(\"the x and y vector doesn't have the same size.\");\n  }\n\n  if (typeof from !== 'number' || isNaN(from)) {\n    throw new RangeError(\"'from' option must be a number\");\n  }\n\n  if (typeof to !== 'number' || isNaN(to)) {\n    throw new RangeError(\"'to' option must be a number\");\n  }\n\n  if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n    throw new RangeError(\"'numberOfPoints' option must be a number\");\n  }\n\n  if (numberOfPoints < 2) {\n    throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n  }\n\n  if (zones.length === 0) {\n    zones = invert(exclusions, { from, to });\n  }\n\n  zones = zonesWithPoints(zones, numberOfPoints, { from, to });\n\n  let xResult = [];\n  let yResult = [];\n  for (let zone of zones) {\n    let zoneResult = processZone(\n      x,\n      y,\n      zone.from,\n      zone.to,\n      zone.numberOfPoints,\n      variant,\n      reverse,\n    );\n\n    xResult = xResult.concat(zoneResult.x);\n    yResult = yResult.concat(zoneResult.y);\n  }\n  if (reverse) {\n    if (from < to) {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    } else {\n      return { x: xResult, y: yResult };\n    }\n  } else {\n    if (from < to) {\n      return { x: xResult, y: yResult };\n    } else {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    }\n  }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n  if (numberOfPoints < 1) {\n    throw new RangeError('the number of points must be at least 1');\n  }\n\n  let output =\n    variant === 'slot'\n      ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n      : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n  return {\n    x: sequentialFill({\n      from,\n      to,\n      size: numberOfPoints,\n    }),\n    y: output,\n  };\n}\n","import { normalize } from './normalize';\n\n/**\n * Convert an array of exclusions and keep only from / to\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [exclusions=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of zones (after inversion)\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of zones (after inversion)\n */\n\nexport function invert(exclusions = [], options = {}) {\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  exclusions = normalize(exclusions, { from, to });\n  if (exclusions.length === 0) return [{ from, to }];\n\n  let zones = [];\n  for (let i = 0; i < exclusions.length; i++) {\n    let exclusion = exclusions[i];\n    let nextExclusion = exclusions[i + 1];\n    if (i === 0) {\n      if (exclusion.from > from) {\n        zones.push({ from, to: exclusion.from });\n      }\n    }\n    if (i === exclusions.length - 1) {\n      if (exclusion.to < to) {\n        zones.push({ from: exclusion.to, to });\n      }\n    } else {\n      zones.push({ from: exclusion.to, to: nextExclusion.from });\n    }\n  }\n\n  return zones;\n}\n","import { normalize } from './normalize';\n\n/**\n * Add the number of points per zone to reach a specified total\n * @param {Array} [zones=[]]\n * @param {number} [numberOfPoints] Total number of points to distribute between zones\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function zonesWithPoints(zones, numberOfPoints, options = {}) {\n  if (zones.length === 0) return zones;\n  zones = normalize(zones, options);\n\n  const totalSize = zones.reduce((previous, current) => {\n    return previous + (current.to - current.from);\n  }, 0);\n\n  let unitsPerPoint = totalSize / numberOfPoints;\n  let currentTotal = 0;\n  for (let i = 0; i < zones.length - 1; i++) {\n    let zone = zones[i];\n    zone.numberOfPoints = Math.min(\n      Math.round((zone.to - zone.from) / unitsPerPoint),\n      numberOfPoints - currentTotal,\n    );\n    currentTotal += zone.numberOfPoints;\n  }\n\n  zones[zones.length - 1].numberOfPoints = numberOfPoints - currentTotal;\n\n  return zones;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints - 1);\n  let halfStep = step / 2;\n  let lastStep = x[x.length - 1] - x[x.length - 2];\n\n  let start = from - halfStep;\n  let output = new Array(numberOfPoints);\n\n  // Init main variables\n  let min = start;\n  let max = start + step;\n\n  let previousX = -Number.MAX_VALUE;\n  let previousY = 0;\n  let nextX = x[0];\n  let nextY = y[0];\n  let frontOutsideSpectra = 0;\n  let backOutsideSpectra = true;\n\n  let currentValue = 0;\n\n  // for slot algorithm\n  let currentPoints = 0;\n\n  let i = 1; // index of input\n  let j = 0; // index of output\n\n  main: while (true) {\n    if (previousX >= nextX) throw new Error('x must be an increasing serie');\n    while (previousX - max > 0) {\n      // no overlap with original point, just consume current value\n      if (backOutsideSpectra) {\n        currentPoints++;\n        backOutsideSpectra = false;\n      }\n\n      output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n      j++;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      currentValue = 0;\n      currentPoints = 0;\n    }\n\n    if (previousX > min) {\n      currentValue += previousY;\n      currentPoints++;\n    }\n\n    if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n      currentPoints--;\n    }\n\n    previousX = nextX;\n    previousY = nextY;\n\n    if (i < xLength) {\n      nextX = x[i];\n      nextY = y[i];\n      i++;\n    } else {\n      nextX += lastStep;\n      nextY = 0;\n      frontOutsideSpectra++;\n    }\n  }\n\n  return output;\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints - 1);\n  let halfStep = step / 2;\n\n  let output = new Array(numberOfPoints);\n\n  let initialOriginalStep = x[1] - x[0];\n  let lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n  // Init main variables\n  let min = from - halfStep;\n  let max = from + halfStep;\n\n  let previousX = Number.MIN_VALUE;\n  let previousY = 0;\n  let nextX = x[0] - initialOriginalStep;\n  let nextY = 0;\n\n  let currentValue = 0;\n  let slope = 0;\n  let intercept = 0;\n  let sumAtMin = 0;\n  let sumAtMax = 0;\n\n  let i = 0; // index of input\n  let j = 0; // index of output\n\n  function getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n  }\n\n  let add = 0;\n  main: while (true) {\n    if (previousX <= min && min <= nextX) {\n      add = integral(0, min - previousX, slope, previousY);\n      sumAtMin = currentValue + add;\n    }\n\n    while (nextX - max >= 0) {\n      // no overlap with original point, just consume current value\n      add = integral(0, max - previousX, slope, previousY);\n      sumAtMax = currentValue + add;\n\n      output[j++] = (sumAtMax - sumAtMin) / step;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      sumAtMin = sumAtMax;\n    }\n\n    currentValue += integral(previousX, nextX, slope, intercept);\n\n    previousX = nextX;\n    previousY = nextY;\n\n    if (i < xLength) {\n      nextX = x[i];\n      nextY = y[i];\n      i++;\n    } else if (i === xLength) {\n      nextX += lastOriginalStep;\n      nextY = 0;\n    }\n\n    slope = getSlope(previousX, previousY, nextX, nextY);\n    intercept = -slope * previousX + previousY;\n  }\n\n  return output;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array<number>, y: Array<number>}}\n */\n\nexport default function filterX(points, options = {}) {\n  const { x, y } = points;\n  const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n  let zones = getZones(from, to, exclusions);\n\n\n  let currentZoneIndex = 0;\n  let newX = [];\n  let newY = [];\n  let position = 0;\n  while (position < x.length) {\n    if (\n      x[position] <= zones[currentZoneIndex].to &&\n      x[position] >= zones[currentZoneIndex].from\n    ) {\n      newX.push(x[position]);\n      newY.push(y[position]);\n    } else {\n      if (x[position] > zones[currentZoneIndex].to) {\n        currentZoneIndex++;\n        if (!zones[currentZoneIndex]) break;\n      }\n    }\n    position++;\n  }\n\n  return {\n    x: newX,\n    y: newY\n  };\n}\n","export default function getZones(from, to, exclusions = []) {\n  if (from > to) {\n    [from, to] = [to, from];\n  }\n\n  // in exclusions from and to have to be defined\n  exclusions = exclusions.filter(\n    (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n  );\n\n  exclusions = JSON.parse(JSON.stringify(exclusions));\n  // we ensure that from before to\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from > exclusion.to) {\n      [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n    }\n  });\n\n  exclusions.sort((a, b) => a.from - b.from);\n\n  // we will rework the exclusions in order to remove overlap and outside range (from / to)\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from < from) exclusion.from = from;\n    if (exclusion.to > to) exclusion.to = to;\n  });\n  for (let i = 0; i < exclusions.length - 1; i++) {\n    if (exclusions[i].to > exclusions[i + 1].from) {\n      exclusions[i].to = exclusions[i + 1].from;\n    }\n  }\n  exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n  if (!exclusions || exclusions.length === 0) {\n    return [{ from, to }];\n  }\n\n  let zones = [];\n  let currentFrom = from;\n  for (let exclusion of exclusions) {\n    if (currentFrom < exclusion.from) {\n      zones.push({\n        from: currentFrom,\n        to: exclusion.from\n      });\n    }\n\n    currentFrom = exclusion.to;\n  }\n  if (currentFrom < to) {\n    zones.push({\n      from: currentFrom,\n      to: to\n    });\n  }\n\n  return zones;\n}\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","export default function maybeToPrecision(value, digits) {\n  if (value < 0) {\n    value = 0 - value;\n    if (typeof digits === 'number') {\n      return `- ${value.toPrecision(digits)}`;\n    } else {\n      return `- ${value.toString()}`;\n    }\n  } else {\n    if (typeof digits === 'number') {\n      return value.toPrecision(digits);\n    } else {\n      return value.toString();\n    }\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\nexport default class BaseRegression {\n  constructor() {\n    if (new.target === BaseRegression) {\n      throw new Error('BaseRegression must be subclassed');\n    }\n  }\n\n  predict(x) {\n    if (typeof x === 'number') {\n      return this._predict(x);\n    } else if (isAnyArray(x)) {\n      const y = [];\n      for (let i = 0; i < x.length; i++) {\n        y.push(this._predict(x[i]));\n      }\n      return y;\n    } else {\n      throw new TypeError('x must be a number or array');\n    }\n  }\n\n  _predict() {\n    throw new Error('_predict must be implemented');\n  }\n\n  train() {\n    // Do nothing for this package\n  }\n\n  toString() {\n    return '';\n  }\n\n  toLaTeX() {\n    return '';\n  }\n\n  /**\n   * Return the correlation coefficient of determination (r) and chi-square.\n   * @param {Array<number>} x\n   * @param {Array<number>} y\n   * @return {object}\n   */\n  score(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y) || x.length !== y.length) {\n      throw new Error('x and y must be arrays of the same length');\n    }\n\n    const n = x.length;\n    const y2 = new Array(n);\n    for (let i = 0; i < n; i++) {\n      y2[i] = this._predict(x[i]);\n    }\n\n    let xSum = 0;\n    let ySum = 0;\n    let chi2 = 0;\n    let rmsd = 0;\n    let xSquared = 0;\n    let ySquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n      xSum += y2[i];\n      ySum += y[i];\n      xSquared += y2[i] * y2[i];\n      ySquared += y[i] * y[i];\n      xY += y2[i] * y[i];\n      if (y[i] !== 0) {\n        chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n      }\n      rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n    }\n\n    const r =\n      (n * xY - xSum * ySum) /\n      Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n    return {\n      r: r,\n      r2: r * r,\n      chi2: chi2,\n      rmsd: Math.sqrt(rmsd / n),\n    };\n  }\n}\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n  constructor(x, y, degree) {\n    super();\n    if (x === true) {\n      this.degree = y.degree;\n      this.powers = y.powers;\n      this.coefficients = y.coefficients;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y, degree);\n    }\n  }\n\n  _predict(x) {\n    let y = 0;\n    for (let k = 0; k < this.powers.length; k++) {\n      y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n    }\n    return y;\n  }\n\n  toJSON() {\n    return {\n      name: 'polynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients,\n    };\n  }\n\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  toLaTeX(precision) {\n    return this._toFormula(precision, true);\n  }\n\n  _toFormula(precision, isLaTeX) {\n    let sup = '^';\n    let closeSup = '';\n    let times = ' * ';\n    if (isLaTeX) {\n      sup = '^{';\n      closeSup = '}';\n      times = '';\n    }\n\n    let fn = '';\n    let str = '';\n    for (let k = 0; k < this.coefficients.length; k++) {\n      str = '';\n      if (this.coefficients[k] !== 0) {\n        if (this.powers[k] === 0) {\n          str = maybeToPrecision(this.coefficients[k], precision);\n        } else {\n          if (this.powers[k] === 1) {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x`;\n          } else {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x${sup}${this.powers[k]}${closeSup}`;\n          }\n        }\n\n        if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n          str = ` + ${str}`;\n        } else if (k !== this.coefficients.length - 1) {\n          str = ` ${str}`;\n        }\n      }\n      fn = str + fn;\n    }\n    if (fn.charAt(0) === '+') {\n      fn = fn.slice(1);\n    }\n\n    return `f(x) = ${fn}`;\n  }\n\n  static load(json) {\n    if (json.name !== 'polynomialRegression') {\n      throw new TypeError('not a polynomial regression model');\n    }\n    return new PolynomialRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y, degree) {\n  const n = x.length;\n  let powers;\n  if (Array.isArray(degree)) {\n    powers = degree;\n    degree = powers.length;\n  } else {\n    degree++;\n    powers = new Array(degree);\n    for (let k = 0; k < degree; k++) {\n      powers[k] = k;\n    }\n  }\n  const F = new Matrix(n, degree);\n  const Y = new Matrix([y]);\n  for (let k = 0; k < degree; k++) {\n    for (let i = 0; i < n; i++) {\n      if (powers[k] === 0) {\n        F.set(i, k, 1);\n      } else {\n        F.set(i, k, Math.pow(x[i], powers[k]));\n      }\n    }\n  }\n\n  const FT = new MatrixTransposeView(F);\n  const A = FT.mmul(F);\n  const B = FT.mmul(new MatrixTransposeView(Y));\n\n  pr.degree = degree - 1;\n  pr.powers = powers;\n  pr.coefficients = solve(A, B).to1DArray();\n}\n","import isAnyArray from 'is-any-array';\n\nexport default function checkArraySize(x, y) {\n  if (!isAnyArray(x) || !isAnyArray(y)) {\n    throw new TypeError('x and y must be arrays');\n  }\n  if (x.length !== y.length) {\n    throw new RangeError('x and y arrays must have the same length');\n  }\n}\n","import PolynomialRegression from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport default function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression: regression,\n  };\n}\n","'use strict';\n\nvar defaultOptions = {\n  size: 1,\n  value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n  var len = data.length;\n  if (typeof options.size === 'number') {\n    options.size = [options.size, options.size];\n  }\n\n  var cond = len + options.size[0] + options.size[1];\n\n  var output;\n  if (options.output) {\n    if (options.output.length !== cond) {\n      throw new RangeError('Wrong output size');\n    }\n    output = options.output;\n  } else {\n    output = new Array(cond);\n  }\n\n  var i;\n  if (options.value === 'circular') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) {\n        output[i] = data[(len - (options.size[0] % len) + i) % len];\n      } else if (i < options.size[0] + len) {\n        output[i] = data[i - options.size[0]];\n      } else {\n        output[i] = data[(i - options.size[0]) % len];\n      }\n    }\n  } else if (options.value === 'replicate') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[0];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[len - 1];\n    }\n  } else if (options.value === 'symmetric') {\n    if (options.size[0] > len || options.size[1] > len) {\n      throw new RangeError(\n        'expanded value should not be bigger than the data length'\n      );\n    }\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[2 * len + options.size[0] - i - 1];\n    }\n  } else {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = options.value;\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = options.value;\n    }\n  }\n\n  return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n  // var row = data.length;\n  // var col = data[0].length;\n  if (options.size[0] === undefined) {\n    options.size = [options.size, options.size, options.size, options.size];\n  }\n  throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array <number>} data\n * @param {object} options\n */\nfunction padArray(data, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (Array.isArray(data)) {\n    if (Array.isArray(data[0])) return matrixCase(data, options);\n    else return arrayCase(data, options);\n  } else {\n    throw new TypeError('data should be an array');\n  }\n}\n\nmodule.exports = padArray;\n","import { Matrix, MatrixTransposeView, inverse } from 'ml-matrix';\nimport padArray from 'ml-pad-array';\n\n/**\n * Factorial of a number\n * @ignore\n * @param n\n * @return {number}\n */\nfunction factorial(n) {\n  let r = 1;\n  while (n > 0) r *= n--;\n  return r;\n}\n\nconst defaultOptions = {\n  windowSize: 5,\n  derivative: 1,\n  polynomial: 2,\n  pad: 'none',\n  padValue: 'replicate',\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array <number>} data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nexport default function savitzkyGolay(data, h, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (\n    options.windowSize % 2 === 0 ||\n    options.windowSize < 5 ||\n    !Number.isInteger(options.windowSize)\n  ) {\n    throw new RangeError(\n      'Invalid window size (should be odd and at least 5 integer number)',\n    );\n  }\n  if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n    throw new RangeError('Derivative should be a positive integer');\n  }\n  if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n    throw new RangeError('Polynomial should be a positive integer');\n  }\n\n  let C, norm;\n  let step = Math.floor(options.windowSize / 2);\n\n  if (options.pad === 'pre') {\n    data = padArray(data, { size: step, value: options.padValue });\n  }\n\n  let ans = new Array(data.length - 2 * step);\n\n  if (\n    options.windowSize === 5 &&\n    options.polynomial === 2 &&\n    (options.derivative === 1 || options.derivative === 2)\n  ) {\n    if (options.derivative === 1) {\n      C = [-2, -1, 0, 1, 2];\n      norm = 10;\n    } else {\n      C = [2, -1, -2, -1, 2];\n      norm = 7;\n    }\n  } else {\n    let J = Matrix.ones(options.windowSize, options.polynomial + 1);\n    let inic = -(options.windowSize - 1) / 2;\n    for (let i = 0; i < J.rows; i++) {\n      for (let j = 0; j < J.columns; j++) {\n        if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n      }\n    }\n    let Jtranspose = new MatrixTransposeView(J);\n    let Jinv = inverse(Jtranspose.mmul(J));\n    C = Jinv.mmul(Jtranspose);\n    C = C.getRow(options.derivative);\n    norm = 1 / factorial(options.derivative);\n  }\n  let det = norm * Math.pow(h, options.derivative);\n  for (let k = step; k < data.length - step; k++) {\n    let d = 0;\n    for (let l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n    ans[k - step] = d;\n  }\n\n  if (options.pad === 'post') {\n    ans = padArray(ans, { size: step, value: options.padValue });\n  }\n\n  return ans;\n}\n","'use strict';\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\n/**\n * Computes the sum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.sum = function sum(values) {\n    var sum = 0;\n    for (var i = 0; i < values.length; i++) {\n        sum += values[i];\n    }\n    return sum;\n};\n\n/**\n * Computes the maximum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.max = function max(values) {\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] > max) max = values[i];\n    }\n    return max;\n};\n\n/**\n * Computes the minimum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.min = function min(values) {\n    var min = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n    }\n    return min;\n};\n\n/**\n * Computes the min and max of the given values\n * @param {Array} values\n * @returns {{min: number, max: number}}\n */\nexports.minMax = function minMax(values) {\n    var min = values[0];\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n        if (values[i] > max) max = values[i];\n    }\n    return {\n        min: min,\n        max: max\n    };\n};\n\n/**\n * Computes the arithmetic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.arithmeticMean = function arithmeticMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        sum += values[i];\n    }\n    return sum / l;\n};\n\n/**\n * {@link arithmeticMean}\n */\nexports.mean = exports.arithmeticMean;\n\n/**\n * Computes the geometric mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.geometricMean = function geometricMean(values) {\n    var mul = 1;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        mul *= values[i];\n    }\n    return Math.pow(mul, 1 / l);\n};\n\n/**\n * Computes the mean of the log of the given values\n * If the return value is exponentiated, it gives the same result as the\n * geometric mean.\n * @param {Array} values\n * @returns {number}\n */\nexports.logMean = function logMean(values) {\n    var lnsum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        lnsum += Math.log(values[i]);\n    }\n    return lnsum / l;\n};\n\n/**\n * Computes the weighted grand mean for a list of means and sample sizes\n * @param {Array} means - Mean values for each set of samples\n * @param {Array} samples - Number of original values for each set of samples\n * @returns {number}\n */\nexports.grandMean = function grandMean(means, samples) {\n    var sum = 0;\n    var n = 0;\n    var l = means.length;\n    for (var i = 0; i < l; i++) {\n        sum += samples[i] * means[i];\n        n += samples[i];\n    }\n    return sum / n;\n};\n\n/**\n * Computes the truncated mean of the given values using a given percentage\n * @param {Array} values\n * @param {number} percent - The percentage of values to keep (range: [0,1])\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.truncatedMean = function truncatedMean(values, percent, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var k = Math.floor(l * percent);\n    var sum = 0;\n    for (var i = k; i < (l - k); i++) {\n        sum += values[i];\n    }\n    return sum / (l - 2 * k);\n};\n\n/**\n * Computes the harmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.harmonicMean = function harmonicMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        if (values[i] === 0) {\n            throw new RangeError('value at index ' + i + 'is zero');\n        }\n        sum += 1 / values[i];\n    }\n    return l / sum;\n};\n\n/**\n * Computes the contraharmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.contraHarmonicMean = function contraHarmonicMean(values) {\n    var r1 = 0;\n    var r2 = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        r1 += values[i] * values[i];\n        r2 += values[i];\n    }\n    if (r2 < 0) {\n        throw new RangeError('sum of values is negative');\n    }\n    return r1 / r2;\n};\n\n/**\n * Computes the median of the given values\n * @param {Array} values\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.median = function median(values, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var half = Math.floor(l / 2);\n    if (l % 2 === 0) {\n        return (values[half - 1] + values[half]) * 0.5;\n    } else {\n        return values[half];\n    }\n};\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.variance = function variance(values, unbiased) {\n    if (unbiased === undefined) unbiased = true;\n    var theMean = exports.mean(values);\n    var theVariance = 0;\n    var l = values.length;\n\n    for (var i = 0; i < l; i++) {\n        var x = values[i] - theMean;\n        theVariance += x * x;\n    }\n\n    if (unbiased) {\n        return theVariance / (l - 1);\n    } else {\n        return theVariance / l;\n    }\n};\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.standardDeviation = function standardDeviation(values, unbiased) {\n    return Math.sqrt(exports.variance(values, unbiased));\n};\n\nexports.standardError = function standardError(values) {\n    return exports.standardDeviation(values) / Math.sqrt(values.length);\n};\n\n/**\n * IEEE Transactions on biomedical engineering, vol. 52, no. 1, january 2005, p. 76-\n * Calculate the standard deviation via the Median of the absolute deviation\n *  The formula for the standard deviation only holds for Gaussian random variables.\n * @returns {{mean: number, stdev: number}}\n */\nexports.robustMeanAndStdev = function robustMeanAndStdev(y) {\n    var mean = 0, stdev = 0;\n    var length = y.length, i = 0;\n    for (i = 0; i < length; i++) {\n        mean += y[i];\n    }\n    mean /= length;\n    var averageDeviations = new Array(length);\n    for (i = 0; i < length; i++)\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    averageDeviations.sort(compareNumbers);\n    if (length % 2 === 1) {\n        stdev = averageDeviations[(length - 1) / 2] / 0.6745;\n    } else {\n        stdev = 0.5 * (averageDeviations[length / 2] + averageDeviations[length / 2 - 1]) / 0.6745;\n    }\n\n    return {\n        mean: mean,\n        stdev: stdev\n    };\n};\n\nexports.quartiles = function quartiles(values, alreadySorted) {\n    if (typeof (alreadySorted) === 'undefined') alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n\n    var quart = values.length / 4;\n    var q1 = values[Math.ceil(quart) - 1];\n    var q2 = exports.median(values, true);\n    var q3 = values[Math.ceil(quart * 3) - 1];\n\n    return {q1: q1, q2: q2, q3: q3};\n};\n\nexports.pooledStandardDeviation = function pooledStandardDeviation(samples, unbiased) {\n    return Math.sqrt(exports.pooledVariance(samples, unbiased));\n};\n\nexports.pooledVariance = function pooledVariance(samples, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var sum = 0;\n    var length = 0, l = samples.length;\n    for (var i = 0; i < l; i++) {\n        var values = samples[i];\n        var vari = exports.variance(values);\n\n        sum += (values.length - 1) * vari;\n\n        if (unbiased)\n            length += values.length - 1;\n        else\n            length += values.length;\n    }\n    return sum / length;\n};\n\nexports.mode = function mode(values) {\n    var l = values.length,\n        itemCount = new Array(l),\n        i;\n    for (i = 0; i < l; i++) {\n        itemCount[i] = 0;\n    }\n    var itemArray = new Array(l);\n    var count = 0;\n\n    for (i = 0; i < l; i++) {\n        var index = itemArray.indexOf(values[i]);\n        if (index >= 0)\n            itemCount[index]++;\n        else {\n            itemArray[count] = values[i];\n            itemCount[count] = 1;\n            count++;\n        }\n    }\n\n    var maxValue = 0, maxIndex = 0;\n    for (i = 0; i < count; i++) {\n        if (itemCount[i] > maxValue) {\n            maxValue = itemCount[i];\n            maxIndex = i;\n        }\n    }\n\n    return itemArray[maxIndex];\n};\n\nexports.covariance = function covariance(vector1, vector2, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var mean1 = exports.mean(vector1);\n    var mean2 = exports.mean(vector2);\n\n    if (vector1.length !== vector2.length)\n        throw 'Vectors do not have the same dimensions';\n\n    var cov = 0, l = vector1.length;\n    for (var i = 0; i < l; i++) {\n        var x = vector1[i] - mean1;\n        var y = vector2[i] - mean2;\n        cov += x * y;\n    }\n\n    if (unbiased)\n        return cov / (l - 1);\n    else\n        return cov / l;\n};\n\nexports.skewness = function skewness(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n\n    var s2 = 0, s3 = 0, l = values.length;\n    for (var i = 0; i < l; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s3 += dev * dev * dev;\n    }\n    var m2 = s2 / l;\n    var m3 = s3 / l;\n\n    var g = m3 / (Math.pow(m2, 3 / 2.0));\n    if (unbiased) {\n        var a = Math.sqrt(l * (l - 1));\n        var b = l - 2;\n        return (a / b) * g;\n    } else {\n        return g;\n    }\n};\n\nexports.kurtosis = function kurtosis(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n    var n = values.length, s2 = 0, s4 = 0;\n\n    for (var i = 0; i < n; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s4 += dev * dev * dev * dev;\n    }\n    var m2 = s2 / n;\n    var m4 = s4 / n;\n\n    if (unbiased) {\n        var v = s2 / (n - 1);\n        var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n        var b = s4 / (v * v);\n        var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n\n        return a * b - 3 * c;\n    } else {\n        return m4 / (m2 * m2) - 3;\n    }\n};\n\nexports.entropy = function entropy(values, eps) {\n    if (typeof (eps) === 'undefined') eps = 0;\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * Math.log(values[i] + eps);\n    return -sum;\n};\n\nexports.weightedMean = function weightedMean(values, weights) {\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * weights[i];\n    return sum;\n};\n\nexports.weightedStandardDeviation = function weightedStandardDeviation(values, weights) {\n    return Math.sqrt(exports.weightedVariance(values, weights));\n};\n\nexports.weightedVariance = function weightedVariance(values, weights) {\n    var theMean = exports.weightedMean(values, weights);\n    var vari = 0, l = values.length;\n    var a = 0, b = 0;\n\n    for (var i = 0; i < l; i++) {\n        var z = values[i] - theMean;\n        var w = weights[i];\n\n        vari += w * (z * z);\n        b += w;\n        a += w * w;\n    }\n\n    return vari * (b / (b * b - a));\n};\n\nexports.center = function center(values, inPlace) {\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n\n    var result = values;\n    if (!inPlace)\n        result = [].concat(values);\n\n    var theMean = exports.mean(result), l = result.length;\n    for (var i = 0; i < l; i++)\n        result[i] -= theMean;\n};\n\nexports.standardize = function standardize(values, standardDev, inPlace) {\n    if (typeof (standardDev) === 'undefined') standardDev = exports.standardDeviation(values);\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n    var l = values.length;\n    var result = inPlace ? values : new Array(l);\n    for (var i = 0; i < l; i++)\n        result[i] = values[i] / standardDev;\n    return result;\n};\n\nexports.cumulativeSum = function cumulativeSum(array) {\n    var l = array.length;\n    var result = new Array(l);\n    result[0] = array[0];\n    for (var i = 1; i < l; i++)\n        result[i] = result[i - 1] + array[i];\n    return result;\n};\n","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.7.6\";\n\n  return Qty;\n\n})));\n","import Qty from 'js-quantities';\n\nexport function convertUnit(array, fromUnit, toUnit) {\n  fromUnit = normalize(fromUnit);\n  toUnit = normalize(toUnit);\n\n  if (fromUnit === toUnit) return array;\n\n  try {\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    return convert(array);\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction normalize(unit) {\n  unit = unit.replace(/°C/g, 'tempC');\n  unit = unit.replace(/°F/g, 'tempF');\n  unit = unit.replace(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n  return unit;\n}\n","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([migyu]{0,5})?$/;\n\nexport function ensureRegexp(string) {\n  const parts = testRegExp.exec(string);\n  if (parts) {\n    try {\n      return new RegExp(parts[1], parts[2]);\n    } catch (err) {\n      return stringToRegexp(string);\n    }\n  } else {\n    return stringToRegexp(string);\n  }\n}\n\nfunction stringToRegexp(string, flags = 'i') {\n  return new RegExp(\n    string.replace(/[[\\]\\\\{}()+*?.$^|]/g, function (match) {\n      return `\\\\${match}`;\n    }),\n    flags,\n  );\n}\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\n\nimport { convertUnit } from './convertUnit';\n\nexport function getConvertedVariable(variable, newUnits) {\n  const data =\n    variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n      ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n      : variable.data;\n  return {\n    units: newUnits,\n    label: variable.label.replace(`[${variable.units}]`, `[${newUnits}]`),\n    data,\n    min: min(data),\n    max: max(data),\n    isMonotone: xIsMonotone(data),\n  };\n}\n","import { convertUnit } from './convertUnit';\nimport { ensureRegexp } from './ensureRegexp';\nimport { getConvertedVariable } from './getConvertedVariable';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param {Array} [spectra] Array of spectra\n * @param {object} [selector={}]\n * @param {string} [selector.units] Units separated by \"vs\", e.g., \"g vs °C\"\n * @param {string} [selector.xUnits]\n * @param {string} [selector.yUnits]\n * @param {string} [selector.labels] Labels separated by \"vs\", e.g., \"relative pressure vs excess adsorption\"\n * @param {string} [selector.xLabel] will be converted to case insensitive regexp\n * @param {string} [selector.yLabel] will be converted to case insensitive regexp\n * @param {string} [selector.dataType] will be converted to case insensitive regexp\n * @param {string} [selector.title] will be converted to case insensitive regexp\n * @param {object} [selector.meta] object of key/value to filter meta information. Each value will be converted to case insensitive regexp\n * @returns {Spectrum}\n */\n\nexport function getXYSpectrum(spectra = [], selector = {}) {\n  if (spectra.length < 1) return;\n\n  for (let spectrum of spectra) {\n    let variableNames = Object.keys(spectrum.variables);\n    if (!variableNames.length > 1) continue;\n    let {\n      dataType,\n      title,\n      xUnits,\n      yUnits,\n      units,\n      labels,\n      xLabel,\n      yLabel,\n      meta,\n    } = selector;\n\n    // we filter on generatl spectrum information\n    if (dataType) {\n      dataType = ensureRegexp(dataType);\n      if (!spectrum.dataType || !spectrum.dataType.match(dataType)) continue;\n    }\n\n    if (title) {\n      title = ensureRegexp(title);\n      if (!spectrum.title || !spectrum.title.match(title)) continue;\n    }\n\n    if (meta && typeof meta === 'object') {\n      if (!spectrum.meta) continue;\n      for (let key in spectrum.meta) {\n        if (!spectrum.meta[key]) continue;\n        let value = ensureRegexp(spectrum.meta[key]);\n        if (!spectrum.meta[key].match(value)) continue;\n      }\n    }\n\n    if (units && !xUnits && !yUnits) [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n      [xLabel, yLabel] = labels.split(/\\s*vs\\s*/);\n    }\n\n    if (xLabel) xLabel = ensureRegexp(xLabel);\n    if (yLabel) yLabel = ensureRegexp(yLabel);\n\n    let x = getPossibleVariable(spectrum.variables, {\n      units: xUnits,\n      label: xLabel,\n      variableName: 'x',\n    });\n    let y = getPossibleVariable(spectrum.variables, {\n      units: yUnits,\n      label: yLabel,\n      variableName: 'y',\n    });\n\n    if (x && y) {\n      return {\n        title: spectrum.title,\n        dataType: spectrum.dataType,\n        meta: spectrum.meta,\n        variables: { x, y },\n      };\n    }\n  }\n  return;\n}\n\nfunction getPossibleVariable(variables, selector = {}) {\n  const { units, label, variableName } = selector;\n  let possible = { ...variables };\n  if (units !== undefined) {\n    for (let key in possible) {\n      let converted = convertUnit(1, variables[key].units, units);\n      if (converted) {\n        possible[key] = getConvertedVariable(variables[key], units);\n      } else {\n        delete possible[key];\n      }\n    }\n  }\n\n  if (label !== undefined) {\n    for (let key in possible) {\n      if (!variables[key].label.match(label)) {\n        delete possible[key];\n      }\n    }\n  }\n\n  if (possible[variableName]) return possible[variableName];\n  if (possible[variableName.toUpperCase()]) {\n    return possible[variableName.toUpperCase()];\n  }\n  if (Object.keys(possible).length > 0) {\n    return possible[Object.keys(possible)[0]];\n  }\n}\n","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\n\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum';\nimport { getXYSpectrum } from './util/getXYSpectrum';\n\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n * @class Analysis\n * @param {object} [options={}]\n * @param {string} [options.id=randomString] unique identifier\n * @param {string} [options.label=options.id] human redeable label\n */\nexport class Analysis {\n  constructor(options = {}) {\n    this.id = options.id || Math.random().toString(36).substring(2, 10);\n    this.label = options.label || this.id;\n    this.spectra = [];\n    this.cache = {};\n  }\n\n  /**\n   * Add a spectrum in the internal spectra variable\n   * @param {object} [variables]\n   * @param {object} [variables.x]\n   * @param {array} [variables.x.data]\n   * @param {array} [variables.x.units='x']\n   * @param {array} [variables.x.label='x']\n   * @param {object} [variables.y]\n   * @param {array} [variables.y.data]\n   * @param {array} [variables.y.units='y']\n   * @param {array} [variables.y.label='y']\n   * @param {object} [options={}]\n   * @param {string} [options.dataType='']\n   * @param {string} [options.title='']\n   * @param {string} [options.meta={}]\n   * @param {string} [options.tmp={}] Any temporary data\n   */\n  pushSpectrum(variables, options = {}) {\n    this.spectra.push(standardizeData(variables, options));\n    this.cache = {};\n  }\n\n  /**\n   * Retrieve a Spectrum based on x/y units\n   * @param {object} [selector={}]\n   * @param {string} [selector.units] Units separated by vs like for example \"g vs °C\"\n   * @param {string} [selector.xUnits] if undefined takes the first variable\n   * @param {string} [selector.yUnits] if undefined takes the second variable\n   * @returns {Spectrum}\n   */\n  getXYSpectrum(selector = {}) {\n    let id = JSON.stringify(selector);\n    if (!this.cache[id]) {\n      this.cache[id] = getXYSpectrum(this.spectra, selector);\n    }\n    return this.cache[id];\n  }\n\n  /**\n   * Return the data object for specific x/y units with possibly some\n   * normalization options\n   * @param {object} [options={}]\n   * @param {object} [options.selector]\n   * @param {string} [options.selector.xUnits] // if undefined takes the first variable\n   * @param {string} [options.selector.yUnits] // if undefined takes the second variable\n   * @param {object} [options.normalization]\n   *\n   */\n  getNormalizedSpectrum(options = {}) {\n    const { normalization, selector } = options;\n    const spectrum = this.getXYSpectrum(selector);\n    if (!spectrum) return undefined;\n    return getNormalizedSpectrum(spectrum, normalization);\n  }\n\n  /**\n   * Returns the xLabel\n   * @param {object} [selector]\n   * @param {string} [selector.xUnits] // if undefined takes the first variable\n   * @param {string} [selector.yUnits] // if undefined takes the second variable\n   * @returns {string}\n   */\n  getXLabel(selector) {\n    return this.getXYSpectrum(selector).variables.x.label;\n  }\n\n  /**\n   * Returns the yLabel\n   * @param {object} [selector]\n   * @param {string} [selector.xUnits] // if undefined takes the first variable\n   * @param {string} [selector.yUnits] // if undefined takes the second variable\n   * @returns {string}\n   */\n  getYLabel(selector) {\n    return this.getXYSpectrum(selector).variables.y.label;\n  }\n}\n\n/**\n * Internal function that ensure the order of x / y array\n * @param {DataXY} [variables]\n * @param {object} [options={}]\n * @param {string} [options.dataType='']\n * @param {string} [options.title='']\n * @param {string} [options.meta={}]\n * @param {string} [options.tmp={}] Any temporary data\n * @return {Spectrum}\n */\nfunction standardizeData(variables, options = {}) {\n  let { meta = {}, tmp = {}, dataType = '', title = '' } = options;\n\n  let xVariable = variables.x;\n  let yVariable = variables.y;\n  if (!xVariable || !yVariable) {\n    throw Error('A spectrum must contain at least x and y variables');\n  }\n  if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n    throw Error('x and y variables must contain an array data');\n  }\n\n  let x = xVariable.data;\n  let reverse = x && x.length > 1 && x[0] > x[x.length - 1];\n\n  for (let key in variables) {\n    let variable = variables[key];\n    if (reverse) variable.data = variable.data.reverse();\n    variable.label = variable.label || key;\n    variable.units =\n      variable.units || variable.label.replace(/^.*[([](.*)[)\\]].*$/, '$1');\n    variable.min = min(variable.data);\n    variable.max = max(variable.data);\n    variable.isMonotone = xIsMonotone(variable.data);\n  }\n\n  return {\n    variables,\n    title,\n    dataType,\n    meta,\n    tmp,\n  };\n}\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nimport baselineCorrection from 'ml-baseline-correction-regression';\nimport savitzkyGolay from 'ml-savitzky-golay';\nimport {\n  xDivide,\n  xSubtract,\n  xMultiply,\n  xAdd,\n  xIsMonotone,\n} from 'ml-spectra-processing';\nimport Stat from 'ml-stat/array';\n/**\n *\n * @private\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.from=x.min]\n * @param {number} [options.to=x.max]\n * @param {number} [options.numberOfPoints]\n * @param {String} [options.processing] Allows to calculate derivatives\n * @param {Array} [options.filters=[]] Array of object containing 'name' (centerMean, divideSD, normalize, rescale) and 'options'\n * @param {Array} [options.exclusions=[]]\n * @returns {DataXY}\n */\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n  let data = {\n    x: spectrum.variables.x.data,\n    y: spectrum.variables.y.data,\n  };\n  let newSpectrum = {\n    variables: {\n      x: {\n        data: spectrum.variables.x.data,\n        units: spectrum.variables.x.units,\n        label: spectrum.variables.x.label,\n      },\n      y: {\n        data: spectrum.variables.y.data,\n        units: spectrum.variables.y.units,\n        label: spectrum.variables.y.label,\n      },\n    },\n  };\n  if (spectrum.title) newSpectrum.title = spectrum.title;\n  if (spectrum.dataType) newSpectrum.dataType = spectrum.dataType;\n  if (spectrum.meta) newSpectrum.meta = spectrum.meta;\n\n  let {\n    from = spectrum.variables.x.min,\n    to = spectrum.variables.x.max,\n    numberOfPoints,\n    filters = [],\n    exclusions = [],\n    processing = '',\n  } = options;\n  let { x, y } = filterX(data, { from, to });\n\n  switch (processing) {\n    case 'firstDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `1° derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 1,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    case 'secondDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `2° derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 2,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    default:\n  }\n\n  if (filters.length) {\n    // filters change the y axis, we get rid of the units\n    newSpectrum.variables.y.units = '';\n    newSpectrum.variables.y.label =\n      newSpectrum.variables.y.label &&\n      newSpectrum.variables.y.label.replace(/\\s*\\[.*\\]/, '');\n  }\n\n  for (let filter of filters) {\n    let filterOptions = filter.options || {};\n    switch (filter.name.toLowerCase()) {\n      case 'centermean': {\n        let mean = Stat.mean(y);\n        y = xSubtract(y, mean);\n        break;\n      }\n      case 'dividebysd': {\n        let std = Stat.standardDeviation(y);\n        y = xDivide(y, std);\n        break;\n      }\n      case 'normalize': {\n        y = normed(y, {\n          sumValue: filterOptions.value ? Number(filterOptions.value) : 1,\n          algorithm: 'absolute',\n        });\n        break;\n      }\n      case 'rescale': {\n        y = rescale(y, {\n          min: filterOptions.min ? Number(filterOptions.min) : 0,\n          max: filterOptions.max ? Number(filterOptions.max) : 1,\n        });\n        break;\n      }\n      case 'dividebymax': {\n        let maxValue = max(y);\n        y = xDivide(y, maxValue);\n        break;\n      }\n      case 'multiply': {\n        y = xMultiply(y, filterOptions.value ? Number(filterOptions.value) : 1);\n        break;\n      }\n      case 'add': {\n        y = xAdd(y, filterOptions.value ? Number(filterOptions.value) : 0);\n        break;\n      }\n      case 'baselinecorreciton': {\n        let result = baselineCorrection(x, y, filterOptions);\n        y = result.corrected;\n        break;\n      }\n      case '':\n      case undefined:\n        break;\n      default:\n        throw new Error(`Unknown process kind: ${process.kind}`);\n    }\n  }\n\n  if (!numberOfPoints) {\n    data = filterX({ x, y }, { from, to, exclusions });\n  } else {\n    data = equallySpaced({ x, y }, { from, to, numberOfPoints, exclusions });\n  }\n\n  newSpectrum.variables.x.data = x;\n  newSpectrum.variables.x.min = min(x);\n  newSpectrum.variables.x.max = max(x);\n  newSpectrum.variables.x.isMonotone = xIsMonotone(x);\n  newSpectrum.variables.y.data = y;\n  newSpectrum.variables.y.min = min(y);\n  newSpectrum.variables.y.max = max(y);\n  newSpectrum.variables.y.isMonotone = xIsMonotone(y);\n\n  return newSpectrum;\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\n\nexport function complexChromatogram(result) {\n  let spectra = result.spectra;\n  let length = spectra.length;\n  let chromatogram = {\n    times: new Array(length),\n    series: {\n      ms: {\n        dimension: 2,\n        data: new Array(length),\n      },\n    },\n  };\n\n  let existingGCMSFields = [];\n  for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n    let label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n    if (spectra[0][label]) {\n      existingGCMSFields.push(label);\n      chromatogram.series[label] = {\n        dimension: 1,\n        data: new Array(length),\n      };\n    }\n  }\n\n  for (let i = 0; i < length; i++) {\n    let spectrum = spectra[i];\n    chromatogram.times[i] = spectrum.pageValue;\n    for (let j = 0; j < existingGCMSFields.length; j++) {\n      chromatogram.series[existingGCMSFields[j]].data[i] = parseFloat(\n        spectrum[existingGCMSFields[j]],\n      );\n    }\n    if (spectrum.data) {\n      chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n    }\n  }\n  result.chromatogram = chromatogram;\n}\n\nexport function isMSField(canonicDataLabel) {\n  return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\n\nexport function convertMSFieldToLabel(value) {\n  return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n","export default function convertToFloatArray(stringArray) {\n  let floatArray = [];\n  for (let i = 0; i < stringArray.length; i++) {\n    floatArray.push(parseFloat(stringArray[i]));\n  }\n  return floatArray;\n}\n","export default function fastParseXYData(spectrum, value) {\n  // TODO need to deal with result\n  //  console.log(value);\n  // we check if deltaX is defined otherwise we calculate it\n\n  let yFactor = spectrum.yFactor;\n  let deltaX = spectrum.deltaX;\n\n  spectrum.isXYdata = true;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let currentX = spectrum.firstX;\n  let currentY = spectrum.firstY;\n\n  // we skip the first line\n  //\n  let endLine = false;\n  let ascii;\n  let i = 0;\n  for (; i < value.length; i++) {\n    ascii = value.charCodeAt(i);\n    if (ascii === 13 || ascii === 10) {\n      endLine = true;\n    } else {\n      if (endLine) break;\n    }\n  }\n\n  // we proceed taking the i after the first line\n  let newLine = true;\n  let isDifference = false;\n  let isLastDifference = false;\n  let lastDifference = 0;\n  let isDuplicate = false;\n  let inComment = false;\n  let currentValue = 0; // can be a difference or a duplicate\n  let lastValue = 0; // must be the real last value\n  let isNegative = false;\n  let inValue = false;\n  let skipFirstValue = false;\n  let decimalPosition = 0;\n  for (; i <= value.length; i++) {\n    if (i === value.length) ascii = 13;\n    else ascii = value.charCodeAt(i);\n    if (inComment) {\n      // we should ignore the text if we are after $$\n      if (ascii === 13 || ascii === 10) {\n        newLine = true;\n        inComment = false;\n      }\n    } else {\n      // when is it a new value ?\n      // when it is not a digit, . or comma\n      // it is a number that is either new or we continue\n      if (ascii <= 57 && ascii >= 48) {\n        // a number\n        inValue = true;\n        if (decimalPosition > 0) {\n          currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n        } else {\n          currentValue *= 10;\n          currentValue += ascii - 48;\n        }\n      } else if (ascii === 44 || ascii === 46) {\n        // a \",\" or \".\"\n        inValue = true;\n        decimalPosition++;\n      } else {\n        if (inValue) {\n          // need to process the previous value\n          if (newLine) {\n            newLine = false; // we don't check the X value\n            // console.log(\"NEW LINE\",isDifference, lastDifference);\n            // if new line and lastDifference, the first value is just a check !\n            // that we don't check ...\n            if (isLastDifference) skipFirstValue = true;\n          } else {\n            // need to deal with duplicate and differences\n            if (skipFirstValue) {\n              skipFirstValue = false;\n            } else {\n              if (isDifference) {\n                lastDifference = isNegative ? 0 - currentValue : currentValue;\n                isLastDifference = true;\n                isDifference = false;\n              } else if (!isDuplicate) {\n                lastValue = isNegative ? 0 - currentValue : currentValue;\n              }\n              let duplicate = isDuplicate ? currentValue - 1 : 1;\n              for (let j = 0; j < duplicate; j++) {\n                if (isLastDifference) {\n                  currentY += lastDifference;\n                } else {\n                  currentY = lastValue;\n                }\n                currentData.x.push(currentX);\n                currentData.y.push(currentY * yFactor);\n                currentX += deltaX;\n              }\n            }\n          }\n          isNegative = false;\n          currentValue = 0;\n          decimalPosition = 0;\n          inValue = false;\n          isDuplicate = false;\n        }\n\n        // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n        if (ascii < 74 && ascii > 63) {\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 64;\n        } else if (ascii > 96 && ascii < 106) {\n          // negative SQZ digits a b c d e f g h i (ascii 97-105)\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 96;\n          isNegative = true;\n        } else if (ascii === 115) {\n          // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n          inValue = true;\n          isDuplicate = true;\n          currentValue = 9;\n        } else if (ascii > 82 && ascii < 91) {\n          inValue = true;\n          isDuplicate = true;\n          currentValue = ascii - 82;\n        } else if (ascii > 73 && ascii < 83) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 73;\n        } else if (ascii > 105 && ascii < 115) {\n          // negative DIF digits j k l m n o p q r (ascii 106-114)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 105;\n          isNegative = true;\n        } else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n          // $ sign, we need to check the next one\n          inValue = true;\n          inComment = true;\n        } else if (ascii === 37) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = 0;\n          isNegative = false;\n        } else if (ascii === 45) {\n          // a \"-\"\n          // check if after there is a number, decimal or comma\n          let ascii2 = value.charCodeAt(i + 1);\n          if (\n            (ascii2 >= 48 && ascii2 <= 57) ||\n            ascii2 === 44 ||\n            ascii2 === 46\n          ) {\n            inValue = true;\n            if (!newLine) isLastDifference = false;\n            isNegative = true;\n          }\n        } else if (ascii === 13 || ascii === 10) {\n          newLine = true;\n          inComment = false;\n        }\n        // and now analyse the details ... space or tabulation\n        // if \"+\" we just don't care\n      }\n    }\n  }\n}\n","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\n\nexport default function parsePeakTable(spectrum, value, result) {\n  spectrum.isPeaktable = true;\n\n  if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n    parseXY(spectrum, value, result);\n  } else {\n    parseXYZ(spectrum, value, result);\n  }\n\n  // we will add the data in the variables\n  if (spectrum.variables) {\n    for (let key in spectrum.variables) {\n      spectrum.variables[key].data = spectrum.data[key];\n    }\n  }\n}\n\nfunction parseXY(spectrum, value, result) {\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % 2 === 0) {\n      for (let j = 0; j < values.length; j = j + 2) {\n        // takes around 40% of the time to add and parse the 2 values nearly exclusively because of parseFloat\n        currentData.x.push(parseFloat(values[j]) * spectrum.xFactor);\n        currentData.y.push(parseFloat(values[j + 1]) * spectrum.yFactor);\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n\nfunction parseXYZ(spectrum, value, result) {\n  let currentData = {};\n  let variables = Object.keys(spectrum.variables);\n  let numberOfVariables = variables.length;\n  variables.forEach((variable) => (currentData[variable] = []));\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % numberOfVariables === 0) {\n      for (let j = 0; j < values.length; j++) {\n        // todo should try to find a xFactor (y, ...)\n        currentData[variables[j % numberOfVariables]].push(\n          parseFloat(values[j]),\n        );\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n","export default function parseXYA(spectrum, value) {\n  let removeSymbolRegExp = /(\\(+|\\)+|<+|>+|\\s+)/g;\n\n  spectrum.isXYAdata = true;\n  let values;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    values = lines[i].trim().replace(removeSymbolRegExp, '').split(',');\n    currentData.x.push(parseFloat(values[0]));\n    currentData.y.push(parseFloat(values[1]));\n  }\n}\n","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\n\nexport default function add2D(result, options) {\n  let zData = convertTo3DZ(result.spectra);\n  if (!options.noContour) {\n    result.contourLines = generateContourLines(zData, options);\n    delete zData.z;\n  }\n  result.minMax = zData;\n}\n","import getMedian from 'ml-array-median';\n\nexport default function convertTo3DZ(spectra) {\n  let minZ = spectra[0].data.y[0];\n  let maxZ = minZ;\n  let ySize = spectra.length;\n  let xSize = spectra[0].data.x.length;\n\n  let z = new Array(ySize);\n  for (let i = 0; i < ySize; i++) {\n    z[i] = spectra[i].data.y;\n    for (let j = 0; j < xSize; j++) {\n      let value = z[i][j];\n      if (value < minZ) minZ = value;\n      if (value > maxZ) maxZ = value;\n    }\n  }\n\n  const firstX = spectra[0].data.x[0];\n  const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n  const firstY = spectra[0].pageValue;\n  const lastY = spectra[ySize - 1].pageValue;\n\n  // Because the min / max value are the only information about the matrix if we invert\n  // min and max we need to invert the array\n  if (firstX > lastX) {\n    for (let spectrum of z) {\n      spectrum.reverse();\n    }\n  }\n  if (firstY > lastY) {\n    z.reverse();\n  }\n\n  return {\n    z: z,\n    minX: Math.min(firstX, lastX),\n    maxX: Math.max(firstX, lastX),\n    minY: Math.min(firstY, lastY),\n    maxY: Math.max(firstY, lastY),\n    minZ: minZ,\n    maxZ: maxZ,\n    noise: getMedian(z[0].map(Math.abs)),\n  };\n}\n","export default function generateContourLines(zData, options) {\n  let noise = zData.noise;\n  let z = zData.z;\n  let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n  let isOver0, isOver1, isOver2, isOver3;\n  let nbSubSpectra = z.length;\n  let nbPovars = z[0].length;\n  let pAx, pAy, pBx, pBy;\n\n  let x0 = zData.minX;\n  let xN = zData.maxX;\n  let dx = (xN - x0) / (nbPovars - 1);\n  let y0 = zData.minY;\n  let yN = zData.maxY;\n  let dy = (yN - y0) / (nbSubSpectra - 1);\n  let minZ = zData.minZ;\n  let maxZ = zData.maxZ;\n\n  // System.out.prvarln('y0 '+y0+' yN '+yN);\n  // -------------------------\n  // Povars attribution\n  //\n  // 0----1\n  // |  / |\n  // | /  |\n  // 2----3\n  //\n  // ---------------------d------\n\n  let iter = options.nbContourLevels * 2;\n  let contourLevels = new Array(iter);\n  let lineZValue;\n  for (let level = 0; level < iter; level++) {\n    // multiply by 2 for positif and negatif\n    let contourLevel = {};\n    contourLevels[level] = contourLevel;\n    let side = level % 2;\n    let factor =\n      (maxZ - options.noiseMultiplier * noise) *\n      Math.exp((level >> 1) - options.nbContourLevels);\n    if (side === 0) {\n      lineZValue = factor + options.noiseMultiplier * noise;\n    } else {\n      lineZValue = 0 - factor - options.noiseMultiplier * noise;\n    }\n    let lines = [];\n    contourLevel.zValue = lineZValue;\n    contourLevel.lines = lines;\n\n    if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n    for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n      let subSpectra = z[iSubSpectra];\n      let subSpectraAfter = z[iSubSpectra + 1];\n      for (let povar = 0; povar < nbPovars - 1; povar++) {\n        povarHeight0 = subSpectra[povar];\n        povarHeight1 = subSpectra[povar + 1];\n        povarHeight2 = subSpectraAfter[povar];\n        povarHeight3 = subSpectraAfter[povar + 1];\n\n        isOver0 = povarHeight0 > lineZValue;\n        isOver1 = povarHeight1 > lineZValue;\n        isOver2 = povarHeight2 > lineZValue;\n        isOver3 = povarHeight3 > lineZValue;\n\n        // Example povar0 is over the plane and povar1 and\n        // povar2 are below, we find the varersections and add\n        // the segment\n        if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n          pAx =\n            povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n          pAy = iSubSpectra;\n          pBx = povar;\n          pBy =\n            iSubSpectra +\n            (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // remove push does not help !!!!\n        if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n          pAx = povar + 1;\n          pAy =\n            iSubSpectra +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n          pBx =\n            povar +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n          pBy = iSubSpectra + 1;\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // test around the diagonal\n        if (isOver1 !== isOver2) {\n          pAx =\n            (povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dx +\n            x0;\n          pAy =\n            (iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dy +\n            y0;\n          if (isOver1 !== isOver0) {\n            pBx =\n              povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n            pBy = iSubSpectra;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver0) {\n            pBx = povar;\n            pBy =\n              iSubSpectra +\n              1 -\n              (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver1 !== isOver3) {\n            pBx = povar + 1;\n            pBy =\n              iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver3) {\n            pBx =\n              povar +\n              (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n            pBy = iSubSpectra + 1;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    minX: zData.minX,\n    maxX: zData.maxX,\n    minY: zData.minY,\n    maxY: zData.maxY,\n    segments: contourLevels,\n  };\n}\n","/**\n * Fast Fourier Transform module\n * 1D-FFT/IFFT, 2D-FFT/IFFT (radix-2)\n */\nvar FFT = (function(){\n  var FFT;  \n  \n  if(typeof exports !== 'undefined') {\n    FFT = exports;   // for CommonJS\n  } else {\n    FFT = {};\n  }\n  \n  var version = {\n    release: '0.3.0',\n    date: '2013-03'\n  };\n  FFT.toString = function() {\n    return \"version \" + version.release + \", released \" + version.date;\n  };\n\n  // core operations\n  var _n = 0,          // order\n      _bitrev = null,  // bit reversal table\n      _cstb = null;    // sin/cos table\n\n  var core = {\n    init : function(n) {\n      if(n !== 0 && (n & (n - 1)) === 0) {\n        _n = n;\n        core._initArray();\n        core._makeBitReversalTable();\n        core._makeCosSinTable();\n      } else {\n        throw new Error(\"init: radix-2 required\");\n      }\n    },\n    // 1D-FFT\n    fft1d : function(re, im) {\n      core.fft(re, im, 1);\n    },\n    // 1D-IFFT\n    ifft1d : function(re, im) {\n      var n = 1/_n;\n      core.fft(re, im, -1);\n      for(var i=0; i<_n; i++) {\n        re[i] *= n;\n        im[i] *= n;\n      }\n    },\n     // 1D-IFFT\n    bt1d : function(re, im) {\n      core.fft(re, im, -1);\n    },\n    // 2D-FFT Not very useful if the number of rows have to be equal to cols\n    fft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.fft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.fft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // 2D-IFFT\n    ifft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.ifft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.ifft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // core operation of FFT\n    fft : function(re, im, inv) {\n      var d, h, ik, m, tmp, wr, wi, xr, xi,\n          n4 = _n >> 2;\n      // bit reversal\n      for(var l=0; l<_n; l++) {\n        m = _bitrev[l];\n        if(l < m) {\n          tmp = re[l];\n          re[l] = re[m];\n          re[m] = tmp;\n          tmp = im[l];\n          im[l] = im[m];\n          im[m] = tmp;\n        }\n      }\n      // butterfly operation\n      for(var k=1; k<_n; k<<=1) {\n        h = 0;\n        d = _n/(k << 1);\n        for(var j=0; j<k; j++) {\n          wr = _cstb[h + n4];\n          wi = inv*_cstb[h];\n          for(var i=j; i<_n; i+=(k<<1)) {\n            ik = i + k;\n            xr = wr*re[ik] + wi*im[ik];\n            xi = wr*im[ik] - wi*re[ik];\n            re[ik] = re[i] - xr;\n            re[i] += xr;\n            im[ik] = im[i] - xi;\n            im[i] += xi;\n          }\n          h += d;\n        }\n      }\n    },\n    // initialize the array (supports TypedArray)\n    _initArray : function() {\n      if(typeof Uint32Array !== 'undefined') {\n        _bitrev = new Uint32Array(_n);\n      } else {\n        _bitrev = [];\n      }\n      if(typeof Float64Array !== 'undefined') {\n        _cstb = new Float64Array(_n*1.25);\n      } else {\n        _cstb = [];\n      }\n    },\n    // zero padding\n    _paddingZero : function() {\n      // TODO\n    },\n    // makes bit reversal table\n    _makeBitReversalTable : function() {\n      var i = 0,\n          j = 0,\n          k = 0;\n      _bitrev[0] = 0;\n      while(++i < _n) {\n        k = _n >> 1;\n        while(k <= j) {\n          j -= k;\n          k >>= 1;\n        }\n        j += k;\n        _bitrev[i] = j;\n      }\n    },\n    // makes trigonometiric function table\n    _makeCosSinTable : function() {\n      var n2 = _n >> 1,\n          n4 = _n >> 2,\n          n8 = _n >> 3,\n          n2p4 = n2 + n4,\n          t = Math.sin(Math.PI/_n),\n          dc = 2*t*t,\n          ds = Math.sqrt(dc*(2 - dc)),\n          c = _cstb[n4] = 1,\n          s = _cstb[0] = 0;\n      t = 2*dc;\n      for(var i=1; i<n8; i++) {\n        c -= dc;\n        dc += t*c;\n        s += ds;\n        ds -= t*s;\n        _cstb[i] = s;\n        _cstb[n4 - i] = c;\n      }\n      if(n8 !== 0) {\n        _cstb[n8] = Math.sqrt(0.5);\n      }\n      for(var j=0; j<n4; j++) {\n        _cstb[n2 - j]  = _cstb[j];\n      }\n      for(var k=0; k<n2p4; k++) {\n        _cstb[k + n2] = -_cstb[k];\n      }\n    }\n  };\n  // aliases (public APIs)\n  var apis = ['init', 'fft1d', 'ifft1d', 'fft2d', 'ifft2d'];\n  for(var i=0; i<apis.length; i++) {\n    FFT[apis[i]] = core[apis[i]];\n  }\n  FFT.bt = core.bt1d;\n  FFT.fft = core.fft1d;\n  FFT.ifft = core.ifft1d;\n  \n  return FFT;\n}).call(this);\n","// sources:\n// https://en.wikipedia.org/wiki/Gyromagnetic_ratio\n\n// TODO: #13 can we have a better source and more digits ? @jwist\n\nexport const gyromagneticRatio = {\n  '1H': 267.52218744e6,\n  '2H': 41.065e6,\n  '3H': 285.3508e6,\n  '3He': -203.789e6,\n  '7Li': 103.962e6,\n  '13C': 67.28284e6,\n  '14N': 19.331e6,\n  '15N': -27.116e6,\n  '17O': -36.264e6,\n  '19F': 251.662e6,\n  '23Na': 70.761e6,\n  '27Al': 69.763e6,\n  '29Si': -53.19e6,\n  '31P': 108.291e6,\n  '57Fe': 8.681e6,\n  '63Cu': 71.118e6,\n  '67Zn': 16.767e6,\n  '129Xe': -73.997e6,\n};\n","export default function profiling(result, action, options) {\n  if (result.profiling) {\n    result.profiling.push({\n      action,\n      time: Date.now() - options.start,\n    });\n  }\n}\n","export default function simpleChromatogram(result) {\n  let data = result.spectra[0].data;\n  result.chromatogram = {\n    times: data.x.slice(),\n    series: {\n      intensity: {\n        dimension: 1,\n        data: data.y.slice(),\n      },\n    },\n  };\n}\n","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\n\nexport default function postProcessing(entriesFlat, result, options) {\n  // converting Hz to ppm\n  postProcessingNMR(entriesFlat);\n\n  for (let entry of entriesFlat) {\n    if (Object.keys(entry.ntuples).length > 0) {\n      let newNtuples = [];\n      let keys = Object.keys(entry.ntuples);\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let values = entry.ntuples[key];\n        for (let j = 0; j < values.length; j++) {\n          if (!newNtuples[j]) newNtuples[j] = {};\n          newNtuples[j][key] = values[j];\n        }\n      }\n      entry.ntuples = newNtuples;\n    }\n\n    if (entry.twoD && options.wantXY) {\n      add2D(entry, options);\n\n      profiling(result, 'Finished countour plot calculation', options);\n\n      if (!options.keepSpectra) {\n        delete entry.spectra;\n      }\n    }\n\n    // maybe it is a GC (HPLC) / MS. In this case we add a new format\n    if (options.chromatogram) {\n      if (entry.spectra.length > 1) {\n        complexChromatogram(entry);\n      } else {\n        simpleChromatogram(entry);\n      }\n      profiling(result, 'Finished chromatogram calculation', options);\n    }\n    delete entry.tmp;\n  }\n}\n","import { gyromagneticRatio } from 'nmr-processing';\n\nexport default function postProcessingNMR(entriesFlat) {\n  // specific NMR functions\n  let observeFrequency = 0;\n  let shiftOffsetVal = 0;\n\n  for (let entry of entriesFlat) {\n    for (let spectrum of entry.spectra) {\n      if (entry.ntuples && entry.ntuples.symbol) {\n        if (!observeFrequency && spectrum.observeFrequency) {\n          observeFrequency = spectrum.observeFrequency;\n        }\n        if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n          shiftOffsetVal = spectrum.shiftOffsetVal;\n        }\n      } else {\n        observeFrequency = spectrum.observeFrequency;\n        shiftOffsetVal = spectrum.shiftOffsetVal;\n      }\n\n      if (observeFrequency) {\n        if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n          spectrum.xUnits = 'PPM';\n          spectrum.xFactor = spectrum.xFactor / observeFrequency;\n          spectrum.firstX = spectrum.firstX / observeFrequency;\n          spectrum.lastX = spectrum.lastX / observeFrequency;\n          spectrum.deltaX = spectrum.deltaX / observeFrequency;\n          for (let i = 0; i < spectrum.data.x.length; i++) {\n            spectrum.data.x[i] /= observeFrequency;\n          }\n        }\n      }\n      if (shiftOffsetVal) {\n        let shift = spectrum.firstX - shiftOffsetVal;\n        spectrum.firstX = spectrum.firstX - shift;\n        spectrum.lastX = spectrum.lastX - shift;\n        for (let i = 0; i < spectrum.data.x.length; i++) {\n          spectrum.data.x[i] -= shift;\n        }\n      }\n\n      // we will check if some nucleus are missing ...\n      if (entry.ntuples && entry.ntuples.nucleus && entry.ntuples.symbol) {\n        for (let i = 0; i < entry.ntuples.nucleus.length; i++) {\n          let symbol = entry.ntuples.symbol[i];\n          let nucleus = entry.ntuples.nucleus[i];\n          if (symbol.startsWith('F') && !nucleus) {\n            if (symbol === 'F1') entry.ntuples.nucleus[i] = entry.tmp.$NUC2;\n            if (symbol === 'F2') entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n          }\n          if (symbol === 'F2') {\n            entry.yType = entry.ntuples.nucleus[0];\n          }\n        }\n      }\n\n      if (\n        observeFrequency &&\n        entry.ntuples &&\n        entry.ntuples.symbol &&\n        entry.ntuples.nucleus\n      ) {\n        let unit = '';\n        let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n        if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n          unit = entry.ntuples.units[pageSymbolIndex];\n        }\n        if (unit !== 'PPM') {\n          if (pageSymbolIndex !== 0) {\n            throw Error('Not sure about this ntuples format');\n          }\n\n          let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n          let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n          if (!ratio0 || !ratio1) {\n            throw Error('Problem with determination of gyromagnetic ratio');\n          }\n          let ratio = (ratio0 / ratio1) * observeFrequency;\n          spectrum.pageValue /= ratio;\n        }\n      }\n    }\n  }\n}\n","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n  let xIndex = -1;\n  let yIndex = -1;\n  let firstVariable = '';\n  let secondVariable = '';\n  if (kind.indexOf('++') > 0) {\n    firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n    secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n  } else {\n    kind = kind.replace(/[^a-zA-Z]/g, '');\n    firstVariable = kind.charAt(0);\n    secondVariable = kind.charAt(1);\n    spectrum.variables = {};\n    for (let symbol of kind) {\n      let lowerCaseSymbol = symbol.toLowerCase();\n      let index = currentEntry.ntuples.symbol.indexOf(symbol);\n      if (index === -1) throw Error(`Symbol undefined: ${symbol}`);\n      spectrum.variables[lowerCaseSymbol] = {};\n      for (let key in currentEntry.ntuples) {\n        if (currentEntry.ntuples[key][index]) {\n          spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n            currentEntry.ntuples[key][index];\n        }\n      }\n    }\n  }\n  xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n  yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n\n  if (xIndex === -1) xIndex = 0;\n  if (yIndex === -1) yIndex = 0;\n\n  if (currentEntry.ntuples.first) {\n    if (currentEntry.ntuples.first.length > xIndex) {\n      spectrum.firstX = currentEntry.ntuples.first[xIndex];\n    }\n    if (currentEntry.ntuples.first.length > yIndex) {\n      spectrum.firstY = currentEntry.ntuples.first[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.last) {\n    if (currentEntry.ntuples.last.length > xIndex) {\n      spectrum.lastX = currentEntry.ntuples.last[xIndex];\n    }\n    if (currentEntry.ntuples.last.length > yIndex) {\n      spectrum.lastY = currentEntry.ntuples.last[yIndex];\n    }\n  }\n  if (\n    currentEntry.ntuples.vardim &&\n    currentEntry.ntuples.vardim.length > xIndex\n  ) {\n    spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n  }\n  if (currentEntry.ntuples.factor) {\n    if (currentEntry.ntuples.factor.length > xIndex) {\n      spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n    }\n    if (currentEntry.ntuples.factor.length > yIndex) {\n      spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.units) {\n    if (currentEntry.ntuples.units.length > xIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[xIndex]\n      ) {\n        spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n      } else {\n        spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n      }\n    }\n    if (currentEntry.ntuples.units.length > yIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[yIndex]\n      ) {\n        spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n      } else {\n        spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n      }\n    }\n  }\n}\n","export default function prepareSpectrum(spectrum) {\n  if (!spectrum.xFactor) spectrum.xFactor = 1;\n  if (!spectrum.yFactor) spectrum.yFactor = 1;\n}\n","import { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparatorRegExp = /[ \\t]*,[ \\t]*/;\nconst numberRegExp = /^[-+]?[0-9]*\\.?[0-9]+(e[-+]?[0-9]+)?$/;\n\nclass Spectrum {}\n\nconst defaultOptions = {\n  keepRecordsRegExp: /^$/,\n  canonicDataLabels: true,\n  canonicMetadataLabels: false,\n  dynamicTyping: true,\n  withoutXY: false,\n  chromatogram: false,\n  keepSpectra: false,\n  noContour: false,\n  nbContourLevels: 7,\n  noiseMultiplier: 5,\n  profiling: false,\n};\n\n/**\n *\n * @param {text} jcamp\n * @param {object} [options]\n * @param {number} [options.keepRecordsRegExp=/^$/] By default we don't keep meta information\n * @param {number} [options.canonicDataLabels=true] Canonize the Labels (uppercase without symbol)\n * @param {number} [options.canonicMetadataLabels=false] Canonize the metadata Labels (uppercase without symbol)\n * @param {number} [options.dynamicTyping=false] Convert numbers to Number\n * @param {number} [options.withoutXY=false] Remove the XY data\n * @param {number} [options.chromatogram=false] Special post-processing for GC / HPLC / MS\n * @param {number} [options.keepSpectra=false] Force to keep the spectra in case of 2D\n * @param {number} [options.noContour=false] Don't calculate countour in case of 2D\n * @param {number} [options.nbContourLevels=7] Number of positive / negative contour levels to calculate\n * @param {number} [options.noiseMultiplier=5] Define for 2D the level as 5 times the median as default\n * @param {number} [options.profiling=false] Add profiling information\n */\n\nexport default function convert(jcamp, options = {}) {\n  options = Object.assign({}, defaultOptions, options);\n  options.wantXY = !options.withoutXY;\n  options.start = Date.now();\n\n  let entriesFlat = [];\n\n  let result = {\n    profiling: options.profiling ? [] : false,\n    logs: [],\n    entries: [],\n  };\n\n  let tmpResult = { children: [] };\n  let currentEntry = tmpResult;\n  let parentsStack = [];\n\n  let spectrum = new Spectrum();\n\n  if (typeof jcamp !== 'string') {\n    throw new TypeError('the JCAMP should be a string');\n  }\n\n  profiling(result, 'Before split to LDRS', options);\n\n  let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n\n  profiling(result, 'Split to LDRS', options);\n\n  if (ldrs[0]) ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n\n  for (let ldr of ldrs) {\n    // This is a new LDR\n    let position = ldr.indexOf('=');\n    let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n    let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n\n    let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n\n    if (canonicDataLabel === 'DATATABLE') {\n      let endLine = dataValue.indexOf('\\n');\n      if (endLine === -1) endLine = dataValue.indexOf('\\r');\n      if (endLine > 0) {\n        // ##DATA TABLE= (X++(I..I)), XYDATA\n        // We need to find the variables\n\n        let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n        prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n\n        spectrum.datatable = infos[0];\n        if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n          canonicDataLabel = 'PEAKTABLE';\n        } else if (\n          infos[1] &&\n          (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)\n        ) {\n          canonicDataLabel = 'XYDATA';\n          spectrum.deltaX =\n            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n        }\n      }\n    }\n\n    if (canonicDataLabel === 'XYDATA') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n        if (dataValue.match(/.*\\+\\+.*/)) {\n          // ex: (X++(Y..Y))\n          if (!spectrum.deltaX) {\n            spectrum.deltaX =\n              (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n          }\n          fastParseXYData(spectrum, dataValue, result);\n        } else {\n          parsePeakTable(spectrum, dataValue, result);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    } else if (canonicDataLabel === 'PEAKTABLE') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        parsePeakTable(spectrum, dataValue, result);\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n    if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n      if (options.wantXY) {\n        if (dataValue.match(/.*(XYA).*/)) {\n          // ex: (XYA)\n          parseXYA(spectrum, dataValue);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n\n    if (canonicDataLabel === 'TITLE') {\n      let parentEntry = currentEntry;\n      if (!parentEntry.children) {\n        parentEntry.children = [];\n      }\n      currentEntry = {\n        spectra: [],\n        ntuples: {},\n        info: {},\n        meta: {},\n        tmp: {}, // tmp information we need to keep for postprocessing\n      };\n      parentEntry.children.push(currentEntry);\n      parentsStack.push(parentEntry);\n      entriesFlat.push(currentEntry);\n      currentEntry.title = dataValue;\n    } else if (canonicDataLabel === 'DATATYPE') {\n      currentEntry.dataType = dataValue;\n      if (dataValue.toLowerCase().indexOf('nd') > -1) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'NTUPLES') {\n      if (dataValue.toLowerCase().indexOf('nd') > -1) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'DATACLASS') {\n      currentEntry.dataClass = dataValue;\n    } else if (canonicDataLabel === 'XUNITS') {\n      spectrum.xUnits = dataValue;\n    } else if (canonicDataLabel === 'YUNITS') {\n      spectrum.yUnits = dataValue;\n    } else if (canonicDataLabel === 'FIRSTX') {\n      spectrum.firstX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTX') {\n      spectrum.lastX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'FIRSTY') {\n      spectrum.firstY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTY') {\n      spectrum.lastY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'NPOINTS') {\n      spectrum.nbPoints = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'XFACTOR') {\n      spectrum.xFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'YFACTOR') {\n      spectrum.yFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXX') {\n      spectrum.maxX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINX') {\n      spectrum.minX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXY') {\n      spectrum.maxY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINY') {\n      spectrum.minY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'DELTAX') {\n      spectrum.deltaX = parseFloat(dataValue);\n    } else if (\n      canonicDataLabel === '.OBSERVEFREQUENCY' ||\n      canonicDataLabel === '$SFO1'\n    ) {\n      if (!spectrum.observeFrequency) {\n        spectrum.observeFrequency = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n      if (!spectrum.xType) {\n        currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n      }\n    } else if (canonicDataLabel === '$OFFSET') {\n      // OFFSET for Bruker spectra\n      currentEntry.shiftOffsetNum = 0;\n      if (!spectrum.shiftOffsetVal) {\n        spectrum.shiftOffsetVal = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '$REFERENCEPOINT') {\n      // OFFSET for Varian spectra\n      // if we activate this part it does not work for ACD specmanager\n      //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n      //                 var parts = dataValue.split(/ *, */);\n      //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n      //                 spectrum.shiftOffsetVal = parseFloat(parts[3].trim());\n    } else if (canonicDataLabel === 'VARNAME') {\n      currentEntry.ntuples.varname = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'SYMBOL') {\n      currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARTYPE') {\n      currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARFORM') {\n      currentEntry.ntuples.varform = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARDIM') {\n      currentEntry.ntuples.vardim = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'UNITS') {\n      currentEntry.ntuples.units = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'FACTOR') {\n      currentEntry.ntuples.factor = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'FIRST') {\n      currentEntry.ntuples.first = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'LAST') {\n      currentEntry.ntuples.last = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MIN') {\n      currentEntry.ntuples.min = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MAX') {\n      currentEntry.ntuples.max = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === '.NUCLEUS') {\n      if (currentEntry.ntuples) {\n        currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparatorRegExp);\n      }\n    } else if (canonicDataLabel === 'PAGE') {\n      spectrum.page = dataValue.trim();\n      spectrum.pageValue = parseFloat(dataValue.replace(/^.*=/, ''));\n      spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n    } else if (canonicDataLabel === 'RETENTIONTIME') {\n      spectrum.pageValue = parseFloat(dataValue);\n    } else if (isMSField(canonicDataLabel)) {\n      spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n    } else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n      spectrum.sampleDescription = dataValue;\n    } else if (canonicDataLabel.startsWith('$NUC')) {\n      if (!currentEntry.tmp[canonicDataLabel] && !dataValue.includes('off')) {\n        currentEntry.tmp[canonicDataLabel] = dataValue.replace(/[<>]/g, '');\n      }\n    } else if (canonicDataLabel === 'END') {\n      currentEntry = parentsStack.pop();\n    }\n\n    if (\n      currentEntry &&\n      currentEntry.info &&\n      currentEntry.meta &&\n      canonicDataLabel.match(options.keepRecordsRegExp)\n    ) {\n      let value = dataValue.trim();\n      let target, label;\n      if (dataLabel.startsWith('$')) {\n        label = options.canonicMetadataLabels\n          ? canonicDataLabel.substring(1)\n          : dataLabel.substring(1);\n        target = currentEntry.meta;\n      } else {\n        label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n        target = currentEntry.info;\n      }\n\n      if (options.dynamicTyping) {\n        if (value.match(numberRegExp)) {\n          value = Number.parseFloat(value);\n        }\n      }\n      if (target[label]) {\n        if (!Array.isArray(target[label])) {\n          target[label] = [target[label]];\n        }\n        target[label].push(value);\n      } else {\n        target[label] = value;\n      }\n    }\n  }\n\n  profiling(result, 'Finished parsing', options);\n\n  postProcessing(entriesFlat, result, options);\n\n  profiling(result, 'Total time', options);\n\n  /*\n  if (result.children && result.children.length>0) {\n    result = { ...result, ...result.children[0] };\n  }\n  */\n  result.entries = tmpResult.children;\n  result.flatten = entriesFlat;\n\n  return result;\n}\n","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\n\n/**\n * Create a jcamp from variables\n * @param {Array<Variable} [variables={}] - object of variables\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {object} [options.meta = {}] - comments to add to the file\n * @param {object} [options.forceNtuples = false] - force the ntuples format even if there is only x and y variables\n */\nexport function fromVariables(variables = {}, options = {}) {\n  const { info, meta, forceNtuples } = options;\n\n  let jcampOptions = {\n    info,\n    meta,\n  };\n\n  let keys = Object.keys(variables).map((key) => key.toLowerCase());\n  if (\n    keys.length === 2 &&\n    keys.includes('x') &&\n    keys.includes('y') &&\n    !forceNtuples\n  ) {\n    let x = variables.x;\n    let xLabel = x.label || x.name || 'x';\n\n    jcampOptions.info.xUnits = xLabel.includes(variables.x.units)\n      ? xLabel\n      : `${xLabel} [${variables.x.units}]`;\n\n    let y = variables.y;\n    let yLabel = y.label || y.name || 'y';\n\n    jcampOptions.info.yUnits = yLabel.includes(variables.y.units)\n      ? yLabel\n      : `${yLabel} [${variables.y.units}]`;\n    return fromJSON({ x: variables.x.data, y: variables.y.data }, jcampOptions);\n  } else {\n    return creatorNtuples(variables, options);\n  }\n}\n","/**\n * Create a jcamp\n * @param {object} data - object of array\n * @param {object} [options={}] - metadata object\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {string} [options.info.xUnits = ''] - units for the x axis for variables===undefined\n * @param {string} [options.info.yUnits = ''] - units for the y axis for variables===undefined\n * @param {object} [options.meta = {}] - comments to add to the file\n\n * @return {string} JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n  const { meta = {}, info = {} } = options;\n\n  const {\n    title = '',\n    owner = '',\n    origin = '',\n    dataType = '',\n    xUnits = '',\n    yUnits = '',\n  } = info;\n  let firstX = Number.POSITIVE_INFINITY;\n  let lastX = Number.NEGATIVE_INFINITY;\n  let firstY = Number.POSITIVE_INFINITY;\n  let lastY = Number.NEGATIVE_INFINITY;\n  let points = [];\n\n  for (let i = 0; i < data.x.length; i++) {\n    let x = data.x[i];\n    let y = data.y[i];\n    if (firstX > x) {\n      firstX = x;\n    }\n    if (lastX < x) {\n      lastX = x;\n    }\n    if (firstY > y) {\n      firstY = y;\n    }\n    if (lastY < y) {\n      lastY = y;\n    }\n    points.push(`${x} ${y}`);\n  }\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\n##FIRSTX=${firstX}\n##LASTX=${lastX}\n##FIRSTY=${firstY}\n##LASTY=${lastY}\\n`;\n\n  for (const key of Object.keys(meta)) {\n    header += `##$${key}=${meta[key]}\\n`;\n  }\n\n  // we leave the header and utf8 fonts ${header.replace(/[^\\t\\r\\n\\x20-\\x7F]/g, '')\n\n  return `${header}##NPOINTS=${points.length}\n##PEAK TABLE=(XY..XY)\n${points.join('\\n')}\n##END`;\n}\n","import maxFct from 'ml-array-max';\nimport minFct from 'ml-array-min';\n\n/**\n * Parse from a xyxy data array\n * @param {Array<Array<number>>} variables\n * @param {object} [meta] - same metadata object format that the fromText\n * @return {string} JCAMP of the input\n */\nexport default function creatorNtuples(variables, options) {\n  const { meta = {}, info = {} } = options;\n\n  const { title = '', owner = '', origin = '', dataType = '' } = info;\n\n  const symbol = [];\n  const varName = [];\n  const varType = [];\n  const varDim = [];\n  const units = [];\n  const first = [];\n  const last = [];\n  const min = [];\n  const max = [];\n  const factor = [];\n\n  const keys = Object.keys(variables);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    let variable = variables[key];\n\n    let name = variable.label && variable.label.replace(/ *\\[.*/, '');\n    let unit = variable.label && variable.label.replace(/.*\\[(.*)\\].*/, '$1');\n\n    symbol.push(variable.symbol || key);\n    varName.push(variable.name || name || key);\n    varDim.push(variables[key].data.length);\n\n    varType.push(\n      variable.type\n        ? variable.type.toUpperCase()\n        : i === 0\n        ? 'INDEPENDENT'\n        : 'DEPENDENT',\n    );\n    units.push(variable.units || unit || '');\n    first.push(variables[key][0]);\n    last.push(variables[key][variables[key].length - 1]);\n    min.push(minFct(variables[key].data));\n    max.push(maxFct(variables[key].data));\n    factor.push(1);\n  }\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n\n  for (const key of Object.keys(meta)) {\n    header += `##$${key}=${meta[key]}\\n`;\n  }\n\n  header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##PAGE= N=1\\n`;\n\n  header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n\n  for (let i = 0; i < variables[keys[0]].data.length; i++) {\n    let point = [];\n    for (let key of keys) {\n      point.push(variables[key].data[i]);\n    }\n    header += `${point.join('\\t')}\\n`;\n  }\n\n  header += '##END';\n  return header;\n}\n","import { fromVariables } from 'convert-to-jcamp';\n\nexport function toJcamps(analysis, options = {}) {\n  let jcamps = [];\n  for (let spectrum of analysis.spectra) {\n    jcamps.push(getJcamp(spectrum, options));\n  }\n  return jcamps;\n}\n\nfunction getJcamp(spectrum, options) {\n  const { info = {}, meta = {} } = options;\n\n  let jcampOptions = {\n    options: {},\n    info: {\n      title: spectrum.title,\n      dataType: spectrum.dataType,\n      ...info,\n    },\n    meta: { ...spectrum.meta, ...meta },\n  };\n\n  return fromVariables(spectrum.variables, jcampOptions);\n}\n","/**\n * @typedef {Object} DataXY\n * @property {Array<Number>} x Array of x values\n * @property {Array<Number>} y Array of y values\n */\n\n/**\n * @typedef {Object} Spectrum\n * @property {Array<Number>} x Array of x values\n * @property {Array<Number>} y Array of y values\n * @property {string} xLabel\n * @property {string} yLabel\n * @property {string} title\n * @property {object} meta\n */\n\nimport { getJSGraph } from './jsgraph/getJSGraph';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations';\nimport { getReactPlotJSON } from './reactPlot/getReactPlotJSON';\n\nexport * from './AnalysesManager';\nexport * from './Analysis';\nexport * from './from/fromJcamp';\nexport * from './to/toJcamp';\nexport * from './to/toJcamps';\nexport * from './util/getNormalizedSpectrum';\n\nexport const JSGraph = {\n  getJSGraph,\n  getReactPlotJSON,\n  getNormalizationAnnotations,\n};\n","import { addStyle } from './addStyle';\nimport { COLORS } from './colors';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param {Array<Analysis>} analyses\n * @param {object} [options={}]\n * @param {Array} [options.ids] List of spectra ids, by all\n * @param {Array} [options.colors] List of colors\n * @param {Array} [options.opacities=[1]] List of opacities\n * @param {Array} [options.linesWidth=[1]] List of linesWidth\n * @param {object} [options.selector={}]\n * @param {object} [options.normalization]\n */\nexport function getJSGraph(analyses, options = {}) {\n  const {\n    colors = COLORS,\n    opacities = [1],\n    linesWidth = [1],\n    selector,\n    normalization,\n  } = options;\n  let series = [];\n\n  let xLabel = '';\n  let yLabel = '';\n\n  for (let i = 0; i < analyses.length; i++) {\n    const analysis = analyses[i];\n    let serie = {};\n    let currentData = analysis.getNormalizedSpectrum({\n      selector,\n      normalization,\n    });\n    if (!currentData) continue;\n    if (!xLabel) xLabel = currentData.variables.x.label;\n    if (!yLabel) yLabel = currentData.variables.y.label;\n    addStyle(serie, analysis, {\n      color: colors[i % colors.length],\n      opacity: opacities[i % opacities.length],\n      lineWidth: linesWidth[i % linesWidth.length],\n    });\n    serie.data = {\n      x: currentData.variables.x.data,\n      y: currentData.variables.y.data,\n    };\n    series.push(serie);\n  }\n  return {\n    axes: {\n      x: {\n        label: xLabel,\n        unit: '',\n        flipped: false,\n        display: true,\n      },\n      y: {\n        label: yLabel,\n        unit: '',\n        flipped: false,\n        display: true,\n      },\n    },\n    series,\n  };\n}\n","/**\n * Returns a JSGraph annotation that represents the normalization\n * @param {object} [filter={}]\n * @param {object} [filter.exclusions=[]] Array of exclusions zones\n * @param {object} [boundary={y: {min:'0px', max:'2000px'}}] Height of the annotation\n */\n\nexport function getNormalizationAnnotations(\n  filter = {},\n  boundary = { y: { min: '0px', max: '2000px' } },\n) {\n  let { exclusions = [] } = filter;\n\n  let annotations = [];\n  exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n  annotations = exclusions.map((exclusion) => {\n    let annotation = {\n      type: 'rect',\n      position: [\n        { x: exclusion.from, y: boundary.y.min },\n        { x: exclusion.to, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    };\n    return annotation;\n  });\n  if (filter.from !== undefined) {\n    annotations.push({\n      type: 'rect',\n      position: [\n        { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n        { x: filter.from, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    });\n  }\n  if (filter.to !== undefined) {\n    annotations.push({\n      type: 'rect',\n      position: [\n        { x: filter.to, y: boundary.y.min },\n        { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    });\n  }\n  return annotations;\n}\n","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n  const matches = [];\n  let match = regex.exec(string);\n  while (match) {\n    const allmatches = [];\n    const len = match.length;\n    for (let index = 0; index < len; index++) {\n      allmatches.push(match[index]);\n    }\n    matches.push(allmatches);\n    match = regex.exec(string);\n  }\n  return matches;\n};\n\nconst isName = function(string) {\n  const match = regexName.exec(string);\n  return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n  return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n  return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n  if (a) {\n    const keys = Object.keys(a); // will return an array of own properties\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i < len; i++) {\n      if (arrayMode === 'strict') {\n        target[keys[i]] = [ a[keys[i]] ];\n      } else {\n        target[keys[i]] = a[keys[i]];\n      }\n    }\n  }\n};\n/* exports.merge =function (b,a){\n  return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n  if (exports.isExist(v)) {\n    return v;\n  } else {\n    return '';\n  }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function(options, defaultOptions, props) {\n  var newOptions = {};\n  if (!options) {\n    return defaultOptions; //if there are not options\n  }\n\n  for (let i = 0; i < props.length; i++) {\n    if (options[props[i]] !== undefined) {\n      newOptions[props[i]] = options[props[i]];\n    } else {\n      newOptions[props[i]] = defaultOptions[props[i]];\n    }\n  }\n  return newOptions;\n};\n\n/**\n * Check if a tag name should be treated as array\n *\n * @param tagName the node tagname\n * @param arrayMode the array mode option\n * @param parentTagName the parent tag name\n * @returns {boolean} true if node should be parsed as array\n */\nexports.isTagNameInArrayMode = function (tagName, arrayMode, parentTagName) {\n  if (arrayMode === false) {\n    return false;\n  } else if (arrayMode instanceof RegExp) {\n    return arrayMode.test(tagName);\n  } else if (typeof arrayMode === 'function') {\n    return !!arrayMode(tagName, parentTagName);\n  }\n\n  return arrayMode === \"strict\";\n}\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\n","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options, parentTagName) {\n  const jObj = {};\n\n  // when no child node or attr is present\n  if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n    return util.isExist(node.val) ? node.val : '';\n  }\n\n  // otherwise create a textnode if node has some text\n  if (util.isExist(node.val) && !(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n    const asArray = util.isTagNameInArrayMode(node.tagname, options.arrayMode, parentTagName)\n    jObj[options.textNodeName] = asArray ? [node.val] : node.val;\n  }\n\n  util.merge(jObj, node.attrsMap, options.arrayMode);\n\n  const keys = Object.keys(node.child);\n  for (let index = 0; index < keys.length; index++) {\n    const tagName = keys[index];\n    if (node.child[tagName] && node.child[tagName].length > 1) {\n      jObj[tagName] = [];\n      for (let tag in node.child[tagName]) {\n        if (node.child[tagName].hasOwnProperty(tag)) {\n          jObj[tagName].push(convertToJson(node.child[tagName][tag], options, tagName));\n        }\n      }\n    } else {\n      const result = convertToJson(node.child[tagName][0], options, tagName);\n      const asArray = (options.arrayMode === true && typeof result === 'object') || util.isTagNameInArrayMode(tagName, options.arrayMode, parentTagName);\n      jObj[tagName] = asArray ? [result] : result;\n    }\n  }\n\n  //add value\n  return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n  this.tagname = tagname;\n  this.parent = parent;\n  this.child = {}; //child tags\n  this.attrsMap = {}; //attributes map\n  this.val = val; //text only\n  this.addChild = function(child) {\n    if (Array.isArray(this.child[child.tagname])) {\n      //already presents\n      this.child[child.tagname].push(child);\n    } else {\n      this.child[child.tagname] = [child];\n    }\n  };\n};\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\nconst regx =\n  '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n  .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n  Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n  Number.parseFloat = window.parseFloat;\n}\n\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attrNodeName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  ignoreNameSpace: false,\n  allowBooleanAttributes: false, //a tag can have attributes without any value\n  //ignoreRootElement : false,\n  parseNodeValue: true,\n  parseAttributeValue: false,\n  arrayMode: false,\n  trimValues: true, //Trim string values of tag and attributes\n  cdataTagName: false,\n  cdataPositionChar: '\\\\c',\n  tagValueProcessor: function(a, tagName) {\n    return a;\n  },\n  attrValueProcessor: function(a, attrName) {\n    return a;\n  },\n  stopNodes: []\n  //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n  'attributeNamePrefix',\n  'attrNodeName',\n  'textNodeName',\n  'ignoreAttributes',\n  'ignoreNameSpace',\n  'allowBooleanAttributes',\n  'parseNodeValue',\n  'parseAttributeValue',\n  'arrayMode',\n  'trimValues',\n  'cdataTagName',\n  'cdataPositionChar',\n  'tagValueProcessor',\n  'attrValueProcessor',\n  'parseTrueNumberOnly',\n  'stopNodes'\n];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n  if (val) {\n    if (options.trimValues) {\n      val = val.trim();\n    }\n    val = options.tagValueProcessor(val, tagName);\n    val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n  }\n\n  return val;\n}\n\nfunction resolveNameSpace(tagname, options) {\n  if (options.ignoreNameSpace) {\n    const tags = tagname.split(':');\n    const prefix = tagname.charAt(0) === '/' ? '/' : '';\n    if (tags[0] === 'xmlns') {\n      return '';\n    }\n    if (tags.length === 2) {\n      tagname = prefix + tags[1];\n    }\n  }\n  return tagname;\n}\n\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n  if (shouldParse && typeof val === 'string') {\n    let parsed;\n    if (val.trim() === '' || isNaN(val)) {\n      parsed = val === 'true' ? true : val === 'false' ? false : val;\n    } else {\n      if (val.indexOf('0x') !== -1) {\n        //support hexa decimal\n        parsed = Number.parseInt(val, 16);\n      } else if (val.indexOf('.') !== -1) {\n        parsed = Number.parseFloat(val);\n        val = val.replace(/\\.?0+$/, \"\");\n      } else {\n        parsed = Number.parseInt(val, 10);\n      }\n      if (parseTrueNumberOnly) {\n        parsed = String(parsed) === val ? parsed : val;\n      }\n    }\n    return parsed;\n  } else {\n    if (util.isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n  if (!options.ignoreAttributes && typeof attrStr === 'string') {\n    attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n    //attrStr = attrStr || attrStr.trim();\n\n    const matches = util.getAllMatches(attrStr, attrsRegx);\n    const len = matches.length; //don't make it inline\n    const attrs = {};\n    for (let i = 0; i < len; i++) {\n      const attrName = resolveNameSpace(matches[i][1], options);\n      if (attrName.length) {\n        if (matches[i][4] !== undefined) {\n          if (options.trimValues) {\n            matches[i][4] = matches[i][4].trim();\n          }\n          matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n          attrs[options.attributeNamePrefix + attrName] = parseValue(\n            matches[i][4],\n            options.parseAttributeValue,\n            options.parseTrueNumberOnly\n          );\n        } else if (options.allowBooleanAttributes) {\n          attrs[options.attributeNamePrefix + attrName] = true;\n        }\n      }\n    }\n    if (!Object.keys(attrs).length) {\n      return;\n    }\n    if (options.attrNodeName) {\n      const attrCollection = {};\n      attrCollection[options.attrNodeName] = attrs;\n      return attrCollection;\n    }\n    return attrs;\n  }\n}\n\nconst getTraversalObj = function(xmlData, options) {\n  xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n  options = buildOptions(options, defaultOptions, props);\n  const xmlObj = new xmlNode('!xml');\n  let currentNode = xmlObj;\n  let textData = \"\";\n\n//function match(xmlData){\n  for(let i=0; i< xmlData.length; i++){\n    const ch = xmlData[i];\n    if(ch === '<'){\n      if( xmlData[i+1] === '/') {//Closing Tag\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n        let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n        if(options.ignoreNameSpace){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        /* if (currentNode.parent) {\n          currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n        } */\n        if(currentNode){\n          if(currentNode.val){\n            currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);\n          }else{\n            currentNode.val = processTagValue(tagName, textData , options);\n          }\n        }\n\n        if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n          currentNode.child = []\n          if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n          currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1)\n        }\n        currentNode = currentNode.parent;\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n        i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\")\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\")\n      } else if( xmlData.substr(i + 1, 2) === '!D') {\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\")\n        const tagExp = xmlData.substring(i, closeIndex);\n        if(tagExp.indexOf(\"[\") >= 0){\n          i = xmlData.indexOf(\"]>\", i) + 1;\n        }else{\n          i = closeIndex;\n        }\n      }else if(xmlData.substr(i + 1, 2) === '![') {\n        const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2\n        const tagExp = xmlData.substring(i + 9,closeIndex);\n\n        //considerations\n        //1. CDATA will always have parent node\n        //2. A tag with CDATA is not a leaf node so it's value would be string type.\n        if(textData){\n          currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);\n          textData = \"\";\n        }\n\n        if (options.cdataTagName) {\n          //add cdata node\n          const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);\n          currentNode.addChild(childNode);\n          //for backtracking\n          currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n          //add rest value to parent node\n          if (tagExp) {\n            childNode.val = tagExp;\n          }\n        } else {\n          currentNode.val = (currentNode.val || '') + (tagExp || '');\n        }\n\n        i = closeIndex + 2;\n      }else {//Opening tag\n        const result = closingIndexForOpeningTag(xmlData, i+1)\n        let tagExp = result.data;\n        const closeIndex = result.index;\n        const separatorIndex = tagExp.indexOf(\" \");\n        let tagName = tagExp;\n        if(separatorIndex !== -1){\n          tagName = tagExp.substr(0, separatorIndex).replace(/\\s\\s*$/, '');\n          tagExp = tagExp.substr(separatorIndex + 1);\n        }\n\n        if(options.ignoreNameSpace){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        //save text to parent node\n        if (currentNode && textData) {\n          if(currentNode.tagname !== '!xml'){\n            currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);\n          }\n        }\n\n        if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){//selfClosing tag\n\n          if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n            tagName = tagName.substr(0, tagName.length - 1);\n            tagExp = tagName;\n          }else{\n            tagExp = tagExp.substr(0, tagExp.length - 1);\n          }\n\n          const childNode = new xmlNode(tagName, currentNode, '');\n          if(tagName !== tagExp){\n            childNode.attrsMap = buildAttributesMap(tagExp, options);\n          }\n          currentNode.addChild(childNode);\n        }else{//opening tag\n\n          const childNode = new xmlNode( tagName, currentNode );\n          if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n            childNode.startIndex=closeIndex;\n          }\n          if(tagName !== tagExp){\n            childNode.attrsMap = buildAttributesMap(tagExp, options);\n          }\n          currentNode.addChild(childNode);\n          currentNode = childNode;\n        }\n        textData = \"\";\n        i = closeIndex;\n      }\n    }else{\n      textData += xmlData[i];\n    }\n  }\n  return xmlObj;\n}\n\nfunction closingIndexForOpeningTag(data, i){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index < data.length; index++) {\n    let ch = data[index];\n    if (attrBoundary) {\n        if (ch === attrBoundary) attrBoundary = \"\";//reset\n    } else if (ch === '\"' || ch === \"'\") {\n        attrBoundary = ch;\n    } else if (ch === '>') {\n        return {\n          data: tagExp,\n          index: index\n        }\n    } else if (ch === '\\t') {\n      ch = \" \"\n    }\n    tagExp += ch;\n  }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n  const closingIndex = xmlData.indexOf(str, i);\n  if(closingIndex === -1){\n    throw new Error(errMsg)\n  }else{\n    return closingIndex + str.length - 1;\n  }\n}\n\nexports.getTraversalObj = getTraversalObj;\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n  options = util.buildOptions(options, defaultOptions, props);\n\n  //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n  //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n  //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n  const tags = [];\n  let tagFound = false;\n\n  //indicates that the root tag has been closed (aka. depth 0 has been reached)\n  let reachedRoot = false;\n\n  if (xmlData[0] === '\\ufeff') {\n    // check for byte order mark (BOM)\n    xmlData = xmlData.substr(1);\n  }\n\n  for (let i = 0; i < xmlData.length; i++) {\n\n    if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n      i+=2;\n      i = readPI(xmlData,i);\n      if (i.err) return i;\n    }else if (xmlData[i] === '<') {\n      //starting of tag\n      //read until you reach to '>' avoiding any '>' in attribute value\n\n      i++;\n      \n      if (xmlData[i] === '!') {\n        i = readCommentAndCDATA(xmlData, i);\n        continue;\n      } else {\n        let closingTag = false;\n        if (xmlData[i] === '/') {\n          //closing tag\n          closingTag = true;\n          i++;\n        }\n        //read tagname\n        let tagName = '';\n        for (; i < xmlData.length &&\n          xmlData[i] !== '>' &&\n          xmlData[i] !== ' ' &&\n          xmlData[i] !== '\\t' &&\n          xmlData[i] !== '\\n' &&\n          xmlData[i] !== '\\r'; i++\n        ) {\n          tagName += xmlData[i];\n        }\n        tagName = tagName.trim();\n        //console.log(tagName);\n\n        if (tagName[tagName.length - 1] === '/') {\n          //self closing tag without attributes\n          tagName = tagName.substring(0, tagName.length - 1);\n          //continue;\n          i--;\n        }\n        if (!validateTagName(tagName)) {\n          let msg;\n          if (tagName.trim().length === 0) {\n            msg = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\n          } else {\n            msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n          }\n          return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n        }\n\n        const result = readAttributeStr(xmlData, i);\n        if (result === false) {\n          return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n        }\n        let attrStr = result.value;\n        i = result.index;\n\n        if (attrStr[attrStr.length - 1] === '/') {\n          //self closing tag\n          attrStr = attrStr.substring(0, attrStr.length - 1);\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid === true) {\n            tagFound = true;\n            //continue; //text may presents after self closing tag\n          } else {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n        } else if (closingTag) {\n          if (!result.tagClosed) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n          } else if (attrStr.trim().length > 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n          } else {\n            const otg = tags.pop();\n            if (tagName !== otg) {\n              return getErrorObject('InvalidTag', \"Closing tag '\"+otg+\"' is expected inplace of '\"+tagName+\"'.\", getLineNumberForPosition(xmlData, i));\n            }\n\n            //when there are no more tags, we reached the root level.\n            if (tags.length == 0) {\n              reachedRoot = true;\n            }\n          }\n        } else {\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid !== true) {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n\n          //if the root level has been reached before ...\n          if (reachedRoot === true) {\n            return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n          } else {\n            tags.push(tagName);\n          }\n          tagFound = true;\n        }\n\n        //skip tag text value\n        //It may include comments and CDATA value\n        for (i++; i < xmlData.length; i++) {\n          if (xmlData[i] === '<') {\n            if (xmlData[i + 1] === '!') {\n              //comment or CADATA\n              i++;\n              i = readCommentAndCDATA(xmlData, i);\n              continue;\n            } else if (xmlData[i+1] === '?') {\n              i = readPI(xmlData, ++i);\n              if (i.err) return i;\n            } else{\n              break;\n            }\n          } else if (xmlData[i] === '&') {\n            const afterAmp = validateAmpersand(xmlData, i);\n            if (afterAmp == -1)\n              return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n            i = afterAmp;\n          }\n        } //end of reading tag text value\n        if (xmlData[i] === '<') {\n          i--;\n        }\n      }\n    } else {\n      if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n        continue;\n      }\n      return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n    }\n  }\n\n  if (!tagFound) {\n    return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n  } else if (tags.length > 0) {\n    return getErrorObject('InvalidXml', \"Invalid '\"+JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')+\"' found.\", 1);\n  }\n\n  return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n  var start = i;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      var tagname = xmlData.substr(start, i - start);\n      if (i > 5 && tagname === 'xml') {\n        return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n      } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n        //check if valid attribut string\n        i++;\n        break;\n      } else {\n        continue;\n      }\n    }\n  }\n  return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n  if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n    //comment\n    for (i += 3; i < xmlData.length; i++) {\n      if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  } else if (\n    xmlData.length > i + 8 &&\n    xmlData[i + 1] === 'D' &&\n    xmlData[i + 2] === 'O' &&\n    xmlData[i + 3] === 'C' &&\n    xmlData[i + 4] === 'T' &&\n    xmlData[i + 5] === 'Y' &&\n    xmlData[i + 6] === 'P' &&\n    xmlData[i + 7] === 'E'\n  ) {\n    let angleBracketsCount = 1;\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === '<') {\n        angleBracketsCount++;\n      } else if (xmlData[i] === '>') {\n        angleBracketsCount--;\n        if (angleBracketsCount === 0) {\n          break;\n        }\n      }\n    }\n  } else if (\n    xmlData.length > i + 9 &&\n    xmlData[i + 1] === '[' &&\n    xmlData[i + 2] === 'C' &&\n    xmlData[i + 3] === 'D' &&\n    xmlData[i + 4] === 'A' &&\n    xmlData[i + 5] === 'T' &&\n    xmlData[i + 6] === 'A' &&\n    xmlData[i + 7] === '['\n  ) {\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  }\n\n  return i;\n}\n\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n  let attrStr = '';\n  let startChar = '';\n  let tagClosed = false;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n      if (startChar === '') {\n        startChar = xmlData[i];\n      } else if (startChar !== xmlData[i]) {\n        //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n        continue;\n      } else {\n        startChar = '';\n      }\n    } else if (xmlData[i] === '>') {\n      if (startChar === '') {\n        tagClosed = true;\n        break;\n      }\n    }\n    attrStr += xmlData[i];\n  }\n  if (startChar !== '') {\n    return false;\n  }\n\n  return {\n    value: attrStr,\n    index: i,\n    tagClosed: tagClosed\n  };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab  cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n  //console.log(\"start:\"+attrStr+\":end\");\n\n  //if(attrStr.trim().length === 0) return true; //empty string\n\n  const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n  const attrNames = {};\n\n  for (let i = 0; i < matches.length; i++) {\n    if (matches[i][1].length === 0) {\n      //nospace before attribute name: a=\"sd\"b=\"saf\"\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]))\n    } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n      //independent attribute: ab\n      return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n    }\n    /* else if(matches[i][6] === undefined){//attribute without value: ab=\n                    return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n                } */\n    const attrName = matches[i][2];\n    if (!validateAttrName(attrName)) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n    }\n    if (!attrNames.hasOwnProperty(attrName)) {\n      //check for duplicate attribute.\n      attrNames[attrName] = 1;\n    } else {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n    }\n  }\n\n  return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n  let re = /\\d/;\n  if (xmlData[i] === 'x') {\n    i++;\n    re = /[\\da-fA-F]/;\n  }\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === ';')\n      return i;\n    if (!xmlData[i].match(re))\n      break;\n  }\n  return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n  // https://www.w3.org/TR/xml/#dt-charref\n  i++;\n  if (xmlData[i] === ';')\n    return -1;\n  if (xmlData[i] === '#') {\n    i++;\n    return validateNumberAmpersand(xmlData, i);\n  }\n  let count = 0;\n  for (; i < xmlData.length; i++, count++) {\n    if (xmlData[i].match(/\\w/) && count < 20)\n      continue;\n    if (xmlData[i] === ';')\n      break;\n    return -1;\n  }\n  return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n  return {\n    err: {\n      code: code,\n      msg: message,\n      line: lineNumber,\n    },\n  };\n}\n\nfunction validateAttrName(attrName) {\n  return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n  return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n  var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n  return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n  return attrStr.indexOf(match) + match.length;\n}\n","'use strict';\nconst char = function(a) {\n  return String.fromCharCode(a);\n};\n\nconst chars = {\n  nilChar: char(176),\n  missingChar: char(201),\n  nilPremitive: char(175),\n  missingPremitive: char(200),\n\n  emptyChar: char(178),\n  emptyValue: char(177), //empty Premitive\n\n  boundryChar: char(179),\n\n  objStart: char(198),\n  arrStart: char(204),\n  arrayEnd: char(185),\n};\n\nconst charsArr = [\n  chars.nilChar,\n  chars.nilPremitive,\n  chars.missingChar,\n  chars.missingPremitive,\n  chars.boundryChar,\n  chars.emptyChar,\n  chars.emptyValue,\n  chars.arrayEnd,\n  chars.objStart,\n  chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n  if (typeof e_schema === 'string') {\n    //premitive\n    if (node && node[0] && node[0].val !== undefined) {\n      return getValue(node[0].val, e_schema);\n    } else {\n      return getValue(node, e_schema);\n    }\n  } else {\n    const hasValidData = hasData(node);\n    if (hasValidData === true) {\n      let str = '';\n      if (Array.isArray(e_schema)) {\n        //attributes can't be repeated. hence check in children tags only\n        str += chars.arrStart;\n        const itemSchema = e_schema[0];\n        //var itemSchemaType = itemSchema;\n        const arr_len = node.length;\n\n        if (typeof itemSchema === 'string') {\n          for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n            const r = getValue(node[arr_i].val, itemSchema);\n            str = processValue(str, r);\n          }\n        } else {\n          for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n            const r = _e(node[arr_i], itemSchema, options);\n            str = processValue(str, r);\n          }\n        }\n        str += chars.arrayEnd; //indicates that next item is not array item\n      } else {\n        //object\n        str += chars.objStart;\n        const keys = Object.keys(e_schema);\n        if (Array.isArray(node)) {\n          node = node[0];\n        }\n        for (let i in keys) {\n          const key = keys[i];\n          //a property defined in schema can be present either in attrsMap or children tags\n          //options.textNodeName will not present in both maps, take it's value from val\n          //options.attrNodeName will be present in attrsMap\n          let r;\n          if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n            r = _e(node.attrsMap[key], e_schema[key], options);\n          } else if (key === options.textNodeName) {\n            r = _e(node.val, e_schema[key], options);\n          } else {\n            r = _e(node.child[key], e_schema[key], options);\n          }\n          str = processValue(str, r);\n        }\n      }\n      return str;\n    } else {\n      return hasValidData;\n    }\n  }\n};\n\nconst getValue = function(a /*, type*/) {\n  switch (a) {\n    case undefined:\n      return chars.missingPremitive;\n    case null:\n      return chars.nilPremitive;\n    case '':\n      return chars.emptyValue;\n    default:\n      return a;\n  }\n};\n\nconst processValue = function(str, r) {\n  if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n    str += chars.boundryChar;\n  }\n  return str + r;\n};\n\nconst isAppChar = function(ch) {\n  return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n  if (jObj === undefined) {\n    return chars.missingChar;\n  } else if (jObj === null) {\n    return chars.nilChar;\n  } else if (\n    jObj.child &&\n    Object.keys(jObj.child).length === 0 &&\n    (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n  ) {\n    return chars.emptyChar;\n  } else {\n    return true;\n  }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n  options = buildOptions(options, x2j.defaultOptions, x2j.props);\n  return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n  options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n  options.indentBy = options.indentBy || '';\n  return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n  let jObj = '{';\n\n  //traver through all the children\n  const keys = Object.keys(node.child);\n\n  for (let index = 0; index < keys.length; index++) {\n    var tagname = keys[index];\n    if (node.child[tagname] && node.child[tagname].length > 1) {\n      jObj += '\"' + tagname + '\" : [ ';\n      for (var tag in node.child[tagname]) {\n        jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n      }\n      jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n    } else {\n      jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n    }\n  }\n  util.merge(jObj, node.attrsMap);\n  //add attrsMap as new children\n  if (util.isEmptyObject(jObj)) {\n    return util.isExist(node.val) ? node.val : '';\n  } else {\n    if (util.isExist(node.val)) {\n      if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n        jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n      }\n    }\n  }\n  //add value\n  if (jObj[jObj.length - 1] === ',') {\n    jObj = jObj.substr(0, jObj.length - 2);\n  }\n  return jObj + '}';\n};\n\nfunction stringval(v) {\n  if (v === true || v === false || !isNaN(v)) {\n    return v;\n  } else {\n    return '\"' + v + '\"';\n  }\n}\n\nfunction indentate(options, level) {\n  return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attrNodeName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  cdataTagName: false,\n  cdataPositionChar: '\\\\c',\n  format: false,\n  indentBy: '  ',\n  supressEmptyNode: false,\n  tagValueProcessor: function(a) {\n    return a;\n  },\n  attrValueProcessor: function(a) {\n    return a;\n  },\n};\n\nconst props = [\n  'attributeNamePrefix',\n  'attrNodeName',\n  'textNodeName',\n  'ignoreAttributes',\n  'cdataTagName',\n  'cdataPositionChar',\n  'format',\n  'indentBy',\n  'supressEmptyNode',\n  'tagValueProcessor',\n  'attrValueProcessor',\n];\n\nfunction Parser(options) {\n  this.options = buildOptions(options, defaultOptions, props);\n  if (this.options.ignoreAttributes || this.options.attrNodeName) {\n    this.isAttribute = function(/*a*/) {\n      return false;\n    };\n  } else {\n    this.attrPrefixLen = this.options.attributeNamePrefix.length;\n    this.isAttribute = isAttribute;\n  }\n  if (this.options.cdataTagName) {\n    this.isCDATA = isCDATA;\n  } else {\n    this.isCDATA = function(/*a*/) {\n      return false;\n    };\n  }\n  this.replaceCDATAstr = replaceCDATAstr;\n  this.replaceCDATAarr = replaceCDATAarr;\n\n  if (this.options.format) {\n    this.indentate = indentate;\n    this.tagEndChar = '>\\n';\n    this.newLine = '\\n';\n  } else {\n    this.indentate = function() {\n      return '';\n    };\n    this.tagEndChar = '>';\n    this.newLine = '';\n  }\n\n  if (this.options.supressEmptyNode) {\n    this.buildTextNode = buildEmptyTextNode;\n    this.buildObjNode = buildEmptyObjNode;\n  } else {\n    this.buildTextNode = buildTextValNode;\n    this.buildObjNode = buildObjectNode;\n  }\n\n  this.buildTextValNode = buildTextValNode;\n  this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n  return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n  let attrStr = '';\n  let val = '';\n  const keys = Object.keys(jObj);\n  const len = keys.length;\n  for (let i = 0; i < len; i++) {\n    const key = keys[i];\n    if (typeof jObj[key] === 'undefined') {\n      // supress undefined node\n    } else if (jObj[key] === null) {\n      val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n    } else if (jObj[key] instanceof Date) {\n      val += this.buildTextNode(jObj[key], key, '', level);\n    } else if (typeof jObj[key] !== 'object') {\n      //premitive type\n      const attr = this.isAttribute(key);\n      if (attr) {\n        attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n      } else if (this.isCDATA(key)) {\n        if (jObj[this.options.textNodeName]) {\n          val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n        } else {\n          val += this.replaceCDATAstr('', jObj[key]);\n        }\n      } else {\n        //tag value\n        if (key === this.options.textNodeName) {\n          if (jObj[this.options.cdataTagName]) {\n            //value will added while processing cdata\n          } else {\n            val += this.options.tagValueProcessor('' + jObj[key]);\n          }\n        } else {\n          val += this.buildTextNode(jObj[key], key, '', level);\n        }\n      }\n    } else if (Array.isArray(jObj[key])) {\n      //repeated nodes\n      if (this.isCDATA(key)) {\n        val += this.indentate(level);\n        if (jObj[this.options.textNodeName]) {\n          val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n        } else {\n          val += this.replaceCDATAarr('', jObj[key]);\n        }\n      } else {\n        //nested nodes\n        const arrLen = jObj[key].length;\n        for (let j = 0; j < arrLen; j++) {\n          const item = jObj[key][j];\n          if (typeof item === 'undefined') {\n            // supress undefined node\n          } else if (item === null) {\n            val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n          } else if (typeof item === 'object') {\n            const result = this.j2x(item, level + 1);\n            val += this.buildObjNode(result.val, key, result.attrStr, level);\n          } else {\n            val += this.buildTextNode(item, key, '', level);\n          }\n        }\n      }\n    } else {\n      //nested node\n      if (this.options.attrNodeName && key === this.options.attrNodeName) {\n        const Ks = Object.keys(jObj[key]);\n        const L = Ks.length;\n        for (let j = 0; j < L; j++) {\n          attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n        }\n      } else {\n        const result = this.j2x(jObj[key], level + 1);\n        val += this.buildObjNode(result.val, key, result.attrStr, level);\n      }\n    }\n  }\n  return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n  str = this.options.tagValueProcessor('' + str);\n  if (this.options.cdataPositionChar === '' || str === '') {\n    return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n  } else {\n    return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n  }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n  str = this.options.tagValueProcessor('' + str);\n  if (this.options.cdataPositionChar === '' || str === '') {\n    return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n  } else {\n    for (let v in cdata) {\n      str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n    }\n    return str + this.newLine;\n  }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n  if (attrStr && !val.includes('<')) {\n    return (\n      this.indentate(level) +\n      '<' +\n      key +\n      attrStr +\n      '>' +\n      val +\n      //+ this.newLine\n      // + this.indentate(level)\n      '</' +\n      key +\n      this.tagEndChar\n    );\n  } else {\n    return (\n      this.indentate(level) +\n      '<' +\n      key +\n      attrStr +\n      this.tagEndChar +\n      val +\n      //+ this.newLine\n      this.indentate(level) +\n      '</' +\n      key +\n      this.tagEndChar\n    );\n  }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildObjectNode(val, key, attrStr, level);\n  } else {\n    return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n    //+ this.newLine\n  }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n  return (\n    this.indentate(level) +\n    '<' +\n    key +\n    attrStr +\n    '>' +\n    this.options.tagValueProcessor(val) +\n    '</' +\n    key +\n    this.tagEndChar\n  );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildTextValNode(val, key, attrStr, level);\n  } else {\n    return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n  }\n}\n\nfunction indentate(level) {\n  return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n  if (name.startsWith(this.options.attributeNamePrefix)) {\n    return name.substr(this.attrPrefixLen);\n  } else {\n    return false;\n  }\n}\n\nfunction isCDATA(name) {\n  return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n  if( validationOption){\n    if(validationOption === true) validationOption = {}\n    \n    const result = validator.validate(xmlData, validationOption);\n    if (result !== true) {\n      throw Error( result.err.msg)\n    }\n  }\n  options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n  const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options)\n  //print(traversableObj, \"  \");\n  return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = require('../src/nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n  return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n\n\nfunction print(xmlNode, indentation){\n  if(xmlNode){\n    console.log(indentation + \"{\")\n    console.log(indentation + \"  \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \");\n    if(xmlNode.parent){\n      console.log(indentation + \"  \\\"parent\\\": \\\"\" + xmlNode.parent.tagname  + \"\\\", \");\n    }\n    console.log(indentation + \"  \\\"val\\\": \\\"\" + xmlNode.val  + \"\\\", \");\n    console.log(indentation + \"  \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap,null,4)  + \", \");\n\n    if(xmlNode.child){\n      console.log(indentation + \"\\\"child\\\": {\")\n      const indentation2 = indentation + indentation;\n      Object.keys(xmlNode.child).forEach( function(key) {\n        const node = xmlNode.child[key];\n\n        if(Array.isArray(node)){\n          console.log(indentation +  \"\\\"\"+key+\"\\\" :[\")\n          node.forEach( function(item,index) {\n            //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n            print(item, indentation2);\n          })\n          console.log(indentation + \"],\")  \n        }else{\n          console.log(indentation + \" \\\"\"+key+\"\\\" : {\")\n          print(node, indentation2);\n          console.log(indentation + \"},\")  \n        }\n      });\n      console.log(indentation + \"},\")\n    }\n    console.log(indentation + \"},\")\n  }\n}","/*!\n\nJSZip v3.5.0 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n*/\n\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=t()}}(function(){return function s(a,o,h){function u(r,t){if(!o[r]){if(!a[r]){var e=\"function\"==typeof require&&require;if(!t&&e)return e(r,!0);if(l)return l(r,!0);var i=new Error(\"Cannot find module '\"+r+\"'\");throw i.code=\"MODULE_NOT_FOUND\",i}var n=o[r]={exports:{}};a[r][0].call(n.exports,function(t){var e=a[r][1][t];return u(e||t)},n,n.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,t=0;t<h.length;t++)u(h[t]);return u}({1:[function(t,e,r){\"use strict\";var c=t(\"./utils\"),d=t(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(t){for(var e,r,i,n,s,a,o,h=[],u=0,l=t.length,f=l,d=\"string\"!==c.getTypeOf(t);u<t.length;)f=l-u,i=d?(e=t[u++],r=u<l?t[u++]:0,u<l?t[u++]:0):(e=t.charCodeAt(u++),r=u<l?t.charCodeAt(u++):0,u<l?t.charCodeAt(u++):0),n=e>>2,s=(3&e)<<4|r>>4,a=1<f?(15&r)<<2|i>>6:64,o=2<f?63&i:64,h.push(p.charAt(n)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(t){var e,r,i,n,s,a,o=0,h=0,u=\"data:\";if(t.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(t=t.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\")).length/4;if(t.charAt(t.length-1)===p.charAt(64)&&f--,t.charAt(t.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=d.uint8array?new Uint8Array(0|f):new Array(0|f);o<t.length;)e=p.indexOf(t.charAt(o++))<<2|(n=p.indexOf(t.charAt(o++)))>>4,r=(15&n)<<4|(s=p.indexOf(t.charAt(o++)))>>2,i=(3&s)<<6|(a=p.indexOf(t.charAt(o++))),l[h++]=e,64!==s&&(l[h++]=r),64!==a&&(l[h++]=i);return l}},{\"./support\":30,\"./utils\":32}],2:[function(t,e,r){\"use strict\";var i=t(\"./external\"),n=t(\"./stream/DataWorker\"),s=t(\"./stream/DataLengthProbe\"),a=t(\"./stream/Crc32Probe\");s=t(\"./stream/DataLengthProbe\");function o(t,e,r,i,n){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var t=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new s(\"data_length\")),e=this;return t.on(\"end\",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),t},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(t,e,r){return t.pipe(new a).pipe(new s(\"uncompressedSize\")).pipe(e.compressWorker(r)).pipe(new s(\"compressedSize\")).withStreamInfo(\"compression\",e)},e.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(t,e,r){\"use strict\";var i=t(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(t){return new i(\"STORE compression\")},uncompressWorker:function(){return new i(\"STORE decompression\")}},r.DEFLATE=t(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(t,e,r){\"use strict\";var i=t(\"./utils\");var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?\"string\"!==i.getTypeOf(t)?function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}(0|e,t,t.length,0):function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e.charCodeAt(a))];return-1^t}(0|e,t,t.length,0):0}},{\"./utils\":32}],5:[function(t,e,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(t,e,r){\"use strict\";var i=null;i=\"undefined\"!=typeof Promise?Promise:t(\"lie\"),e.exports={Promise:i}},{lie:37}],7:[function(t,e,r){\"use strict\";var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,n=t(\"pako\"),s=t(\"./utils\"),a=t(\"./stream/GenericWorker\"),o=i?\"uint8array\":\"array\";function h(t,e){a.call(this,\"FlateWorker/\"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,t.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(t){return new h(\"Deflate\",t)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(t,e,r){\"use strict\";function A(t,e){var r,i=\"\";for(r=0;r<e;r++)i+=String.fromCharCode(255&t),t>>>=8;return i}function i(t,e,r,i,n,s){var a,o,h=t.file,u=t.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),d=I.transformTo(\"string\",O.utf8encode(h.name)),c=h.comment,p=I.transformTo(\"string\",s(c)),m=I.transformTo(\"string\",O.utf8encode(c)),_=d.length!==h.name.length,g=m.length!==c.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(x.crc32=t.crc32,x.compressedSize=t.compressedSize,x.uncompressedSize=t.uncompressedSize);var S=0;e&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===n?(C=798,z|=function(t,e){var r=t;return t||(r=e?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(t){return 63&(t||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+d,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(i,4)+f+b+p}}var I=t(\"../utils\"),n=t(\"../stream/GenericWorker\"),O=t(\"../utf8\"),B=t(\"../crc32\"),R=t(\"../signature\");function s(t,e,r,i){n.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,n),s.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,n.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-i-1))/r:100}}))},s.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var r=i(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,r=i(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),e)this.push({data:function(t){return R.DATA_DESCRIPTOR+A(t.crc32,4)+A(t.compressedSize,4)+A(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e<this.dirRecords.length;e++)this.push({data:this.dirRecords[e],meta:{percent:100}});var r=this.bytesWritten-t,i=function(t,e,r,i,n){var s=I.transformTo(\"string\",n(i));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(t,2)+A(t,2)+A(e,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,t,this.zipComment,this.encodeFileName);this.push({data:i,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(t){this._sources.push(t);var e=this;return t.on(\"data\",function(t){e.processChunk(t)}),t.on(\"end\",function(){e.closedSource(e.previous.streamInfo),e._sources.length?e.prepareNextSource():e.end()}),t.on(\"error\",function(t){e.error(t)}),this},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(t){var e=this._sources;if(!n.prototype.error.call(this,t))return!1;for(var r=0;r<e.length;r++)try{e[r].error(t)}catch(t){}return!0},s.prototype.lock=function(){n.prototype.lock.call(this);for(var t=this._sources,e=0;e<t.length;e++)t[e].lock()},e.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(t,e,r){\"use strict\";var u=t(\"../compressions\"),i=t(\"./ZipFileWorker\");r.generateWorker=function(t,a,e){var o=new i(a.streamFiles,e,a.platform,a.encodeFileName),h=0;try{t.forEach(function(t,e){h++;var r=function(t,e){var r=t||e,i=u[r];if(!i)throw new Error(r+\" is not a valid compression method !\");return i}(e.options.compression,a.compression),i=e.options.compressionOptions||a.compressionOptions||{},n=e.dir,s=e.date;e._compressWorker(r,i).withStreamInfo(\"file\",{name:t,dir:n,date:s,comment:e.comment||\"\",unixPermissions:e.unixPermissions,dosPermissions:e.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(t){o.error(t)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(t,e,r){\"use strict\";function i(){if(!(this instanceof i))return new i;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files={},this.comment=null,this.root=\"\",this.clone=function(){var t=new i;for(var e in this)\"function\"!=typeof this[e]&&(t[e]=this[e]);return t}}(i.prototype=t(\"./object\")).loadAsync=t(\"./load\"),i.support=t(\"./support\"),i.defaults=t(\"./defaults\"),i.version=\"3.5.0\",i.loadAsync=function(t,e){return(new i).loadAsync(t,e)},i.external=t(\"./external\"),e.exports=i},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(t,e,r){\"use strict\";var i=t(\"./utils\"),n=t(\"./external\"),o=t(\"./utf8\"),h=(i=t(\"./utils\"),t(\"./zipEntries\")),s=t(\"./stream/Crc32Probe\"),u=t(\"./nodejsUtils\");function l(i){return new n.Promise(function(t,e){var r=i.decompressed.getContentWorker().pipe(new s);r.on(\"error\",function(t){e(t)}).on(\"end\",function(){r.streamInfo.crc32!==i.decompressed.crc32?e(new Error(\"Corrupted zip : CRC32 mismatch\")):t()}).resume()})}e.exports=function(t,s){var a=this;return s=i.extend(s||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),u.isNode&&u.isStream(t)?n.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):i.prepareContent(\"the loaded zip file\",t,!0,s.optimizedBinaryString,s.base64).then(function(t){var e=new h(s);return e.load(t),e}).then(function(t){var e=[n.Promise.resolve(t)],r=t.files;if(s.checkCRC32)for(var i=0;i<r.length;i++)e.push(l(r[i]));return n.Promise.all(e)}).then(function(t){for(var e=t.shift(),r=e.files,i=0;i<r.length;i++){var n=r[i];a.file(n.fileNameStr,n.decompressed,{binary:!0,optimizedBinaryString:!0,date:n.date,dir:n.dir,comment:n.fileCommentStr.length?n.fileCommentStr:null,unixPermissions:n.unixPermissions,dosPermissions:n.dosPermissions,createFolders:s.createFolders})}return e.zipComment.length&&(a.comment=e.zipComment),a})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"../stream/GenericWorker\");function s(t,e){n.call(this,\"Nodejs stream input adapter for \"+t),this._upstreamEnded=!1,this._bindStream(e)}i.inherits(s,n),s.prototype._bindStream=function(t){var e=this;(this._stream=t).pause(),t.on(\"data\",function(t){e.push({data:t,meta:{percent:0}})}).on(\"error\",function(t){e.isPaused?this.generatedError=t:e.error(t)}).on(\"end\",function(){e.isPaused?e._upstreamEnded=!0:e.end()})},s.prototype.pause=function(){return!!n.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},e.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(t,e,r){\"use strict\";var n=t(\"readable-stream\").Readable;function i(t,e,r){n.call(this,e),this._helper=t;var i=this;t.on(\"data\",function(t,e){i.push(t)||i._helper.pause(),r&&r(e)}).on(\"error\",function(t){i.emit(\"error\",t)}).on(\"end\",function(){i.push(null)})}t(\"../utils\").inherits(i,n),i.prototype._read=function(){this._helper.resume()},e.exports=i},{\"../utils\":32,\"readable-stream\":16}],14:[function(t,e,r){\"use strict\";e.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(t,e){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(t,e);if(\"number\"==typeof t)throw new Error('The \"data\" argument must not be a number');return new Buffer(t,e)},allocBuffer:function(t){if(Buffer.alloc)return Buffer.alloc(t);var e=new Buffer(t);return e.fill(0),e},isBuffer:function(t){return Buffer.isBuffer(t)},isStream:function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.pause&&\"function\"==typeof t.resume}}},{}],15:[function(t,e,r){\"use strict\";function s(t,e,r){var i,n=u.getTypeOf(e),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(t=g(t)),s.createFolders&&(i=_(t))&&b.call(this,i,!0);var a=\"string\"===n&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(e instanceof d&&0===e.uncompressedSize||s.dir||!e||0===e.length)&&(s.base64=!1,s.binary=!0,e=\"\",s.compression=\"STORE\",n=\"string\");var o=null;o=e instanceof d||e instanceof l?e:p.isNode&&p.isStream(e)?new m(t,e):u.prepareContent(t,e,s.binary,s.optimizedBinaryString,s.base64);var h=new c(t,o,s);this.files[t]=h}var n=t(\"./utf8\"),u=t(\"./utils\"),l=t(\"./stream/GenericWorker\"),a=t(\"./stream/StreamHelper\"),f=t(\"./defaults\"),d=t(\"./compressedObject\"),c=t(\"./zipObject\"),o=t(\"./generate\"),p=t(\"./nodejsUtils\"),m=t(\"./nodejs/NodejsStreamInputAdapter\"),_=function(t){\"/\"===t.slice(-1)&&(t=t.substring(0,t.length-1));var e=t.lastIndexOf(\"/\");return 0<e?t.substring(0,e):\"\"},g=function(t){return\"/\"!==t.slice(-1)&&(t+=\"/\"),t},b=function(t,e){return e=void 0!==e?e:f.createFolders,t=g(t),this.files[t]||s.call(this,t,null,{dir:!0,createFolders:e}),this.files[t]};function h(t){return\"[object RegExp]\"===Object.prototype.toString.call(t)}var i={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(t){var e,r,i;for(e in this.files)this.files.hasOwnProperty(e)&&(i=this.files[e],(r=e.slice(this.root.length,e.length))&&e.slice(0,this.root.length)===this.root&&t(r,i))},filter:function(r){var i=[];return this.forEach(function(t,e){r(t,e)&&i.push(e)}),i},file:function(t,e,r){if(1!==arguments.length)return t=this.root+t,s.call(this,t,e,r),this;if(h(t)){var i=t;return this.filter(function(t,e){return!e.dir&&i.test(t)})}var n=this.files[this.root+t];return n&&!n.dir?n:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(t,e){return e.dir&&r.test(t)});var t=this.root+r,e=b.call(this,t),i=this.clone();return i.root=e.name,i},remove:function(r){r=this.root+r;var t=this.files[r];if(t||(\"/\"!==r.slice(-1)&&(r+=\"/\"),t=this.files[r]),t&&!t.dir)delete this.files[r];else for(var e=this.filter(function(t,e){return e.name.slice(0,r.length)===r}),i=0;i<e.length;i++)delete this.files[e[i].name];return this},generate:function(t){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(t){var e,r={};try{if((r=u.extend(t||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:n.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var i=r.comment||this.comment||\"\";e=o.generateWorker(this,r,i)}catch(t){(e=new l(\"error\")).error(t)}return new a(e,r.type||\"string\",r.mimeType)},generateAsync:function(t,e){return this.generateInternalStream(t).accumulate(e)},generateNodeStream:function(t,e){return(t=t||{}).type||(t.type=\"nodebuffer\"),this.generateInternalStream(t).toNodejsStream(e)}};e.exports=i},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(t,e,r){e.exports=t(\"stream\")},{stream:void 0}],17:[function(t,e,r){\"use strict\";var i=t(\"./DataReader\");function n(t){i.call(this,t);for(var e=0;e<this.data.length;e++)t[e]=255&t[e]}t(\"../utils\").inherits(n,i),n.prototype.byteAt=function(t){return this.data[this.zero+t]},n.prototype.lastIndexOfSignature=function(t){for(var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===e&&this.data[s+1]===r&&this.data[s+2]===i&&this.data[s+3]===n)return s-this.zero;return-1},n.prototype.readAndCheckSignature=function(t){var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.readData(4);return e===s[0]&&r===s[1]&&i===s[2]&&n===s[3]},n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return[];var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./DataReader\":18}],18:[function(t,e,r){\"use strict\";var i=t(\"../utils\");function n(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}n.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+t+\"). Corrupted zip ?\")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(t){},readInt:function(t){var e,r=0;for(this.checkOffset(t),e=this.index+t-1;e>=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return i.transformTo(\"string\",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=n},{\"../utils\":32}],19:[function(t,e,r){\"use strict\";var i=t(\"./Uint8ArrayReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(t,e,r){\"use strict\";var i=t(\"./DataReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},n.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},n.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./DataReader\":18}],21:[function(t,e,r){\"use strict\";var i=t(\"./ArrayReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"../support\"),s=t(\"./ArrayReader\"),a=t(\"./StringReader\"),o=t(\"./NodeBufferReader\"),h=t(\"./Uint8ArrayReader\");e.exports=function(t){var e=i.getTypeOf(t);return i.checkSupport(e),\"string\"!==e||n.uint8array?\"nodebuffer\"===e?new o(t):n.uint8array?new h(i.transformTo(\"uint8array\",t)):new s(i.transformTo(\"array\",t)):new a(t)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(t,e,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(t,e,r){\"use strict\";var i=t(\"./GenericWorker\"),n=t(\"../utils\");function s(t){i.call(this,\"ConvertWorker to \"+t),this.destType=t}n.inherits(s,i),s.prototype.processChunk=function(t){this.push({data:n.transformTo(this.destType,t.data),meta:t.meta})},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(t,e,r){\"use strict\";var i=t(\"./GenericWorker\"),n=t(\"../crc32\");function s(){i.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}t(\"../utils\").inherits(s,i),s.prototype.processChunk=function(t){this.streamInfo.crc32=n(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"./GenericWorker\");function s(t){n.call(this,\"DataLengthProbe for \"+t),this.propName=t,this.withStreamInfo(t,0)}i.inherits(s,n),s.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}n.prototype.processChunk.call(this,t)},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"./GenericWorker\");function s(t){n.call(this,\"DataWorker\");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":t=this.data.substring(this.index,e);break;case\"uint8array\":t=this.data.subarray(this.index,e);break;case\"array\":case\"nodebuffer\":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(t,e,r){\"use strict\";function i(t){this.name=t||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(t){this.emit(\"data\",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit(\"error\",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit(\"error\",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r<this._listeners[t].length;r++)this._listeners[t][r].call(this,e)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var e=this;return t.on(\"data\",function(t){e.processChunk(t)}),t.on(\"end\",function(){e.end()}),t.on(\"error\",function(t){e.error(t)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var t=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,e){return this.extraStreamInfo[t]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var t=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+t:t}},e.exports=i},{}],29:[function(t,e,r){\"use strict\";var h=t(\"../utils\"),n=t(\"./ConvertWorker\"),s=t(\"./GenericWorker\"),u=t(\"../base64\"),i=t(\"../support\"),a=t(\"../external\"),o=null;if(i.nodestream)try{o=t(\"../nodejs/NodejsStreamOutputAdapter\")}catch(t){}function l(t,o){return new a.Promise(function(e,r){var i=[],n=t._internalType,s=t._outputType,a=t._mimeType;t.on(\"data\",function(t,e){i.push(t),o&&o(e)}).on(\"error\",function(t){i=[],r(t)}).on(\"end\",function(){try{var t=function(t,e,r){switch(t){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",e),r);case\"base64\":return u.encode(e);default:return h.transformTo(t,e)}}(s,function(t,e){var r,i=0,n=null,s=0;for(r=0;r<e.length;r++)s+=e[r].length;switch(t){case\"string\":return e.join(\"\");case\"array\":return Array.prototype.concat.apply([],e);case\"uint8array\":for(n=new Uint8Array(s),r=0;r<e.length;r++)n.set(e[r],i),i+=e[r].length;return n;case\"nodebuffer\":return Buffer.concat(e);default:throw new Error(\"concat : unsupported type '\"+t+\"'\")}}(n,i),a);e(t)}catch(t){r(t)}i=[]}).resume()})}function f(t,e,r){var i=e;switch(e){case\"blob\":case\"arraybuffer\":i=\"uint8array\";break;case\"base64\":i=\"string\"}try{this._internalType=i,this._outputType=e,this._mimeType=r,h.checkSupport(i),this._worker=t.pipe(new n(i)),t.lock()}catch(t){this._worker=new s(\"error\"),this._worker.error(t)}}f.prototype={accumulate:function(t){return l(this,t)},on:function(t,e){var r=this;return\"data\"===t?this._worker.on(t,function(t){e.call(r,t.data,t.meta)}):this._worker.on(t,function(){h.delay(e,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},t)}},e.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(t,e,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var i=new ArrayBuffer(0);try{r.blob=0===new Blob([i],{type:\"application/zip\"}).size}catch(t){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);n.append(i),r.blob=0===n.getBlob(\"application/zip\").size}catch(t){r.blob=!1}}}try{r.nodestream=!!t(\"readable-stream\").Readable}catch(t){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(t,e,s){\"use strict\";for(var o=t(\"./utils\"),h=t(\"./support\"),r=t(\"./nodejsUtils\"),i=t(\"./stream/GenericWorker\"),u=new Array(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;u[254]=u[254]=1;function a(){i.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){i.call(this,\"utf-8 encode\")}s.utf8encode=function(t){return h.nodebuffer?r.newBufferFrom(t,\"utf-8\"):function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=h.uint8array?new Uint8Array(o):new Array(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e}(t)},s.utf8decode=function(t){return h.nodebuffer?o.transformTo(\"nodebuffer\",t).toString(\"utf-8\"):function(t){var e,r,i,n,s=t.length,a=new Array(2*s);for(e=r=0;e<s;)if((i=t[e++])<128)a[r++]=i;else if(4<(n=u[i]))a[r++]=65533,e+=n-1;else{for(i&=2===n?31:3===n?15:7;1<n&&e<s;)i=i<<6|63&t[e++],n--;1<n?a[r++]=65533:i<65536?a[r++]=i:(i-=65536,a[r++]=55296|i>>10&1023,a[r++]=56320|1023&i)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(t=o.transformTo(h.uint8array?\"uint8array\":\"array\",t))},o.inherits(a,i),a.prototype.processChunk=function(t){var e=o.transformTo(h.uint8array?\"uint8array\":\"array\",t.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=e;(e=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),e.set(r,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}(e),n=e;i!==e.length&&(h.uint8array?(n=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(n=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:s.utf8decode(n),meta:t.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,i),l.prototype.processChunk=function(t){this.push({data:s.utf8encode(t.data),meta:t.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(t,e,a){\"use strict\";var o=t(\"./support\"),h=t(\"./base64\"),r=t(\"./nodejsUtils\"),i=t(\"set-immediate-shim\"),u=t(\"./external\");function n(t){return t}function l(t,e){for(var r=0;r<t.length;++r)e[r]=255&t.charCodeAt(r);return e}a.newBlob=function(e,r){a.checkSupport(\"blob\");try{return new Blob([e],{type:r})}catch(t){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return i.append(e),i.getBlob(r)}catch(t){throw new Error(\"Bug : can't construct the Blob.\")}}};var s={stringifyByChunk:function(t,e,r){var i=[],n=0,s=t.length;if(s<=r)return String.fromCharCode.apply(null,t);for(;n<s;)\"array\"===e||\"nodebuffer\"===e?i.push(String.fromCharCode.apply(null,t.slice(n,Math.min(n+r,s)))):i.push(String.fromCharCode.apply(null,t.subarray(n,Math.min(n+r,s)))),n+=r;return i.join(\"\")},stringifyByChar:function(t){for(var e=\"\",r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(t){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(t){return!1}}()}};function f(t){var e=65536,r=a.getTypeOf(t),i=!0;if(\"uint8array\"===r?i=s.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(i=s.applyCanBeUsed.nodebuffer),i)for(;1<e;)try{return s.stringifyByChunk(t,r,e)}catch(t){e=Math.floor(e/2)}return s.stringifyByChar(t)}function d(t,e){for(var r=0;r<t.length;r++)e[r]=t[r];return e}a.applyFromCharCode=f;var c={};c.string={string:n,array:function(t){return l(t,new Array(t.length))},arraybuffer:function(t){return c.string.uint8array(t).buffer},uint8array:function(t){return l(t,new Uint8Array(t.length))},nodebuffer:function(t){return l(t,r.allocBuffer(t.length))}},c.array={string:f,array:n,arraybuffer:function(t){return new Uint8Array(t).buffer},uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(t)}},c.arraybuffer={string:function(t){return f(new Uint8Array(t))},array:function(t){return d(new Uint8Array(t),new Array(t.byteLength))},arraybuffer:n,uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(new Uint8Array(t))}},c.uint8array={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return t.buffer},uint8array:n,nodebuffer:function(t){return r.newBufferFrom(t)}},c.nodebuffer={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return c.nodebuffer.uint8array(t).buffer},uint8array:function(t){return d(t,new Uint8Array(t.length))},nodebuffer:n},a.transformTo=function(t,e){if(e=e||\"\",!t)return e;a.checkSupport(t);var r=a.getTypeOf(e);return c[r][t](e)},a.getTypeOf=function(t){return\"string\"==typeof t?\"string\":\"[object Array]\"===Object.prototype.toString.call(t)?\"array\":o.nodebuffer&&r.isBuffer(t)?\"nodebuffer\":o.uint8array&&t instanceof Uint8Array?\"uint8array\":o.arraybuffer&&t instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(t){if(!o[t.toLowerCase()])throw new Error(t+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(t){var e,r,i=\"\";for(r=0;r<(t||\"\").length;r++)i+=\"\\\\x\"+((e=t.charCodeAt(r))<16?\"0\":\"\")+e.toString(16).toUpperCase();return i},a.delay=function(t,e,r){i(function(){t.apply(r||null,e||[])})},a.inherits=function(t,e){function r(){}r.prototype=e.prototype,t.prototype=new r},a.extend=function(){var t,e,r={};for(t=0;t<arguments.length;t++)for(e in arguments[t])arguments[t].hasOwnProperty(e)&&void 0===r[e]&&(r[e]=arguments[t][e]);return r},a.prepareContent=function(r,t,i,n,s){return u.Promise.resolve(t).then(function(i){return o.blob&&(i instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(i)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(e,r){var t=new FileReader;t.onload=function(t){e(t.target.result)},t.onerror=function(t){r(t.target.error)},t.readAsArrayBuffer(i)}):i}).then(function(t){var e=a.getTypeOf(t);return e?(\"arraybuffer\"===e?t=a.transformTo(\"uint8array\",t):\"string\"===e&&(s?t=h.decode(t):i&&!0!==n&&(t=function(t){return l(t,o.uint8array?new Uint8Array(t.length):new Array(t.length))}(t))),t):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,\"set-immediate-shim\":54}],33:[function(t,e,r){\"use strict\";var i=t(\"./reader/readerFor\"),n=t(\"./utils\"),s=t(\"./signature\"),a=t(\"./zipEntry\"),o=(t(\"./utf8\"),t(\"./support\"));function h(t){this.files=[],this.loadOptions=t}h.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var e=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+n.pretty(e)+\", expected \"+n.pretty(t)+\")\")}},isSignature:function(t,e){var r=this.reader.index;this.reader.setIndex(t);var i=this.reader.readString(4)===e;return this.reader.setIndex(r),i},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var t=this.reader.readData(this.zipCommentLength),e=o.uint8array?\"uint8array\":\"array\",r=n.transformTo(e,t);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var t,e,r,i=this.zip64EndOfCentralSize-44;0<i;)t=this.reader.readInt(2),e=this.reader.readInt(4),r=this.reader.readData(e),this.zip64ExtensibleData[t]={id:t,length:e,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var t,e;for(t=0;t<this.files.length;t++)e=this.files[t],this.reader.setIndex(e.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),e.readLocalPart(this.reader),e.handleUTF8(),e.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(t=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(t<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(t);var e=t;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===n.MAX_VALUE_16BITS||this.diskWithCentralDirStart===n.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===n.MAX_VALUE_16BITS||this.centralDirRecords===n.MAX_VALUE_16BITS||this.centralDirSize===n.MAX_VALUE_32BITS||this.centralDirOffset===n.MAX_VALUE_32BITS){if(this.zip64=!0,(t=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(t),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var i=e-r;if(0<i)this.isSignature(e,s.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(i<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(i)+\" bytes.\")},prepareReader:function(t){this.reader=i(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},e.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utf8\":31,\"./utils\":32,\"./zipEntry\":34}],34:[function(t,e,r){\"use strict\";var i=t(\"./reader/readerFor\"),s=t(\"./utils\"),n=t(\"./compressedObject\"),a=t(\"./crc32\"),o=t(\"./utf8\"),h=t(\"./compressions\"),u=t(\"./support\");function l(t,e){this.options=t,this.loadOptions=e}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(t){var e,r;if(t.skip(22),this.fileNameLength=t.readInt(2),r=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(e=function(t){for(var e in h)if(h.hasOwnProperty(e)&&h[e].magic===t)return h[e];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new n(this.compressedSize,this.uncompressedSize,this.crc32,e,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var e=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");t.skip(e),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,i,n=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4<n;)e=t.readInt(2),r=t.readInt(2),i=t.readData(r),this.extraFields[e]={id:e,length:r,value:i};t.setIndex(n)},handleUTF8:function(){var t=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();if(null!==e)this.fileNameStr=e;else{var r=s.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var i=this.findExtraFieldUnicodeComment();if(null!==i)this.fileCommentStr=i;else{var n=s.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(n)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileName)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileComment)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null}},e.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(t,e,r){\"use strict\";function i(t,e,r){this.name=t,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=e,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=t(\"./stream/StreamHelper\"),n=t(\"./stream/DataWorker\"),a=t(\"./utf8\"),o=t(\"./compressedObject\"),h=t(\"./stream/GenericWorker\");i.prototype={internalStream:function(t){var e=null,r=\"string\";try{if(!t)throw new Error(\"No output type specified.\");var i=\"string\"===(r=t.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),e=this._decompressWorker();var n=!this._dataBinary;n&&!i&&(e=e.pipe(new a.Utf8EncodeWorker)),!n&&i&&(e=e.pipe(new a.Utf8DecodeWorker))}catch(t){(e=new h(\"error\")).error(t)}return new s(e,r,\"\")},async:function(t,e){return this.internalStream(t).accumulate(e)},nodeStream:function(t,e){return this.internalStream(t||\"nodebuffer\").toNodejsStream(e)},_compressWorker:function(t,e){if(this._data instanceof o&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,t,e)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new n(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)i.prototype[u[f]]=l;e.exports=i},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(t,l,e){(function(e){\"use strict\";var r,i,t=e.MutationObserver||e.WebKitMutationObserver;if(t){var n=0,s=new t(u),a=e.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=n=++n%2}}else if(e.setImmediate||void 0===e.MessageChannel)r=\"document\"in e&&\"onreadystatechange\"in e.document.createElement(\"script\")?function(){var t=e.document.createElement(\"script\");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var o=new e.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var t,e;i=!0;for(var r=h.length;r;){for(e=h,h=[],t=-1;++t<r;)e[t]();r=h.length}i=!1}l.exports=function(t){1!==h.push(t)||i||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(t,e,r){\"use strict\";var n=t(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],i=[\"PENDING\"];function o(t){if(\"function\"!=typeof t)throw new TypeError(\"resolver must be a function\");this.state=i,this.queue=[],this.outcome=void 0,t!==u&&c(this,t)}function h(t,e,r){this.promise=t,\"function\"==typeof e&&(this.onFulfilled=e,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(e,r,i){n(function(){var t;try{t=r(i)}catch(t){return l.reject(e,t)}t===e?l.reject(e,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(e,t)})}function d(t){var e=t&&t.then;if(t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof e)return function(){e.apply(t,arguments)}}function c(e,t){var r=!1;function i(t){r||(r=!0,l.reject(e,t))}function n(t){r||(r=!0,l.resolve(e,t))}var s=p(function(){t(n,i)});\"error\"===s.status&&i(s.value)}function p(t,e){var r={};try{r.value=t(e),r.status=\"success\"}catch(t){r.status=\"error\",r.value=t}return r}(e.exports=o).prototype.finally=function(e){if(\"function\"!=typeof e)return this;var r=this.constructor;return this.then(function(t){return r.resolve(e()).then(function(){return t})},function(t){return r.resolve(e()).then(function(){throw t})})},o.prototype.catch=function(t){return this.then(null,t)},o.prototype.then=function(t,e){if(\"function\"!=typeof t&&this.state===a||\"function\"!=typeof e&&this.state===s)return this;var r=new this.constructor(u);this.state!==i?f(r,this.state===a?t:e,this.outcome):this.queue.push(new h(r,t,e));return r},h.prototype.callFulfilled=function(t){l.resolve(this.promise,t)},h.prototype.otherCallFulfilled=function(t){f(this.promise,this.onFulfilled,t)},h.prototype.callRejected=function(t){l.reject(this.promise,t)},h.prototype.otherCallRejected=function(t){f(this.promise,this.onRejected,t)},l.resolve=function(t,e){var r=p(d,e);if(\"error\"===r.status)return l.reject(t,r.value);var i=r.value;if(i)c(t,i);else{t.state=a,t.outcome=e;for(var n=-1,s=t.queue.length;++n<s;)t.queue[n].callFulfilled(e)}return t},l.reject=function(t,e){t.state=s,t.outcome=e;for(var r=-1,i=t.queue.length;++r<i;)t.queue[r].callRejected(e);return t},o.resolve=function(t){if(t instanceof this)return t;return l.resolve(new this(u),t)},o.reject=function(t){var e=new this(u);return l.reject(e,t)},o.all=function(t){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(t))return this.reject(new TypeError(\"must be an array\"));var i=t.length,n=!1;if(!i)return this.resolve([]);var s=new Array(i),a=0,e=-1,o=new this(u);for(;++e<i;)h(t[e],e);return o;function h(t,e){r.resolve(t).then(function(t){s[e]=t,++a!==i||n||(n=!0,l.resolve(o,s))},function(t){n||(n=!0,l.reject(o,t))})}},o.race=function(t){var e=this;if(\"[object Array]\"!==Object.prototype.toString.call(t))return this.reject(new TypeError(\"must be an array\"));var r=t.length,i=!1;if(!r)return this.resolve([]);var n=-1,s=new this(u);for(;++n<r;)a=t[n],e.resolve(a).then(function(t){i||(i=!0,l.resolve(s,t))},function(t){i||(i=!0,l.reject(s,t))});var a;return s}},{immediate:36}],38:[function(t,e,r){\"use strict\";var i={};(0,t(\"./lib/utils/common\").assign)(i,t(\"./lib/deflate\"),t(\"./lib/inflate\"),t(\"./lib/zlib/constants\")),e.exports=i},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(t,e,r){\"use strict\";var a=t(\"./zlib/deflate\"),o=t(\"./utils/common\"),h=t(\"./utils/strings\"),n=t(\"./zlib/messages\"),s=t(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,d=0,c=8;function p(t){if(!(this instanceof p))return new p(t);this.options=o.assign({level:f,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:\"\"},t||{});var e=this.options;e.raw&&0<e.windowBits?e.windowBits=-e.windowBits:e.gzip&&0<e.windowBits&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==l)throw new Error(n[r]);if(e.header&&a.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(i=\"string\"==typeof e.dictionary?h.string2buf(e.dictionary):\"[object ArrayBuffer]\"===u.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(r=a.deflateSetDictionary(this.strm,i))!==l)throw new Error(n[r]);this._dict_set=!0}}function i(t,e){var r=new p(e);if(r.push(t,!0),r.err)throw r.msg||n[r.err];return r.result}p.prototype.push=function(t,e){var r,i,n=this.strm,s=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:!0===e?4:0,\"string\"==typeof t?n.input=h.string2buf(t):\"[object ArrayBuffer]\"===u.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new o.Buf8(s),n.next_out=0,n.avail_out=s),1!==(r=a.deflate(n,i))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==n.avail_out&&(0!==n.avail_in||4!==i&&2!==i)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(n.output,n.next_out))):this.onData(o.shrinkBuf(n.output,n.next_out)))}while((0<n.avail_in||0===n.avail_out)&&1!==r);return 4===i?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==i||(this.onEnd(l),!(n.avail_out=0))},p.prototype.onData=function(t){this.chunks.push(t)},p.prototype.onEnd=function(t){t===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Deflate=p,r.deflate=i,r.deflateRaw=function(t,e){return(e=e||{}).raw=!0,i(t,e)},r.gzip=function(t,e){return(e=e||{}).gzip=!0,i(t,e)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(t,e,r){\"use strict\";var d=t(\"./zlib/inflate\"),c=t(\"./utils/common\"),p=t(\"./utils/strings\"),m=t(\"./zlib/constants\"),i=t(\"./zlib/messages\"),n=t(\"./zlib/zstream\"),s=t(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(t){if(!(this instanceof a))return new a(t);this.options=c.assign({chunkSize:16384,windowBits:0,to:\"\"},t||{});var e=this.options;e.raw&&0<=e.windowBits&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(0<=e.windowBits&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),15<e.windowBits&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new n,this.strm.avail_out=0;var r=d.inflateInit2(this.strm,e.windowBits);if(r!==m.Z_OK)throw new Error(i[r]);this.header=new s,d.inflateGetHeader(this.strm,this.header)}function o(t,e){var r=new a(e);if(r.push(t,!0),r.err)throw r.msg||i[r.err];return r.result}a.prototype.push=function(t,e){var r,i,n,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;i=e===~~e?e:!0===e?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof t?h.input=p.binstring2buf(t):\"[object ArrayBuffer]\"===_.call(t)?h.input=new Uint8Array(t):h.input=t,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new c.Buf8(u),h.next_out=0,h.avail_out=u),(r=d.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=d.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||i!==m.Z_FINISH&&i!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(n=p.utf8border(h.output,h.next_out),s=h.next_out-n,a=p.buf2string(h.output,n),h.next_out=s,h.avail_out=u-s,s&&c.arraySet(h.output,h.output,n,s,0),this.onData(a)):this.onData(c.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(i=m.Z_FINISH),i===m.Z_FINISH?(r=d.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):i!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(t){this.chunks.push(t)},a.prototype.onEnd=function(t){t===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(t,e){return(e=e||{}).raw=!0,o(t,e)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(t,e,r){\"use strict\";var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i])}}return t},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+i),n);else for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){var e,r,i,n,s,a;for(e=i=0,r=t.length;e<r;e++)i+=t[e].length;for(a=new Uint8Array(i),e=n=0,r=t.length;e<r;e++)s=t[e],a.set(s,n),n+=s.length;return a}},s={arraySet:function(t,e,r,i,n){for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){return[].concat.apply([],t)}};r.setTyped=function(t){t?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,n)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(i)},{}],42:[function(t,e,r){\"use strict\";var h=t(\"./common\"),n=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(t){n=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){s=!1}for(var u=new h.Buf8(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;function l(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&n))return String.fromCharCode.apply(null,h.shrinkBuf(t,e));for(var r=\"\",i=0;i<e;i++)r+=String.fromCharCode(t[i]);return r}u[254]=u[254]=1,r.string2buf=function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new h.Buf8(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return l(t,t.length)},r.binstring2buf=function(t){for(var e=new h.Buf8(t.length),r=0,i=e.length;r<i;r++)e[r]=t.charCodeAt(r);return e},r.buf2string=function(t,e){var r,i,n,s,a=e||t.length,o=new Array(2*a);for(r=i=0;r<a;)if((n=t[r++])<128)o[i++]=n;else if(4<(s=u[n]))o[i++]=65533,r+=s-1;else{for(n&=2===s?31:3===s?15:7;1<s&&r<a;)n=n<<6|63&t[r++],s--;1<s?o[i++]=65533:n<65536?o[i++]=n:(n-=65536,o[i++]=55296|n>>10&1023,o[i++]=56320|1023&n)}return l(o,i)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}},{\"./common\":41}],43:[function(t,e,r){\"use strict\";e.exports=function(t,e,r,i){for(var n=65535&t|0,s=t>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(n=n+e[i++]|0)|0,--a;);n%=65521,s%=65521}return n|s<<16|0}},{}],44:[function(t,e,r){\"use strict\";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,e,r){\"use strict\";var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}},{}],46:[function(t,e,r){\"use strict\";var h,d=t(\"../utils/common\"),u=t(\"./trees\"),c=t(\"./adler32\"),p=t(\"./crc32\"),i=t(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,n=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(t,e){return t.msg=i[e],e}function T(t){return(t<<1)-(4<t?9:0)}function D(t){for(var e=t.length;0<=--e;)t[e]=0}function F(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(d.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function N(t,e){u._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,F(t.strm)}function U(t,e){t.pending_buf[t.pending++]=e}function P(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function L(t,e){var r,i,n=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-z?t.strstart-(t.w_size-z):0,u=t.window,l=t.w_mask,f=t.prev,d=t.strstart+S,c=u[s+a-1],p=u[s+a];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(u[(r=e)+a]===p&&u[r+a-1]===c&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<d);if(i=S-(d-s),s=d-S,a<i){if(t.match_start=e,o<=(a=i))break;c=u[s+a-1],p=u[s+a]}}}while((e=f[e&l])>h&&0!=--n);return a<=t.lookahead?a:t.lookahead}function j(t){var e,r,i,n,s,a,o,h,u,l,f=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-z)){for(d.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;i=t.head[--e],t.head[e]=f<=i?i-f:0,--r;);for(e=r=f;i=t.prev[--e],t.prev[e]=f<=i?i-f:0,--r;);n+=f}if(0===t.strm.avail_in)break;if(a=t.strm,o=t.window,h=t.strstart+t.lookahead,u=n,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,d.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=c(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),t.lookahead+=r,t.lookahead+t.insert>=x)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+x-1])&t.hash_mask,t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<x)););}while(t.lookahead<z&&0!==t.strm.avail_in)}function Z(t,e){for(var r,i;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==r&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r)),t.match_length>=x)if(i=u._tr_tally(t,t.strstart-t.match_start,t.match_length-x),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=x){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart,0!=--t.match_length;);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function W(t,e){for(var r,i,n;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=x-1,0!==r&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r),t.match_length<=5&&(1===t.strategy||t.match_length===x&&4096<t.strstart-t.match_start)&&(t.match_length=x-1)),t.prev_length>=x&&t.match_length<=t.prev_length){for(n=t.strstart+t.lookahead-x,i=u._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-x),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!=--t.prev_length;);if(t.match_available=0,t.match_length=x-1,t.strstart++,i&&(N(t,!1),0===t.strm.avail_out))return A}else if(t.match_available){if((i=u._tr_tally(t,0,t.window[t.strstart-1]))&&N(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return A}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=u._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function M(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new d.Buf16(2*w),this.dyn_dtree=new d.Buf16(2*(2*a+1)),this.bl_tree=new d.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new d.Buf16(k+1),this.heap=new d.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new d.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=n,(e=t.state).pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?C:E,t.adler=2===e.wrap?0:1,e.last_flush=l,u._tr_init(e),m):R(t,_)}function K(t){var e=G(t);return e===m&&function(t){t.window_size=2*t.w_size,D(t.head),t.max_lazy_match=h[t.level].max_lazy,t.good_match=h[t.level].good_length,t.nice_match=h[t.level].nice_length,t.max_chain_length=h[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=x-1,t.match_available=0,t.ins_h=0}(t.state),e}function Y(t,e,r,i,n,s){if(!t)return _;var a=1;if(e===g&&(e=6),i<0?(a=0,i=-i):15<i&&(a=2,i-=16),n<1||y<n||r!==v||i<8||15<i||e<0||9<e||s<0||b<s)return R(t,_);8===i&&(i=9);var o=new H;return(t.state=o).strm=t,o.wrap=a,o.gzhead=null,o.w_bits=i,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=n+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new d.Buf8(2*o.w_size),o.head=new d.Buf16(o.hash_size),o.prev=new d.Buf16(o.w_size),o.lit_bufsize=1<<n+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new d.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=e,o.strategy=s,o.method=r,K(t)}h=[new M(0,0,0,0,function(t,e){var r=65535;for(r>t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(j(t),0===t.lookahead&&e===l)return A;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,N(t,!1),0===t.strm.avail_out))return A;if(t.strstart-t.block_start>=t.w_size-z&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):(t.strstart>t.block_start&&(N(t,!1),t.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(t,e){return Y(t,e,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?_:(t.state.gzhead=e,m):_},r.deflate=function(t,e){var r,i,n,s;if(!t||!t.state||5<e||e<0)return t?R(t,_):_;if(i=t.state,!t.output||!t.input&&0!==t.avail_in||666===i.status&&e!==f)return R(t,0===t.avail_out?-5:_);if(i.strm=t,r=i.last_flush,i.last_flush=e,i.status===C)if(2===i.wrap)t.adler=0,U(i,31),U(i,139),U(i,8),i.gzhead?(U(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),U(i,255&i.gzhead.time),U(i,i.gzhead.time>>8&255),U(i,i.gzhead.time>>16&255),U(i,i.gzhead.time>>24&255),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(U(i,255&i.gzhead.extra.length),U(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=p(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(U(i,0),U(i,0),U(i,0),U(i,0),U(i,0),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,3),i.status=E);else{var a=v+(i.w_bits-8<<4)<<8;a|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(a|=32),a+=31-a%31,i.status=E,P(i,a),0!==i.strstart&&(P(i,t.adler>>>16),P(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending!==i.pending_buf_size));)U(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&F(t),i.pending+2<=i.pending_buf_size&&(U(i,255&t.adler),U(i,t.adler>>8&255),t.adler=0,i.status=E)):i.status=E),0!==i.pending){if(F(t),0===t.avail_out)return i.last_flush=-1,m}else if(0===t.avail_in&&T(e)<=T(r)&&e!==f)return R(t,-5);if(666===i.status&&0!==t.avail_in)return R(t,-5);if(0!==t.avail_in||0!==i.lookahead||e!==l&&666!==i.status){var o=2===i.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(j(t),0===t.lookahead)){if(e===l)return A;break}if(t.match_length=0,r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):3===i.strategy?function(t,e){for(var r,i,n,s,a=t.window;;){if(t.lookahead<=S){if(j(t),t.lookahead<=S&&e===l)return A;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=x&&0<t.strstart&&(i=a[n=t.strstart-1])===a[++n]&&i===a[++n]&&i===a[++n]){s=t.strstart+S;do{}while(i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&n<s);t.match_length=S-(s-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=x?(r=u._tr_tally(t,1,t.match_length-x),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):h[i.level].func(i,e);if(o!==O&&o!==B||(i.status=666),o===A||o===O)return 0===t.avail_out&&(i.last_flush=-1),m;if(o===I&&(1===e?u._tr_align(i):5!==e&&(u._tr_stored_block(i,0,0,!1),3===e&&(D(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),F(t),0===t.avail_out))return i.last_flush=-1,m}return e!==f?m:i.wrap<=0?1:(2===i.wrap?(U(i,255&t.adler),U(i,t.adler>>8&255),U(i,t.adler>>16&255),U(i,t.adler>>24&255),U(i,255&t.total_in),U(i,t.total_in>>8&255),U(i,t.total_in>>16&255),U(i,t.total_in>>24&255)):(P(i,t.adler>>>16),P(i,65535&t.adler)),F(t),0<i.wrap&&(i.wrap=-i.wrap),0!==i.pending?m:1)},r.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==C&&69!==e&&73!==e&&91!==e&&103!==e&&e!==E&&666!==e?R(t,_):(t.state=null,e===E?R(t,-3):m):_},r.deflateSetDictionary=function(t,e){var r,i,n,s,a,o,h,u,l=e.length;if(!t||!t.state)return _;if(2===(s=(r=t.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(t.adler=c(t.adler,e,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new d.Buf8(r.w_size),d.arraySet(u,e,l-r.w_size,r.w_size,0),e=u,l=r.w_size),a=t.avail_in,o=t.next_in,h=t.input,t.avail_in=l,t.next_in=0,t.input=e,j(r);r.lookahead>=x;){for(i=r.strstart,n=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[i+x-1])&r.hash_mask,r.prev[i&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=i,i++,--n;);r.strstart=i,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,t.next_in=o,t.input=h,t.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(t,e,r){\"use strict\";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(t,e,r){\"use strict\";e.exports=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C;r=t.state,i=t.next_in,z=t.input,n=i+(t.avail_in-5),s=t.next_out,C=t.output,a=s-(e-t.avail_out),o=s+(t.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,d=r.window,c=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;t:do{p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=m[c&g];e:for(;;){if(c>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(c&(1<<y)-1)];continue e}if(32&y){r.mode=12;break t}t.msg=\"invalid literal/length code\",r.mode=30;break t}w=65535&v,(y&=15)&&(p<y&&(c+=z[i++]<<p,p+=8),w+=c&(1<<y)-1,c>>>=y,p-=y),p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=_[c&b];r:for(;;){if(c>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(c&(1<<y)-1)];continue r}t.msg=\"invalid distance code\",r.mode=30;break t}if(k=65535&v,p<(y&=15)&&(c+=z[i++]<<p,(p+=8)<y&&(c+=z[i++]<<p,p+=8)),h<(k+=c&(1<<y)-1)){t.msg=\"invalid distance too far back\",r.mode=30;break t}if(c>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){t.msg=\"invalid distance too far back\",r.mode=30;break t}if(S=d,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=d[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=d[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(i<n&&s<o);i-=w=p>>3,c&=(1<<(p-=w<<3))-1,t.next_in=i,t.next_out=s,t.avail_in=i<n?n-i+5:5-(i-n),t.avail_out=s<o?o-s+257:257-(s-o),r.hold=c,r.bits=p}},{}],49:[function(t,e,r){\"use strict\";var I=t(\"../utils/common\"),O=t(\"./adler32\"),B=t(\"./crc32\"),R=t(\"./inffast\"),T=t(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,i=852,n=592;function L(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg=\"\",e.wrap&&(t.adler=1&e.wrap),e.mode=P,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new I.Buf32(i),e.distcode=e.distdyn=new I.Buf32(n),e.sane=1,e.back=-1,N):U}function o(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,a(t)):U}function h(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15<e)?U:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=r,i.wbits=e,o(t))):U}function u(t,e){var r,i;return t?(i=new s,(t.state=i).window=null,(r=h(t,e))!==N&&(t.state=null),r):U}var l,f,d=!0;function j(t){if(d){var e;for(l=new I.Buf32(512),f=new I.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(T(D,t.lens,0,288,l,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;T(F,t.lens,0,32,f,0,t.work,{bits:5}),d=!1}t.lencode=l,t.lenbits=9,t.distcode=f,t.distbits=5}function Z(t,e,r,i){var n,s=t.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),i>=s.wsize?(I.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(n=s.wsize-s.wnext)&&(n=i),I.arraySet(s.window,e,r-i,n,s.wnext),(i-=n)?(I.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=n))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(t){return u(t,15)},r.inflateInit2=u,r.inflate=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return U;12===(r=t.state).mode&&(r.mode=13),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,f=o,d=h,x=N;t:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){t.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,t.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){t.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){t.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,i,s,c,k)),512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,r.length-=c),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(65535&r.check)){t.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}t.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,2;t.adler=r.check=1,r.mode=12;case 12:if(5===e||6===e)break t;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==e)break;u>>>=2,l-=2;break t;case 2:r.mode=17;break;case 3:t.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){t.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(c=r.length){if(o<c&&(c=o),h<c&&(c=h),0===c)break t;I.arraySet(n,i,s,c,a),o-=c,s+=c,h-=c,a+=c,r.length-=c;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){t.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){t.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+c>r.nlen+r.ndist){t.msg=\"invalid bit length repeat\",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){t.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,R(t,d),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){t.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){t.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(c=d-h,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){t.msg=\"invalid distance too far back\",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=n,p=a-r.offset,c=r.length;for(h<c&&(c=h),h-=c,r.length-=c;n[a++]=m[p++],--c;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break t;n[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break t;o--,u|=i[s++]<<l,l+=8}if(d-=h,t.total_out+=d,r.total+=d,d&&(t.adler=r.check=r.flags?B(r.check,n,d,a-d):O(r.check,n,d,a-d)),d=h,(r.flags?u:L(u))!==r.check){t.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(4294967295&r.total)){t.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break t;case 30:x=-3;break t;case 31:return-4;case 32:default:return U}return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,(r.wsize||d!==t.avail_out&&r.mode<30&&(r.mode<27||4!==e))&&Z(t,t.output,t.next_out,d-t.avail_out)?(r.mode=31,-4):(f-=t.avail_in,d-=t.avail_out,t.total_in+=f,t.total_out+=d,r.total+=d,r.wrap&&d&&(t.adler=r.check=r.flags?B(r.check,n,d,t.next_out-d):O(r.check,n,d,t.next_out-d)),t.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===d||4===e)&&x===N&&(x=-5),x)},r.inflateEnd=function(t){if(!t||!t.state)return U;var e=t.state;return e.window&&(e.window=null),t.state=null,N},r.inflateGetHeader=function(t,e){var r;return t&&t.state?0==(2&(r=t.state).wrap)?U:((r.head=e).done=!1,N):U},r.inflateSetDictionary=function(t,e){var r,i=e.length;return t&&t.state?0!==(r=t.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,e,i,0)!==r.check?-3:Z(t,e,i,i)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(t,e,r){\"use strict\";var D=t(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,r,i,n,s,a,o){var h,u,l,f,d,c,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<i;v++)O[e[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return n[s++]=20971520,n[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===t||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<i;v++)0!==e[r+v]&&(a[B[e[r+v]]++]=v);if(c=0===t?(A=R=a,19):1===t?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,d=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===t&&852<C||2===t&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<c?(m=0,a[v]):a[v]>c?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;n[d+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=e[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),d+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===t&&852<C||2===t&&592<C)return 1;n[l=E&f]=k<<24|x<<16|d-s|0}}return 0!==E&&(n[d+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(t,e,r){\"use strict\";e.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(t,e,r){\"use strict\";var n=t(\"../utils/common\"),o=0,h=1;function i(t){for(var e=t.length;0<=--e;)t[e]=0}var s=0,a=29,u=256,l=u+1+a,f=30,d=19,_=2*l+1,g=15,c=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));i(z);var C=new Array(2*f);i(C);var E=new Array(512);i(E);var A=new Array(256);i(A);var I=new Array(a);i(I);var O,B,R,T=new Array(f);function D(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function F(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function N(t){return t<256?E[t]:E[256+(t>>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<<t.bi_valid&65535,U(t,t.bi_buf),t.bi_buf=e>>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)}function L(t,e,r){P(t,r[2*e],r[2*e+1])}function j(t,e){for(var r=0;r|=1&t,t>>>=1,r<<=1,0<--e;);return r>>>1}function Z(t,e,r){var i,n,s=new Array(g+1),a=0;for(i=1;i<=g;i++)s[i]=a=a+r[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=j(s[o]++,o))}}function W(t){var e;for(e=0;e<l;e++)t.dyn_ltree[2*e]=0;for(e=0;e<f;e++)t.dyn_dtree[2*e]=0;for(e=0;e<d;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*m]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function M(t){8<t.bi_valid?U(t,t.bi_buf):0<t.bi_valid&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function H(t,e,r,i){var n=2*e,s=2*r;return t[n]<t[s]||t[n]===t[s]&&i[e]<=i[r]}function G(t,e,r){for(var i=t.heap[r],n=r<<1;n<=t.heap_len&&(n<t.heap_len&&H(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!H(e,i,t.heap[n],t.depth));)t.heap[r]=t.heap[n],r=n,n<<=1;t.heap[r]=i}function K(t,e,r){var i,n,s,a,o=0;if(0!==t.last_lit)for(;i=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],n=t.pending_buf[t.l_buf+o],o++,0===i?L(t,n,e):(L(t,(s=A[n])+u+1,e),0!==(a=w[s])&&P(t,n-=I[s],a),L(t,s=N(--i),r),0!==(a=k[s])&&P(t,i-=T[s],a)),o<t.last_lit;);L(t,m,e)}function Y(t,e){var r,i,n,s=e.dyn_tree,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,u=-1;for(t.heap_len=0,t.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(t.heap[++t.heap_len]=u=r,t.depth[r]=0):s[2*r+1]=0;for(;t.heap_len<2;)s[2*(n=t.heap[++t.heap_len]=u<2?++u:0)]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=a[2*n+1]);for(e.max_code=u,r=t.heap_len>>1;1<=r;r--)G(t,s,r);for(n=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,s,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,s[2*n]=s[2*r]+s[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,s[2*r+1]=s[2*i+1]=n,t.heap[1]=n++,G(t,s,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,i,n,s,a,o,h=e.dyn_tree,u=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(s=0;s<=g;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<_;r++)p<(s=h[2*h[2*(i=t.heap[r])+1]+1]+1)&&(s=p,m++),h[2*i+1]=s,u<i||(t.bl_count[s]++,a=0,c<=i&&(a=d[i-c]),o=h[2*i],t.opt_len+=o*(s+a),f&&(t.static_len+=o*(l[2*i+1]+a)));if(0!==m){do{for(s=p-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(i=t.bl_count[s];0!==i;)u<(n=t.heap[--r])||(h[2*n+1]!==s&&(t.opt_len+=(s-h[2*n+1])*h[2*n],h[2*n+1]=s),i--)}}(t,e),Z(s,u,t.bl_count)}function X(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),e[2*(r+1)+1]=65535,i=0;i<=r;i++)n=a,a=e[2*(i+1)+1],++o<h&&n===a||(o<u?t.bl_tree[2*n]+=o:0!==n?(n!==s&&t.bl_tree[2*n]++,t.bl_tree[2*b]++):o<=10?t.bl_tree[2*v]++:t.bl_tree[2*y]++,s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4))}function V(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),i=0;i<=r;i++)if(n=a,a=e[2*(i+1)+1],!(++o<h&&n===a)){if(o<u)for(;L(t,n,t.bl_tree),0!=--o;);else 0!==n?(n!==s&&(L(t,n,t.bl_tree),o--),L(t,b,t.bl_tree),P(t,o-3,2)):o<=10?(L(t,v,t.bl_tree),P(t,o-3,3)):(L(t,y,t.bl_tree),P(t,o-11,7));s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4)}}i(T);var q=!1;function J(t,e,r,i){P(t,(s<<1)+(i?1:0),3),function(t,e,r,i){M(t),i&&(U(t,r),U(t,~r)),n.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}(t,e,r,!0)}r._tr_init=function(t){q||(function(){var t,e,r,i,n,s=new Array(g+1);for(i=r=0;i<a-1;i++)for(I[i]=r,t=0;t<1<<w[i];t++)A[r++]=i;for(A[r-1]=i,i=n=0;i<16;i++)for(T[i]=n,t=0;t<1<<k[i];t++)E[n++]=i;for(n>>=7;i<f;i++)for(T[i]=n<<7,t=0;t<1<<k[i]-7;t++)E[256+n++]=i;for(e=0;e<=g;e++)s[e]=0;for(t=0;t<=143;)z[2*t+1]=8,t++,s[8]++;for(;t<=255;)z[2*t+1]=9,t++,s[9]++;for(;t<=279;)z[2*t+1]=7,t++,s[7]++;for(;t<=287;)z[2*t+1]=8,t++,s[8]++;for(Z(z,l+1,s),t=0;t<f;t++)C[2*t+1]=5,C[2*t]=j(t,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,d,p)}(),q=!0),t.l_desc=new F(t.dyn_ltree,O),t.d_desc=new F(t.dyn_dtree,B),t.bl_desc=new F(t.bl_tree,R),t.bi_buf=0,t.bi_valid=0,W(t)},r._tr_stored_block=J,r._tr_flush_block=function(t,e,r,i){var n,s,a=0;0<t.level?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,r=4093624447;for(e=0;e<=31;e++,r>>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return h;for(e=32;e<u;e++)if(0!==t.dyn_ltree[2*e])return h;return o}(t)),Y(t,t.l_desc),Y(t,t.d_desc),a=function(t){var e;for(X(t,t.dyn_ltree,t.l_desc.max_code),X(t,t.dyn_dtree,t.d_desc.max_code),Y(t,t.bl_desc),e=d-1;3<=e&&0===t.bl_tree[2*S[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),n=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=n&&(n=s)):n=s=r+5,r+4<=n&&-1!==e?J(t,e,r,i):4===t.strategy||s===n?(P(t,2+(i?1:0),3),K(t,z,C)):(P(t,4+(i?1:0),3),function(t,e,r,i){var n;for(P(t,e-257,5),P(t,r-1,5),P(t,i-4,4),n=0;n<i;n++)P(t,t.bl_tree[2*S[n]+1],3);V(t,t.dyn_ltree,e-1),V(t,t.dyn_dtree,r-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),K(t,t.dyn_ltree,t.dyn_dtree)),W(t),i&&M(t)},r._tr_tally=function(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(A[r]+u+1)]++,t.dyn_dtree[2*N(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),L(t,m,z),function(t){16===t.bi_valid?(U(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{\"../utils/common\":41}],53:[function(t,e,r){\"use strict\";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,r){\"use strict\";e.exports=\"function\"==typeof setImmediate?setImmediate:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)});","/* eslint-disable no-unused-vars */\nimport parser from 'fast-xml-parser';\nimport JSZip from 'jszip/dist/jszip.min.js';\n\n/**\n * Parse metadata from xml file that is contained in BRML\n * @export\n * @param {String} file\n * @returns {Object} containing data (x: 2theta, y: counts), info and metadata\n */\nexport function parseDiffractogram(file) {\n  let json = parser.parse(file, {\n    ignoreAttributes: false,\n    attributeNamePrefix: '__',\n  });\n  const data = json.RawData;\n\n  let axes = data.DataRoutes.DataRoute.ScanInformation.ScanAxes.ScanAxisInfo.map(\n    (element) => ({\n      id: element.__AxisId,\n      name: element.__AxisName,\n      unitBase: element.Unit.__Base,\n      unitPrefix: element.Unit.__Prefix,\n      reference: element.reference,\n      start: element.start,\n      stop: element.stop,\n      increment: element.increment,\n    }),\n  );\n\n  let adddata = {\n    startTime: data.TimeStampStarted,\n    endTime: data.TimeStampFinished,\n    measurmentPoints:\n      data.DataRoutes.DataRoute.ScanInformation.MeasurementPoints,\n    timePerStep: data.DataRoutes.DataRoute.ScanInformation.TimePerStep,\n    timePerStepEffective:\n      data.DataRoutes.DataRoute.ScanInformation.TimePerStepEffective,\n    scanMode: data.DataRoutes.DataRoute.ScanInformation.ScanMode,\n    scanModeVisibleName:\n      data.DataRoutes.DataRoute.ScanInformation.ScanModeVisibleName,\n    userName: data.Identifier.__UserName,\n    machineName: data.Identifier.__MachineName,\n    guid: data.Identifier.Guid,\n    axes: axes,\n    goniometerType: data.FixedInformation.Instrument.GoniometerType,\n\n    anode:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.TubeMaterial,\n    anodeVoltage:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.Generator.Voltage.__Value,\n    anodeVoltageUnit:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.Generator.Voltage.__Unit,\n    anodeSerialNumber:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.SerialNumber.__Value,\n  };\n\n  const diffractogram = getXYDiffractogram(data.DataRoutes.DataRoute.Datum);\n\n  diffractogram.meta = { ...adddata, ...diffractogram.meta };\n\n  let label = adddata.axes[0].name.replace(/two/i, '2').replace(/theta/i, 'ϴ');\n  let unit = adddata.axes[0].unitBase.replace(/degree/i, '°');\n\n  diffractogram.info.xUnits = `${label} [${unit}]`;\n\n  return diffractogram;\n}\n\n/**\n * @param  {array} data array of strings of the measured points\n */\nfunction getXYDiffractogram(data) {\n  let axis1 = [];\n  let axis2 = [];\n  let measuredTimePerStep = [];\n  let plannedTimePerStep = [];\n  let counts = [];\n\n  data.forEach((element) => {\n    const factors = element.split(',');\n    measuredTimePerStep.push(parseFloat(factors[0]));\n    plannedTimePerStep.push(parseFloat(factors[1]));\n    axis1.push(parseFloat(factors[2]));\n    axis2.push(parseFloat(factors[3]));\n    counts.push(parseFloat(factors[4]));\n  });\n\n  const diffractogram = {\n    data: { x: axis1, y: counts },\n    info: {\n      xUnits: '2ϴ [°]',\n      yUnits: 'counts',\n      dataType: 'XRD pattern',\n      origin: 'Data converted from BRML using convert-to-jcamp',\n    },\n    meta: {\n      axis2: axis2,\n      measuredTimePerStep: measuredTimePerStep,\n      plannedTimePerStep: plannedTimePerStep,\n    },\n  };\n\n  return diffractogram;\n}\n/**\n * Read a BRML file (produced by Bruker instruments, a zip file that contains XMLs)\n * @export\n * @param {String/Array of bytes/ArrayBuffer/Uint8Array/Buffer/Blob/Promise} binary BRML file\n * @returns {Object} containing data (x: 2theta, y: counts), info and metadata\n */\nexport async function readBRML(binary) {\n  let zip = new JSZip();\n  const txt = await zip.loadAsync(binary).then(function (zipFiles) {\n    return zipFiles.file('Experiment0/RawData0.xml').async('text');\n  });\n\n  const diffractogram = parseDiffractogram(txt);\n\n  return diffractogram;\n}\n","/**\n * Parse diffractograms saved in xy files that are generated with PowDLL\n * @export\n * @param {String} [text] Text containing the data\n * @returns {Object} containing data (x: 2theta, y: counts), info and metadata\n */\nexport function parsePowDLLXY(text) {\n  let lines = text.split(/\\r?\\n/).filter((line) => !line.match(/^\\s*$/));\n  const header = lines[0];\n  lines.splice(0, 1); // remove header line\n  let data = {\n    x: [],\n    y: [],\n  };\n  for (const line of lines) {\n    let tmp = line.split(/\\s+/);\n    data.x.push(parseFloat(tmp[0].trim()));\n    data.y.push(parseFloat(tmp[1].trim()));\n  }\n  let headerLines = header.split('\" ');\n\n  // try to make metadata consistent with Bruker\n  let meta = {};\n  meta.id = trimReplace(headerLines[0]);\n  meta.comment = trimReplace(headerLines[1]);\n  meta.userName = trimReplace(headerLines[2]);\n  meta.anode = trimReplace(headerLines[3]);\n  meta.scanType = trimReplace(headerLines[4]);\n  // eslint-disable-next-line radix\n  meta.timePerStep = parseInt(trimReplace(headerLines[5]));\n\n  const diffractogram = {\n    data: { x: data.x, y: data.y },\n    info: {\n      xUnits: '2ϴ [°]',\n      yUnits: 'counts',\n      dataType: 'XRD pattern',\n      origin: 'Data converted from xy using convert-to-jcamp',\n    },\n    meta: meta,\n  };\n\n  return diffractogram;\n}\n\nfunction trimReplace(string) {\n  return string.split(':')[1].replace('\"', '').replace(\"'\", '').trim();\n}\n","import { appendDistinctParameter } from './util/appendDistinctParameter';\nimport { appendDistinctValue } from './util/appendDistinctValue';\n\nexport class AnalysesManager {\n  constructor() {\n    this.analyses = [];\n  }\n\n  addAnalysis(analysis) {\n    let index = this.getAnalysisIndex(analysis.id);\n    if (index === undefined) {\n      this.analyses.push(analysis);\n    } else {\n      this.analyses[index] = analysis;\n    }\n  }\n\n  getAnalyses(options = {}) {\n    const { ids } = options;\n    let analyses = [];\n    for (const analysis of this.analyses) {\n      if (!ids || ids.includes(analysis.id)) {\n        analyses.push(analysis);\n      }\n    }\n    return analyses;\n  }\n\n  getSpectra() {\n    const spectra = [];\n    for (const analysis of this.analyses) {\n      spectra.push(...analysis.spectra);\n    }\n    return spectra;\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the titles\n   */\n  getDistinctTitles() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      appendDistinctValue(values, spectrum.title);\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the units\n   */\n  getDistinctUnits() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      if (spectrum.variables) {\n        for (let key in spectrum.variables) {\n          appendDistinctValue(\n            values,\n            spectrum.variables[key].units.replace(/\\s+\\[.*/, ''),\n          );\n        }\n      }\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the labels\n   */\n  getDistinctLabels() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      if (spectrum.variables) {\n        for (let key in spectrum.variables) {\n          appendDistinctValue(\n            values,\n            spectrum.variables[key].label.replace(/\\s+\\[.*/, ''),\n          );\n        }\n      }\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the dataTypes\n   */\n  getDistinctDataTypes() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      appendDistinctValue(values, spectrum.dataType);\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the meta\n   */\n  getDistinctMeta() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      if (spectrum.meta) {\n        for (let key in spectrum.meta) {\n          appendDistinctParameter(values, key, spectrum.meta[key]);\n        }\n      }\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  removeAllAnalyses() {\n    this.analyses.splice(0);\n  }\n\n  /**\n   * Remove the analysis from the AnalysesManager for the specified id\n   * @param {string} id\n   */\n  removeAnalysis(id) {\n    let index = this.getAnalysisIndex(id);\n    if (index === undefined) return undefined;\n    return this.analyses.splice(index, 1);\n  }\n\n  /**\n   * Returns the index of the analysis in the analyses array\n   * @param {string} id\n   * @returns {number}\n   */\n  getAnalysisIndex(id) {\n    if (!id) return undefined;\n    for (let i = 0; i < this.analyses.length; i++) {\n      let analysis = this.analyses[i];\n      if (analysis.id === id) return i;\n    }\n    return undefined;\n  }\n\n  /**\n   * Checks if the ID of an analysis exists in the AnalysesManager\n   * @param {string} id\n   */\n  includes(id) {\n    return !isNaN(this.getAnalysisIndex(id));\n  }\n}\n","import { Analysis } from '..';\n\nimport { readBRML } from './parseBRML';\n\n/**\n * Creates a new Chromatogram element based in a JCAMP string\n * @param {UInt8Array} blob - String containing the JCAMP data\n * @return {Analysis} - New class element with the given data\n */\nexport async function fromBRML(blob) {\n  let parsed = await readBRML(blob);\n  let analysis = new Analysis();\n\n  const variables = {\n    x: {\n      data: parsed.data.x,\n      label: parsed.info.xUnits,\n    },\n    y: {\n      data: parsed.data.y,\n      label: parsed.info.yUnits,\n    },\n  };\n\n  analysis.pushSpectrum(variables, {\n    title: parsed.info.title,\n    meta: parsed.meta,\n    dataType: 'XRD pattern',\n  });\n  return analysis;\n}\n","import { convert } from 'jcampconverter';\n\nimport { Analysis } from '../Analysis';\n\n/**\n * Creates a new Analysis from a JCAMP string\n * @param {string} jcamp - String containing the JCAMP data\n * @param {object} [options={}]\n * @param {object} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @return {Analysis} - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n  let analysis = new Analysis(options);\n  addJcamp(analysis, jcamp, options);\n  return analysis;\n}\n\nfunction addJcamp(analysis, jcamp) {\n  let converted = convert(jcamp, {\n    keepRecordsRegExp: /.*/,\n  });\n\n  for (let entry of converted.flatten) {\n    let currentSpectrum = entry.spectra[0];\n\n    // we ensure variables\n    if (!currentSpectrum.variables) {\n      const variables = {};\n      currentSpectrum.variables = variables;\n      variables.x = {\n        label: currentSpectrum.xUnits,\n        symbol: 'X',\n        data: currentSpectrum.data.x || currentSpectrum.data.X,\n      };\n      variables.y = {\n        label: currentSpectrum.yUnits,\n        symbol: 'Y',\n        data: currentSpectrum.data.y || currentSpectrum.data.Y,\n      };\n    } else {\n      for (let key in currentSpectrum.variables) {\n        const variable = currentSpectrum.variables[key];\n        if (variable.label) continue;\n        variable.label = variable.name || variable.symbol || key;\n        if (variable.units && !variable.label.includes(variable.units)) {\n          variable.label += ` [${variable.units}]`;\n        }\n      }\n    }\n\n    analysis.pushSpectrum(currentSpectrum.variables, {\n      dataType: entry.dataType,\n      title: entry.title,\n      meta: entry.meta,\n    });\n  }\n}\n","import { Analysis } from '..';\n\nimport { parsePowDLLXY } from './parsePowDLLXY';\n\n/**\n * Creates a new Chromatogram element based in a JCAMP string\n * @param {UInt8Array} blob - String containing the JCAMP data\n * @return {Analysis} - New class element with the given data\n */\nexport function fromPowDLLXY(blob) {\n  let parsed = parsePowDLLXY(blob);\n  let analysis = new Analysis();\n  const variables = {\n    x: {\n      data: parsed.data.x,\n      label: parsed.info.xUnits,\n    },\n    y: {\n      data: parsed.data.y,\n      label: parsed.info.yUnits,\n    },\n  };\n\n  analysis.pushSpectrum(variables, {\n    title: parsed.info.title,\n    meta: parsed.meta,\n    dataType: 'XRD pattern',\n  });\n\n  return analysis;\n}\n","// source: http://gisaxs.com/index.php/X-ray_energy\n\nexport const kAlpha1Angstrom = {\n  CuKa: 1.54184,\n  CuKa2: 1.54439,\n  CuKa1: 1.54056,\n  CuKb1: 1.39222,\n  MoKa: 0.71073,\n  MoKa2: 0.71359,\n  MoKa1: 0.7093,\n  MoKb1: 0.63229,\n  CrKa: 2.291,\n  CrKa2: 2.29361,\n  CrKa1: 2.2897,\n  CrKb1: 2.08487,\n  FeKa: 1.93735,\n  FeKa2: 1.93998,\n  FeKa1: 1.93604,\n  FeKb1: 1.75661,\n  CoKa: 1.79026,\n  CoKa2: 1.79285,\n  CoKa1: 1.78896,\n  CoKb1: 1.63079,\n  AgKa: 0.560885,\n  AgKa2: 0.563813,\n  AgKa1: 0.559421,\n  AgKb1: 0.497082,\n};\n","import { toJcamps } from './toJcamps';\n\nexport function toJcamp(analysis, options = {}) {\n  return toJcamps(analysis, options).join('\\n');\n}\n"],"names":["addStyle","serie","spectrum","options","color","opacity","lineWidth","match","toString","toUpperCase","replace","style","name","line","width","dash","label","id","COLORS","getData","x","y","data","Array","length","i","appendDistinctParameter","values","key","value","count","includes","push","appendDistinctValue","Object","prototype","isAnyArray","object","call","endsWith","max","input","arguments","undefined","isArray","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","maxValue","min","minValue","a","d","e","f","g","h","j","c","b","_ref","module","exports","window","median","quickSelectMedian","slice","xAdd","array1","array2","constant","isConstant","array3","xMultiply","Float64Array","xDivide","xIsMonotone","array","sum","sumValue","xSubtract","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","mid","right","ascendingBisect","bisectRight","bisectLeft","descending","number$1","variance","n","m","s","isNaN","deviation","v","Math","sqrt","extent","identity","range","start","stop","step","ceil","e10","e5","e2","ticks","tickStep","floor","step0","abs","step1","pow","log","LN10","error","sturges","LN2","number","histogram","domain","threshold","xz","x0","x1","tz","shift","pop","bin","bins","_","thresholds","map","quantile","p","freedmanDiaconis","sort","scott","mean","numbers","merge","arrays","merged","pairs","permute","indexes","permutes","scan","xi","xj","shuffle","i0","i1","t","random","transpose","matrix","row","zip","version","bisect","thresholdFreedmanDiaconis","thresholdScott","thresholdSturges","factory","isEnumerable","propertyIsEnumerable","getSymbols","getOwnPropertySymbols","target","args","val","Symbol","arg","names","rescale","output","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","isValidKey","assign","isObject","keys","assignSymbols","indent","repeat","indentData","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","constructor","rows","columns","maxI","maxJ","result","formatNumber","get","join","inspectData","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","some","r","from","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","AbstractMatrix","newRows","newColumns","newData","newMatrix","Matrix","column","set","fill","interval","round","this","zeros","l","matrix1","matrix2","checkMatrix","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","iMax","swapRows","tmp","reducedEchelonForm","maxRow","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","rowVector","setRow","row1","row2","temp","getColumn","getColumnVector","columnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","diag","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","embed","mat","cols","resultat","console","warn","blockMult","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","checkIndices","rowIndex","columnIndex","trace","by","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","size","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","for","rand","randomInt","randInt","diagonal","eye","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","exp","expm1","fround","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","installMathOperations","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","col","solve","X","determinant","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","ks","cs","sn","sp","spm1","epm1","sk","ek","Y","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","tol","ii","leftHandSide","rightHandSide","useSVD","_options$algorithm","algorithm","_options$sumValue","_options$maxValue","toLowerCase","absoluteSumValue","absoluteSum","currentMaxValue","_i","sumFactor","_i2","concat","_typeof","obj","iterator","sequentialFill","_options","_options$from","_options$to","to","_options$size","normalize","zones","NEGATIVE_INFINITY","POSITIVE_INFINITY","JSON","parse","stringify","zone","forEach","filter","currentZone","integral","slope","intercept","equallySpaced","arrayXY","xLength","reverse","variant","numberOfPoints","exclusions","exclusion","nextExclusion","invert","unitsPerPoint","reduce","previous","current","currentTotal","zonesWithPoints","xResult","yResult","zoneResult","processZone","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","equallySpacedSlot","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","equallySpacedSmooth","filterX","points","currentFrom","getZones","currentZoneIndex","newX","newY","position","maybeToPrecision","digits","BaseRegression","predict","_predict","train","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","pr","F","FT","A","B","regress","precision","_toFormula","isLaTeX","sup","closeSup","times","fn","str","charAt","json","baselineCorrectionRegression","maxIterations","Regression","regressionOptions","tolerance","delta","regression","baseline","fitting","oldFitting","iteration","corrected","defaultOptions","matrixCase","len","cond","arrayCase","windowSize","derivative","polynomial","pad","padValue","savitzkyGolay","C","padArray","ans","J","ones","inic","Jtranspose","factorial","det","arithmeticMean","lnsum","means","samples","percent","alreadySorted","half","theMean","theVariance","averageDeviations","stdev","quart","q1","q2","q3","pooledVariance","vari","itemCount","itemArray","mean1","mean2","cov","s2","s3","dev","s4","weights","weightedVariance","weightedMean","z","w","inPlace","standardDev","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","properties","mulSafe","decimals","getFractional","divSafe","den","QtyError","err","create","message","stack","throwIncompatibleUnits","UNITS","PI","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","unit","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","kind","units","unitKeys","substr","getKinds","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","FRACTION","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","trim","exec","scalarMatch","parseFloat","nx","top","bottom","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","base","KINDS","knownSignature","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","dstScalar","srcDegK","toDegK","dstUnits","qty","toTemp","toTempK","swiftConverter","srcUnits","convert","srcQty","dstQty","eq","isDegrees","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","NestedMap","defaultFormatter","op1","op2","numdenscale","compareTo","lt","lte","gt","gte","same","every","_isBase","childMap","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","format","targetQty","stringifiedUnitsCache","stringified","simplify","getOutputNames","token","tokenNext","unitNames","acc","unitCounter","unitCount","convertUnit","fromUnit","toUnit","testRegExp","ensureRegexp","string","parts","stringToRegexp","flags","getConvertedVariable","variable","newUnits","isMonotone","getPossibleVariable","variables","selector","variableName","possible","Analysis","substring","spectra","cache","pushSpectrum","meta","dataType","title","xVariable","yVariable","standardizeData","getXYSpectrum","xUnits","yUnits","labels","xLabel","yLabel","split","getNormalizedSpectrum","normalization","newSpectrum","filters","processing","filterOptions","Stat","normed","baselineCorrection","process","getXLabel","getYLabel","GC_MS_FIELDS","complexChromatogram","chromatogram","series","ms","dimension","existingGCMSFields","convertMSFieldToLabel","pageValue","isMSField","canonicDataLabel","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentData","ascii","currentX","firstX","currentY","firstY","endLine","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","numberOfVariables","lines","logs","parseXYZ","xFactor","parseXY","parseXYA","removeSymbolRegExp","isXYAdata","add2D","zData","minZ","maxZ","ySize","xSize","lastX","lastY","minX","maxX","minY","maxY","noise","getMedian","convertTo3DZ","noContour","contourLines","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","pAx","pAy","pBx","pBy","lineZValue","nbSubSpectra","nbPovars","dx","y0","dy","iter","nbContourLevels","contourLevels","level","contourLevel","side","noiseMultiplier","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","generateContourLines","minMax","FFT","_n","_bitrev","_cstb","core","init","_initArray","_makeBitReversalTable","_makeCosSinTable","fft1d","re","im","fft","ifft1d","bt1d","fft2d","tre","tim","x2","y1","ifft2d","inv","ik","wr","wi","xr","n4","Uint32Array","_paddingZero","n2","n8","n2p4","dc","ds","apis","bt","ifft","gyromagneticRatio","profiling","action","time","Date","now","simpleChromatogram","intensity","postProcessing","entriesFlat","observeFrequency","shiftOffsetVal","entry","ntuples","symbol","nucleus","startsWith","$NUC2","$NUC1","yType","pageSymbolIndex","pageSymbol","ratio0","ratio1","ratio","postProcessingNMR","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","xIndex","yIndex","firstVariable","secondVariable","lowerCaseSymbol","vardim","nbPoints","varname","prepareSpectrum","ntuplesSeparatorRegExp","numberRegExp","Spectrum","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","fromVariables","info","forceNtuples","jcampOptions","owner","origin","header","fromJSON","varName","varType","varDim","minFct","maxFct","point","creatorNtuples","getJcamp","JSGraph","getJSGraph","analyses","colors","opacities","linesWidth","analysis","axes","flipped","display","getReactPlotJSON","query","xAxis","xAxisOptions","yAxis","yAxisOptions","labelSpace","seriesOptions","displayMarker","dimentions","height","getNormalizationAnnotations","boundary","annotations","ignore","strokeWidth","fillColor","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","nameStartChar","nameRegexp","regexName","arrayMode","isExist","props","newOptions","tagName","parentTagName","regex","matches","allmatches","convertToJson","node","jObj","child","util","isEmptyObject","attrsMap","cdataPositionChar","asArray","isTagNameInArrayMode","tagname","textNodeName","tag","parent","addChild","buildOptions","attributeNamePrefix","attrNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","trimValues","cdataTagName","tagValueProcessor","attrValueProcessor","attrName","stopNodes","processTagValue","parseValue","parseTrueNumberOnly","resolveNameSpace","tags","shouldParse","parsed","attrsRegx","buildAttributesMap","attrStr","getAllMatches","attrs","attrCollection","closingIndexForOpeningTag","attrBoundary","tagExp","ch","findClosingIndex","xmlData","errMsg","closingIndex","xmlObj","xmlNode","currentNode","textData","closeIndex","colonIndex","getValue","startIndex","childNode","separatorIndex","lastIndexOf","readPI","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","readAttributeStr","startChar","tagClosed","validAttrStrRegxp","validateAttributeString","attrNames","getPositionFromMatch","validateAttrName","validateAmpersand","validateNumberAmpersand","code","lineNumber","msg","isName","tagFound","reachedRoot","closingTag","isValid","otg","afterAmp","char","fromCharCode","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","_e","e_schema","hasValidData","itemSchema","arr_len","arr_i","processValue","isAppChar","require$$0","x2j","_cToJsonStr","indentBy","supressEmptyNode","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","cdata","j2x","attr","arrLen","Ks","L","x2xmlnode","xmlToNodeobj","validationOption","validator","traversableObj","getTraversalObj","nodeToJson","require$$1","convert2nimn","require$$2","convertToJsonString","require$$3","schema","convertTonimn","o","u","require","encode","getTypeOf","decode","uint8array","Uint8Array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","_pako","_pakoAction","_pakoOptions","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","onData","pako","file","O","utf8encode","I","S","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","isPaused","pause","resume","registerPrevious","end","generatedError","lock","generateWorker","platform","_compressWorker","files","root","loadAsync","support","defaults","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","allocBuffer","alloc","isBuffer","folder","remove","generate","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","ArrayBuffer","nodebuffer","blob","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","buffer","byteLength","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","FileReader","onload","onerror","readAsArrayBuffer","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","setImmediate","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","port1","onmessage","port2","postMessage","global","state","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","status","finally","catch","race","immediate","method","chunkSize","windowBits","memLevel","strategy","gzip","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","P","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","G","data_type","_tr_init","K","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","havedict","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","parseDiffractogram","parser","RawData","DataRoutes","DataRoute","ScanInformation","ScanAxes","ScanAxisInfo","element","__AxisId","__AxisName","unitBase","Unit","__Base","unitPrefix","__Prefix","reference","increment","adddata","startTime","TimeStampStarted","endTime","TimeStampFinished","measurmentPoints","MeasurementPoints","timePerStep","TimePerStep","timePerStepEffective","TimePerStepEffective","scanMode","ScanMode","scanModeVisibleName","ScanModeVisibleName","userName","Identifier","__UserName","machineName","__MachineName","guid","Guid","goniometerType","FixedInformation","Instrument","GoniometerType","anode","PrimaryTracks","TrackInfoData","MountedOptics","InfoData","Tube","TubeMaterial","anodeVoltage","Generator","Voltage","__Value","anodeVoltageUnit","__Unit","anodeSerialNumber","SerialNumber","diffractogram","axis1","axis2","measuredTimePerStep","plannedTimePerStep","counts","factors","getXYDiffractogram","Datum","trimReplace","addAnalysis","getAnalysisIndex","getAnalyses","ids","getSpectra","getDistinctTitles","getDistinctUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","removeAnalysis","JSZip","zipFiles","readBRML","jcamp","converted","entries","tmpResult","children","parentsStack","ldrs","ldr","dataLabel","dataValue","infos","datatable","parentEntry","dataClass","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","flatten","currentSpectrum","addJcamp","headerLines","scanType","parsePowDLLXY","CuKa","CuKa2","CuKa1","CuKb1","MoKa","MoKa2","MoKa1","MoKb1","CrKa","CrKa2","CrKa1","CrKb1","FeKa","FeKa2","FeKa1","FeKb1","CoKa","CoKa2","CoKa1","CoKb1","AgKa","AgKa2","AgKa1","AgKb1","jcamps","toJcamps"],"mappings":"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"}