{"version":3,"file":"signs.umd.cjs","sources":["../node_modules/ramda/es/T.js","../node_modules/ramda/es/internal/_isPlaceholder.js","../node_modules/ramda/es/internal/_curry1.js","../node_modules/ramda/es/internal/_curry2.js","../node_modules/ramda/es/internal/_arity.js","../node_modules/ramda/es/internal/_curryN.js","../node_modules/ramda/es/curryN.js","../node_modules/ramda/es/internal/_curry3.js","../node_modules/ramda/es/internal/_isArray.js","../node_modules/ramda/es/internal/_isTransformer.js","../node_modules/ramda/es/internal/_dispatchable.js","../node_modules/ramda/es/internal/_xfBase.js","../node_modules/ramda/es/internal/_arrayFromIterator.js","../node_modules/ramda/es/internal/_includesWith.js","../node_modules/ramda/es/internal/_functionName.js","../node_modules/ramda/es/internal/_has.js","../node_modules/ramda/es/internal/_objectIs.js","../node_modules/ramda/es/internal/_isArguments.js","../node_modules/ramda/es/keys.js","../node_modules/ramda/es/type.js","../node_modules/ramda/es/internal/_equals.js","../node_modules/ramda/es/equals.js","../node_modules/ramda/es/internal/_indexOf.js","../node_modules/ramda/es/internal/_includes.js","../node_modules/ramda/es/internal/_map.js","../node_modules/ramda/es/internal/_quote.js","../node_modules/ramda/es/internal/_toISOString.js","../node_modules/ramda/es/internal/_complement.js","../node_modules/ramda/es/internal/_arrayReduce.js","../node_modules/ramda/es/internal/_filter.js","../node_modules/ramda/es/internal/_isObject.js","../node_modules/ramda/es/internal/_xfilter.js","../node_modules/ramda/es/filter.js","../node_modules/ramda/es/reject.js","../node_modules/ramda/es/internal/_toString.js","../node_modules/ramda/es/toString.js","../node_modules/ramda/es/max.js","../node_modules/ramda/es/internal/_xmap.js","../node_modules/ramda/es/map.js","../node_modules/ramda/es/internal/_isInteger.js","../node_modules/ramda/es/internal/_isString.js","../node_modules/ramda/es/internal/_nth.js","../node_modules/ramda/es/prop.js","../node_modules/ramda/es/internal/_isArrayLike.js","../node_modules/ramda/es/internal/_createReduce.js","../node_modules/ramda/es/internal/_xArrayReduce.js","../node_modules/ramda/es/bind.js","../node_modules/ramda/es/internal/_xReduce.js","../node_modules/ramda/es/internal/_xwrap.js","../node_modules/ramda/es/reduce.js","../node_modules/ramda/es/always.js","../node_modules/ramda/es/curry.js","../node_modules/ramda/es/internal/_pipe.js","../node_modules/ramda/es/internal/_checkForMethod.js","../node_modules/ramda/es/slice.js","../node_modules/ramda/es/tail.js","../node_modules/ramda/es/pipe.js","../node_modules/ramda/es/reverse.js","../node_modules/ramda/es/compose.js","../node_modules/ramda/es/cond.js","../node_modules/ramda/es/ifElse.js","../node_modules/ramda/es/is.js","../node_modules/ramda/es/propEq.js","../node_modules/svgpath/lib/path_parse.js","../node_modules/svgpath/lib/matrix.js","../node_modules/svgpath/lib/transform_parse.js","../node_modules/svgpath/lib/a2c.js","../node_modules/svgpath/lib/ellipse.js","../node_modules/svgpath/lib/svgpath.js","../node_modules/svgpath/index.js","../node_modules/svg-path-bbox/dist/es2015/index.mjs","../src/text.js","../src/bbox.js","../src/layout.js","../src/standard/styles.js","../src/standard/frame.js","../src/standard/installation.js","../src/standard/echelon.js","../src/standard/engagement.js","../src/standard/mobility.js","../src/standard/modifiers.js","../src/standard/condition.js","../src/transform.js","../src/standard/direction.js","../src/standard/icons.js","../src/standard/fields.js","../src/standard/instructions.js","../src/standard/legacy.js","../src/standard/modern.js","../src/standard/fallback.js","../src/amplifiers.js","../src/data.js","../src/index.js"],"sourcesContent":["/**\n * A function that always returns `true`. Any passed in parameters are ignored.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Function\n * @sig * -> Boolean\n * @param {*}\n * @return {Boolean}\n * @see R.F\n * @example\n *\n *      R.T(); //=> true\n */\nvar T = function () {\n  return true;\n};\nexport default T;","export default function _isPlaceholder(a) {\n  return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n  return function f1(a) {\n    if (arguments.length === 0 || _isPlaceholder(a)) {\n      return f1;\n    } else {\n      return fn.apply(this, arguments);\n    }\n  };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n  return function f2(a, b) {\n    switch (arguments.length) {\n      case 0:\n        return f2;\n      case 1:\n        return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n          return fn(a, _b);\n        });\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n          return fn(_a, b);\n        }) : _isPlaceholder(b) ? _curry1(function (_b) {\n          return fn(a, _b);\n        }) : fn(a, b);\n    }\n  };\n}","export default function _arity(n, fn) {\n  /* eslint-disable no-unused-vars */\n  switch (n) {\n    case 0:\n      return function () {\n        return fn.apply(this, arguments);\n      };\n    case 1:\n      return function (a0) {\n        return fn.apply(this, arguments);\n      };\n    case 2:\n      return function (a0, a1) {\n        return fn.apply(this, arguments);\n      };\n    case 3:\n      return function (a0, a1, a2) {\n        return fn.apply(this, arguments);\n      };\n    case 4:\n      return function (a0, a1, a2, a3) {\n        return fn.apply(this, arguments);\n      };\n    case 5:\n      return function (a0, a1, a2, a3, a4) {\n        return fn.apply(this, arguments);\n      };\n    case 6:\n      return function (a0, a1, a2, a3, a4, a5) {\n        return fn.apply(this, arguments);\n      };\n    case 7:\n      return function (a0, a1, a2, a3, a4, a5, a6) {\n        return fn.apply(this, arguments);\n      };\n    case 8:\n      return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n        return fn.apply(this, arguments);\n      };\n    case 9:\n      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n        return fn.apply(this, arguments);\n      };\n    case 10:\n      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n        return fn.apply(this, arguments);\n      };\n    default:\n      throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n  }\n}","import _arity from \"./_arity.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curryN(length, received, fn) {\n  return function () {\n    var combined = [];\n    var argsIdx = 0;\n    var left = length;\n    var combinedIdx = 0;\n    var hasPlaceholder = false;\n    while (combinedIdx < received.length || argsIdx < arguments.length) {\n      var result;\n      if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n        result = received[combinedIdx];\n      } else {\n        result = arguments[argsIdx];\n        argsIdx += 1;\n      }\n      combined[combinedIdx] = result;\n      if (!_isPlaceholder(result)) {\n        left -= 1;\n      } else {\n        hasPlaceholder = true;\n      }\n      combinedIdx += 1;\n    }\n    return !hasPlaceholder && left <= 0 ? fn.apply(this, combined) : _arity(Math.max(0, left), _curryN(length, combined, fn));\n  };\n}","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _curryN from \"./internal/_curryN.js\";\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n *      const sumArgs = (...args) => R.sum(args);\n *\n *      const curriedAddFourNumbers = R.curryN(4, sumArgs);\n *      const f = curriedAddFourNumbers(1, 2);\n *      const g = f(3);\n *      g(4); //=> 10\n */\nvar curryN = /*#__PURE__*/_curry2(function curryN(length, fn) {\n  if (length === 1) {\n    return _curry1(fn);\n  }\n  return _arity(length, _curryN(length, [], fn));\n});\nexport default curryN;","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry3(fn) {\n  return function f3(a, b, c) {\n    switch (arguments.length) {\n      case 0:\n        return f3;\n      case 1:\n        return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n          return fn(a, _b, _c);\n        });\n      case 2:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n          return fn(_a, b, _c);\n        }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n          return fn(a, _b, _c);\n        }) : _curry1(function (_c) {\n          return fn(a, b, _c);\n        });\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n          return fn(_a, _b, c);\n        }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n          return fn(_a, b, _c);\n        }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n          return fn(a, _b, _c);\n        }) : _isPlaceholder(a) ? _curry1(function (_a) {\n          return fn(_a, b, c);\n        }) : _isPlaceholder(b) ? _curry1(function (_b) {\n          return fn(a, _b, c);\n        }) : _isPlaceholder(c) ? _curry1(function (_c) {\n          return fn(a, b, _c);\n        }) : fn(a, b, c);\n    }\n  };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n *      _isArray([]); //=> true\n *      _isArray(null); //=> false\n *      _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n  return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","export default function _isTransformer(obj) {\n  return obj != null && typeof obj['@@transducer/step'] === 'function';\n}","import _isArray from \"./_isArray.js\";\nimport _isTransformer from \"./_isTransformer.js\";\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer created by [transducerCreator] to return a new transformer\n * (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} transducerCreator transducer factory if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nexport default function _dispatchable(methodNames, transducerCreator, fn) {\n  return function () {\n    if (arguments.length === 0) {\n      return fn();\n    }\n    var obj = arguments[arguments.length - 1];\n    if (!_isArray(obj)) {\n      var idx = 0;\n      while (idx < methodNames.length) {\n        if (typeof obj[methodNames[idx]] === 'function') {\n          return obj[methodNames[idx]].apply(obj, Array.prototype.slice.call(arguments, 0, -1));\n        }\n        idx += 1;\n      }\n      if (_isTransformer(obj)) {\n        var transducer = transducerCreator.apply(null, Array.prototype.slice.call(arguments, 0, -1));\n        return transducer(obj);\n      }\n    }\n    return fn.apply(this, arguments);\n  };\n}","export default {\n  init: function () {\n    return this.xf['@@transducer/init']();\n  },\n  result: function (result) {\n    return this.xf['@@transducer/result'](result);\n  }\n};","export default function _arrayFromIterator(iter) {\n  var list = [];\n  var next;\n  while (!(next = iter.next()).done) {\n    list.push(next.value);\n  }\n  return list;\n}","export default function _includesWith(pred, x, list) {\n  var idx = 0;\n  var len = list.length;\n  while (idx < len) {\n    if (pred(x, list[idx])) {\n      return true;\n    }\n    idx += 1;\n  }\n  return false;\n}","export default function _functionName(f) {\n  // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n  var match = String(f).match(/^function (\\w*)/);\n  return match == null ? '' : match[1];\n}","export default function _has(prop, obj) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}","// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction _objectIs(a, b) {\n  // SameValue algorithm\n  if (a === b) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return a !== 0 || 1 / a === 1 / b;\n  } else {\n    // Step 6.a: NaN == NaN\n    return a !== a && b !== b;\n  }\n}\nexport default typeof Object.is === 'function' ? Object.is : _objectIs;","import _has from \"./_has.js\";\nvar toString = Object.prototype.toString;\nvar _isArguments = /*#__PURE__*/function () {\n  return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n    return toString.call(x) === '[object Arguments]';\n  } : function _isArguments(x) {\n    return _has('callee', x);\n  };\n}();\nexport default _isArguments;","import _curry1 from \"./internal/_curry1.js\";\nimport _has from \"./internal/_has.js\";\nimport _isArguments from \"./internal/_isArguments.js\";\n\n// cover IE < 9 keys issues\nvar hasEnumBug = ! /*#__PURE__*/{\n  toString: null\n}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n// Safari bug\nvar hasArgsEnumBug = /*#__PURE__*/function () {\n  'use strict';\n\n  return arguments.propertyIsEnumerable('length');\n}();\nvar contains = function contains(list, item) {\n  var idx = 0;\n  while (idx < list.length) {\n    if (list[idx] === item) {\n      return true;\n    }\n    idx += 1;\n  }\n  return false;\n};\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values, R.toPairs\n * @example\n *\n *      R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? /*#__PURE__*/_curry1(function keys(obj) {\n  return Object(obj) !== obj ? [] : Object.keys(obj);\n}) : /*#__PURE__*/_curry1(function keys(obj) {\n  if (Object(obj) !== obj) {\n    return [];\n  }\n  var prop, nIdx;\n  var ks = [];\n  var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n  for (prop in obj) {\n    if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n      ks[ks.length] = prop;\n    }\n  }\n  if (hasEnumBug) {\n    nIdx = nonEnumerableProps.length - 1;\n    while (nIdx >= 0) {\n      prop = nonEnumerableProps[nIdx];\n      if (_has(prop, obj) && !contains(ks, prop)) {\n        ks[ks.length] = prop;\n      }\n      nIdx -= 1;\n    }\n  }\n  return ks;\n});\nexport default keys;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig * -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n *      R.type({}); //=> \"Object\"\n *      R.type(1); //=> \"Number\"\n *      R.type(false); //=> \"Boolean\"\n *      R.type('s'); //=> \"String\"\n *      R.type(null); //=> \"Null\"\n *      R.type([]); //=> \"Array\"\n *      R.type(/[A-z]/); //=> \"RegExp\"\n *      R.type(() => {}); //=> \"Function\"\n *      R.type(async () => {}); //=> \"AsyncFunction\"\n *      R.type(undefined); //=> \"Undefined\"\n *      R.type(BigInt(123)); //=> \"BigInt\"\n */\nvar type = /*#__PURE__*/_curry1(function type(val) {\n  return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\nexport default type;","import _arrayFromIterator from \"./_arrayFromIterator.js\";\nimport _includesWith from \"./_includesWith.js\";\nimport _functionName from \"./_functionName.js\";\nimport _has from \"./_has.js\";\nimport _objectIs from \"./_objectIs.js\";\nimport keys from \"../keys.js\";\nimport type from \"../type.js\";\n\n/**\n * private _uniqContentEquals function.\n * That function is checking equality of 2 iterator contents with 2 assumptions\n * - iterators lengths are the same\n * - iterators values are unique\n *\n * false-positive result will be returned for comparison of, e.g.\n * - [1,2,3] and [1,2,3,4]\n * - [1,1,1] and [1,2,3]\n * */\n\nfunction _uniqContentEquals(aIterator, bIterator, stackA, stackB) {\n  var a = _arrayFromIterator(aIterator);\n  var b = _arrayFromIterator(bIterator);\n  function eq(_a, _b) {\n    return _equals(_a, _b, stackA.slice(), stackB.slice());\n  }\n\n  // if *a* array contains any element that is not included in *b*\n  return !_includesWith(function (b, aItem) {\n    return !_includesWith(eq, aItem, b);\n  }, b, a);\n}\nexport default function _equals(a, b, stackA, stackB) {\n  if (_objectIs(a, b)) {\n    return true;\n  }\n  var typeA = type(a);\n  if (typeA !== type(b)) {\n    return false;\n  }\n  if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n    return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n  }\n  if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n    return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a);\n  }\n  switch (typeA) {\n    case 'Arguments':\n    case 'Array':\n    case 'Object':\n      if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') {\n        return a === b;\n      }\n      break;\n    case 'Boolean':\n    case 'Number':\n    case 'String':\n      if (!(typeof a === typeof b && _objectIs(a.valueOf(), b.valueOf()))) {\n        return false;\n      }\n      break;\n    case 'Date':\n      if (!_objectIs(a.valueOf(), b.valueOf())) {\n        return false;\n      }\n      break;\n    case 'Error':\n      return a.name === b.name && a.message === b.message;\n    case 'RegExp':\n      if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) {\n        return false;\n      }\n      break;\n  }\n  var idx = stackA.length - 1;\n  while (idx >= 0) {\n    if (stackA[idx] === a) {\n      return stackB[idx] === b;\n    }\n    idx -= 1;\n  }\n  switch (typeA) {\n    case 'Map':\n      if (a.size !== b.size) {\n        return false;\n      }\n      return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b]));\n    case 'Set':\n      if (a.size !== b.size) {\n        return false;\n      }\n      return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b]));\n    case 'Arguments':\n    case 'Array':\n    case 'Object':\n    case 'Boolean':\n    case 'Number':\n    case 'String':\n    case 'Date':\n    case 'Error':\n    case 'RegExp':\n    case 'Int8Array':\n    case 'Uint8Array':\n    case 'Uint8ClampedArray':\n    case 'Int16Array':\n    case 'Uint16Array':\n    case 'Int32Array':\n    case 'Uint32Array':\n    case 'Float32Array':\n    case 'Float64Array':\n    case 'ArrayBuffer':\n      break;\n    default:\n      // Values of other types are only equal if identical.\n      return false;\n  }\n  var keysA = keys(a);\n  if (keysA.length !== keys(b).length) {\n    return false;\n  }\n  var extendedStackA = stackA.concat([a]);\n  var extendedStackB = stackB.concat([b]);\n  idx = keysA.length - 1;\n  while (idx >= 0) {\n    var key = keysA[idx];\n    if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) {\n      return false;\n    }\n    idx -= 1;\n  }\n  return true;\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _equals from \"./internal/_equals.js\";\n\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n *      R.equals(1, 1); //=> true\n *      R.equals(1, '1'); //=> false\n *      R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n *      const a = {}; a.v = a;\n *      const b = {}; b.v = b;\n *      R.equals(a, b); //=> true\n */\nvar equals = /*#__PURE__*/_curry2(function equals(a, b) {\n  return _equals(a, b, [], []);\n});\nexport default equals;","import equals from \"../equals.js\";\nexport default function _indexOf(list, a, idx) {\n  var inf, item;\n  // Array.prototype.indexOf doesn't exist below IE9\n  if (typeof list.indexOf === 'function') {\n    switch (typeof a) {\n      case 'number':\n        if (a === 0) {\n          // manually crawl the list to distinguish between +0 and -0\n          inf = 1 / a;\n          while (idx < list.length) {\n            item = list[idx];\n            if (item === 0 && 1 / item === inf) {\n              return idx;\n            }\n            idx += 1;\n          }\n          return -1;\n        } else if (a !== a) {\n          // NaN\n          while (idx < list.length) {\n            item = list[idx];\n            if (typeof item === 'number' && item !== item) {\n              return idx;\n            }\n            idx += 1;\n          }\n          return -1;\n        }\n        // non-zero numbers can utilise Set\n        return list.indexOf(a, idx);\n\n      // all these types can utilise Set\n      case 'string':\n      case 'boolean':\n      case 'function':\n      case 'undefined':\n        return list.indexOf(a, idx);\n      case 'object':\n        if (a === null) {\n          // null can utilise Set\n          return list.indexOf(a, idx);\n        }\n    }\n  }\n  // anything else not covered above, defer to R.equals\n  while (idx < list.length) {\n    if (equals(list[idx], a)) {\n      return idx;\n    }\n    idx += 1;\n  }\n  return -1;\n}","import _indexOf from \"./_indexOf.js\";\nexport default function _includes(a, list) {\n  return _indexOf(list, a, 0) >= 0;\n}","export default function _map(fn, functor) {\n  var idx = 0;\n  var len = functor.length;\n  var result = Array(len);\n  while (idx < len) {\n    result[idx] = fn(functor[idx]);\n    idx += 1;\n  }\n  return result;\n}","export default function _quote(s) {\n  var escaped = s.replace(/\\\\/g, '\\\\\\\\').replace(/[\\b]/g, '\\\\b') // \\b matches word boundary; [\\b] matches backspace\n  .replace(/\\f/g, '\\\\f').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t').replace(/\\v/g, '\\\\v').replace(/\\0/g, '\\\\0');\n  return '\"' + escaped.replace(/\"/g, '\\\\\"') + '\"';\n}","/**\n * Polyfill from <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString>.\n */\nvar pad = function pad(n) {\n  return (n < 10 ? '0' : '') + n;\n};\nvar _toISOString = typeof Date.prototype.toISOString === 'function' ? function _toISOString(d) {\n  return d.toISOString();\n} : function _toISOString(d) {\n  return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z';\n};\nexport default _toISOString;","export default function _complement(f) {\n  return function () {\n    return !f.apply(this, arguments);\n  };\n}","export default function _arrayReduce(reducer, acc, list) {\n  var index = 0;\n  var length = list.length;\n  while (index < length) {\n    acc = reducer(acc, list[index]);\n    index += 1;\n  }\n  return acc;\n}","export default function _filter(fn, list) {\n  var idx = 0;\n  var len = list.length;\n  var result = [];\n  while (idx < len) {\n    if (fn(list[idx])) {\n      result[result.length] = list[idx];\n    }\n    idx += 1;\n  }\n  return result;\n}","export default function _isObject(x) {\n  return Object.prototype.toString.call(x) === '[object Object]';\n}","import _xfBase from \"./_xfBase.js\";\nvar XFilter = /*#__PURE__*/function () {\n  function XFilter(f, xf) {\n    this.xf = xf;\n    this.f = f;\n  }\n  XFilter.prototype['@@transducer/init'] = _xfBase.init;\n  XFilter.prototype['@@transducer/result'] = _xfBase.result;\n  XFilter.prototype['@@transducer/step'] = function (result, input) {\n    return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n  };\n  return XFilter;\n}();\nexport default function _xfilter(f) {\n  return function (xf) {\n    return new XFilter(f, xf);\n  };\n}","import _arrayReduce from \"./internal/_arrayReduce.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _filter from \"./internal/_filter.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _xfilter from \"./internal/_xfilter.js\";\nimport keys from \"./keys.js\";\n\n/**\n * Takes a predicate and a `Filterable`, and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @category Object\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array} Filterable\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n *      const isEven = n => n % 2 === 0;\n *\n *      R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n *      R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nvar filter = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/filter', 'filter'], _xfilter, function (pred, filterable) {\n  return _isObject(filterable) ? _arrayReduce(function (acc, key) {\n    if (pred(filterable[key])) {\n      acc[key] = filterable[key];\n    }\n    return acc;\n  }, {}, keys(filterable)) :\n  // else\n  _filter(pred, filterable);\n}));\nexport default filter;","import _complement from \"./internal/_complement.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport filter from \"./filter.js\";\n\n/**\n * The complement of [`filter`](#filter).\n *\n * Acts as a transducer if a transformer is given in list position. Filterable\n * objects include plain objects or any object that has a filter method such\n * as `Array`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array}\n * @see R.filter, R.transduce, R.addIndex\n * @example\n *\n *      const isOdd = (n) => n % 2 !== 0;\n *\n *      R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]\n *\n *      R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nvar reject = /*#__PURE__*/_curry2(function reject(pred, filterable) {\n  return filter(_complement(pred), filterable);\n});\nexport default reject;","import _includes from \"./_includes.js\";\nimport _map from \"./_map.js\";\nimport _quote from \"./_quote.js\";\nimport _toISOString from \"./_toISOString.js\";\nimport keys from \"../keys.js\";\nimport reject from \"../reject.js\";\nexport default function _toString(x, seen) {\n  var recur = function recur(y) {\n    var xs = seen.concat([x]);\n    return _includes(y, xs) ? '<Circular>' : _toString(y, xs);\n  };\n\n  //  mapPairs :: (Object, [String]) -> [String]\n  var mapPairs = function (obj, keys) {\n    return _map(function (k) {\n      return _quote(k) + ': ' + recur(obj[k]);\n    }, keys.slice().sort());\n  };\n  switch (Object.prototype.toString.call(x)) {\n    case '[object Arguments]':\n      return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';\n    case '[object Array]':\n      return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) {\n        return /^\\d+$/.test(k);\n      }, keys(x)))).join(', ') + ']';\n    case '[object Boolean]':\n      return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();\n    case '[object Date]':\n      return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';\n    case '[object Map]':\n      return 'new Map(' + recur(Array.from(x)) + ')';\n    case '[object Null]':\n      return 'null';\n    case '[object Number]':\n      return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);\n    case '[object Set]':\n      return 'new Set(' + recur(Array.from(x).sort()) + ')';\n    case '[object String]':\n      return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);\n    case '[object Undefined]':\n      return 'undefined';\n    default:\n      if (typeof x.toString === 'function') {\n        var repr = x.toString();\n        if (repr !== '[object Object]') {\n          return repr;\n        }\n      }\n      return '{' + mapPairs(x, keys(x)).join(', ') + '}';\n  }\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _toString from \"./internal/_toString.js\";\n\n/**\n * Returns the string representation of the given value. `eval`'ing the output\n * should result in a value equivalent to the input value. Many of the built-in\n * `toString` methods do not satisfy this requirement.\n *\n * If the given value is an `[object Object]` with a `toString` method other\n * than `Object.prototype.toString`, this method is invoked with no arguments\n * to produce the return value. This means user-defined constructor functions\n * can provide a suitable `toString` method. For example:\n *\n *     function Point(x, y) {\n *       this.x = x;\n *       this.y = y;\n *     }\n *\n *     Point.prototype.toString = function() {\n *       return 'new Point(' + this.x + ', ' + this.y + ')';\n *     };\n *\n *     R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category String\n * @sig * -> String\n * @param {*} val\n * @return {String}\n * @example\n *\n *      R.toString(42); //=> '42'\n *      R.toString('abc'); //=> '\"abc\"'\n *      R.toString([1, 2, 3]); //=> '[1, 2, 3]'\n *      R.toString({foo: 1, bar: 2, baz: 3}); //=> '{\"bar\": 2, \"baz\": 3, \"foo\": 1}'\n *      R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date(\"2001-02-03T04:05:06.000Z\")'\n */\nvar toString = /*#__PURE__*/_curry1(function toString(val) {\n  return _toString(val, []);\n});\nexport default toString;","import _curry2 from \"./internal/_curry2.js\";\nimport toString from \"./toString.js\";\n\n/**\n * Returns the larger of its two arguments.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> a\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.maxBy, R.min\n * @example\n *\n *      R.max(789, 123); //=> 789\n *      R.max('a', 'b'); //=> 'b'\n */\nvar max = /*#__PURE__*/_curry2(function max(a, b) {\n  if (a === b) {\n    return b;\n  }\n  function safeMax(x, y) {\n    if (x > y !== y > x) {\n      return y > x ? y : x;\n    }\n    return undefined;\n  }\n  var maxByValue = safeMax(a, b);\n  if (maxByValue !== undefined) {\n    return maxByValue;\n  }\n  var maxByType = safeMax(typeof a, typeof b);\n  if (maxByType !== undefined) {\n    return maxByType === typeof a ? a : b;\n  }\n  var stringA = toString(a);\n  var maxByStringValue = safeMax(stringA, toString(b));\n  if (maxByStringValue !== undefined) {\n    return maxByStringValue === stringA ? a : b;\n  }\n  return b;\n});\nexport default max;","import _xfBase from \"./_xfBase.js\";\nvar XMap = /*#__PURE__*/function () {\n  function XMap(f, xf) {\n    this.xf = xf;\n    this.f = f;\n  }\n  XMap.prototype['@@transducer/init'] = _xfBase.init;\n  XMap.prototype['@@transducer/result'] = _xfBase.result;\n  XMap.prototype['@@transducer/step'] = function (result, input) {\n    return this.xf['@@transducer/step'](result, this.f(input));\n  };\n  return XMap;\n}();\nvar _xmap = function _xmap(f) {\n  return function (xf) {\n    return new XMap(f, xf);\n  };\n};\nexport default _xmap;","import _arrayReduce from \"./internal/_arrayReduce.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _map from \"./internal/_map.js\";\nimport _xmap from \"./internal/_xmap.js\";\nimport curryN from \"./curryN.js\";\nimport keys from \"./keys.js\";\n\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex, R.pluck, R.project\n * @example\n *\n *      const double = x => x * 2;\n *\n *      R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n *      R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\nvar map = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n  switch (Object.prototype.toString.call(functor)) {\n    case '[object Function]':\n      return curryN(functor.length, function () {\n        return fn.call(this, functor.apply(this, arguments));\n      });\n    case '[object Object]':\n      return _arrayReduce(function (acc, key) {\n        acc[key] = fn(functor[key]);\n        return acc;\n      }, {}, keys(functor));\n    default:\n      return _map(fn, functor);\n  }\n}));\nexport default map;","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n  return n << 0 === n;\n};","export default function _isString(x) {\n  return Object.prototype.toString.call(x) === '[object String]';\n}","import _isString from \"./_isString.js\";\nexport default function _nth(offset, list) {\n  var idx = offset < 0 ? list.length + offset : offset;\n  return _isString(list) ? list.charAt(idx) : list[idx];\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns a function that when supplied an object returns the indicated\n * property of that object, if it exists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig Idx -> {s: a} -> a | Undefined\n * @param {String|Number} p The property name or array index\n * @param {Object} obj The object to query\n * @return {*} The value at `obj.p`.\n * @see R.path, R.props, R.pluck, R.project, R.nth\n * @example\n *\n *      R.prop('x', {x: 100}); //=> 100\n *      R.prop('x', {}); //=> undefined\n *      R.prop(0, [100]); //=> 100\n *      R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4\n */\n\nvar prop = /*#__PURE__*/_curry2(function prop(p, obj) {\n  if (obj == null) {\n    return;\n  }\n  return _isInteger(p) ? _nth(p, obj) : obj[p];\n});\nexport default prop;","import _curry1 from \"./_curry1.js\";\nimport _isArray from \"./_isArray.js\";\nimport _isString from \"./_isString.js\";\n\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n *      _isArrayLike([]); //=> true\n *      _isArrayLike(true); //=> false\n *      _isArrayLike({}); //=> false\n *      _isArrayLike({length: 10}); //=> false\n *      _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n *      _isArrayLike({nodeType: 1, length: 1}) // => false\n */\nvar _isArrayLike = /*#__PURE__*/_curry1(function isArrayLike(x) {\n  if (_isArray(x)) {\n    return true;\n  }\n  if (!x) {\n    return false;\n  }\n  if (typeof x !== 'object') {\n    return false;\n  }\n  if (_isString(x)) {\n    return false;\n  }\n  if (x.length === 0) {\n    return true;\n  }\n  if (x.length > 0) {\n    return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n  }\n  return false;\n});\nexport default _isArrayLike;","import _isArrayLike from \"./_isArrayLike.js\";\nvar symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator';\nexport default function _createReduce(arrayReduce, methodReduce, iterableReduce) {\n  return function _reduce(xf, acc, list) {\n    if (_isArrayLike(list)) {\n      return arrayReduce(xf, acc, list);\n    }\n    if (list == null) {\n      return acc;\n    }\n    if (typeof list['fantasy-land/reduce'] === 'function') {\n      return methodReduce(xf, acc, list, 'fantasy-land/reduce');\n    }\n    if (list[symIterator] != null) {\n      return iterableReduce(xf, acc, list[symIterator]());\n    }\n    if (typeof list.next === 'function') {\n      return iterableReduce(xf, acc, list);\n    }\n    if (typeof list.reduce === 'function') {\n      return methodReduce(xf, acc, list, 'reduce');\n    }\n    throw new TypeError('reduce: list must be array or iterable');\n  };\n}","export default function _xArrayReduce(xf, acc, list) {\n  var idx = 0;\n  var len = list.length;\n  while (idx < len) {\n    acc = xf['@@transducer/step'](acc, list[idx]);\n    if (acc && acc['@@transducer/reduced']) {\n      acc = acc['@@transducer/value'];\n      break;\n    }\n    idx += 1;\n  }\n  return xf['@@transducer/result'](acc);\n}","import _arity from \"./internal/_arity.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n *      const log = R.bind(console.log, console);\n *      R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n *      // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\nvar bind = /*#__PURE__*/_curry2(function bind(fn, thisObj) {\n  return _arity(fn.length, function () {\n    return fn.apply(thisObj, arguments);\n  });\n});\nexport default bind;","import _createReduce from \"./_createReduce.js\";\nimport _xArrayReduce from \"./_xArrayReduce.js\";\nimport bind from \"../bind.js\";\nfunction _xIterableReduce(xf, acc, iter) {\n  var step = iter.next();\n  while (!step.done) {\n    acc = xf['@@transducer/step'](acc, step.value);\n    if (acc && acc['@@transducer/reduced']) {\n      acc = acc['@@transducer/value'];\n      break;\n    }\n    step = iter.next();\n  }\n  return xf['@@transducer/result'](acc);\n}\nfunction _xMethodReduce(xf, acc, obj, methodName) {\n  return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n}\nvar _xReduce = /*#__PURE__*/_createReduce(_xArrayReduce, _xMethodReduce, _xIterableReduce);\nexport default _xReduce;","var XWrap = /*#__PURE__*/function () {\n  function XWrap(fn) {\n    this.f = fn;\n  }\n  XWrap.prototype['@@transducer/init'] = function () {\n    throw new Error('init not implemented on XWrap');\n  };\n  XWrap.prototype['@@transducer/result'] = function (acc) {\n    return acc;\n  };\n  XWrap.prototype['@@transducer/step'] = function (acc, x) {\n    return this.f(acc, x);\n  };\n  return XWrap;\n}();\nexport default function _xwrap(fn) {\n  return new XWrap(fn);\n}","import _curry3 from \"./internal/_curry3.js\";\nimport _xReduce from \"./internal/_xReduce.js\";\nimport _xwrap from \"./internal/_xwrap.js\";\n\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It may use\n * [`R.reduced`](#reduced) to shortcut the iteration.\n *\n * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function\n * is *(value, acc)*.\n *\n * Note: `R.reduce` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduce` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description\n *\n * Be cautious of mutating and returning the accumulator. If you reuse it across\n * invocations, it will continue to accumulate onto the same value. The general\n * recommendation is to always return a new value. If you can't do so for\n * performance reasons, then be sure to reinitialize the accumulator on each\n * invocation.\n *\n * Dispatches to the `reduce` method of the third argument, if present. When\n * doing so, it is up to the user to handle the [`R.reduced`](#reduced)\n * shortcuting, as this is not implemented by `reduce`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n *        current element from the array.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduced, R.addIndex, R.reduceRight\n * @example\n *\n *      R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10\n *      //          -               -10\n *      //         / \\              / \\\n *      //        -   4           -6   4\n *      //       / \\              / \\\n *      //      -   3   ==>     -3   3\n *      //     / \\              / \\\n *      //    -   2           -1   2\n *      //   / \\              / \\\n *      //  0   1            0   1\n *\n * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)\n */\nvar reduce = /*#__PURE__*/_curry3(function (xf, acc, list) {\n  return _xReduce(typeof xf === 'function' ? _xwrap(xf) : xf, acc, list);\n});\nexport default reduce;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Returns a function that always returns the given value. Note that for\n * non-primitives the value returned is a reference to the original value.\n *\n * This function is known as `const`, `constant`, or `K` (for K combinator) in\n * other languages and libraries.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> (* -> a)\n * @param {*} val The value to wrap in a function\n * @return {Function} A Function :: * -> val.\n * @example\n *\n *      const t = R.always('Tee');\n *      t(); //=> 'Tee'\n */\nvar always = /*#__PURE__*/_curry1(function always(val) {\n  return function () {\n    return val;\n  };\n});\nexport default always;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\n\n/**\n * Returns a curried equivalent of the provided function. The curried function\n * has two unusual capabilities. First, its arguments needn't be provided one\n * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * Please note that default parameters don't count towards a [function arity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length)\n * and therefore `curry` won't work well with those.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (* -> a) -> (* -> a)\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curryN, R.partial\n * @example\n *\n *      const addFourNumbers = (a, b, c, d) => a + b + c + d;\n *      const curriedAddFourNumbers = R.curry(addFourNumbers);\n *      const f = curriedAddFourNumbers(1, 2);\n *      const g = f(3);\n *      g(4); //=> 10\n *\n *      // R.curry not working well with default parameters\n *      const h = R.curry((a, b, c = 2) => a + b + c);\n *      h(1)(2)(7); //=> Error! (`3` is not a function!)\n */\nvar curry = /*#__PURE__*/_curry1(function curry(fn) {\n  return curryN(fn.length, fn);\n});\nexport default curry;","export default function _pipe(f, g) {\n  return function () {\n    return g.call(this, f.apply(this, arguments));\n  };\n}","import _isArray from \"./_isArray.js\";\n\n/**\n * This checks whether a function has a [methodname] function. If it isn't an\n * array it will execute that function otherwise it will default to the ramda\n * implementation.\n *\n * @private\n * @param {Function} fn ramda implementation\n * @param {String} methodname property to check for a custom implementation\n * @return {Object} Whatever the return value of the method is.\n */\nexport default function _checkForMethod(methodname, fn) {\n  return function () {\n    var length = arguments.length;\n    if (length === 0) {\n      return fn();\n    }\n    var obj = arguments[length - 1];\n    return _isArray(obj) || typeof obj[methodname] !== 'function' ? fn.apply(this, arguments) : obj[methodname].apply(obj, Array.prototype.slice.call(arguments, 0, length - 1));\n  };\n}","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry3 from \"./internal/_curry3.js\";\n\n/**\n * Returns the elements of the given list or string (or object with a `slice`\n * method) from `fromIndex` (inclusive) to `toIndex` (exclusive).\n *\n * Dispatches to the `slice` method of the third argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig Number -> Number -> [a] -> [a]\n * @sig Number -> Number -> String -> String\n * @param {Number} fromIndex The start index (inclusive).\n * @param {Number} toIndex The end index (exclusive).\n * @param {*} list\n * @return {*}\n * @example\n *\n *      R.slice(1, 3, ['a', 'b', 'c', 'd']);        //=> ['b', 'c']\n *      R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd']\n *      R.slice(0, -1, ['a', 'b', 'c', 'd']);       //=> ['a', 'b', 'c']\n *      R.slice(-3, -1, ['a', 'b', 'c', 'd']);      //=> ['b', 'c']\n *      R.slice(0, 3, 'ramda');                     //=> 'ram'\n */\nvar slice = /*#__PURE__*/_curry3( /*#__PURE__*/_checkForMethod('slice', function slice(fromIndex, toIndex, list) {\n  return Array.prototype.slice.call(list, fromIndex, toIndex);\n}));\nexport default slice;","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport slice from \"./slice.js\";\n\n/**\n * Returns all but the first element of the given list or string (or object\n * with a `tail` method).\n *\n * Dispatches to the `slice` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.head, R.init, R.last\n * @example\n *\n *      R.tail([1, 2, 3]);  //=> [2, 3]\n *      R.tail([1, 2]);     //=> [2]\n *      R.tail([1]);        //=> []\n *      R.tail([]);         //=> []\n *\n *      R.tail('abc');  //=> 'bc'\n *      R.tail('ab');   //=> 'b'\n *      R.tail('a');    //=> ''\n *      R.tail('');     //=> ''\n */\nvar tail = /*#__PURE__*/_curry1( /*#__PURE__*/_checkForMethod('tail', /*#__PURE__*/slice(1, Infinity)));\nexport default tail;","import _arity from \"./internal/_arity.js\";\nimport _pipe from \"./internal/_pipe.js\";\nimport reduce from \"./reduce.js\";\nimport tail from \"./tail.js\";\n\n/**\n * Performs left-to-right function composition. The first argument may have\n * any arity; the remaining arguments must be unary.\n *\n * In some libraries this function is named `sequence`.\n *\n * **Note:** The result of pipe is not automatically curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)\n * @param {...Function} functions\n * @return {Function}\n * @see R.compose\n * @example\n *\n *      const f = R.pipe(Math.pow, R.negate, R.inc);\n *\n *      f(3, 4); // -(3^4) + 1\n * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b)))\n * @symb R.pipe(f, g, h)(a)(b) = h(g(f(a)))(b)\n */\nexport default function pipe() {\n  if (arguments.length === 0) {\n    throw new Error('pipe requires at least one argument');\n  }\n  return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments)));\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _isString from \"./internal/_isString.js\";\n\n/**\n * Returns a new list or string with the elements or characters in reverse\n * order.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {Array|String} list\n * @return {Array|String}\n * @example\n *\n *      R.reverse([1, 2, 3]);  //=> [3, 2, 1]\n *      R.reverse([1, 2]);     //=> [2, 1]\n *      R.reverse([1]);        //=> [1]\n *      R.reverse([]);         //=> []\n *\n *      R.reverse('abc');      //=> 'cba'\n *      R.reverse('ab');       //=> 'ba'\n *      R.reverse('a');        //=> 'a'\n *      R.reverse('');         //=> ''\n */\nvar reverse = /*#__PURE__*/_curry1(function reverse(list) {\n  return _isString(list) ? list.split('').reverse().join('') : Array.prototype.slice.call(list, 0).reverse();\n});\nexport default reverse;","import pipe from \"./pipe.js\";\nimport reverse from \"./reverse.js\";\n\n/**\n * Performs right-to-left function composition. The last argument may have\n * any arity; the remaining arguments must be unary.\n *\n * **Note:** The result of compose is not automatically curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig ((y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)) -> ((a, b, ..., n) -> z)\n * @param {...Function} ...functions The functions to compose\n * @return {Function}\n * @see R.pipe\n * @example\n *\n *      const classyGreeting = (firstName, lastName) => \"The name's \" + lastName + \", \" + firstName + \" \" + lastName\n *      const yellGreeting = R.compose(R.toUpper, classyGreeting);\n *      yellGreeting('James', 'Bond'); //=> \"THE NAME'S BOND, JAMES BOND\"\n *\n *      R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7\n *\n * @symb R.compose(f, g, h)(a, b) = f(g(h(a, b)))\n * @symb R.compose(f, g, h)(a)(b) = f(g(h(a)))(b)\n */\nexport default function compose() {\n  if (arguments.length === 0) {\n    throw new Error('compose requires at least one argument');\n  }\n  return pipe.apply(this, reverse(arguments));\n}","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport map from \"./map.js\";\nimport max from \"./max.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Returns a function, `fn`, which encapsulates `if/else, if/else, ...` logic.\n * `R.cond` takes a list of [predicate, transformer] pairs. All of the arguments\n * to `fn` are applied to each of the predicates in turn until one returns a\n * \"truthy\" value, at which point `fn` returns the result of applying its\n * arguments to the corresponding transformer. If none of the predicates\n * matches, `fn` returns undefined.\n *\n * **Please note**: This is not a direct substitute for a `switch` statement.\n * Remember that both elements of every pair passed to `cond` are *functions*,\n * and `cond` returns a function.\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Logic\n * @sig [[(*... -> Boolean),(*... -> *)]] -> (*... -> *)\n * @param {Array} pairs A list of [predicate, transformer]\n * @return {Function}\n * @see R.ifElse, R.unless, R.when\n * @example\n *\n *      const fn = R.cond([\n *        [R.equals(0),   R.always('water freezes at 0°C')],\n *        [R.equals(100), R.always('water boils at 100°C')],\n *        [R.T,           temp => 'nothing special happens at ' + temp + '°C']\n *      ]);\n *      fn(0); //=> 'water freezes at 0°C'\n *      fn(50); //=> 'nothing special happens at 50°C'\n *      fn(100); //=> 'water boils at 100°C'\n */\nvar cond = /*#__PURE__*/_curry1(function cond(pairs) {\n  var arity = reduce(max, 0, map(function (pair) {\n    return pair[0].length;\n  }, pairs));\n  return _arity(arity, function () {\n    var idx = 0;\n    while (idx < pairs.length) {\n      if (pairs[idx][0].apply(this, arguments)) {\n        return pairs[idx][1].apply(this, arguments);\n      }\n      idx += 1;\n    }\n  });\n});\nexport default cond;","import _curry3 from \"./internal/_curry3.js\";\nimport curryN from \"./curryN.js\";\n\n/**\n * Creates a function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n *\n * Note that `ifElse` takes its arity from the longest of the three functions passed to it.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Logic\n * @sig (*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *)\n * @param {Function} condition A predicate function\n * @param {Function} onTrue A function to invoke when the `condition` evaluates to a truthy value.\n * @param {Function} onFalse A function to invoke when the `condition` evaluates to a falsy value.\n * @return {Function} A new function that will process either the `onTrue` or the `onFalse`\n *                    function depending upon the result of the `condition` predicate.\n * @see R.unless, R.when, R.cond\n * @example\n *\n *      const incCount = R.ifElse(\n *        R.has('count'),\n *        R.over(R.lensProp('count'), R.inc),\n *        R.assoc('count', 1)\n *      );\n *      incCount({ count: 1 }); //=> { count: 2 }\n *      incCount({});           //=> { count: 1 }\n */\nvar ifElse = /*#__PURE__*/_curry3(function ifElse(condition, onTrue, onFalse) {\n  return curryN(Math.max(condition.length, onTrue.length, onFalse.length), function _ifElse() {\n    return condition.apply(this, arguments) ? onTrue.apply(this, arguments) : onFalse.apply(this, arguments);\n  });\n});\nexport default ifElse;","import _curry2 from \"./internal/_curry2.js\";\n\n/**\n * See if an object (i.e. `val`) is an instance of the supplied constructor. This\n * function will check up the inheritance chain, if any.\n * If `val` was created using `Object.create`, `R.is(Object, val) === true`.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Type\n * @sig (* -> {*}) -> a -> Boolean\n * @param {Object} ctor A constructor\n * @param {*} val The value to test\n * @return {Boolean}\n * @example\n *\n *      R.is(Object, {}); //=> true\n *      R.is(Number, 1); //=> true\n *      R.is(Object, 1); //=> false\n *      R.is(String, 's'); //=> true\n *      R.is(String, new String('')); //=> true\n *      R.is(Object, new String('')); //=> true\n *      R.is(Object, 's'); //=> false\n *      R.is(Number, {}); //=> false\n */\nvar is = /*#__PURE__*/_curry2(function is(Ctor, val) {\n  return val instanceof Ctor || val != null && (val.constructor === Ctor || Ctor.name === 'Object' && typeof val === 'object');\n});\nexport default is;","import _curry3 from \"./internal/_curry3.js\";\nimport prop from \"./prop.js\";\nimport equals from \"./equals.js\";\n\n/**\n * Returns `true` if the specified object property is equal, in\n * [`R.equals`](#equals) terms, to the given value; `false` otherwise.\n * You can test multiple properties with [`R.whereEq`](#whereEq),\n * and test nested path property with [`R.pathEq`](#pathEq).\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig a -> String -> Object -> Boolean\n * @param {*} val The value to compare the property with\n * @param {String} name the specified object property's key\n * @param {*} obj The object to check the property in\n * @return {Boolean} `true` if the value equals the specified object property,\n *         `false` otherwise.\n * @see R.whereEq, R.pathEq, R.propSatisfies, R.equals\n * @example\n *\n *      const abby = {name: 'Abby', age: 7, hair: 'blond'};\n *      const fred = {name: 'Fred', age: 12, hair: 'brown'};\n *      const rusty = {name: 'Rusty', age: 10, hair: 'brown'};\n *      const alois = {name: 'Alois', age: 15, disposition: 'surly'};\n *      const kids = [abby, fred, rusty, alois];\n *      const hasBrownHair = R.propEq('brown', 'hair');\n *      R.filter(hasBrownHair, kids); //=> [fred, rusty]\n */\nvar propEq = /*#__PURE__*/_curry3(function propEq(val, name, obj) {\n  return equals(val, prop(name, obj));\n});\nexport default propEq;","'use strict';\n\n\nvar paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0 };\n\nvar SPECIAL_SPACES = [\n  0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,\n  0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF\n];\n\nfunction isSpace(ch) {\n  return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029) || // Line terminators\n    // White spaces\n    (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n    (ch >= 0x1680 && SPECIAL_SPACES.indexOf(ch) >= 0);\n}\n\nfunction isCommand(code) {\n  /*eslint-disable no-bitwise*/\n  switch (code | 0x20) {\n    case 0x6D/* m */:\n    case 0x7A/* z */:\n    case 0x6C/* l */:\n    case 0x68/* h */:\n    case 0x76/* v */:\n    case 0x63/* c */:\n    case 0x73/* s */:\n    case 0x71/* q */:\n    case 0x74/* t */:\n    case 0x61/* a */:\n    case 0x72/* r */:\n      return true;\n  }\n  return false;\n}\n\nfunction isArc(code) {\n  return (code | 0x20) === 0x61;\n}\n\nfunction isDigit(code) {\n  return (code >= 48 && code <= 57);   // 0..9\n}\n\nfunction isDigitStart(code) {\n  return (code >= 48 && code <= 57) || /* 0..9 */\n          code === 0x2B || /* + */\n          code === 0x2D || /* - */\n          code === 0x2E;   /* . */\n}\n\n\nfunction State(path) {\n  this.index  = 0;\n  this.path   = path;\n  this.max    = path.length;\n  this.result = [];\n  this.param  = 0.0;\n  this.err    = '';\n  this.segmentStart = 0;\n  this.data   = [];\n}\n\nfunction skipSpaces(state) {\n  while (state.index < state.max && isSpace(state.path.charCodeAt(state.index))) {\n    state.index++;\n  }\n}\n\n\nfunction scanFlag(state) {\n  var ch = state.path.charCodeAt(state.index);\n\n  if (ch === 0x30/* 0 */) {\n    state.param = 0;\n    state.index++;\n    return;\n  }\n\n  if (ch === 0x31/* 1 */) {\n    state.param = 1;\n    state.index++;\n    return;\n  }\n\n  state.err = 'SvgPath: arc flag can be 0 or 1 only (at pos ' + state.index + ')';\n}\n\n\nfunction scanParam(state) {\n  var start = state.index,\n      index = start,\n      max = state.max,\n      zeroFirst = false,\n      hasCeiling = false,\n      hasDecimal = false,\n      hasDot = false,\n      ch;\n\n  if (index >= max) {\n    state.err = 'SvgPath: missed param (at pos ' + index + ')';\n    return;\n  }\n  ch = state.path.charCodeAt(index);\n\n  if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n    index++;\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n  }\n\n  // This logic is shamelessly borrowed from Esprima\n  // https://github.com/ariya/esprimas\n  //\n  if (!isDigit(ch) && ch !== 0x2E/* . */) {\n    state.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n    return;\n  }\n\n  if (ch !== 0x2E/* . */) {\n    zeroFirst = (ch === 0x30/* 0 */);\n    index++;\n\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n\n    if (zeroFirst && index < max) {\n      // decimal number starts with '0' such as '09' is illegal.\n      if (ch && isDigit(ch)) {\n        state.err = 'SvgPath: numbers started with `0` such as `09` are illegal (at pos ' + start + ')';\n        return;\n      }\n    }\n\n    while (index < max && isDigit(state.path.charCodeAt(index))) {\n      index++;\n      hasCeiling = true;\n    }\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n  }\n\n  if (ch === 0x2E/* . */) {\n    hasDot = true;\n    index++;\n    while (isDigit(state.path.charCodeAt(index))) {\n      index++;\n      hasDecimal = true;\n    }\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n  }\n\n  if (ch === 0x65/* e */ || ch === 0x45/* E */) {\n    if (hasDot && !hasCeiling && !hasDecimal) {\n      state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n      return;\n    }\n\n    index++;\n\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n    if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n      index++;\n    }\n    if (index < max && isDigit(state.path.charCodeAt(index))) {\n      while (index < max && isDigit(state.path.charCodeAt(index))) {\n        index++;\n      }\n    } else {\n      state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n      return;\n    }\n  }\n\n  state.index = index;\n  state.param = parseFloat(state.path.slice(start, index)) + 0.0;\n}\n\n\nfunction finalizeSegment(state) {\n  var cmd, cmdLC;\n\n  // Process duplicated commands (without comand name)\n\n  // This logic is shamelessly borrowed from Raphael\n  // https://github.com/DmitryBaranovskiy/raphael/\n  //\n  cmd   = state.path[state.segmentStart];\n  cmdLC = cmd.toLowerCase();\n\n  var params = state.data;\n\n  if (cmdLC === 'm' && params.length > 2) {\n    state.result.push([ cmd, params[0], params[1] ]);\n    params = params.slice(2);\n    cmdLC = 'l';\n    cmd = (cmd === 'm') ? 'l' : 'L';\n  }\n\n  if (cmdLC === 'r') {\n    state.result.push([ cmd ].concat(params));\n  } else {\n\n    while (params.length >= paramCounts[cmdLC]) {\n      state.result.push([ cmd ].concat(params.splice(0, paramCounts[cmdLC])));\n      if (!paramCounts[cmdLC]) {\n        break;\n      }\n    }\n  }\n}\n\n\nfunction scanSegment(state) {\n  var max = state.max,\n      cmdCode, is_arc, comma_found, need_params, i;\n\n  state.segmentStart = state.index;\n  cmdCode = state.path.charCodeAt(state.index);\n  is_arc = isArc(cmdCode);\n\n  if (!isCommand(cmdCode)) {\n    state.err = 'SvgPath: bad command ' + state.path[state.index] + ' (at pos ' + state.index + ')';\n    return;\n  }\n\n  need_params = paramCounts[state.path[state.index].toLowerCase()];\n\n  state.index++;\n  skipSpaces(state);\n\n  state.data = [];\n\n  if (!need_params) {\n    // Z\n    finalizeSegment(state);\n    return;\n  }\n\n  comma_found = false;\n\n  for (;;) {\n    for (i = need_params; i > 0; i--) {\n      if (is_arc && (i === 3 || i === 4)) scanFlag(state);\n      else scanParam(state);\n\n      if (state.err.length) {\n        finalizeSegment(state);\n        return;\n      }\n      state.data.push(state.param);\n\n      skipSpaces(state);\n      comma_found = false;\n\n      if (state.index < max && state.path.charCodeAt(state.index) === 0x2C/* , */) {\n        state.index++;\n        skipSpaces(state);\n        comma_found = true;\n      }\n    }\n\n    // after ',' param is mandatory\n    if (comma_found) {\n      continue;\n    }\n\n    if (state.index >= state.max) {\n      break;\n    }\n\n    // Stop on next segment\n    if (!isDigitStart(state.path.charCodeAt(state.index))) {\n      break;\n    }\n  }\n\n  finalizeSegment(state);\n}\n\n\n/* Returns array of segments:\n *\n * [\n *   [ command, coord1, coord2, ... ]\n * ]\n */\nmodule.exports = function pathParse(svgPath) {\n  var state = new State(svgPath);\n  var max = state.max;\n\n  skipSpaces(state);\n\n  while (state.index < max && !state.err.length) {\n    scanSegment(state);\n  }\n\n  if (state.result.length) {\n    if ('mM'.indexOf(state.result[0][0]) < 0) {\n      state.err = 'SvgPath: string should start with `M` or `m`';\n      state.result = [];\n    } else {\n      state.result[0][0] = 'M';\n    }\n  }\n\n  return {\n    err: state.err,\n    segments: state.result\n  };\n};\n","'use strict';\n\n// combine 2 matrixes\n// m1, m2 - [a, b, c, d, e, g]\n//\nfunction combine(m1, m2) {\n  return [\n    m1[0] * m2[0] + m1[2] * m2[1],\n    m1[1] * m2[0] + m1[3] * m2[1],\n    m1[0] * m2[2] + m1[2] * m2[3],\n    m1[1] * m2[2] + m1[3] * m2[3],\n    m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n    m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n  ];\n}\n\n\nfunction Matrix() {\n  if (!(this instanceof Matrix)) { return new Matrix(); }\n  this.queue = [];   // list of matrixes to apply\n  this.cache = null; // combined matrix cache\n}\n\n\nMatrix.prototype.matrix = function (m) {\n  if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0) {\n    return this;\n  }\n  this.cache = null;\n  this.queue.push(m);\n  return this;\n};\n\n\nMatrix.prototype.translate = function (tx, ty) {\n  if (tx !== 0 || ty !== 0) {\n    this.cache = null;\n    this.queue.push([ 1, 0, 0, 1, tx, ty ]);\n  }\n  return this;\n};\n\n\nMatrix.prototype.scale = function (sx, sy) {\n  if (sx !== 1 || sy !== 1) {\n    this.cache = null;\n    this.queue.push([ sx, 0, 0, sy, 0, 0 ]);\n  }\n  return this;\n};\n\n\nMatrix.prototype.rotate = function (angle, rx, ry) {\n  var rad, cos, sin;\n\n  if (angle !== 0) {\n    this.translate(rx, ry);\n\n    rad = angle * Math.PI / 180;\n    cos = Math.cos(rad);\n    sin = Math.sin(rad);\n\n    this.queue.push([ cos, sin, -sin, cos, 0, 0 ]);\n    this.cache = null;\n\n    this.translate(-rx, -ry);\n  }\n  return this;\n};\n\n\nMatrix.prototype.skewX = function (angle) {\n  if (angle !== 0) {\n    this.cache = null;\n    this.queue.push([ 1, 0, Math.tan(angle * Math.PI / 180), 1, 0, 0 ]);\n  }\n  return this;\n};\n\n\nMatrix.prototype.skewY = function (angle) {\n  if (angle !== 0) {\n    this.cache = null;\n    this.queue.push([ 1, Math.tan(angle * Math.PI / 180), 0, 1, 0, 0 ]);\n  }\n  return this;\n};\n\n\n// Flatten queue\n//\nMatrix.prototype.toArray = function () {\n  if (this.cache) {\n    return this.cache;\n  }\n\n  if (!this.queue.length) {\n    this.cache = [ 1, 0, 0, 1, 0, 0 ];\n    return this.cache;\n  }\n\n  this.cache = this.queue[0];\n\n  if (this.queue.length === 1) {\n    return this.cache;\n  }\n\n  for (var i = 1; i < this.queue.length; i++) {\n    this.cache = combine(this.cache, this.queue[i]);\n  }\n\n  return this.cache;\n};\n\n\n// Apply list of matrixes to (x,y) point.\n// If `isRelative` set, `translate` component of matrix will be skipped\n//\nMatrix.prototype.calc = function (x, y, isRelative) {\n  var m;\n\n  // Don't change point on empty transforms queue\n  if (!this.queue.length) { return [ x, y ]; }\n\n  // Calculate final matrix, if not exists\n  //\n  // NB. if you deside to apply transforms to point one-by-one,\n  // they should be taken in reverse order\n\n  if (!this.cache) {\n    this.cache = this.toArray();\n  }\n\n  m = this.cache;\n\n  // Apply matrix to point\n  return [\n    x * m[0] + y * m[2] + (isRelative ? 0 : m[4]),\n    x * m[1] + y * m[3] + (isRelative ? 0 : m[5])\n  ];\n};\n\n\nmodule.exports = Matrix;\n","'use strict';\n\n\nvar Matrix = require('./matrix');\n\nvar operations = {\n  matrix: true,\n  scale: true,\n  rotate: true,\n  translate: true,\n  skewX: true,\n  skewY: true\n};\n\nvar CMD_SPLIT_RE    = /\\s*(matrix|translate|scale|rotate|skewX|skewY)\\s*\\(\\s*(.+?)\\s*\\)[\\s,]*/;\nvar PARAMS_SPLIT_RE = /[\\s,]+/;\n\n\nmodule.exports = function transformParse(transformString) {\n  var matrix = new Matrix();\n  var cmd, params;\n\n  // Split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate',  '-45', '']\n  transformString.split(CMD_SPLIT_RE).forEach(function (item) {\n\n    // Skip empty elements\n    if (!item.length) { return; }\n\n    // remember operation\n    if (typeof operations[item] !== 'undefined') {\n      cmd = item;\n      return;\n    }\n\n    // extract params & att operation to matrix\n    params = item.split(PARAMS_SPLIT_RE).map(function (i) {\n      return +i || 0;\n    });\n\n    // If params count is not correct - ignore command\n    switch (cmd) {\n      case 'matrix':\n        if (params.length === 6) {\n          matrix.matrix(params);\n        }\n        return;\n\n      case 'scale':\n        if (params.length === 1) {\n          matrix.scale(params[0], params[0]);\n        } else if (params.length === 2) {\n          matrix.scale(params[0], params[1]);\n        }\n        return;\n\n      case 'rotate':\n        if (params.length === 1) {\n          matrix.rotate(params[0], 0, 0);\n        } else if (params.length === 3) {\n          matrix.rotate(params[0], params[1], params[2]);\n        }\n        return;\n\n      case 'translate':\n        if (params.length === 1) {\n          matrix.translate(params[0], 0);\n        } else if (params.length === 2) {\n          matrix.translate(params[0], params[1]);\n        }\n        return;\n\n      case 'skewX':\n        if (params.length === 1) {\n          matrix.skewX(params[0]);\n        }\n        return;\n\n      case 'skewY':\n        if (params.length === 1) {\n          matrix.skewY(params[0]);\n        }\n        return;\n    }\n  });\n\n  return matrix;\n};\n","// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n  var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n  var dot  = ux * vx + uy * vy;\n\n  // Add this to work with arbitrary vectors:\n  // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n  // rounding errors, e.g. -1.0000000000000002 can screw up this\n  if (dot >  1.0) { dot =  1.0; }\n  if (dot < -1.0) { dot = -1.0; }\n\n  return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n  // Step 1.\n  //\n  // Moving an ellipse so origin will be the middlepoint between our two\n  // points. After that, rotate it to line up ellipse axes with coordinate\n  // axes.\n  //\n  var x1p =  cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n  var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n  var rx_sq  =  rx * rx;\n  var ry_sq  =  ry * ry;\n  var x1p_sq = x1p * x1p;\n  var y1p_sq = y1p * y1p;\n\n  // Step 2.\n  //\n  // Compute coordinates of the centre of this ellipse (cx', cy')\n  // in the new coordinate system.\n  //\n  var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n  if (radicant < 0) {\n    // due to rounding errors it might be e.g. -1.3877787807814457e-17\n    radicant = 0;\n  }\n\n  radicant /=   (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n  radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n  var cxp = radicant *  rx/ry * y1p;\n  var cyp = radicant * -ry/rx * x1p;\n\n  // Step 3.\n  //\n  // Transform back to get centre coordinates (cx, cy) in the original\n  // coordinate system.\n  //\n  var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n  var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n  // Step 4.\n  //\n  // Compute angles (theta1, delta_theta).\n  //\n  var v1x =  (x1p - cxp) / rx;\n  var v1y =  (y1p - cyp) / ry;\n  var v2x = (-x1p - cxp) / rx;\n  var v2y = (-y1p - cyp) / ry;\n\n  var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n  var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n  if (fs === 0 && delta_theta > 0) {\n    delta_theta -= TAU;\n  }\n  if (fs === 1 && delta_theta < 0) {\n    delta_theta += TAU;\n  }\n\n  return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n  var alpha = 4/3 * Math.tan(delta_theta/4);\n\n  var x1 = Math.cos(theta1);\n  var y1 = Math.sin(theta1);\n  var x2 = Math.cos(theta1 + delta_theta);\n  var y2 = Math.sin(theta1 + delta_theta);\n\n  return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nmodule.exports = function a2c(x1, y1, x2, y2, fa, fs, rx, ry, phi) {\n  var sin_phi = Math.sin(phi * TAU / 360);\n  var cos_phi = Math.cos(phi * TAU / 360);\n\n  // Make sure radii are valid\n  //\n  var x1p =  cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n  var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n  if (x1p === 0 && y1p === 0) {\n    // we're asked to draw line to itself\n    return [];\n  }\n\n  if (rx === 0 || ry === 0) {\n    // one of the radii is zero\n    return [];\n  }\n\n\n  // Compensate out-of-range radii\n  //\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n\n  var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n  if (lambda > 1) {\n    rx *= Math.sqrt(lambda);\n    ry *= Math.sqrt(lambda);\n  }\n\n\n  // Get center parameters (cx, cy, theta1, delta_theta)\n  //\n  var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n  var result = [];\n  var theta1 = cc[2];\n  var delta_theta = cc[3];\n\n  // Split an arc to multiple segments, so each segment\n  // will be less than τ/4 (= 90°)\n  //\n  var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n  delta_theta /= segments;\n\n  for (var i = 0; i < segments; i++) {\n    result.push(approximate_unit_arc(theta1, delta_theta));\n    theta1 += delta_theta;\n  }\n\n  // We have a bezier approximation of a unit circle,\n  // now need to transform back to the original ellipse\n  //\n  return result.map(function (curve) {\n    for (var i = 0; i < curve.length; i += 2) {\n      var x = curve[i + 0];\n      var y = curve[i + 1];\n\n      // scale\n      x *= rx;\n      y *= ry;\n\n      // rotate\n      var xp = cos_phi*x - sin_phi*y;\n      var yp = sin_phi*x + cos_phi*y;\n\n      // translate\n      curve[i + 0] = xp + cc[0];\n      curve[i + 1] = yp + cc[1];\n    }\n\n    return curve;\n  });\n};\n","'use strict';\n\n/* eslint-disable space-infix-ops */\n\n// The precision used to consider an ellipse as a circle\n//\nvar epsilon = 0.0000000001;\n\n// To convert degree in radians\n//\nvar torad = Math.PI / 180;\n\n// Class constructor :\n//  an ellipse centred at 0 with radii rx,ry and x - axis - angle ax.\n//\nfunction Ellipse(rx, ry, ax) {\n  if (!(this instanceof Ellipse)) { return new Ellipse(rx, ry, ax); }\n  this.rx = rx;\n  this.ry = ry;\n  this.ax = ax;\n}\n\n// Apply a linear transform m to the ellipse\n// m is an array representing a matrix :\n//    -         -\n//   | m[0] m[2] |\n//   | m[1] m[3] |\n//    -         -\n//\nEllipse.prototype.transform = function (m) {\n  // We consider the current ellipse as image of the unit circle\n  // by first scale(rx,ry) and then rotate(ax) ...\n  // So we apply ma =  m x rotate(ax) x scale(rx,ry) to the unit circle.\n  var c = Math.cos(this.ax * torad), s = Math.sin(this.ax * torad);\n  var ma = [\n    this.rx * (m[0]*c + m[2]*s),\n    this.rx * (m[1]*c + m[3]*s),\n    this.ry * (-m[0]*s + m[2]*c),\n    this.ry * (-m[1]*s + m[3]*c)\n  ];\n\n  // ma * transpose(ma) = [ J L ]\n  //                      [ L K ]\n  // L is calculated later (if the image is not a circle)\n  var J = ma[0]*ma[0] + ma[2]*ma[2],\n      K = ma[1]*ma[1] + ma[3]*ma[3];\n\n  // the discriminant of the characteristic polynomial of ma * transpose(ma)\n  var D = ((ma[0]-ma[3])*(ma[0]-ma[3]) + (ma[2]+ma[1])*(ma[2]+ma[1])) *\n          ((ma[0]+ma[3])*(ma[0]+ma[3]) + (ma[2]-ma[1])*(ma[2]-ma[1]));\n\n  // the \"mean eigenvalue\"\n  var JK = (J + K) / 2;\n\n  // check if the image is (almost) a circle\n  if (D < epsilon * JK) {\n    // if it is\n    this.rx = this.ry = Math.sqrt(JK);\n    this.ax = 0;\n    return this;\n  }\n\n  // if it is not a circle\n  var L = ma[0]*ma[1] + ma[2]*ma[3];\n\n  D = Math.sqrt(D);\n\n  // {l1,l2} = the two eigen values of ma * transpose(ma)\n  var l1 = JK + D/2,\n      l2 = JK - D/2;\n  // the x - axis - rotation angle is the argument of the l1 - eigenvector\n  /*eslint-disable indent*/\n  this.ax = (Math.abs(L) < epsilon && Math.abs(l1 - K) < epsilon) ?\n    90\n  :\n    Math.atan(Math.abs(L) > Math.abs(l1 - K) ?\n      (l1 - J) / L\n    :\n      L / (l1 - K)\n    ) * 180 / Math.PI;\n  /*eslint-enable indent*/\n\n  // if ax > 0 => rx = sqrt(l1), ry = sqrt(l2), else exchange axes and ax += 90\n  if (this.ax >= 0) {\n    // if ax in [0,90]\n    this.rx = Math.sqrt(l1);\n    this.ry = Math.sqrt(l2);\n  } else {\n    // if ax in ]-90,0[ => exchange axes\n    this.ax += 90;\n    this.rx = Math.sqrt(l2);\n    this.ry = Math.sqrt(l1);\n  }\n\n  return this;\n};\n\n// Check if the ellipse is (almost) degenerate, i.e. rx = 0 or ry = 0\n//\nEllipse.prototype.isDegenerate = function () {\n  return (this.rx < epsilon * this.ry || this.ry < epsilon * this.rx);\n};\n\nmodule.exports = Ellipse;\n","// SVG Path transformations library\n//\n// Usage:\n//\n//    SvgPath('...')\n//      .translate(-150, -100)\n//      .scale(0.5)\n//      .translate(-150, -100)\n//      .toFixed(1)\n//      .toString()\n//\n\n'use strict';\n\n\nvar pathParse      = require('./path_parse');\nvar transformParse = require('./transform_parse');\nvar matrix         = require('./matrix');\nvar a2c            = require('./a2c');\nvar ellipse        = require('./ellipse');\n\n\n// Class constructor\n//\nfunction SvgPath(path) {\n  if (!(this instanceof SvgPath)) { return new SvgPath(path); }\n\n  var pstate = pathParse(path);\n\n  // Array of path segments.\n  // Each segment is array [command, param1, param2, ...]\n  this.segments = pstate.segments;\n\n  // Error message on parse error.\n  this.err      = pstate.err;\n\n  // Transforms stack for lazy evaluation\n  this.__stack    = [];\n}\n\nSvgPath.from = function (src) {\n  if (typeof src === 'string') return new SvgPath(src);\n\n  if (src instanceof SvgPath) {\n    // Create empty object\n    var s = new SvgPath('');\n\n    // Clone properies\n    s.err = src.err;\n    s.segments = src.segments.map(function (sgm) { return sgm.slice(); });\n    s.__stack = src.__stack.map(function (m) {\n      return matrix().matrix(m.toArray());\n    });\n\n    return s;\n  }\n\n  throw new Error('SvgPath.from: invalid param type ' + src);\n};\n\n\nSvgPath.prototype.__matrix = function (m) {\n  var self = this, i;\n\n  // Quick leave for empty matrix\n  if (!m.queue.length) { return; }\n\n  this.iterate(function (s, index, x, y) {\n    var p, result, name, isRelative;\n\n    switch (s[0]) {\n\n      // Process 'assymetric' commands separately\n      case 'v':\n        p      = m.calc(0, s[1], true);\n        result = (p[0] === 0) ? [ 'v', p[1] ] : [ 'l', p[0], p[1] ];\n        break;\n\n      case 'V':\n        p      = m.calc(x, s[1], false);\n        result = (p[0] === m.calc(x, y, false)[0]) ? [ 'V', p[1] ] : [ 'L', p[0], p[1] ];\n        break;\n\n      case 'h':\n        p      = m.calc(s[1], 0, true);\n        result = (p[1] === 0) ? [ 'h', p[0] ] : [ 'l', p[0], p[1] ];\n        break;\n\n      case 'H':\n        p      = m.calc(s[1], y, false);\n        result = (p[1] === m.calc(x, y, false)[1]) ? [ 'H', p[0] ] : [ 'L', p[0], p[1] ];\n        break;\n\n      case 'a':\n      case 'A':\n        // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n\n        // Drop segment if arc is empty (end point === start point)\n        /*if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n            (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n          return [];\n        }*/\n\n        // Transform rx, ry and the x-axis-rotation\n        var ma = m.toArray();\n        var e = ellipse(s[1], s[2], s[3]).transform(ma);\n\n        // flip sweep-flag if matrix is not orientation-preserving\n        if (ma[0] * ma[3] - ma[1] * ma[2] < 0) {\n          s[5] = s[5] ? '0' : '1';\n        }\n\n        // Transform end point as usual (without translation for relative notation)\n        p = m.calc(s[6], s[7], s[0] === 'a');\n\n        // Empty arcs can be ignored by renderer, but should not be dropped\n        // to avoid collisions with `S A S` and so on. Replace with empty line.\n        if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n            (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n          result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n          break;\n        }\n\n        // if the resulting ellipse is (almost) a segment ...\n        if (e.isDegenerate()) {\n          // replace the arc by a line\n          result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n        } else {\n          // if it is a real ellipse\n          // s[0], s[4] and s[5] are not modified\n          result = [ s[0], e.rx, e.ry, e.ax, s[4], s[5], p[0], p[1] ];\n        }\n\n        break;\n\n      case 'm':\n        // Edge case. The very first `m` should be processed as absolute, if happens.\n        // Make sense for coord shift transforms.\n        isRelative = index > 0;\n\n        p = m.calc(s[1], s[2], isRelative);\n        result = [ 'm', p[0], p[1] ];\n        break;\n\n      default:\n        name       = s[0];\n        result     = [ name ];\n        isRelative = (name.toLowerCase() === name);\n\n        // Apply transformations to the segment\n        for (i = 1; i < s.length; i += 2) {\n          p = m.calc(s[i], s[i + 1], isRelative);\n          result.push(p[0], p[1]);\n        }\n    }\n\n    self.segments[index] = result;\n  }, true);\n};\n\n\n// Apply stacked commands\n//\nSvgPath.prototype.__evaluateStack = function () {\n  var m, i;\n\n  if (!this.__stack.length) { return; }\n\n  if (this.__stack.length === 1) {\n    this.__matrix(this.__stack[0]);\n    this.__stack = [];\n    return;\n  }\n\n  m = matrix();\n  i = this.__stack.length;\n\n  while (--i >= 0) {\n    m.matrix(this.__stack[i].toArray());\n  }\n\n  this.__matrix(m);\n  this.__stack = [];\n};\n\n\n// Convert processed SVG Path back to string\n//\nSvgPath.prototype.toString = function () {\n  var result = '', prevCmd = '', cmdSkipped = false;\n\n  this.__evaluateStack();\n\n  for (var i = 0, len = this.segments.length; i < len; i++) {\n    var segment = this.segments[i];\n    var cmd = segment[0];\n\n    // Command not repeating => store\n    if (cmd !== prevCmd || cmd === 'm' || cmd === 'M') {\n      // workaround for FontForge SVG importing bug, keep space between \"z m\".\n      if (cmd === 'm' && prevCmd === 'z') result += ' ';\n      result += cmd;\n\n      cmdSkipped = false;\n    } else {\n      cmdSkipped = true;\n    }\n\n    // Store segment params\n    for (var pos = 1; pos < segment.length; pos++) {\n      var val = segment[pos];\n      // Space can be skipped\n      // 1. After command (always)\n      // 2. For negative value (with '-' at start)\n      if (pos === 1) {\n        if (cmdSkipped && val >= 0) result += ' ';\n      } else if (val >= 0) result += ' ';\n\n      result += val;\n    }\n\n    prevCmd = cmd;\n  }\n\n  return result;\n};\n\n\n// Translate path to (x [, y])\n//\nSvgPath.prototype.translate = function (x, y) {\n  this.__stack.push(matrix().translate(x, y || 0));\n  return this;\n};\n\n\n// Scale path to (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.scale = function (sx, sy) {\n  this.__stack.push(matrix().scale(sx, (!sy && (sy !== 0)) ? sx : sy));\n  return this;\n};\n\n\n// Rotate path around point (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.rotate = function (angle, rx, ry) {\n  this.__stack.push(matrix().rotate(angle, rx || 0, ry || 0));\n  return this;\n};\n\n\n// Skew path along the X axis by `degrees` angle\n//\nSvgPath.prototype.skewX = function (degrees) {\n  this.__stack.push(matrix().skewX(degrees));\n  return this;\n};\n\n\n// Skew path along the Y axis by `degrees` angle\n//\nSvgPath.prototype.skewY = function (degrees) {\n  this.__stack.push(matrix().skewY(degrees));\n  return this;\n};\n\n\n// Apply matrix transform (array of 6 elements)\n//\nSvgPath.prototype.matrix = function (m) {\n  this.__stack.push(matrix().matrix(m));\n  return this;\n};\n\n\n// Transform path according to \"transform\" attr of SVG spec\n//\nSvgPath.prototype.transform = function (transformString) {\n  if (!transformString.trim()) {\n    return this;\n  }\n  this.__stack.push(transformParse(transformString));\n  return this;\n};\n\n\n// Round coords with given decimal precition.\n// 0 by default (to integers)\n//\nSvgPath.prototype.round = function (d) {\n  var contourStartDeltaX = 0, contourStartDeltaY = 0, deltaX = 0, deltaY = 0, l;\n\n  d = d || 0;\n\n  this.__evaluateStack();\n\n  this.segments.forEach(function (s) {\n    var isRelative = (s[0].toLowerCase() === s[0]);\n\n    switch (s[0]) {\n      case 'H':\n      case 'h':\n        if (isRelative) { s[1] += deltaX; }\n        deltaX = s[1] - s[1].toFixed(d);\n        s[1] = +s[1].toFixed(d);\n        return;\n\n      case 'V':\n      case 'v':\n        if (isRelative) { s[1] += deltaY; }\n        deltaY = s[1] - s[1].toFixed(d);\n        s[1] = +s[1].toFixed(d);\n        return;\n\n      case 'Z':\n      case 'z':\n        deltaX = contourStartDeltaX;\n        deltaY = contourStartDeltaY;\n        return;\n\n      case 'M':\n      case 'm':\n        if (isRelative) {\n          s[1] += deltaX;\n          s[2] += deltaY;\n        }\n\n        deltaX = s[1] - s[1].toFixed(d);\n        deltaY = s[2] - s[2].toFixed(d);\n\n        contourStartDeltaX = deltaX;\n        contourStartDeltaY = deltaY;\n\n        s[1] = +s[1].toFixed(d);\n        s[2] = +s[2].toFixed(d);\n        return;\n\n      case 'A':\n      case 'a':\n        // [cmd, rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n        if (isRelative) {\n          s[6] += deltaX;\n          s[7] += deltaY;\n        }\n\n        deltaX = s[6] - s[6].toFixed(d);\n        deltaY = s[7] - s[7].toFixed(d);\n\n        s[1] = +s[1].toFixed(d);\n        s[2] = +s[2].toFixed(d);\n        s[3] = +s[3].toFixed(d + 2); // better precision for rotation\n        s[6] = +s[6].toFixed(d);\n        s[7] = +s[7].toFixed(d);\n        return;\n\n      default:\n        // a c l q s t\n        l = s.length;\n\n        if (isRelative) {\n          s[l - 2] += deltaX;\n          s[l - 1] += deltaY;\n        }\n\n        deltaX = s[l - 2] - s[l - 2].toFixed(d);\n        deltaY = s[l - 1] - s[l - 1].toFixed(d);\n\n        s.forEach(function (val, i) {\n          if (!i) { return; }\n          s[i] = +s[i].toFixed(d);\n        });\n        return;\n    }\n  });\n\n  return this;\n};\n\n\n// Apply iterator function to all segments. If function returns result,\n// current segment will be replaced to array of returned segments.\n// If empty array is returned, current regment will be deleted.\n//\nSvgPath.prototype.iterate = function (iterator, keepLazyStack) {\n  var segments = this.segments,\n      replacements = {},\n      needReplace = false,\n      lastX = 0,\n      lastY = 0,\n      countourStartX = 0,\n      countourStartY = 0;\n  var i, j, newSegments;\n\n  if (!keepLazyStack) {\n    this.__evaluateStack();\n  }\n\n  segments.forEach(function (s, index) {\n\n    var res = iterator(s, index, lastX, lastY);\n\n    if (Array.isArray(res)) {\n      replacements[index] = res;\n      needReplace = true;\n    }\n\n    var isRelative = (s[0] === s[0].toLowerCase());\n\n    // calculate absolute X and Y\n    switch (s[0]) {\n      case 'm':\n      case 'M':\n        lastX = s[1] + (isRelative ? lastX : 0);\n        lastY = s[2] + (isRelative ? lastY : 0);\n        countourStartX = lastX;\n        countourStartY = lastY;\n        return;\n\n      case 'h':\n      case 'H':\n        lastX = s[1] + (isRelative ? lastX : 0);\n        return;\n\n      case 'v':\n      case 'V':\n        lastY = s[1] + (isRelative ? lastY : 0);\n        return;\n\n      case 'z':\n      case 'Z':\n        // That make sence for multiple contours\n        lastX = countourStartX;\n        lastY = countourStartY;\n        return;\n\n      default:\n        lastX = s[s.length - 2] + (isRelative ? lastX : 0);\n        lastY = s[s.length - 1] + (isRelative ? lastY : 0);\n    }\n  });\n\n  // Replace segments if iterator return results\n\n  if (!needReplace) { return this; }\n\n  newSegments = [];\n\n  for (i = 0; i < segments.length; i++) {\n    if (typeof replacements[i] !== 'undefined') {\n      for (j = 0; j < replacements[i].length; j++) {\n        newSegments.push(replacements[i][j]);\n      }\n    } else {\n      newSegments.push(segments[i]);\n    }\n  }\n\n  this.segments = newSegments;\n\n  return this;\n};\n\n\n// Converts segments from relative to absolute\n//\nSvgPath.prototype.abs = function () {\n\n  this.iterate(function (s, index, x, y) {\n    var name = s[0],\n        nameUC = name.toUpperCase(),\n        i;\n\n    // Skip absolute commands\n    if (name === nameUC) { return; }\n\n    s[0] = nameUC;\n\n    switch (name) {\n      case 'v':\n        // v has shifted coords parity\n        s[1] += y;\n        return;\n\n      case 'a':\n        // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n        // touch x, y only\n        s[6] += x;\n        s[7] += y;\n        return;\n\n      default:\n        for (i = 1; i < s.length; i++) {\n          s[i] += i % 2 ? x : y; // odd values are X, even - Y\n        }\n    }\n  }, true);\n\n  return this;\n};\n\n\n// Converts segments from absolute to relative\n//\nSvgPath.prototype.rel = function () {\n\n  this.iterate(function (s, index, x, y) {\n    var name = s[0],\n        nameLC = name.toLowerCase(),\n        i;\n\n    // Skip relative commands\n    if (name === nameLC) { return; }\n\n    // Don't touch the first M to avoid potential confusions.\n    if (index === 0 && name === 'M') { return; }\n\n    s[0] = nameLC;\n\n    switch (name) {\n      case 'V':\n        // V has shifted coords parity\n        s[1] -= y;\n        return;\n\n      case 'A':\n        // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n        // touch x, y only\n        s[6] -= x;\n        s[7] -= y;\n        return;\n\n      default:\n        for (i = 1; i < s.length; i++) {\n          s[i] -= i % 2 ? x : y; // odd values are X, even - Y\n        }\n    }\n  }, true);\n\n  return this;\n};\n\n\n// Converts arcs to cubic bézier curves\n//\nSvgPath.prototype.unarc = function () {\n  this.iterate(function (s, index, x, y) {\n    var new_segments, nextX, nextY, result = [], name = s[0];\n\n    // Skip anything except arcs\n    if (name !== 'A' && name !== 'a') { return null; }\n\n    if (name === 'a') {\n      // convert relative arc coordinates to absolute\n      nextX = x + s[6];\n      nextY = y + s[7];\n    } else {\n      nextX = s[6];\n      nextY = s[7];\n    }\n\n    new_segments = a2c(x, y, nextX, nextY, s[4], s[5], s[1], s[2], s[3]);\n\n    // Degenerated arcs can be ignored by renderer, but should not be dropped\n    // to avoid collisions with `S A S` and so on. Replace with empty line.\n    if (new_segments.length === 0) {\n      return [ [ s[0] === 'a' ? 'l' : 'L', s[6], s[7] ] ];\n    }\n\n    new_segments.forEach(function (s) {\n      result.push([ 'C', s[2], s[3], s[4], s[5], s[6], s[7] ]);\n    });\n\n    return result;\n  });\n\n  return this;\n};\n\n\n// Converts smooth curves (with missed control point) to generic curves\n//\nSvgPath.prototype.unshort = function () {\n  var segments = this.segments;\n  var prevControlX, prevControlY, prevSegment;\n  var curControlX, curControlY;\n\n  // TODO: add lazy evaluation flag when relative commands supported\n\n  this.iterate(function (s, idx, x, y) {\n    var name = s[0], nameUC = name.toUpperCase(), isRelative;\n\n    // First command MUST be M|m, it's safe to skip.\n    // Protect from access to [-1] for sure.\n    if (!idx) { return; }\n\n    if (nameUC === 'T') { // quadratic curve\n      isRelative = (name === 't');\n\n      prevSegment = segments[idx - 1];\n\n      if (prevSegment[0] === 'Q') {\n        prevControlX = prevSegment[1] - x;\n        prevControlY = prevSegment[2] - y;\n      } else if (prevSegment[0] === 'q') {\n        prevControlX = prevSegment[1] - prevSegment[3];\n        prevControlY = prevSegment[2] - prevSegment[4];\n      } else {\n        prevControlX = 0;\n        prevControlY = 0;\n      }\n\n      curControlX = -prevControlX;\n      curControlY = -prevControlY;\n\n      if (!isRelative) {\n        curControlX += x;\n        curControlY += y;\n      }\n\n      segments[idx] = [\n        isRelative ? 'q' : 'Q',\n        curControlX, curControlY,\n        s[1], s[2]\n      ];\n\n    } else if (nameUC === 'S') { // cubic curve\n      isRelative = (name === 's');\n\n      prevSegment = segments[idx - 1];\n\n      if (prevSegment[0] === 'C') {\n        prevControlX = prevSegment[3] - x;\n        prevControlY = prevSegment[4] - y;\n      } else if (prevSegment[0] === 'c') {\n        prevControlX = prevSegment[3] - prevSegment[5];\n        prevControlY = prevSegment[4] - prevSegment[6];\n      } else {\n        prevControlX = 0;\n        prevControlY = 0;\n      }\n\n      curControlX = -prevControlX;\n      curControlY = -prevControlY;\n\n      if (!isRelative) {\n        curControlX += x;\n        curControlY += y;\n      }\n\n      segments[idx] = [\n        isRelative ? 'c' : 'C',\n        curControlX, curControlY,\n        s[1], s[2], s[3], s[4]\n      ];\n    }\n  });\n\n  return this;\n};\n\n\nmodule.exports = SvgPath;\n","'use strict';\n\nmodule.exports = require('./lib/svgpath');\n","\"use strict\";\n// WARNING: This file is autogenerated, edit lib/index.template.ts\nimport svgPath from \"svgpath\";\n// Precision for consider cubic polynom as quadratic one\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\nfunction minmaxQ(A) {\n    const min = Math.min(A[0], A[2]), max = Math.max(A[0], A[2]);\n    if (A[1] >= A[0] ? A[2] >= A[1] : A[2] <= A[1]) {\n        // if no extremum in ]0,1[\n        return [min, max];\n    }\n    // check if the extremum E is min or max\n    const E = (A[0] * A[2] - A[1] * A[1]) / (A[0] - 2 * A[1] + A[2]);\n    return E < min ? [E, max] : [min, E];\n}\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\nfunction minmaxC(A) {\n    const K = A[0] - 3 * A[1] + 3 * A[2] - A[3];\n    // if the polynomial is (almost) quadratic and not cubic\n    if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\n        if (A[0] === A[3] && A[0] === A[1]) {\n            // no curve, point targeting same location\n            return [A[0], A[3]];\n        }\n        return minmaxQ([\n            A[0],\n            -0.5 * A[0] + 1.5 * A[1],\n            A[0] - 3 * A[1] + 3 * A[2],\n        ]);\n    }\n    // the reduced discriminant of the derivative\n    const T = -A[0] * A[2] +\n        A[0] * A[3] -\n        A[1] * A[2] -\n        A[1] * A[3] +\n        A[1] * A[1] +\n        A[2] * A[2];\n    // if the polynomial is monotone in [0,1]\n    if (T <= 0) {\n        return [Math.min(A[0], A[3]), Math.max(A[0], A[3])];\n    }\n    const S = Math.sqrt(T);\n    // potential extrema\n    let min = Math.min(A[0], A[3]), max = Math.max(A[0], A[3]);\n    const L = A[0] - 2 * A[1] + A[2];\n    // check local extrema\n    for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\n        if (R > 0 && R < 1) {\n            // if the extrema is for R in [0,1]\n            const Q = A[0] * (1 - R) * (1 - R) * (1 - R) +\n                A[1] * 3 * (1 - R) * (1 - R) * R +\n                A[2] * 3 * (1 - R) * R * R +\n                A[3] * R * R * R;\n            if (Q < min) {\n                min = Q;\n            }\n            if (Q > max) {\n                max = Q;\n            }\n        }\n    }\n    return [min, max];\n}\n/**\n * Compute bounding boxes of SVG paths.\n * @param {String} d SVG path for which their bounding box will be computed.\n * @returns {BBox}\n */\nexport function svgPathBbox(d) {\n    const min = [Infinity, Infinity], max = [-Infinity, -Infinity];\n    svgPath(d)\n        .abs()\n        .unarc()\n        .unshort()\n        .iterate((seg, _, x, y) => {\n        switch (seg[0]) {\n            // The next cases are ordered based on simple-icons data\n            case \"M\": {\n                if (min[0] > seg[1]) {\n                    min[0] = seg[1];\n                }\n                if (min[1] > seg[2]) {\n                    min[1] = seg[2];\n                }\n                if (max[0] < seg[1]) {\n                    max[0] = seg[1];\n                }\n                if (max[1] < seg[2]) {\n                    max[1] = seg[2];\n                }\n                break;\n            }\n            case \"H\": {\n                if (min[0] > seg[1]) {\n                    min[0] = seg[1];\n                }\n                if (max[0] < seg[1]) {\n                    max[0] = seg[1];\n                }\n                break;\n            }\n            case \"V\": {\n                if (min[1] > seg[1]) {\n                    min[1] = seg[1];\n                }\n                if (max[1] < seg[1]) {\n                    max[1] = seg[1];\n                }\n                break;\n            }\n            case \"L\": {\n                if (min[0] > seg[1]) {\n                    min[0] = seg[1];\n                }\n                if (min[1] > seg[2]) {\n                    min[1] = seg[2];\n                }\n                if (max[0] < seg[1]) {\n                    max[0] = seg[1];\n                }\n                if (max[1] < seg[2]) {\n                    max[1] = seg[2];\n                }\n                break;\n            }\n            case \"C\": {\n                const cxMinMax = minmaxC([x, seg[1], seg[3], seg[5]]);\n                if (min[0] > cxMinMax[0]) {\n                    min[0] = cxMinMax[0];\n                }\n                if (max[0] < cxMinMax[1]) {\n                    max[0] = cxMinMax[1];\n                }\n                const cyMinMax = minmaxC([y, seg[2], seg[4], seg[6]]);\n                if (min[1] > cyMinMax[0]) {\n                    min[1] = cyMinMax[0];\n                }\n                if (max[1] < cyMinMax[1]) {\n                    max[1] = cyMinMax[1];\n                }\n                break;\n            }\n            case \"Q\": {\n                const qxMinMax = minmaxQ([x, seg[1], seg[3]]);\n                if (min[0] > qxMinMax[0]) {\n                    min[0] = qxMinMax[0];\n                }\n                if (max[0] < qxMinMax[1]) {\n                    max[0] = qxMinMax[1];\n                }\n                const qyMinMax = minmaxQ([y, seg[2], seg[4]]);\n                if (min[1] > qyMinMax[0]) {\n                    min[1] = qyMinMax[0];\n                }\n                if (max[1] < qyMinMax[1]) {\n                    max[1] = qyMinMax[1];\n                }\n                break;\n            }\n        }\n    }, true);\n    return [min[0], min[1], max[0], max[1]];\n}\n","import chars from './chars.json' assert { type: \"json\" }\n\nconst defaultWidth = chars['W']\n\nexport const width = s => [...s].reduce((acc, c) => acc + chars[c] || defaultWidth, 0)\n\nexport const extent = function (lines, fontSize = 40) {\n  const factor = fontSize / 30\n  const widths = lines.map(line => width(line) * factor)\n  return [Math.max(...widths), lines.length * fontSize]\n}\n","import * as R from 'ramda'\nimport { svgPathBbox as pathbbox } from 'svg-path-bbox'\nimport * as Text from './text.js'\n\nexport const resize = R.curry(([dx, dy], bbox) => [\n  bbox[0] - dx,\n  bbox[1] - dy,\n  bbox[2] + dx,\n  bbox[3] + dy\n])\n\nexport const translate = R.curry(([dx, dy], bbox) => [\n  bbox[0] + dx,\n  bbox[1] + dy,\n  bbox[2] + dx,\n  bbox[3] + dy\n])\n\nexport const extent = bbox => [\n  bbox[2] - bbox[0],\n  bbox[3] - bbox[1]\n]\n\nexport const merge = (a, b) => [\n  Math.min(a[0], b[0]),\n  Math.min(a[1], b[1]),\n  Math.max(a[2], b[2]),\n  Math.max(a[3], b[3])\n]\n\nconst normalize = bbox => [\n  Math.min(bbox[0], bbox[2]),\n  Math.min(bbox[1], bbox[3]),\n  Math.max(bbox[0], bbox[2]),\n  Math.max(bbox[1], bbox[3])\n]\n\nexport const NULL = [\n  Number.POSITIVE_INFINITY,\n  Number.POSITIVE_INFINITY,\n  Number.NEGATIVE_INFINITY,\n  Number.NEGATIVE_INFINITY\n]\n\nexport const xywh = bbox => ({\n  x: bbox[0],\n  y: bbox[1],\n  width: bbox[2] - bbox[0],\n  height: bbox[3] - bbox[1]\n})\n\nconst transform = (coeff, box) => normalize([\n  box[0] * coeff[0] + box[1] * coeff[2] + coeff[4],\n  box[0] * coeff[1] + box[1] * coeff[3] + coeff[5],\n  box[2] * coeff[0] + box[3] * coeff[2] + coeff[4],\n  box[2] * coeff[1] + box[3] * coeff[3] + coeff[5]\n])\n\n\nconst path = ({ d }) => pathbbox(d)\nconst circle = ({ cx, cy, r }) => [cx - r, cy - r, cx + r, cy + r]\nconst group = group => {\n  const box = group.children.map(of).reduce(merge)\n  if (!group.transform) return box\n  const match = group.transform.match(/matrix\\((.*)\\)/)\n  if (!match) return box\n  const coeff = match[1].split(' ').map(Number)\n  return transform(coeff, box)\n}\n\nconst text = ({ x, y, text, ...rest}) => {\n  const fontSize = rest['font-size'] || 40\n  const textAnchor = rest['text-anchor'] || 'start'\n  const factor = fontSize / 30\n  const width = Text.width(text) * factor\n  return textAnchor === 'start'\n    ? [x, y - fontSize, x + width, y]\n    : textAnchor === 'end'\n      ? [x - width, y - fontSize, x, y]\n      : [x - width / 2, y - fontSize, x + width / 2, y] // middle\n}\n\nexport const of = R.cond([\n  [R.is(Array), xs => xs.map(of).reduce(merge)],\n  [R.propEq('path', 'type'), path],\n  [R.propEq('circle', 'type'), circle],\n  [R.propEq('text', 'type'), text],\n  [R.propEq('g', 'type'), group]\n])\n","import * as R from 'ramda'\nimport * as BBox from './bbox.js'\n\nexport const overlay = (...parts) => box => {\n  const overlays = parts.filter(Boolean).map(part => part(box)).filter(Boolean)\n  const bbox = overlays.map(R.prop(0)).reduce(BBox.merge, box)\n  const instructions = overlays.map(R.prop(1)).flat()\n  return [bbox, instructions]\n}\n\nexport const compose = (...fns) => box =>\n  fns.filter(Boolean).reduce(([box, acc], fn) => R.ifElse(\n    Boolean,\n    ([bbox, instruction]) => [BBox.merge(box, bbox), acc.concat(instruction)],\n    () => [box, acc]\n  )(fn(box)),\n  [box, []]\n)\n","import * as R from 'ramda'\n\nconst MODE = { dark: 0, medium: 1, light: 2 }\n\nconst OFF_WHITE = 'rgb(239,239,239)'\n\nconst COLORS = {\n  ENGAGEMENT: {\n    TARGET: 'rgb(255, 0, 0)',\n    'NON-TARGET': 'rgb(255, 255, 255)',\n    EXPIRED: 'rgb(255, 120, 0)'\n  },\n  frameColor: {\n    civilian: 'rgb(255,0,255)',\n    friend: 'rgb(0, 255, 255)',\n    hostile: 'rgb(255, 0, 0)',\n    neutral: 'rgb(0, 255, 0)',\n    unknown: 'rgb(255, 255, 0)'\n  },\n  condition: {\n    FULLY_CAPABLE: 'rgb(0,255,0)',\n    DAMAGED: 'rgb(255,255,0)',\n    DESTROYED: 'rgb(255,0,0)',\n    FULL_TO_CAPACITY: 'rgb(0, 180, 240)'\n  }\n}\n\nconst FRAME_FILL = {\n  civilian: ['rgb(80,0,80)', 'rgb(128,0,128)', 'rgb(255,161,255)'],\n  unknown: ['rgb(225,220,0)', 'rgb(255,255,0)', 'rgb(255,255,128)'],\n  friend: ['rgb(0,107,140)', 'rgb(0,168,220)', 'rgb(128,224,255)'],\n  neutral: ['rgb(0,160,0)', 'rgb(0,226,110)', 'rgb(170,255,170)'],\n  hostile: ['rgb(200,0,0)', 'rgb(255,48,49)', 'rgb(255,128,128)']\n}\n\nexport const styles = function (meta, hints) {\n  const colorMode = (hints.colorMode || 'light').toLowerCase()\n  const scheme = MODE[colorMode] || 0\n  const isCivilian = () => meta.civilian && meta.affiliation !== 'HOSTILE'\n  const isJoker = () => meta.joker || meta.faker\n\n  const key = R.cond([\n    [isCivilian, R.always('civilian')],\n    [isJoker, R.always('hostile')],\n    [R.T, R.always(meta.affiliation.toLowerCase())]\n  ])()\n\n  const styles = {}\n\n  // prepare all colors:\n  styles['color:default/stroke'] = hints.monoColor || hints.strokeColor\n  styles['color:default/fill'] = 'none'\n  styles['color:debug/stroke'] = 'red'\n  styles[`color:frame/fill/unknown`] = FRAME_FILL['unknown'][scheme]\n  styles[`color:frame/fill/civilian`] = FRAME_FILL['civilian'][scheme]\n  styles[`color:frame/fill/friend`] = FRAME_FILL['friend'][scheme]\n  styles[`color:frame/fill/neutral`] = FRAME_FILL['neutral'][scheme]\n  styles[`color:frame/fill/hostile`] = FRAME_FILL['hostile'][scheme]\n  styles['color:frame-overlay/stroke'] = OFF_WHITE\n  styles['color:frame-decoration/stroke'] = 'none'\n  styles['color:frame-decoration/fill'] = styles['color:default/stroke']\n  styles['color:echelon/stroke'] = styles['color:default/stroke']\n  styles['color:echelon/fill'] = styles['color:default/stroke']\n  styles['color:condition/stroke'] = styles['color:default/stroke']\n  styles['color:condition/fill'] = COLORS.condition[meta.condition] || 'none'\n  styles['color:direction/stroke'] = styles['color:default/stroke']\n  styles['color:direction/fill'] = styles['color:default/stroke']\n  styles['color:frame/fill'] = (meta.unfilled || hints.monoColor) ? 'none' : styles[[`color:frame/fill/${key}`]]\n  styles['color:frame/stroke'] = meta.unfilled ? (hints.monoColor || COLORS.frameColor[key]) : styles['color:default/stroke']\n  styles['color:engagement/fill'] = COLORS.ENGAGEMENT[hints.engagement] || styles[[`color:frame/fill/${key}`]]\n\n  styles['color:008218'] = hints.monoColor ? 'none' : 'rgb(0,130,24)'\n  styles['color:008000'] = 'rgb(0,128,0)'\n  styles['color:ffff00'] = hints.monoColor ? 'none' : 'rgb(255,255,0)'\n  styles['color:fff700'] = 'rgb(255,247,0)'\n  styles['color:ff8d2a'] = 'rgb(255,141,42)'\n  styles['color:c61021'] = 'rgb(198,16,33)'\n  styles['color:ff0000'] = hints.monoColor || 'rgb(255,0,0)'\n  styles['color:ad694b'] = 'rgb(173,105,75)'\n  styles['color:ff00ff'] = 'rgb(255,0,255)'\n  styles['color:white'] = OFF_WHITE\n\n  const mode =\n    (meta.frameless ? 0x01 : 0x00) +\n    (meta.unfilled ? 0x02 : 0x00) +\n    (hints.monoColor ? 0x04 : 0x00)\n\n  // console.log(meta)\n  // console.log(hints)\n  // console.log(mode)\n\n  const colors = [\n    ['fill:path/fill/unknown', 0x00, FRAME_FILL['unknown'][scheme]],     // SFAPW-----*****\n    ['fill:path/fill/unknown', 0x04, 'none'],                            // SFAPW-----*****\n    ['fill:path/hostile',      0x02, COLORS.frameColor.hostile],         // SUUPX-----*****\n    ['fill:path/hostile',      0x06, 'none'],                            // SUUPX-----*****\n    ['fill:path/neutral',      0x02, COLORS.frameColor.neutral],         // SUUPWMD---*****\n    ['fill:path/neutral',      0x06, 'none'],                            // SUUPWMD---*****\n    ['fill:path/icon',         0x00, 'black'],                           // SUPPS-----*****\n    ['fill:path/icon',         0x01, 'black'],                           // GUOPED----*****\n    ['fill:path/icon',         0x04, hints.monoColor],                   // SUPPS-----*****\n    ['fill:path/icon',         0x05, hints.monoColor],                   // GUOPED----*****\n    ['fill:path/icon-fill',    0x00, OFF_WHITE],                         // SUPPT-----*****\n    ['fill:path/icon-fill',    0x01, styles[`color:frame/fill/${key}`]], // SUUPND----*****\n    ['fill:path/icon-fill',    0x04, 'none'],                            // SUUPND----*****\n    ['fill:path/unknown',      0x00, FRAME_FILL['unknown'][scheme]],     // EFIPDA----*****\n    ['fill:path/unknown',      0x06, 'none'],                            // EFIPDA----*****\n    ['fill:text/icon',         0x00, 'black'],                           // SUPPL-----*****\n    ['fill:text/icon',         0x01, 'black'],                           // GUTPD-----*****\n    ['fill:text/icon',         0x04, hints.monoColor],                   // SUPPL-----*****\n    ['fill:text/icon',         0x05, hints.monoColor],                   // GUTPD-----*****\n    ['fill:text/icon-fill',    0x00, OFF_WHITE],                         // SUAPC-----*****\n    ['fill:text/icon-fill',    0x04, 'none'],                            // SUAPC-----*****\n    ['fill:text/black',        0x02, 'black'],                           // SHUPWMGX--*****\n    ['fill:text/black',        0x06, hints.monoColor],                   // SHUPWMGX--*****\n    ['fill:text/neutral',      0x02, COLORS.frameColor.neutral],         // SUUPE-----*****\n    ['fill:text/neutral',      0x06, hints.monoColor],                   // SUUPE-----*****\n    ['fill:text/white',        0x00, OFF_WHITE],                         // SUSPNH----*****\n    ['fill:text/white',        0x04, OFF_WHITE],                         // SUSPNH----*****\n    ['fill:text/hostile',      0x02, COLORS.frameColor.hostile],         // SUUPX-----*****\n    ['fill:text/hostile',      0x06, hints.monoColor],                   // SUUPX-----*****\n    ['stroke:path/icon-fill',  0x01, styles[`color:frame/fill/${key}`]], // SUSPO-----*****\n    ['stroke:path/hostile',    0x02, COLORS.frameColor.hostile],         // SUUPX-----*****\n    ['stroke:path/hostile',    0x06, hints.monoColor],                   // SUUPX-----*****\n    ['stroke:path/neutral',    0x02, COLORS.frameColor.neutral],         // SUUPE-----*****\n    ['stroke:path/neutral',    0x06, hints.monoColor],                   // SUUPE-----*****\n\n    // SKKM colors:\n    ['fill:path/white', 0x01, `rgb(255,255,255,${hints.fillOpacity})`],\n    ['fill:path/white', 0x05, 'none'],\n    ['fill:path/blue', 0x01, `rgb(0,0,255,${hints.fillOpacity})`],\n    ['fill:path/blue', 0x05, 'none'],\n    ['stroke:path/blue', 0x01, 'blue'],\n    ['stroke:path/blue', 0x05, hints.monoColor],\n    ['stroke:path/red', 0x01, 'red'],\n    ['stroke:path/red', 0x05, hints.monoColor]\n  ]\n\n  colors.forEach(([key, index, color]) => {\n    if (index === mode) styles[key] = color\n  })\n\n  styles['style:debug'] = {\n    stroke: styles['color:debug/stroke'],\n    'stroke-width': 2,\n    'stroke-dasharray': [10, 10]\n  }\n\n  styles['style:default'] = {\n    fill: styles['color:default/fill'],\n    stroke: styles['color:default/stroke'],\n    'stroke-width': hints.strokeWidth,\n    'font-family': 'Arial'\n  }\n\n  const amplifiers = {\n    'font-family': 'Arial',\n    fill: hints.monoColor || hints.infoColor || 'black',\n    'font-size': 36,\n    'stroke-width': 0\n  }\n\n  styles['style:text-amplifiers/left'] = {\n    ...amplifiers,\n    'text-anchor': 'end',\n  }\n\n  styles['style:text-amplifiers/right'] = {\n    ...amplifiers,\n    'text-anchor': 'start',\n  }\n\n  styles['style:text-amplifiers/top'] = {\n    ...amplifiers,\n    'text-anchor': 'middle',\n  }\n\n  styles['style:text-amplifiers/bottom'] = {\n    ...amplifiers,\n    'text-anchor': 'middle',\n    'font-weight': 'bold'\n  }\n\n  styles['style:text-amplifiers/center'] = {\n    ...amplifiers,\n    'font-size': 40,\n    'text-anchor': 'middle',\n    'font-weight': 'bold'\n  }\n\n  styles['style:text-amplifiers/outline'] = {\n    stroke: hints.infoOutlineColor,\n    'stroke-width': hints.strokeWidth + hints.infoOutlineWidth,\n    'stroke-linejoin': 'round',\n    'stroke-linecap': 'round',\n    zIndex: -1\n  }\n\n  styles['style:outline'] = {\n    stroke: hints.outlineColor,\n    'stroke-width': hints.strokeWidth + hints.outlineWidth * 2,\n    'stroke-linejoin': 'round',\n    'stroke-linecap': 'round',\n    zIndex: -1\n   }\n\n   styles['style:icon/outline'] = {\n    stroke: hints.outlineColor,\n    'stroke-width': hints.strokeWidth + hints.outlineWidth,\n    'stroke-linejoin': 'round',\n    'stroke-linecap': 'round',\n    zIndex: -1\n   }\n\n  styles['style:frame/shape'] = {\n    fill: styles['color:frame/fill'],\n    'fill-opacity': hints.fillOpacity,\n    stroke: styles['color:frame/stroke'],\n    'stroke-width': hints.strokeWidth\n  }\n\n   styles['style:frame/overlay'] = {\n    stroke: styles['color:frame-overlay/stroke'],\n    'stroke-width': hints.strokeWidth,\n    // pending state has precedence over planned status:\n    'stroke-dasharray':\n      meta.pending\n        ? '4,4'\n        : meta.planned\n          ? '8,12'\n          : 'none',\n    zIndex: 1\n   }\n\n   styles['style:frame/decoration'] = {\n    fill: styles['color:frame-decoration/fill'],\n    stroke: styles['color:frame-decoration/stroke']\n   }\n\n   styles['style:echelon'] = {\n    fill: styles['color:echelon/fill'],\n    stroke: styles['color:echelon/stroke'],\n    'stroke-width': hints.strokeWidth\n   }\n\n   styles['style:installation'] = styles['style:echelon']\n\n   styles['style:engagement/text'] = {\n    'text-anchor': 'middle',\n    'font-size': 22,\n    'font-weight': 'bold',\n    'stroke-width': 4,\n    stroke: 'none',\n    fill: 'black'\n   }\n\n   styles['style:engagement/bar'] = {\n    fill: styles['color:engagement/fill']\n   }\n\n   styles['style:frame/context'] = {\n    'font-family': 'Arial',\n    'font-size': 35,\n    'font-weight': 'bold',\n    'text-anchor': 'start',\n    'stroke-width': 0,\n    fill: 'black'\n  }\n\n  styles['style:condition'] = {\n    fill: styles['color:condition/fill'],\n    stroke: styles['color:condition/stroke'],\n    'stroke-width': hints.strokeWidth,\n  }\n\n  styles['style:direction'] = {\n    fill: styles['color:direction/fill'],\n    stroke: styles['color:direction/stroke'],\n    'stroke-width': hints.strokeWidth,\n    zIndex: 1\n  }\n\n  return styles\n}\n","import * as R from 'ramda'\nimport * as BBox from '../bbox.js'\nimport FRAME from './frame.json' assert { type: \"json\" }\nimport DECORATIONS from './decorations.json' assert { type: \"json\" }\nimport * as Layout from '../layout.js'\n\nFRAME['SPACE+UNKNOWN'] = FRAME['AIR+UNKNOWN']\nFRAME['SPACE+FRIEND'] = FRAME['AIR+FRIEND']\nFRAME['SPACE+NEUTRAL'] = FRAME['AIR+NEUTRAL']\nFRAME['SPACE+HOSTILE'] = FRAME['AIR+HOSTILE']\nFRAME['ACTIVITY+UNKNOWN'] = FRAME['UNIT+UNKNOWN']\nFRAME['ACTIVITY+FRIEND'] = FRAME['UNIT+FRIEND']\nFRAME['ACTIVITY+NEUTRAL'] = FRAME['UNIT+NEUTRAL']\nFRAME['ACTIVITY+HOSTILE'] = FRAME['UNIT+HOSTILE']\n\nconst frames = Object.entries(FRAME).reduce((acc, [key, frame]) => {\n  const { open, ...graphics } = frame\n  acc[key] = acc[key] || {}\n  acc[key].open = graphics\n  acc[key].closed = { ...graphics, d: graphics.d + ' z' }\n  acc[key].bbox = BBox.of(graphics)\n  return acc\n}, {})\n\nconst instruction =\n  (options, typeHint, style) => {\n    // Outline frame must not be closed for monochrome color:\n    const type = options.monoColor ? 'open' : typeHint\n    const key = `${options.dimension}+${options.affiliation}`\n    const frame = frames[key]\n    const instructions = [{ ...frame[type], ...options[style] }]\n    const decoration = DECORATIONS[key]\n    if (decoration) instructions.push({ ...decoration, ...options['style:frame/decoration']})\n    return () => [frame.bbox, instructions]\n  }\n\nexport const frame = options => {\n  if (!options.frame) return bbox => [bbox, []] // TODO: set bbox to frame bbox\n  else return Layout.compose(\n    options.dimension !== 'CONTROL' && instruction(options, 'open', 'style:frame/shape'),\n    (!options.present || options.pending) && instruction(options, 'open', 'style:frame/overlay'),\n    (options.outline) && instruction(options, 'closed', 'style:outline')\n  )\n}\n\nexport const context = options => {\n  const text = R.cond([\n    [R.propEq(true, 'joker'), R.always('J')],\n    [R.propEq(true, 'faker'), R.always('K')],\n    [R.propEq('EXERCISE', 'context'), R.always('X')],\n    [R.propEq('SIMULATION', 'context'), R.always('S')],\n    [R.T, R.always(undefined)]\n  ])(options)\n\n  if (!text) return box => [box, []]\n\n  const key = `${options.dimension}:${options.affiliation}`\n  const spacing = key.match(/(UNKNOWN$)|(SUBSURFACE:HOSTILE)/) ? -10 : 10\n\n  return box => {\n    const instructions = []\n    const instruction = { type: 'text', text, x: box[2] + spacing, y: 60, ...options['style:frame/context'] }\n    const bbox = [box[0], 60 - 25, box[2] + spacing + 22, box[3]]\n    instructions.push(instruction)\n    if (options.outline) instructions.push({ ...instruction, ...options['style:outline'] })\n    return [bbox, instructions]\n  }\n}\n","import * as BBox from '../bbox.js'\n\nexport const installation = options => {\n  const heights = strokeWidth => ({\n    UNKNOWN: { y1: 2 - strokeWidth / 2, y2: -strokeWidth },\n    FRIEND: { y1: -strokeWidth / 2, y2: -strokeWidth },\n    NEUTRAL: { y1: -strokeWidth / 2, y2: -strokeWidth },\n    HOSTILE: { y1: 14 - strokeWidth / 2, y2: -strokeWidth },\n  })\n\n  const strokeWidth = options['style:installation']['stroke-width']\n  const { y1, y2 } = heights(strokeWidth)[options.affiliation]\n  const d = `M85,${y1} 85,-12 115,-12 115,${y1} 100,${y2} Z`\n  const path = { type: 'path', d }\n\n  return box => {\n    const dy = box[1] + strokeWidth / 2\n    const transform = `translate(0, ${dy})`\n    const group = { type: 'g', children: [path], transform }\n    const children = [{ ...group, ...options['style:installation'] }]\n    if (options.outline) children.push({ ...group, ...options['style:outline'] })\n    const bbox = BBox.of(children)\n    const translated = BBox.translate([0, dy], bbox)\n    return [translated, children]\n  }\n}\n","import * as BBox from '../bbox.js'\nimport ECHELON from './echelon.json' assert { type: \"json\" }\n\nconst echelons = Object.entries(ECHELON)\n  .reduce((acc, [key, children]) => {\n    acc[key] = [BBox.of(children), children]\n    return acc\n  }, {})\n\nconst instruction =\n  style =>\n    options =>\n      box => {\n        const [bbox, children] = echelons[options.echelon]\n        const translation = BBox.translate([0, box[1]], bbox)\n        const transform = `translate(0, ${box[1]})`\n        const group = { type: 'g', children, ...options[style], transform }\n        return [translation, group]\n      }\n\nexport const echelon = instruction('style:echelon')\nexport const outline = instruction('style:outline')\n","import * as BBox from '../bbox.js'\n\nexport const engagement = options => {\n  return box => {\n    const extent = BBox.extent(box)\n    const w = Math.max(extent[0], options.modifiers.AO.length * 16);\n    const x = 100 - w / 2\n    const y = box[1] - 3\n\n    const d = `M${x},${y} l${w},0 0,-25 ${-w},0 z`\n\n    const instructions = [\n      { type: \"path\", d, ...options['style:engagement/bar'] },\n      { type: \"text\", text: options.modifiers.AO, x: 100, y: y - 5, ...options['style:engagement/text'] }\n    ]\n\n    if (options.outline) instructions.push({ type: \"path\", d, ...options['style:outline'] })\n    return [BBox.of(instructions[0]), instructions]\n  }\n}\n","import * as BBox from '../bbox.js'\nimport MOBILITY from './mobility.json' assert { type: \"json\" }\n\nconst OFFSET = {\n  TOWED: 8,\n  OVER_SNOW: 13,\n  HALF_TRACK: 8,\n  SLED: 17,\n  TOWED_ARRAY_SHORT: 8,\n  TOWED_ARRAY_LONG: 8\n}\n\n// Optional vertical offset for NEUTRAL affiliation.\nconst offsets = Object.entries(MOBILITY).reduce((acc, [key, children]) => {\n  acc[key] = {\n    type: 'g',\n    children,\n    bbox: BBox.of(children),\n    offset: OFFSET[key] || 0\n  }\n  return acc\n}, {})\n\nexport const mobility = options => {\n  const { bbox, offset, ...group } = offsets[options.mobility]\n\n  return box => {\n    const dy = options.affiliation === 'NEUTRAL' ? box[3] + offset : box[3]\n    const instructions = [{ ...group, transform: `translate(0, ${dy})` }]\n    if (options.outline) instructions.push({ ...group, transform: `translate(0, ${dy})`, ...options['style:outline'] })\n    return [BBox.translate([0, dy], bbox), instructions]\n  }\n}\n","import * as BBox from '../bbox.js'\n\nexport const taskForce = options => {\n  const widths = { CORPS: 110, ARMY: 145, ARMY_GROUP: 180, REGION: 215 }\n  const width = widths[options.echelon] || 90\n  const [x1, x2] = [100 - width / 2, 100 + width / 2]\n  const path = { type: \"path\", d: `M${x1},0 L${x1},-40 ${x2},-40 ${x2},0` }\n\n  return box => {\n    const dy = box[1]\n    const transform = `translate(0, ${dy})`\n    const instructions = [{ type: 'g', children: [path], transform }]\n    if (options.outline) instructions.push({ type: 'g', children: [path], transform, ...options['style:outline'] })\n    const bbox = BBox.of(path)\n    const translated = BBox.translate([0, dy], bbox)\n    return [translated, instructions]\n  }\n}\n\nexport const feintDummy = options => {\n  return box => {\n    const extent = BBox.extent(box)\n    const y1 = box[1] - extent[0] / 2\n    const path = {\n      type: \"path\",\n      d: `M100,${y1} L${box[0]},${box[1]} M100,${y1} L${box[2]},${box[1]}`,\n      'stroke-dasharray': [8, 8]\n    }\n\n    const instructions = [path]\n    if (options.outline) instructions.push({ ...path, ...options['style:outline'] })\n    return [BBox.of(path), instructions]\n  }\n}\n\nconst hqOffset = {\n  'AIR:FRIEND': box => box[3],\n  'AIR:NEUTRAL': box => box[3],\n  'UNIT:FRIEND': box => box[3],\n  'UNIT:NEUTRAL': box => box[3],\n  'EQUIPMENT:NEUTRAL': box => box[3],\n  'SUBSURFACE:NEUTRAL': box => box[3],\n  'SUBSURFACE:FRIEND': box => box[1],\n  'SPACE:FRIEND': box => box[3],\n}\n\nexport const headquartersStaff = options => {\n  return box => {\n    const offset = hqOffset[`${options.dimension}:${options.affiliation}`] || (() => 100)\n    const y = offset(box)\n    const { hqStaffLength } = options\n    const path = { type: \"path\", d: `M${box[0]},${y} L${box[0]},${box[3] + hqStaffLength}` }\n    const instructions = [path]\n    if (options.outline) instructions.push({ ...path, ...options['style:outline'] })\n    return [BBox.of(path), instructions]\n  }\n}\n","import * as BBox from '../bbox.js'\n\nexport const condition = options => {\n  if (!options.condition) return box => [box, []]\n  else return box => {\n    const [width] = BBox.extent(box)\n    const y = box[3] + 5\n\n    const styles =\n      options.outline\n        ? ['style:condition', 'style:outline']\n        : ['style:condition']\n\n    const instructions = styles.map(style => ({\n      type: 'path',\n      d: `M${box[0]},${y} l${width},0 0,25 -${width},0 z`,\n      ...options[style]\n    }))\n\n    const bbox = BBox.merge(box, BBox.of(instructions))\n    return [bbox, instructions]\n  }\n}\n","/*\n  matrix    (  a   b    c   d  e  f)\n\n  a c e\n  b d f\n  0 0 1\n\n  matrix    ( sx   0    0  sy tx ty)\n  identity  (  1   0    0   1  0  0)\n  translate (  1   0    0   1 tx ty)\n  scale     ( sx   0    0  sy  0  0)\n  rotate    (cos sin -sin cos  0  0)\n*/\n\nexport const DEG2RAD = Math.PI / 180\nexport const identity = [1, 0, 0, 1, 0, 0]\nexport const translate = (v, tx, ty) => [v[0], v[1], v[2], v[3], v[4] + tx, v[5] + ty]\nexport const rotate = a => [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]\n\nexport const matrix = v => `matrix(${v.join(' ')})`\n","import * as BBox from '../bbox.js'\nimport { DEG2RAD, rotate, translate, matrix } from '../transform.js'\n\nexport const direction = options => {\n  const paths = d => {\n    const paths = [{ type: \"path\", d, ...options['style:direction'] }]\n    if (options.outline) paths.push({ type: \"path\", d, ...options['style:outline'] })\n    return paths\n  }\n\n  return box => {\n    const children = paths('M0,0 l0,-75 -5,3 5,-15 5,15 -5,-3')\n\n    const [dx, dy] = options.ground\n      ? options.headquarters\n        ? [box[0], box[3] + 100]\n        : [100, box[3] + 100]\n      : [100, 100]\n\n    const transform = matrix(\n      translate(\n        rotate(options.direction * DEG2RAD),\n        dx,\n        dy\n      )\n    )\n\n    const instructions = [{\n      type: 'g',\n      transform,\n      children\n    }]\n\n    if (options.ground && !options.headquarters) {\n      instructions.push(...paths(`M 100,${box[3]} l0,100`))\n    }\n\n    return [BBox.of(instructions), instructions]\n  }\n}\n","import regular from './icon-data.json' assert { type: \"json\" }\nimport index from './icon-index.json' assert { type: \"json\" }\nimport special from './icons-special.json' assert { type: \"json\" }\nimport skkm from './icons-skkm.json' assert { type: \"json\" }\nimport * as BBox from '../bbox.js'\n\nconst undefinedIcon = [{\n  type: 'path',\n  stroke: 'black',\n  fill: 'black',\n  d: 'm 94.8206,78.1372 c -0.4542,6.8983 0.6532,14.323 5.3424,19.6985 4.509,5.6933 11.309,9.3573 14.98,15.7283 3.164,6.353 -0.09,14.245 -5.903,17.822 -7.268,4.817 -18.6219,2.785 -22.7328,-5.249 -1.5511,-2.796 -2.3828,-5.931 -2.8815,-9.071 -3.5048,0.416 -7.0093,0.835 -10.5142,1.252 0.8239,8.555 5.2263,17.287 13.2544,21.111 7.8232,3.736 17.1891,3.783 25.3291,1.052 8.846,-3.103 15.737,-11.958 15.171,-21.537 0.05,-6.951 -4.272,-12.85 -9.134,-17.403 -4.526,-4.6949 -11.048,-8.3862 -12.401,-15.2748 -1.215,-2.3639 -0.889,-8.129 -0.889,-8.129 z m -0.6253,-20.5177 0,11.6509 11.6527,0 0,-11.6509 z'\n}]\n\nconst boxes = Object.entries(({ ...regular, ...skkm })).reduce((acc, [key, icon]) => {\n  acc[key] = icon.length ? BBox.of(icon) : [100, 100, 100, 100]\n  return acc\n}, {})\n\n\nconst lookupInstructions = options => {\n  if (options.invalid) return undefinedIcon\n  else if (special[options.generic]) return special[options.generic]\n  else if (skkm[options.generic]) return skkm[options.generic]\n  else {\n    const key = `${options.generic}+${options.standard}+${options.affiliation}`\n    const hashcode = index[key]\n    return regular[hashcode] || []\n  }\n}\n\nconst lookupBBox = options => box => {\n  if (special[options.generic]) return [0, 0, 200, 200]\n  else if (skkm[options.generic]) return boxes[options.generic]\n  else {\n    const key = `${options.generic}+${options.standard}+${options.affiliation}`\n    const hashcode = index[key]\n    return boxes[hashcode] || box\n  }\n}\n\nconst resolveStyles = options => instructions => {\n  if (Array.isArray(instructions)) return instructions.map(resolveStyles(options))\n  else {\n    const { stroke, fill, children, ...rest } = instructions\n    return children\n      ? { ...rest, children: children.map(resolveStyles(options)) }\n      : {\n        stroke: options[stroke] || stroke,\n        fill: options[fill] || fill,\n        ...rest\n      }\n  }\n}\n\nexport default options => {\n  const styles = resolveStyles(options)\n  const instructions = lookupInstructions(options)\n  const bbox = lookupBBox(options)\n\n  const applyOutline =\n    (!!options.outlineWidth && !!options.outlineColor) &&\n    (!options.frame || !!options.monoColor)\n\n  const finalInstructions = applyOutline\n    ? [\n        ...styles(instructions),\n        ...instructions.map(x => ({ ...x, ...options['style:icon/outline'] }))\n      ]\n    : styles(instructions)\n\n  return box => [bbox(box), finalInstructions]\n}\n","import * as BBox from '../bbox.js'\nimport * as Text from '../text.js'\n\n// Currently all templates have exactly five slots to the left and/or to the right.\nimport templates from './templates.json' assert { type: \"json\" }\nimport fields from './fields.json' assert { type: \"json\" }\n\n\nconst fromTemplate = (template, options) => box => {\n  const gap = 16\n  const [, height] = BBox.extent(box)\n\n  const boxes = {\n    top: extent => {\n      const left = 100 - extent[0] / 2\n      const right = left + extent[0]\n      const top = box[1] - extent[1] - 10\n      const bottom = top + extent[1]\n      return [left, top, right, bottom]\n    },\n    center: extent => {\n      const left = 100 - extent[0] / 2\n      const right = left + extent[0]\n      const top = 100 - extent[1] / 1.5\n      const bottom = top + extent[1]\n      return [left, top, right, bottom]\n    },\n    left: extent => {\n      const right = box[0] - gap\n      const left = right - extent[0]\n      const top = box[1] + (height - extent[1]) / 2 + gap\n      const bottom = top + extent[1]\n      return [left, top, right, bottom]\n    },\n    right: extent => {\n      const right = box[2] + gap\n      const left = right + extent[0]\n      const top = box[1] + (height - extent[1]) / 2 + gap\n      const bottom = top + extent[1]\n      return [right, top, left, bottom]\n    }\n  }\n\n  const makeText = (x, y, text) => ({\n    type: 'text', x, y, text\n  })\n\n  const makeGroup = (box, children, style) => ({\n    type: 'g',\n    children,\n    transform: `translate(${box[0]},${box[1]})`,\n    ...style\n  })\n\n  const line = slots => slots.map(key => options.modifiers[key]).filter(Boolean).join('/')\n  const [bbox, instructions] = Object\n    .entries(template)\n    .reduce((acc, [placement, slots]) => {\n      const lines = slots.map(line)\n\n      // No lines -> nothing to do.\n      if (lines.filter(Boolean).length === 0) return acc\n\n      const style = `style:text-amplifiers/${placement}`\n      const fontSize = options[style]['font-size']\n      const extent = Text.extent(lines, fontSize)\n      // TODO: left/right placement: trim empty leading/trailing slots\n      // TODO: left/right placement: vertical align center slot @ 100\n      const box = boxes[placement](extent)\n\n      const dy = extent[1] / lines.length\n      const x = placement === 'right'\n        ? 0\n        : ['top', 'bottom', 'center'].includes(placement)\n          ? extent[0] / 2\n          : extent[0]\n      const text = (line, index) => makeText(x, fontSize + index * dy, line)\n      const children = lines.map(text)\n      acc[1].push(makeGroup(box, children, options[style] ))\n      if (options.infoOutline) acc[1].push(makeGroup(box, children, { ...options[style], ...options['style:text-amplifiers/outline'] }))\n      return [BBox.merge(acc[0], box), acc[1]]\n    }, [BBox.NULL, []])\n\n  return [bbox, instructions]\n}\n\nconst fromFields = (fields, options) => box => {\n  const stuff = Object.entries(options.modifiers).reduce((acc, [key, value]) => {\n    if (!fields[key]) return acc\n    if (Array.isArray(fields[key])) {\n      fields[key].forEach(field => acc.push({ ...field, text: value }))\n    } else acc.push({ ...fields[key], text: value })\n    return acc\n  }, [])\n\n  return stuff.reduce(([box, instructions], instruction) => {\n    instructions.push(instruction)\n    const bbox = BBox.of(instruction)\n    return [BBox.merge(box, bbox), instructions]\n  }, [box, []])\n}\n\n/* eslint-disable import/no-anonymous-default-export */\nexport default options => {\n  if (fields[options.generic]) return fromFields(fields[options.generic], options)\n  const template = templates[`${options.type}+${options.dimension}`]\n  if (!template) return box => [box, []]\n\n  return fromTemplate(template, options)\n}\n","import * as R from 'ramda'\nimport * as BBox from '../bbox.js'\nimport * as Layout from '../layout.js'\nimport * as Styles from './styles.js'\nimport * as Frame from './frame.js'\nimport * as Installation from './installation.js'\nimport * as Echelon from './echelon.js'\nimport * as Engagement from './engagement.js'\nimport * as Mobility from './mobility.js'\nimport * as Modifiers from './modifiers.js'\nimport * as Condition from './condition.js'\nimport * as Direction from './direction.js'\nimport icon from './icons.js'\nimport fields from './fields.js'\n\nexport const instructions = (options, meta) => {\n\n  const hints = {\n    colorMode: options.colorMode || 'light',\n\n    fillOpacity:\n      options.fillOpacity === 0\n        ? 0\n        : options.fillOpacity || 1\n        ,\n\n    frame: options.frame !== false && !meta.frameless,\n    modifiers: options.modifiers || {},\n    infoFields: options.modifiers && options.infoFields !== false,\n    engagement: options?.modifiers?.AT,\n    direction: Number(options?.modifiers?.Q) || undefined, // suppress/replace NaN\n    strokeWidth: options.strokeWidth || 4,\n    strokeColor: options.strokeColor || 'black',\n    monoColor: options.monoColor,\n    outlineWidth: options.outlineWidth || 0,\n    outlineColor: options.outlineColor || false,\n    infoColor: options.infoColor || false,\n    infoOutlineColor: options.infoOutlineColor || options.outlineColor,\n    infoOutlineWidth: options.infoOutlineWidth || options.outlineWidth || 0,\n    size: options.size || 100, // %\n    hqStaffLength: options.hqStaffLength || 100\n  }\n\n  // Implicitly true if not explicitly false:\n  hints.outline =\n    options.outline === false\n      ? false\n      : hints.outlineWidth > 0 &&  hints.outlineColor\n\n  hints.infoOutline =\n    options.infoOutline === false\n      ? false\n      : hints.infoOutlineWidth > 0 &&  hints.infoOutlineColor\n\n  const context = {\n    ...meta,\n    ...hints,\n    ...Styles.styles(meta, hints)\n  }\n\n  const padding = 2 + Math.max(\n    context['style:default']['stroke-width'],\n    context['style:outline']['stroke-width'],\n  ) / 2\n\n  // Center is available after HQ staff was processed:\n  let center\n\n  // Only include icon if 'special c2 headquarters' (AA) is NOT provided.\n  // SKKM is a special case with icons only.\n  const dropIcon = !meta.skkm && hints.infoFields && hints.modifiers.AA\n\n  const debugRectangle = bbox => [bbox, [{\n    type: 'rect',\n    ...BBox.xywh(bbox),\n    ...context['style:debug']\n  }]]\n\n  const [bbox, children] = Layout.compose(\n    Frame.frame(context),\n    !dropIcon && icon(context),\n    Layout.overlay(\n      Layout.compose(\n        context.frame && Frame.context(context),\n        context.infoFields && fields(context),\n      ),\n      Layout.compose(\n        context.mobility && Mobility.mobility(context),\n        Condition.condition(context),\n      ),\n      Layout.compose(\n        Layout.overlay(\n          context.installation && Installation.installation(context),\n          context.echelon && Echelon.echelon(context),\n          context.echelon && context.outline && Echelon.outline(context),\n          context.taskForce && Modifiers.taskForce(context),\n          context.feintDummy && Modifiers.feintDummy(context),\n\n          // Tap into intermediate bounding box to get anchor right.\n          // For HQs, info fields would shift anchor horizontally, otherwise.\n          context.headquarters\n            ? box => {\n              const [bbox, instructions] = Modifiers.headquartersStaff(context)(box)\n              center = { x: bbox[0], y: bbox[3] }\n              return [bbox, instructions]\n            }\n            : () => {\n              center = { x: 100, y: 100 }\n              return [BBox.NULL, []]\n            }\n            ,\n          context.direction !== undefined && Direction.direction(context),\n        ),\n        context.modifiers.AO && Engagement.engagement(context)\n      )\n    ),\n\n    // Last but not least, add padding:\n    bbox => [BBox.resize([padding, padding], bbox), []]\n  )(BBox.NULL)\n\n  const scale = x => x * hints.size / 100\n  const extent = BBox.extent(bbox)\n  const [width, height] = extent.map(scale)\n  const size = { width, height }\n\n  const anchor = {\n    x: (center.x - bbox[0]) * hints.size / 100,\n    y: (center.y - bbox[1]) * hints.size / 100\n  }\n\n  // Poor man's (SVG) layers:\n  // Sort top level instructions according zIndex.\n  // Sort chilren of top level groups.\n  // TODO: sort tree recursively\n  const sorter = (a, b) => (a.zIndex || 0) - (b.zIndex || 0)\n  children.sort(sorter)\n  children.filter(R.propEq('g', 'type')).map(x => x.children.sort(sorter))\n\n  const document = {\n    type: 'svg',\n    xmlns: 'http://www.w3.org/2000/svg',\n    version: '1.2',\n    baseProfile: 'tiny',\n    width,\n    height,\n    viewBox: [bbox[0], bbox[1], ...extent],\n    children,\n    ...context['style:default']\n  }\n\n  const array = x => x ? Array.isArray(x) ? x : [x] : []\n\n  // TODO: move to milsymbol/genicon.js\n  const escape = s => s\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n\n  const xml = document => {\n    const { type, children, zIndex, ...properties } = document\n    const propertyList = Object.entries(properties).map(([key, value]) => {\n      if (key === 'text') return ''\n      const type = typeof value\n      if (type === 'string') return `${key}=\"${value}\"`\n      else if (type === 'number') return `${key}=\"${value}\"`\n      else if (Array.isArray(value)) return `${key}=\"${value.join(' ')}\"`\n      else return ''\n    }).join(' ')\n\n    const childList = type !== 'text'\n      ? (array(children)).map(child => xml(child)).join('')\n      : escape(properties.text)\n\n    return `<${type} ${propertyList}>${childList}</${type}>`\n  }\n\n  const svg = xml(document)\n\n  return {\n    getSize: () => size,\n    getAnchor: () => anchor,\n    asSVG: () => svg,\n    toDataURL: () => 'data:image/svg+xml;utf8,' + encodeURIComponent(svg),\n    isValid: () => meta.isValid\n  }\n}\n","import { instructions } from './instructions.js'\n\nexport const accept = options => {\n  const [sidc] = options.sidc.split('+')\n  const normalized = sidc.toUpperCase().replaceAll('*', '-')\n  // Note: Also accepting SKKM.\n  const regex = /^[EGIOSWK][A-Z0-9\\-]{9,14}$/\n  const match = normalized.match(regex)\n  return match ? true : false\n}\n\nexport const document = options => {\n  return instructions(options, meta(options))\n}\n\nconst meta = options => {\n  const meta = { invalid: false }\n  const [sidc, standard] = options.sidc.split('+')\n\n  meta.type = 'LEGACY'\n  meta.sidc = sidc.toUpperCase().replaceAll('*', '-')\n  meta.standard = standard || '2525'\n  meta.generic = sidc[0] + '-' + sidc[2] + '-' + (sidc.substring(4, 10) || '------')\n\n  const parts = {\n    scheme: meta.sidc[0],\n    identity: meta.sidc[1],\n    dimension: meta.sidc[2],\n    status: meta.sidc[3],\n    function: meta.sidc.substring(4, 10),\n    modifier10: meta.sidc[10],\n    modifier11: meta.sidc[11],\n    modifiers: meta.sidc.substring(10, 12)\n  }\n\n  meta.skkm = parts.scheme === 'K'\n  meta.affiliation = AFFILIATION[parts.identity] || 'UNKNOWN'\n  meta.joker = parts.identity === 'J'\n  meta.faker = parts.identity === 'K'\n  meta.context = EXERCISE.has(parts.identity) ? 'EXERCISE' : 'REALITY'\n  meta.status = STATUS[parts.status]\n  meta.present = parts.status !== 'A'\n  meta.anticipated = !meta.present\n  meta.planned = meta.anticipated\n  meta.condition = CONDITION[parts.status]\n\n  meta.dimension = DIMENSION.find(([regex]) => meta.sidc.match(regex))[1]\n  meta.ground = GROUND.some(regex => meta.sidc.match(regex))\n  meta.frameless = FRAMELESS.some(regex => meta.sidc.match(regex))\n  meta.unfilled = UNFILLED.some(regex => meta.sidc.match(regex))\n  meta.civilian = CIVILIAN.some(regex => meta.sidc.match(regex))\n  meta.pending = PENDING.has(parts.identity)\n  meta.installation = meta.dimension === 'UNIT' && parts.modifiers === 'H-'\n  meta.taskForce = TASK_FORCE.has(parts.modifier10)\n  meta.headquarters = HEADQUARTERS.has(parts.modifier10) || parts.function === 'UH----'\n  meta.feintDummy = FEINT_DUMMY.has(parts.modifier10)\n\n  // Mobility and echelon are mutually exclusive; try mobility first.\n  // TODO: limit to equipment\n  meta.mobility = MOBILITY[parts.modifiers] || false\n  meta.echelon = !meta.mobility && ECHELON[parts.modifier11]\n\n  return meta\n}\n\nconst AFFILIATION = {\n  H: 'HOSTILE', J: 'FRIEND', K: 'FRIEND', S: 'HOSTILE',\n  A: 'FRIEND', F: 'FRIEND', D: 'FRIEND', M: 'FRIEND',\n  L: 'NEUTRAL', N: 'NEUTRAL',\n  G: 'UNKNOWN', P: 'UNKNOWN', U: 'UNKNOWN', W: 'UNKNOWN'\n}\n\nconst EXERCISE = new Set(['D', 'G', 'J', 'K', 'L', 'M', 'W'])\nconst PENDING = new Set(['P', 'A', 'S', 'G', 'M'])\nconst FEINT_DUMMY = new Set(['C', 'D', 'F', 'G'])\nconst HEADQUARTERS = new Set(['A', 'B', 'C', 'D'])\nconst TASK_FORCE = new Set(['B', 'D', 'E', 'G'])\n\nconst STATUS = {\n  A: 'PLANNED', // also ANTICIPATED\n  P: 'PRESENT'\n}\n\nconst CONDITION = {\n  C: 'FULLY_CAPABLE', // PRESENT\n  D: 'DAMAGED', // PRESENT\n  X: 'DESTROYED', // PRESENT\n  F: 'FULL_TO_CAPACITY' // PRESENT\n}\n\nconst DIMENSION = [\n  [/^[^O].P/, 'SPACE'],\n  [/^[^O].[AP]/, 'AIR'],\n  [/^O.[VOR]/, 'ACTIVITY'], // precedence over SO\n  [/^O/, 'UNIT'], // SO => GROUND/UNIT\n  [/^S.G.E/, 'EQUIPMENT'],\n  [/^S.S/, 'EQUIPMENT'], // SUBSURFACE -> EQUIPMENT\n  [/^.FS/, 'EQUIPMENT'],\n  [/^I.G/, 'EQUIPMENT'], // SIGINT\n  [/^E.O.(AB|AE|AF|BB|CB|CC|DB|D.B|E.)/, 'EQUIPMENT'], // EMS EQUIPMENT\n  [/^E.F.(BA|MA|MC)/, 'EQUIPMENT'],\n  [/^E/, 'UNIT'], // EMS tactical symbols\n  [/^..[EFGOSXZ]/, 'UNIT'], // incl. SOF, EMS\n  [/^..U/, 'SUBSURFACE' ],\n  [/^G/, 'CONTROL'] // control measures aka tactical graphics\n]\n\nconst GROUND = [\n  /^..G/,\n  /^O.V/\n]\n\nconst FRAMELESS = [\n  /^..S.(O-----|ED----|EP----|EV----|ZM----|ZN----|ZI----)/,\n  /^E.N.(AA----|AB----|AC----|AD----|AE----|AG----|BB----|BC----|BF----|BM----|CA----|CB----|CC----|CD----|CE----)/,\n  /^W.S.(WSVE--|WSD-LI|WSFGSO|WSGRL-|WSR-LI|WSDSLM|WSS-LI|WSTMH-|WST-FC|WSTSS-)/,\n  /^..U.(ND----|NBS---|NBR---|NBW---|NM----|NA----)/,\n  /^G.(?!O.[VLPI])/,\n\n  // SKKM icons only, no frames:\n  /^K/\n]\n\n// With unfilled frames.\nconst UNFILLED = [\n  /^..U.(WM----|WMD---|WMG---|WMGD--|WMGX--|WMGE--|WMGC--|WMGR--|WMGO--|WMM---|WMMD--|WMMX--|WMME--|WMMC--|WMMR--|WMMO--|WMF---)/,\n  /^..U.(WMFD--|WMFX--|WMFE--|WMFC--|WMFR--|WMFO--|WMO---|WMOD--|WMX---|WME---|WMA---|WMC---|WMR---|WMB---|WMBD--|WMN---|WMS---)/,\n  /^..U.(WMSX--|WMSD--|WDM---|WDMG--|WDMM--|E-----|V-----|X-----)/\n]\n\nconst CIVILIAN = [/^..A.C/, /^..G.EVC/, /^..S.X/]\n\nconst MOBILITY = {\n  MO: 'WHEELED_LIMITED',\n  MP: 'WHEELED',\n  MQ: 'TRACKED',\n  MR: 'HALF_TRACK',\n  MS: 'TOWED',\n  MT: 'RAIL',\n  MW: 'PACK_ANIMALS',\n  MU: 'OVER_SNOW',\n  MV: 'SLED',\n  MX: 'BARGE',\n  MY: 'AMPHIBIOUS',\n  NS: 'TOWED_ARRAY_SHORT',\n  NL: 'TOWED_ARRAY_LONG'\n}\n\nconst ECHELON = {\n  A: 'TEAM', // CREW\n  B: 'SQUAD',\n  C: 'SECTION',\n  D: 'PLATOON', // DETACHMENT\n  E: 'COMPANY', // BATTERY, TROOP\n  F: 'BATTALION', // SQUADRON\n  G: 'REGIMENT', // GROUP\n  H: 'BRIGADE',\n  I: 'DIVISION',\n  J: 'CORPS', // MEF\n  K: 'ARMY',\n  L: 'ARMY_GROUP', // FRONT\n  M: 'REGION', // THEATER\n  N: 'COMMAND'\n}\n","import { instructions } from './instructions.js'\n\nexport const accept = options => {\n  const [sidc] = options.sidc.split('+')\n  const regex = /[0-9]{20}/\n  const match = sidc.match(regex)\n  return match ? true : false\n}\n\nexport const document = options => {\n  return instructions(options, meta(options))\n}\n\n\nconst meta = options => {\n  const meta = { invalid: false }\n  const [sidc, standard] = options.sidc.split('+')\n\n  const parts = {\n    context: sidc[2],\n    affiliation: sidc[3],\n    symbolSet: sidc.substring(4, 6),\n    status: sidc[6],\n    indicator: sidc[7],\n    amplifier: sidc.substring(8, 10),\n    entity: sidc.substring(10, 12),\n    type: sidc.substring(12, 14),\n    subtype: sidc.substring(14, 16),\n    function: sidc.substring(10, 16),\n    modifier1: sidc.substring(16, 18),\n    modifier2: sidc.substring(18, 20)\n  }\n\n  meta.type = 'MODERN'\n  meta.standard = standard || '2525'\n\n  meta.generic = parts.symbolSet + '-' + parts.function\n  meta.context = CONTEXT[parts.context]\n  meta.affiliation =\n    AFFILIATION[parts.context + parts.affiliation] ||\n    AFFILIATION[parts.affiliation]\n\n  // FIXME: wrong shape for joker\n  meta.joker = meta.context === 'EXERCISE' && parts.affiliation === '5' // SUSPECT\n  meta.faker = meta.context === 'EXERCISE' && parts.affiliation === '6' // HOSTILE\n  meta.status = STATUS[parts.status]\n  meta.present = parts.status === '0'\n  meta.dimension = DIMENSION.find(([regex]) => sidc.match(regex))[1]\n  meta.civilian = CIVILIAN.some(regex => sidc.match(regex))\n  // TODO: PENDING - ETC/POSCON tracks, fused tracks\n  meta.pending = !meta.joker && PENDING.has(parts.affiliation)\n  meta.installation = meta.dimension === 'UNIT' && parts.symbolSet === '20'\n  meta.taskForce = TASK_FORCE.has(parts.indicator)\n  meta.headquarters = HEADQUARTERS.has(parts.indicator)\n  meta.feintDummy = FEINT_DUMMY.has(parts.indicator)\n  meta.mobility = MOBILITY[parts.amplifier]\n  meta.echelon = !meta.mobility && ECHELON[parts.amplifier]\n\n  return meta\n}\n\n\nconst CONTEXT = ['REALITY', 'EXERCISE', 'SIMULATION']\nconst PENDING = new Set(['0', '2', '5'])\n\nconst AFFILIATION = {\n  '15': 'FRIEND',\n  '16': 'FRIEND',\n  '0': 'UNKNOWN', '1': 'UNKNOWN',\n  '2': 'FRIEND', '3': 'FRIEND',\n  '4': 'NEUTRAL',\n  '5': 'HOSTILE', '6': 'HOSTILE'\n}\n\nconst DIMENSION = [\n  [/^....(15)/, 'EQUIPMENT'],\n  [/^....(05|06|50)/, 'SPACE'],\n  [/^....(01|02|51)/, 'AIR'],\n  [/^....20/, 'INSTALLATION'],\n  [/^....27/, 'DISMOUNTED'],\n  [/^....30/, 'SEA'],\n  [/^....(35|36|39|45)/, 'SUBSURFACE'],\n  [/^....40/, 'ACTIVITY'],\n  [/^....(10|11|12|15|20|27|30|52|60)/, 'UNIT'], // incl. DISMOUNTED\n]\n\nconst CIVILIAN = [\n  /^....01....12/,\n  /^....05....12/,\n  /^....11/,\n  /^....12....12/,\n  /^....15....16/,\n  /^....30....14/\n]\n\nconst STATUS = {\n  0: 'PRESENT',\n  1: 'PLANNED', // ANTICIPATED\n  2: 'FULLY_CAPABLE',\n  3: 'DAMAGED',\n  4: 'DESTROYED',\n  5: 'FULL_TO_CAPACITY'\n}\n\nexport const ECHELON = {\n  11: 'TEAM', // CREW: '11',\n  12: 'SQUAD',\n  13: 'SECTION',\n  14: 'PLATOON', // DETACHMENT: '14',\n  15: 'COMPANY', // BATTERY: '15', TROOP: '15',\n  16: 'BATTALION', // SQUADRON: '16',\n  17: 'REGIMENT', // GROUP: '17',\n  18: 'BRIGADE',\n  21: 'DIVISION',\n  22: 'CORPS', // MEF: '22',\n  23: 'ARMY',\n  24: 'ARMY_GROUP', // FRONT: '24',\n  25: 'REGION', // THEATER: '25',\n  26: 'COMMAND'\n}\n\nconst MOBILITY = {\n  31: 'WHEELED_LIMITED',\n  32: 'WHEELED',\n  33: 'TRACKED',\n  34: 'HALF_TRACK',\n  35: 'TOWED',\n  36: 'RAIL',\n  37: 'PACK_ANIMALS',\n  41: 'OVER_SNOW',\n  42: 'SLED',\n  51: 'BARGE',\n  52: 'AMPHIBIOUS',\n  61: 'TOWED_ARRAY_SHORT',\n  62: 'TOWED_ARRAY_LONG'\n}\n\nconst FEINT_DUMMY = new Set(['1', '3', '5', '7'])\nconst HEADQUARTERS = new Set(['2', '3', '6', '7'])\nconst TASK_FORCE = new Set(['4', '5', '6', '7'])\n","import { instructions } from './instructions.js'\n\nexport const accept = () => true\n\nexport const document = options => {\n  return instructions(options, meta(options))\n}\n\nconst meta = () => {\n  const meta = { invalid: true }\n  meta.present = true\n  meta.affiliation = 'UNKNOWN'\n  meta.dimension = 'UNIT'\n  return meta\n}","import * as R from 'ramda'\n\nexport const AMPLIFIERS = {\n  quantity: 'C',\n  reinforcedReduced: 'F',\n  staffComments: 'G',\n  additionalInformation: 'H',\n  additionalInformation1: 'H1',\n  evaluationRating: 'J',\n  combatEffectiveness: 'K',\n  signatureEquipment: 'L',\n  higherFormation: 'M',\n  hostile: 'N',\n  iffSif: 'P',\n  direction: 'Q',\n  sigint: 'R2',\n  uniqueDesignation: 'T',\n  uniqueDesignation1: 'T1',\n  uniqueDesignation2: 'T2',\n  type: 'V',\n  dtg: 'W',\n  dtg1: 'W1',\n  altitudeDepth: 'X',\n  location: 'Y',\n  speed: 'Z',\n  specialHeadquarters: 'AA',\n  country: 'AC',\n  platformType: 'AD',\n  equipmentTeardownTime: 'AE',\n  commonIdentifier: 'AF',\n\n  // APP6-D\n  headquartersElement: 'AH',\n\n  // 2525-C/D AH: Area of Uncertainty\n\n  installationComposition: 'AI',\n\n  // A:BBB-CC\n  engagementBar: 'AO',\n\n  /**\n   * Non-standard.\n   * Target designation for hostile tracks.\n   * Values: 'TARGET', 'NON-TARGET', 'EXPIRED'\n   * See engagement bar.\n   *\n   */\n  engagementType: 'AT',\n  guardedUnit: 'AQ',\n  specialDesignator: 'AR'\n}\n\nconst entries = Object.entries\nconst fromEntries = Object.fromEntries\nconst flip = R.map(([k, v]) => [v, k])\nexport const REVERSE = R.compose(fromEntries, flip, entries)(AMPLIFIERS)\n","export default [\n  {\n    description: 'Symbols construct from the inside out. Start with [FRIENDLY, PRESENT] frame with no icon and default styling.',\n    sidc: 'SFGPU-------'\n  },\n  {\n    description: 'Frame border for anticipated or planned symbol is dashed.',\n    sidc: 'SFGAU-------'\n  },\n  {\n    description: 'An icon if available is placed inside the frame.',\n    sidc: 'SFGPUCIZ----'\n  },\n  {\n    description: 'Symbol icon is not displayed if \"special C2 headquarters\" text modifier [AA] is supplied.',\n    sidc: 'SFGPUCIZ----',\n    modifiers: { AA: 'SOF'}\n  },\n  {\n    description: 'One icon may vary between different frame shapes. Compare to previous [MECHANIZED INFRANTRY] with [FRIENDLY] frame.',\n    sidc: 'SHGPUCIZ----'\n  },\n  {\n    description: 'Growing to the right, context modifier [JOKER, FAKER, EXERCISE, SIMULATION] sits right next to the frame.',\n    sidc: 'SWGU--------'\n  },\n  {\n    description: 'Showing an outline does NOT offset anything around the frame. EXERCISE indicator for example stays put.',\n    sidc: 'SWGU--------',\n    outlineWidth: 10,\n    outlineColor: 'red'\n  },\n  {\n    description: 'For frameless symbols, [JOKER, FAKER, EXERCISE, SIMULATION] indicator is NOT displayed.',\n    sidc: 'SWGUUCIZ----',\n    frame: false\n  },\n  {\n    description: 'Extending further to the sides, text modifiers come next.',\n    sidc: 'SDGPUCIZ----',\n    modifiers: {\n      W: 'W', X: 'X', Y: 'Y', V: 'V', T: 'T', Z: 'Z',\n      F: 'F', G: 'G', H: 'H', M: 'M', J: 'J', K: 'K', L: 'L', N: 'N', P: 'P'\n    }\n  },\n  {\n    description: 'Equipment has a dedicated text modifier for [QUANTITY].',\n    sidc: 'SHGPEWMAS------',\n    modifiers: { C: '2' }\n\n  },\n  {\n    description: 'On top of the frame, we first stack [INSTALLATION] modifier...',\n    sidc: 'SFGPI-----H----'\n  },\n  {\n    description: '...then [ECHELON]. Note: echelon has precedence over [INSTALLATION]. There can be only one!',\n    sidc: 'SFGPI------D---'\n  },\n  {\n    description: '[TASK FORCE] indicator comes next.',\n    sidc: 'SFGPI-----ED---'\n  },\n  {\n    description: 'After that [FEINT/DUMMY]...',\n    sidc: 'SFGPI-----GD---'\n  },\n  {\n    description: '... and finally [ENGAGEMENT BAR].',\n    sidc: 'SFGPI-----GD---',\n    modifiers: {\n      AO: 'A:BBB-CC'\n    }\n  },\n  {\n    description: 'By the way, text fields stay aligned relative to frame with optional JOKER, FAKER etc. context.',\n    sidc: 'SDGPI-----GD---',\n    modifiers: {\n      W: 'W', X: 'X', Y: 'Y', V: 'V', T: 'T', Z: 'Z',\n      F: 'F', G: 'G', H: 'H', M: 'M', J: 'J', K: 'K', L: 'L', N: 'N', P: 'P'\n    }\n  },\n  {\n    description: 'An outline still does not change relative positioning.',\n    sidc: 'SDGPI-----GD---',\n    outlineWidth: 6,\n    outlineColor: 'lightgrey',\n    modifiers: {\n      W: 'W', X: 'X', Y: 'Y', V: 'V', T: 'T', Z: 'Z',\n      F: 'F', G: 'G', H: 'H', M: 'M', J: 'J', K: 'K', L: 'L', N: 'N', P: 'P'\n    }\n  },\n  {\n    description: 'For equipment [MOBILITY INDICATOR] is the first extension below the frame.',\n    sidc: 'SHGPEWMAS-MR---'\n  },\n  {\n    description: 'For equipment [OPERATIONAL CONDITION] is the next extension below [MOBILITY]. It might be slightly misaligned if [MOBILITY] already is.',\n    sidc: 'SHGCEWMAS-MR---',\n  },\n  {\n    description: 'Outline nicely blooms around bottom extension without offsetting them.',\n    sidc: 'SHGCEWMAS-MR---',\n    outlineWidth: 10,\n    outlineColor: 'yellow'\n  },\n  {\n    description: 'Strictly speaking, 2525C does not support [OPERATIONAL CONDITION] for units. We do.',\n    sidc: 'SDGCI-----GD---',\n    modifiers: {\n      W: 'W', X: 'X', Y: 'Y', V: 'V', T: 'T', Z: 'Z',\n      F: 'F', G: 'G', H: 'H', M: 'M', J: 'J', K: 'K', L: 'L', N: 'N', P: 'P'\n    }\n  },\n  {\n    description: 'Direction indicator exits from the bottom center of regular units, i.e. not headquarters.',\n    sidc: 'SFGPUCIZ----',\n    modifiers: { Q: '120', Z: '25 km/h' }\n  },\n  {\n    description: 'Direction indicator is attached to headquarters staff for HQs.',\n    sidc: 'SFGPUCIZ--A-',\n    modifiers: { Q: '120', Z: '25 km/h' }\n  },\n  {\n    description: 'Direction indicator originates in frame center for equipments.',\n    sidc: 'SUAPMF----',\n    modifiers: { Q: '120', Z: '25 km/h' }\n  },\n  {\n    description: 'Invalid symbol for identifier codes are displayed as proposed by 2525/APP6.',\n    sidc: 'MUZP------'\n  },\n  {\n    context: 'issue',\n    reference: 'https://github.com/syncpoint/signs/issues/3',\n    description: 'Exercise flag causes extension of conditional bar',\n    sidc: 'SDGPUCIZ----',\n    modifiers: {\n      W: 'W', X: 'X', Y: 'Y', V: 'V', T: 'T', Z: 'Z',\n      F: 'F', G: 'G', H: 'H', M: 'M', J: 'J', K: 'K', L: 'L', N: 'N', P: 'P'\n    }\n  },\n  {\n    context: 'issue',\n    reference: 'https://github.com/syncpoint/signs/issues/4',\n    description: '30161000001110010000: icon not displayed',\n    sidc: '30161000001110010000'\n  },\n  {\n    context: 'issue',\n    reference: 'https://github.com/syncpoint/signs/issues/5',\n    description: '30161000001110010000: wrong frame color',\n    sidc: '30161000001110010000'\n  }\n]\n","import { legacy, modern, fallback } from './standard/index.js'\nimport { AMPLIFIERS } from './amplifiers.js'\nimport data from './data.js'\n\nconst factories = [\n  legacy,\n  modern,\n  fallback\n]\n\n/**\n * Translate name-based legacy modifiers to letter-based amplifiers.\n */\nconst translateModifers = options =>\n  Object.entries(options).reduce((acc, [k, v]) => {\n    if (AMPLIFIERS[k]) acc[AMPLIFIERS[k]] = v\n    return acc\n  }, {})\n\nconst removeModifiers = options =>\n  Object.entries(options).reduce((acc, [k, v]) => {\n    if (AMPLIFIERS[k]) delete acc[k]\n    return acc\n  }, { ...options })\n\n// Legacy constructor.\nexport const Symbol = function (sidc, options) {\n  return Symbol.of({\n    sidc,\n    modifiers: translateModifers(options),\n    ...removeModifiers(options),\n  })\n}\n\nSymbol.of = options => {\n  const factory = factories.find(factory => factory.accept(options))\n  if (!factory) return\n  return factory.document(options)\n}\n\n/**\n * Selected symbol descriptors for story telling and regression testing.\n */\nSymbol.data = () => data\n"],"names":["T","_isPlaceholder","a","_curry1","fn","f1","_curry2","f2","b","_b","_a","_arity","n","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","_curryN","length","received","combined","argsIdx","left","combinedIdx","hasPlaceholder","result","curryN","_curry3","f3","c","_c","_isArray","val","_isTransformer","obj","_dispatchable","methodNames","transducerCreator","idx","transducer","_xfBase","_arrayFromIterator","iter","list","next","_includesWith","pred","x","len","_functionName","f","match","_has","prop","_objectIs","_objectIs$1","toString","_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","item","keys","nIdx","ks","checkArgsLength","type","_uniqContentEquals","aIterator","bIterator","stackA","stackB","eq","_equals","aItem","typeA","keysA","extendedStackA","extendedStackB","key","equals","_indexOf","inf","_includes","_map","functor","_quote","s","escaped","pad","_toISOString","d","_complement","_arrayReduce","reducer","acc","index","_filter","_isObject","XFilter","xf","input","_xfilter","filter","filterable","reject","_toString","seen","recur","y","xs","mapPairs","k","repr","max","safeMax","maxByValue","maxByType","stringA","maxByStringValue","XMap","_xmap","map","_isInteger","_isString","_nth","offset","p","_isArrayLike","symIterator","_createReduce","arrayReduce","methodReduce","iterableReduce","_xArrayReduce","bind","thisObj","_xIterableReduce","step","_xMethodReduce","methodName","_xReduce","XWrap","_xwrap","reduce","always","curry","_pipe","g","_checkForMethod","methodname","slice","fromIndex","toIndex","tail","pipe","reverse","compose","cond","pairs","arity","pair","ifElse","condition","onTrue","onFalse","is","Ctor","propEq","name","paramCounts","SPECIAL_SPACES","isSpace","ch","isCommand","code","isArc","isDigit","isDigitStart","State","path","skipSpaces","state","scanFlag","scanParam","start","zeroFirst","hasCeiling","hasDecimal","hasDot","finalizeSegment","cmd","cmdLC","params","scanSegment","cmdCode","is_arc","comma_found","need_params","path_parse","svgPath","combine","m1","m2","Matrix","m","Matrix$1","tx","ty","sx","sy","angle","rx","ry","rad","cos","sin","i","isRelative","matrix","require$$0","operations","CMD_SPLIT_RE","PARAMS_SPLIT_RE","transform_parse","transformString","TAU","unit_vector_angle","ux","uy","vx","vy","sign","dot","get_arc_center","x1","y1","x2","y2","fa","fs","sin_phi","cos_phi","x1p","y1p","rx_sq","ry_sq","x1p_sq","y1p_sq","radicant","cxp","cyp","cx","cy","v1x","v1y","v2x","v2y","theta1","delta_theta","approximate_unit_arc","alpha","a2c","phi","lambda","cc","segments","curve","xp","yp","epsilon","torad","Ellipse","ax","ma","J","K","D","JK","L","l1","l2","ellipse","pathParse","transformParse","require$$1","require$$2","require$$3","require$$4","SvgPath","pstate","src","sgm","self","e","prevCmd","cmdSkipped","segment","pos","degrees","contourStartDeltaX","contourStartDeltaY","deltaX","deltaY","l","iterator","keepLazyStack","replacements","needReplace","lastX","lastY","countourStartX","countourStartY","j","newSegments","res","nameUC","nameLC","new_segments","nextX","nextY","prevControlX","prevControlY","prevSegment","curControlX","curControlY","svgpath","CBEZIER_MINMAX_EPSILON","minmaxQ","A","min","E","minmaxC","S","R","Q","svgPathBbox","seg","_","cxMinMax","cyMinMax","qxMinMax","qyMinMax","defaultWidth","chars","width","extent","lines","fontSize","factor","widths","line","resize","R.curry","dx","dy","bbox","translate","merge","normalize","NULL","transform","coeff","box","pathbbox","circle","r","group","of","text","rest","textAnchor","Text.width","R.cond","R.is","R.propEq","overlay","parts","overlays","part","R.prop","BBox.merge","instructions","fns","R.ifElse","instruction","MODE","OFF_WHITE","COLORS","FRAME_FILL","styles","meta","hints","colorMode","scheme","isCivilian","isJoker","R.always","R.T","mode","color","amplifiers","FRAME","frames","frame","open","graphics","BBox.of","options","typeHint","style","decoration","DECORATIONS","Layout.compose","context","spacing","installation","heights","strokeWidth","children","BBox.translate","echelons","translation","echelon","outline","engagement","BBox.extent","w","OFFSET","offsets","MOBILITY","mobility","taskForce","feintDummy","hqOffset","headquartersStaff","hqStaffLength","DEG2RAD","v","rotate","direction","paths","undefinedIcon","boxes","regular","skkm","icon","lookupInstructions","special","hashcode","lookupBBox","resolveStyles","stroke","fill","finalInstructions","fromTemplate","template","height","right","top","bottom","makeText","makeGroup","slots","placement","Text.extent","BBox.NULL","fromFields","fields","value","field","templates","Styles.styles","padding","center","dropIcon","Frame.frame","Layout.overlay","Frame.context","Mobility.mobility","Condition.condition","Installation.installation","Echelon.echelon","Echelon.outline","Modifiers.taskForce","Modifiers.feintDummy","Modifiers.headquartersStaff","Direction.direction","Engagement.engagement","BBox.resize","scale","size","anchor","sorter","document","array","escape","xml","zIndex","properties","propertyList","childList","child","svg","accept","sidc","normalized","regex","standard","AFFILIATION","EXERCISE","STATUS","CONDITION","DIMENSION","GROUND","FRAMELESS","UNFILLED","CIVILIAN","PENDING","TASK_FORCE","HEADQUARTERS","FEINT_DUMMY","ECHELON","CONTEXT","AMPLIFIERS","entries","fromEntries","flip","R.map","compose$1","data","factories","legacy","modern","fallback","translateModifers","removeModifiers","Symbol","factory","Symbol$1"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70]}