{"version":3,"file":"minimce.mjs","sources":["../node_modules/.pnpm/vue-global-config@0.4.2_@vue+composition-api@1.7.2_vue@3.3.9/node_modules/vue-global-config/dist/vue-global-config.mjs","../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/native.js","../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/v4.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js","../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/debounce.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/tinymce.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/models/dom/model.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/advlist/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/anchor/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/autolink/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/autosave/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/charmap/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/directionality/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/emoticons/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/emoticons/js/emojis.min.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/fullscreen/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/help/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/image/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/importcss/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/insertdatetime/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/link/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/lists/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/media/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/nonbreaking/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/pagebreak/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/preview/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/quickbars/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/save/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/searchreplace/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/table/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/visualblocks/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/visualchars/plugin.js","../node_modules/.pnpm/tinymce@6.8.0/node_modules/tinymce/plugins/wordcount/plugin.js","../src/Component.ts","../src/install.ts"],"sourcesContent":["import { isVue3 as Ft } from \"vue-demi\";\nvar Dt = typeof global == \"object\" && global && global.Object === Object && global;\nconst at = Dt;\nvar Nt = typeof self == \"object\" && self && self.Object === Object && self, Ut = at || Nt || Function(\"return this\")();\nconst m = Ut;\nvar Gt = m.Symbol;\nconst O = Gt;\nvar it = Object.prototype, Bt = it.hasOwnProperty, Ht = it.toString, U = O ? O.toStringTag : void 0;\nfunction Wt(e) {\n  var t = Bt.call(e, U), r = e[U];\n  try {\n    e[U] = void 0;\n    var n = !0;\n  } catch {\n  }\n  var a = Ht.call(e);\n  return n && (t ? e[U] = r : delete e[U]), a;\n}\nvar Kt = Object.prototype, zt = Kt.toString;\nfunction qt(e) {\n  return zt.call(e);\n}\nvar Xt = \"[object Null]\", Yt = \"[object Undefined]\", je = O ? O.toStringTag : void 0;\nfunction j(e) {\n  return e == null ? e === void 0 ? Yt : Xt : je && je in Object(e) ? Wt(e) : qt(e);\n}\nfunction w(e) {\n  return e != null && typeof e == \"object\";\n}\nvar Zt = \"[object Symbol]\";\nfunction be(e) {\n  return typeof e == \"symbol\" || w(e) && j(e) == Zt;\n}\nfunction Jt(e, t) {\n  for (var r = -1, n = e == null ? 0 : e.length, a = Array(n); ++r < n; )\n    a[r] = t(e[r], r, e);\n  return a;\n}\nvar Qt = Array.isArray;\nconst $ = Qt;\nvar Vt = 1 / 0, Le = O ? O.prototype : void 0, xe = Le ? Le.toString : void 0;\nfunction ot(e) {\n  if (typeof e == \"string\")\n    return e;\n  if ($(e))\n    return Jt(e, ot) + \"\";\n  if (be(e))\n    return xe ? xe.call(e) : \"\";\n  var t = e + \"\";\n  return t == \"0\" && 1 / e == -Vt ? \"-0\" : t;\n}\nfunction P(e) {\n  var t = typeof e;\n  return e != null && (t == \"object\" || t == \"function\");\n}\nfunction _e(e) {\n  return e;\n}\nvar kt = \"[object AsyncFunction]\", er = \"[object Function]\", tr = \"[object GeneratorFunction]\", rr = \"[object Proxy]\";\nfunction ve(e) {\n  if (!P(e))\n    return !1;\n  var t = j(e);\n  return t == er || t == tr || t == kt || t == rr;\n}\nvar nr = m[\"__core-js_shared__\"];\nconst oe = nr;\nvar Me = function() {\n  var e = /[^.]+$/.exec(oe && oe.keys && oe.keys.IE_PROTO || \"\");\n  return e ? \"Symbol(src)_1.\" + e : \"\";\n}();\nfunction ar(e) {\n  return !!Me && Me in e;\n}\nvar ir = Function.prototype, or = ir.toString;\nfunction L(e) {\n  if (e != null) {\n    try {\n      return or.call(e);\n    } catch {\n    }\n    try {\n      return e + \"\";\n    } catch {\n    }\n  }\n  return \"\";\n}\nvar sr = /[\\\\^$.*+?()[\\]{}|]/g, fr = /^\\[object .+?Constructor\\]$/, ur = Function.prototype, cr = Object.prototype, lr = ur.toString, pr = cr.hasOwnProperty, gr = RegExp(\n  \"^\" + lr.call(pr).replace(sr, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction dr(e) {\n  if (!P(e) || ar(e))\n    return !1;\n  var t = ve(e) ? gr : fr;\n  return t.test(L(e));\n}\nfunction hr(e, t) {\n  return e == null ? void 0 : e[t];\n}\nfunction x(e, t) {\n  var r = hr(e, t);\n  return dr(r) ? r : void 0;\n}\nvar yr = x(m, \"WeakMap\");\nconst ce = yr;\nvar Re = Object.create, br = function() {\n  function e() {\n  }\n  return function(t) {\n    if (!P(t))\n      return {};\n    if (Re)\n      return Re(t);\n    e.prototype = t;\n    var r = new e();\n    return e.prototype = void 0, r;\n  };\n}();\nconst _r = br;\nfunction vr(e, t, r) {\n  switch (r.length) {\n    case 0:\n      return e.call(t);\n    case 1:\n      return e.call(t, r[0]);\n    case 2:\n      return e.call(t, r[0], r[1]);\n    case 3:\n      return e.call(t, r[0], r[1], r[2]);\n  }\n  return e.apply(t, r);\n}\nfunction st(e, t) {\n  var r = -1, n = e.length;\n  for (t || (t = Array(n)); ++r < n; )\n    t[r] = e[r];\n  return t;\n}\nvar Tr = 800, $r = 16, Ar = Date.now;\nfunction Or(e) {\n  var t = 0, r = 0;\n  return function() {\n    var n = Ar(), a = $r - (n - r);\n    if (r = n, a > 0) {\n      if (++t >= Tr)\n        return arguments[0];\n    } else\n      t = 0;\n    return e.apply(void 0, arguments);\n  };\n}\nfunction wr(e) {\n  return function() {\n    return e;\n  };\n}\nvar mr = function() {\n  try {\n    var e = x(Object, \"defineProperty\");\n    return e({}, \"\", {}), e;\n  } catch {\n  }\n}();\nconst Q = mr;\nvar Pr = Q ? function(e, t) {\n  return Q(e, \"toString\", {\n    configurable: !0,\n    enumerable: !1,\n    value: wr(t),\n    writable: !0\n  });\n} : _e;\nconst Sr = Pr;\nvar Er = Or(Sr);\nconst Ir = Er;\nfunction Cr(e, t) {\n  for (var r = -1, n = e == null ? 0 : e.length; ++r < n && t(e[r], r, e) !== !1; )\n    ;\n  return e;\n}\nvar jr = 9007199254740991, Lr = /^(?:0|[1-9]\\d*)$/;\nfunction Te(e, t) {\n  var r = typeof e;\n  return t = t ?? jr, !!t && (r == \"number\" || r != \"symbol\" && Lr.test(e)) && e > -1 && e % 1 == 0 && e < t;\n}\nfunction te(e, t, r) {\n  t == \"__proto__\" && Q ? Q(e, t, {\n    configurable: !0,\n    enumerable: !0,\n    value: r,\n    writable: !0\n  }) : e[t] = r;\n}\nfunction z(e, t) {\n  return e === t || e !== e && t !== t;\n}\nvar xr = Object.prototype, Mr = xr.hasOwnProperty;\nfunction ft(e, t, r) {\n  var n = e[t];\n  (!(Mr.call(e, t) && z(n, r)) || r === void 0 && !(t in e)) && te(e, t, r);\n}\nfunction F(e, t, r, n) {\n  var a = !r;\n  r || (r = {});\n  for (var i = -1, o = t.length; ++i < o; ) {\n    var s = t[i], f = n ? n(r[s], e[s], s, r, e) : void 0;\n    f === void 0 && (f = e[s]), a ? te(r, s, f) : ft(r, s, f);\n  }\n  return r;\n}\nvar Fe = Math.max;\nfunction Rr(e, t, r) {\n  return t = Fe(t === void 0 ? e.length - 1 : t, 0), function() {\n    for (var n = arguments, a = -1, i = Fe(n.length - t, 0), o = Array(i); ++a < i; )\n      o[a] = n[t + a];\n    a = -1;\n    for (var s = Array(t + 1); ++a < t; )\n      s[a] = n[a];\n    return s[t] = r(o), vr(e, this, s);\n  };\n}\nfunction Fr(e, t) {\n  return Ir(Rr(e, t, _e), e + \"\");\n}\nvar Dr = 9007199254740991;\nfunction $e(e) {\n  return typeof e == \"number\" && e > -1 && e % 1 == 0 && e <= Dr;\n}\nfunction re(e) {\n  return e != null && $e(e.length) && !ve(e);\n}\nfunction Nr(e, t, r) {\n  if (!P(r))\n    return !1;\n  var n = typeof t;\n  return (n == \"number\" ? re(r) && Te(t, r.length) : n == \"string\" && t in r) ? z(r[t], e) : !1;\n}\nfunction ut(e) {\n  return Fr(function(t, r) {\n    var n = -1, a = r.length, i = a > 1 ? r[a - 1] : void 0, o = a > 2 ? r[2] : void 0;\n    for (i = e.length > 3 && typeof i == \"function\" ? (a--, i) : void 0, o && Nr(r[0], r[1], o) && (i = a < 3 ? void 0 : i, a = 1), t = Object(t); ++n < a; ) {\n      var s = r[n];\n      s && e(t, s, n, i);\n    }\n    return t;\n  });\n}\nvar Ur = Object.prototype;\nfunction Ae(e) {\n  var t = e && e.constructor, r = typeof t == \"function\" && t.prototype || Ur;\n  return e === r;\n}\nfunction Gr(e, t) {\n  for (var r = -1, n = Array(e); ++r < e; )\n    n[r] = t(r);\n  return n;\n}\nvar Br = \"[object Arguments]\";\nfunction De(e) {\n  return w(e) && j(e) == Br;\n}\nvar ct = Object.prototype, Hr = ct.hasOwnProperty, Wr = ct.propertyIsEnumerable, Kr = De(function() {\n  return arguments;\n}()) ? De : function(e) {\n  return w(e) && Hr.call(e, \"callee\") && !Wr.call(e, \"callee\");\n};\nconst V = Kr;\nfunction zr() {\n  return !1;\n}\nvar lt = typeof exports == \"object\" && exports && !exports.nodeType && exports, Ne = lt && typeof module == \"object\" && module && !module.nodeType && module, qr = Ne && Ne.exports === lt, Ue = qr ? m.Buffer : void 0, Xr = Ue ? Ue.isBuffer : void 0, Yr = Xr || zr;\nconst B = Yr;\nvar Zr = \"[object Arguments]\", Jr = \"[object Array]\", Qr = \"[object Boolean]\", Vr = \"[object Date]\", kr = \"[object Error]\", en = \"[object Function]\", tn = \"[object Map]\", rn = \"[object Number]\", nn = \"[object Object]\", an = \"[object RegExp]\", on = \"[object Set]\", sn = \"[object String]\", fn = \"[object WeakMap]\", un = \"[object ArrayBuffer]\", cn = \"[object DataView]\", ln = \"[object Float32Array]\", pn = \"[object Float64Array]\", gn = \"[object Int8Array]\", dn = \"[object Int16Array]\", hn = \"[object Int32Array]\", yn = \"[object Uint8Array]\", bn = \"[object Uint8ClampedArray]\", _n = \"[object Uint16Array]\", vn = \"[object Uint32Array]\", h = {};\nh[ln] = h[pn] = h[gn] = h[dn] = h[hn] = h[yn] = h[bn] = h[_n] = h[vn] = !0;\nh[Zr] = h[Jr] = h[un] = h[Qr] = h[cn] = h[Vr] = h[kr] = h[en] = h[tn] = h[rn] = h[nn] = h[an] = h[on] = h[sn] = h[fn] = !1;\nfunction Tn(e) {\n  return w(e) && $e(e.length) && !!h[j(e)];\n}\nfunction Oe(e) {\n  return function(t) {\n    return e(t);\n  };\n}\nvar pt = typeof exports == \"object\" && exports && !exports.nodeType && exports, G = pt && typeof module == \"object\" && module && !module.nodeType && module, $n = G && G.exports === pt, se = $n && at.process, An = function() {\n  try {\n    var e = G && G.require && G.require(\"util\").types;\n    return e || se && se.binding && se.binding(\"util\");\n  } catch {\n  }\n}();\nconst R = An;\nvar Ge = R && R.isTypedArray, On = Ge ? Oe(Ge) : Tn;\nconst we = On;\nvar wn = Object.prototype, mn = wn.hasOwnProperty;\nfunction gt(e, t) {\n  var r = $(e), n = !r && V(e), a = !r && !n && B(e), i = !r && !n && !a && we(e), o = r || n || a || i, s = o ? Gr(e.length, String) : [], f = s.length;\n  for (var c in e)\n    (t || mn.call(e, c)) && !(o && // Safari 9 has enumerable `arguments.length` in strict mode.\n    (c == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n    a && (c == \"offset\" || c == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n    i && (c == \"buffer\" || c == \"byteLength\" || c == \"byteOffset\") || // Skip index properties.\n    Te(c, f))) && s.push(c);\n  return s;\n}\nfunction dt(e, t) {\n  return function(r) {\n    return e(t(r));\n  };\n}\nvar Pn = dt(Object.keys, Object);\nconst Sn = Pn;\nvar En = Object.prototype, In = En.hasOwnProperty;\nfunction Cn(e) {\n  if (!Ae(e))\n    return Sn(e);\n  var t = [];\n  for (var r in Object(e))\n    In.call(e, r) && r != \"constructor\" && t.push(r);\n  return t;\n}\nfunction q(e) {\n  return re(e) ? gt(e) : Cn(e);\n}\nfunction jn(e) {\n  var t = [];\n  if (e != null)\n    for (var r in Object(e))\n      t.push(r);\n  return t;\n}\nvar Ln = Object.prototype, xn = Ln.hasOwnProperty;\nfunction Mn(e) {\n  if (!P(e))\n    return jn(e);\n  var t = Ae(e), r = [];\n  for (var n in e)\n    n == \"constructor\" && (t || !xn.call(e, n)) || r.push(n);\n  return r;\n}\nfunction D(e) {\n  return re(e) ? gt(e, !0) : Mn(e);\n}\nvar Rn = ut(function(e, t, r, n) {\n  F(t, D(t), e, n);\n});\nconst Fn = Rn;\nvar Dn = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/, Nn = /^\\w*$/;\nfunction me(e, t) {\n  if ($(e))\n    return !1;\n  var r = typeof e;\n  return r == \"number\" || r == \"symbol\" || r == \"boolean\" || e == null || be(e) ? !0 : Nn.test(e) || !Dn.test(e) || t != null && e in Object(t);\n}\nvar Un = x(Object, \"create\");\nconst H = Un;\nfunction Gn() {\n  this.__data__ = H ? H(null) : {}, this.size = 0;\n}\nfunction Bn(e) {\n  var t = this.has(e) && delete this.__data__[e];\n  return this.size -= t ? 1 : 0, t;\n}\nvar Hn = \"__lodash_hash_undefined__\", Wn = Object.prototype, Kn = Wn.hasOwnProperty;\nfunction zn(e) {\n  var t = this.__data__;\n  if (H) {\n    var r = t[e];\n    return r === Hn ? void 0 : r;\n  }\n  return Kn.call(t, e) ? t[e] : void 0;\n}\nvar qn = Object.prototype, Xn = qn.hasOwnProperty;\nfunction Yn(e) {\n  var t = this.__data__;\n  return H ? t[e] !== void 0 : Xn.call(t, e);\n}\nvar Zn = \"__lodash_hash_undefined__\";\nfunction Jn(e, t) {\n  var r = this.__data__;\n  return this.size += this.has(e) ? 0 : 1, r[e] = H && t === void 0 ? Zn : t, this;\n}\nfunction C(e) {\n  var t = -1, r = e == null ? 0 : e.length;\n  for (this.clear(); ++t < r; ) {\n    var n = e[t];\n    this.set(n[0], n[1]);\n  }\n}\nC.prototype.clear = Gn;\nC.prototype.delete = Bn;\nC.prototype.get = zn;\nC.prototype.has = Yn;\nC.prototype.set = Jn;\nfunction Qn() {\n  this.__data__ = [], this.size = 0;\n}\nfunction ne(e, t) {\n  for (var r = e.length; r--; )\n    if (z(e[r][0], t))\n      return r;\n  return -1;\n}\nvar Vn = Array.prototype, kn = Vn.splice;\nfunction ea(e) {\n  var t = this.__data__, r = ne(t, e);\n  if (r < 0)\n    return !1;\n  var n = t.length - 1;\n  return r == n ? t.pop() : kn.call(t, r, 1), --this.size, !0;\n}\nfunction ta(e) {\n  var t = this.__data__, r = ne(t, e);\n  return r < 0 ? void 0 : t[r][1];\n}\nfunction ra(e) {\n  return ne(this.__data__, e) > -1;\n}\nfunction na(e, t) {\n  var r = this.__data__, n = ne(r, e);\n  return n < 0 ? (++this.size, r.push([e, t])) : r[n][1] = t, this;\n}\nfunction S(e) {\n  var t = -1, r = e == null ? 0 : e.length;\n  for (this.clear(); ++t < r; ) {\n    var n = e[t];\n    this.set(n[0], n[1]);\n  }\n}\nS.prototype.clear = Qn;\nS.prototype.delete = ea;\nS.prototype.get = ta;\nS.prototype.has = ra;\nS.prototype.set = na;\nvar aa = x(m, \"Map\");\nconst W = aa;\nfunction ia() {\n  this.size = 0, this.__data__ = {\n    hash: new C(),\n    map: new (W || S)(),\n    string: new C()\n  };\n}\nfunction oa(e) {\n  var t = typeof e;\n  return t == \"string\" || t == \"number\" || t == \"symbol\" || t == \"boolean\" ? e !== \"__proto__\" : e === null;\n}\nfunction ae(e, t) {\n  var r = e.__data__;\n  return oa(t) ? r[typeof t == \"string\" ? \"string\" : \"hash\"] : r.map;\n}\nfunction sa(e) {\n  var t = ae(this, e).delete(e);\n  return this.size -= t ? 1 : 0, t;\n}\nfunction fa(e) {\n  return ae(this, e).get(e);\n}\nfunction ua(e) {\n  return ae(this, e).has(e);\n}\nfunction ca(e, t) {\n  var r = ae(this, e), n = r.size;\n  return r.set(e, t), this.size += r.size == n ? 0 : 1, this;\n}\nfunction E(e) {\n  var t = -1, r = e == null ? 0 : e.length;\n  for (this.clear(); ++t < r; ) {\n    var n = e[t];\n    this.set(n[0], n[1]);\n  }\n}\nE.prototype.clear = ia;\nE.prototype.delete = sa;\nE.prototype.get = fa;\nE.prototype.has = ua;\nE.prototype.set = ca;\nvar la = \"Expected a function\";\nfunction Pe(e, t) {\n  if (typeof e != \"function\" || t != null && typeof t != \"function\")\n    throw new TypeError(la);\n  var r = function() {\n    var n = arguments, a = t ? t.apply(this, n) : n[0], i = r.cache;\n    if (i.has(a))\n      return i.get(a);\n    var o = e.apply(this, n);\n    return r.cache = i.set(a, o) || i, o;\n  };\n  return r.cache = new (Pe.Cache || E)(), r;\n}\nPe.Cache = E;\nvar pa = 500;\nfunction ga(e) {\n  var t = Pe(e, function(n) {\n    return r.size === pa && r.clear(), n;\n  }), r = t.cache;\n  return t;\n}\nvar da = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g, ha = /\\\\(\\\\)?/g, ya = ga(function(e) {\n  var t = [];\n  return e.charCodeAt(0) === 46 && t.push(\"\"), e.replace(da, function(r, n, a, i) {\n    t.push(a ? i.replace(ha, \"$1\") : n || r);\n  }), t;\n});\nconst ba = ya;\nfunction _a(e) {\n  return e == null ? \"\" : ot(e);\n}\nfunction ht(e, t) {\n  return $(e) ? e : me(e, t) ? [e] : ba(_a(e));\n}\nvar va = 1 / 0;\nfunction ie(e) {\n  if (typeof e == \"string\" || be(e))\n    return e;\n  var t = e + \"\";\n  return t == \"0\" && 1 / e == -va ? \"-0\" : t;\n}\nfunction yt(e, t) {\n  t = ht(t, e);\n  for (var r = 0, n = t.length; e != null && r < n; )\n    e = e[ie(t[r++])];\n  return r && r == n ? e : void 0;\n}\nfunction Ta(e, t, r) {\n  var n = e == null ? void 0 : yt(e, t);\n  return n === void 0 ? r : n;\n}\nfunction bt(e, t) {\n  for (var r = -1, n = t.length, a = e.length; ++r < n; )\n    e[a + r] = t[r];\n  return e;\n}\nvar $a = dt(Object.getPrototypeOf, Object);\nconst Se = $a;\nvar Aa = \"[object Object]\", Oa = Function.prototype, wa = Object.prototype, _t = Oa.toString, ma = wa.hasOwnProperty, Pa = _t.call(Object);\nfunction vt(e) {\n  if (!w(e) || j(e) != Aa)\n    return !1;\n  var t = Se(e);\n  if (t === null)\n    return !0;\n  var r = ma.call(t, \"constructor\") && t.constructor;\n  return typeof r == \"function\" && r instanceof r && _t.call(r) == Pa;\n}\nfunction Sa() {\n  this.__data__ = new S(), this.size = 0;\n}\nfunction Ea(e) {\n  var t = this.__data__, r = t.delete(e);\n  return this.size = t.size, r;\n}\nfunction Ia(e) {\n  return this.__data__.get(e);\n}\nfunction Ca(e) {\n  return this.__data__.has(e);\n}\nvar ja = 200;\nfunction La(e, t) {\n  var r = this.__data__;\n  if (r instanceof S) {\n    var n = r.__data__;\n    if (!W || n.length < ja - 1)\n      return n.push([e, t]), this.size = ++r.size, this;\n    r = this.__data__ = new E(n);\n  }\n  return r.set(e, t), this.size = r.size, this;\n}\nfunction A(e) {\n  var t = this.__data__ = new S(e);\n  this.size = t.size;\n}\nA.prototype.clear = Sa;\nA.prototype.delete = Ea;\nA.prototype.get = Ia;\nA.prototype.has = Ca;\nA.prototype.set = La;\nfunction xa(e, t) {\n  return e && F(t, q(t), e);\n}\nfunction Ma(e, t) {\n  return e && F(t, D(t), e);\n}\nvar Tt = typeof exports == \"object\" && exports && !exports.nodeType && exports, Be = Tt && typeof module == \"object\" && module && !module.nodeType && module, Ra = Be && Be.exports === Tt, He = Ra ? m.Buffer : void 0, We = He ? He.allocUnsafe : void 0;\nfunction $t(e, t) {\n  if (t)\n    return e.slice();\n  var r = e.length, n = We ? We(r) : new e.constructor(r);\n  return e.copy(n), n;\n}\nfunction Fa(e, t) {\n  for (var r = -1, n = e == null ? 0 : e.length, a = 0, i = []; ++r < n; ) {\n    var o = e[r];\n    t(o, r, e) && (i[a++] = o);\n  }\n  return i;\n}\nfunction At() {\n  return [];\n}\nvar Da = Object.prototype, Na = Da.propertyIsEnumerable, Ke = Object.getOwnPropertySymbols, Ua = Ke ? function(e) {\n  return e == null ? [] : (e = Object(e), Fa(Ke(e), function(t) {\n    return Na.call(e, t);\n  }));\n} : At;\nconst Ee = Ua;\nfunction Ga(e, t) {\n  return F(e, Ee(e), t);\n}\nvar Ba = Object.getOwnPropertySymbols, Ha = Ba ? function(e) {\n  for (var t = []; e; )\n    bt(t, Ee(e)), e = Se(e);\n  return t;\n} : At;\nconst Ot = Ha;\nfunction Wa(e, t) {\n  return F(e, Ot(e), t);\n}\nfunction wt(e, t, r) {\n  var n = t(e);\n  return $(e) ? n : bt(n, r(e));\n}\nfunction le(e) {\n  return wt(e, q, Ee);\n}\nfunction Ka(e) {\n  return wt(e, D, Ot);\n}\nvar za = x(m, \"DataView\");\nconst pe = za;\nvar qa = x(m, \"Promise\");\nconst ge = qa;\nvar Xa = x(m, \"Set\");\nconst de = Xa;\nvar ze = \"[object Map]\", Ya = \"[object Object]\", qe = \"[object Promise]\", Xe = \"[object Set]\", Ye = \"[object WeakMap]\", Ze = \"[object DataView]\", Za = L(pe), Ja = L(W), Qa = L(ge), Va = L(de), ka = L(ce), I = j;\n(pe && I(new pe(new ArrayBuffer(1))) != Ze || W && I(new W()) != ze || ge && I(ge.resolve()) != qe || de && I(new de()) != Xe || ce && I(new ce()) != Ye) && (I = function(e) {\n  var t = j(e), r = t == Ya ? e.constructor : void 0, n = r ? L(r) : \"\";\n  if (n)\n    switch (n) {\n      case Za:\n        return Ze;\n      case Ja:\n        return ze;\n      case Qa:\n        return qe;\n      case Va:\n        return Xe;\n      case ka:\n        return Ye;\n    }\n  return t;\n});\nconst K = I;\nvar ei = Object.prototype, ti = ei.hasOwnProperty;\nfunction ri(e) {\n  var t = e.length, r = new e.constructor(t);\n  return t && typeof e[0] == \"string\" && ti.call(e, \"index\") && (r.index = e.index, r.input = e.input), r;\n}\nvar ni = m.Uint8Array;\nconst k = ni;\nfunction Ie(e) {\n  var t = new e.constructor(e.byteLength);\n  return new k(t).set(new k(e)), t;\n}\nfunction ai(e, t) {\n  var r = t ? Ie(e.buffer) : e.buffer;\n  return new e.constructor(r, e.byteOffset, e.byteLength);\n}\nvar ii = /\\w*$/;\nfunction oi(e) {\n  var t = new e.constructor(e.source, ii.exec(e));\n  return t.lastIndex = e.lastIndex, t;\n}\nvar Je = O ? O.prototype : void 0, Qe = Je ? Je.valueOf : void 0;\nfunction si(e) {\n  return Qe ? Object(Qe.call(e)) : {};\n}\nfunction mt(e, t) {\n  var r = t ? Ie(e.buffer) : e.buffer;\n  return new e.constructor(r, e.byteOffset, e.length);\n}\nvar fi = \"[object Boolean]\", ui = \"[object Date]\", ci = \"[object Map]\", li = \"[object Number]\", pi = \"[object RegExp]\", gi = \"[object Set]\", di = \"[object String]\", hi = \"[object Symbol]\", yi = \"[object ArrayBuffer]\", bi = \"[object DataView]\", _i = \"[object Float32Array]\", vi = \"[object Float64Array]\", Ti = \"[object Int8Array]\", $i = \"[object Int16Array]\", Ai = \"[object Int32Array]\", Oi = \"[object Uint8Array]\", wi = \"[object Uint8ClampedArray]\", mi = \"[object Uint16Array]\", Pi = \"[object Uint32Array]\";\nfunction Si(e, t, r) {\n  var n = e.constructor;\n  switch (t) {\n    case yi:\n      return Ie(e);\n    case fi:\n    case ui:\n      return new n(+e);\n    case bi:\n      return ai(e, r);\n    case _i:\n    case vi:\n    case Ti:\n    case $i:\n    case Ai:\n    case Oi:\n    case wi:\n    case mi:\n    case Pi:\n      return mt(e, r);\n    case ci:\n      return new n();\n    case li:\n    case di:\n      return new n(e);\n    case pi:\n      return oi(e);\n    case gi:\n      return new n();\n    case hi:\n      return si(e);\n  }\n}\nfunction Pt(e) {\n  return typeof e.constructor == \"function\" && !Ae(e) ? _r(Se(e)) : {};\n}\nvar Ei = \"[object Map]\";\nfunction Ii(e) {\n  return w(e) && K(e) == Ei;\n}\nvar Ve = R && R.isMap, Ci = Ve ? Oe(Ve) : Ii;\nconst ji = Ci;\nvar Li = \"[object Set]\";\nfunction xi(e) {\n  return w(e) && K(e) == Li;\n}\nvar ke = R && R.isSet, Mi = ke ? Oe(ke) : xi;\nconst Ri = Mi;\nvar Fi = 1, Di = 2, Ni = 4, St = \"[object Arguments]\", Ui = \"[object Array]\", Gi = \"[object Boolean]\", Bi = \"[object Date]\", Hi = \"[object Error]\", Et = \"[object Function]\", Wi = \"[object GeneratorFunction]\", Ki = \"[object Map]\", zi = \"[object Number]\", It = \"[object Object]\", qi = \"[object RegExp]\", Xi = \"[object Set]\", Yi = \"[object String]\", Zi = \"[object Symbol]\", Ji = \"[object WeakMap]\", Qi = \"[object ArrayBuffer]\", Vi = \"[object DataView]\", ki = \"[object Float32Array]\", eo = \"[object Float64Array]\", to = \"[object Int8Array]\", ro = \"[object Int16Array]\", no = \"[object Int32Array]\", ao = \"[object Uint8Array]\", io = \"[object Uint8ClampedArray]\", oo = \"[object Uint16Array]\", so = \"[object Uint32Array]\", d = {};\nd[St] = d[Ui] = d[Qi] = d[Vi] = d[Gi] = d[Bi] = d[ki] = d[eo] = d[to] = d[ro] = d[no] = d[Ki] = d[zi] = d[It] = d[qi] = d[Xi] = d[Yi] = d[Zi] = d[ao] = d[io] = d[oo] = d[so] = !0;\nd[Hi] = d[Et] = d[Ji] = !1;\nfunction J(e, t, r, n, a, i) {\n  var o, s = t & Fi, f = t & Di, c = t & Ni;\n  if (r && (o = a ? r(e, n, a, i) : r(e)), o !== void 0)\n    return o;\n  if (!P(e))\n    return e;\n  var l = $(e);\n  if (l) {\n    if (o = ri(e), !s)\n      return st(e, o);\n  } else {\n    var p = K(e), u = p == Et || p == Wi;\n    if (B(e))\n      return $t(e, s);\n    if (p == It || p == St || u && !a) {\n      if (o = f || u ? {} : Pt(e), !s)\n        return f ? Wa(e, Ma(o, e)) : Ga(e, xa(o, e));\n    } else {\n      if (!d[p])\n        return a ? e : {};\n      o = Si(e, p, s);\n    }\n  }\n  i || (i = new A());\n  var y = i.get(e);\n  if (y)\n    return y;\n  i.set(e, o), Ri(e) ? e.forEach(function(_) {\n    o.add(J(_, t, r, _, e, i));\n  }) : ji(e) && e.forEach(function(_, g) {\n    o.set(g, J(_, t, r, g, e, i));\n  });\n  var b = c ? f ? Ka : le : f ? D : q, v = l ? void 0 : b(e);\n  return Cr(v || e, function(_, g) {\n    v && (g = _, _ = e[g]), ft(o, g, J(_, t, r, g, e, i));\n  }), o;\n}\nvar fo = 1, uo = 4;\nfunction co(e) {\n  return J(e, fo | uo);\n}\nvar lo = \"__lodash_hash_undefined__\";\nfunction po(e) {\n  return this.__data__.set(e, lo), this;\n}\nfunction go(e) {\n  return this.__data__.has(e);\n}\nfunction ee(e) {\n  var t = -1, r = e == null ? 0 : e.length;\n  for (this.__data__ = new E(); ++t < r; )\n    this.add(e[t]);\n}\nee.prototype.add = ee.prototype.push = po;\nee.prototype.has = go;\nfunction ho(e, t) {\n  for (var r = -1, n = e == null ? 0 : e.length; ++r < n; )\n    if (t(e[r], r, e))\n      return !0;\n  return !1;\n}\nfunction yo(e, t) {\n  return e.has(t);\n}\nvar bo = 1, _o = 2;\nfunction Ct(e, t, r, n, a, i) {\n  var o = r & bo, s = e.length, f = t.length;\n  if (s != f && !(o && f > s))\n    return !1;\n  var c = i.get(e), l = i.get(t);\n  if (c && l)\n    return c == t && l == e;\n  var p = -1, u = !0, y = r & _o ? new ee() : void 0;\n  for (i.set(e, t), i.set(t, e); ++p < s; ) {\n    var b = e[p], v = t[p];\n    if (n)\n      var _ = o ? n(v, b, p, t, e, i) : n(b, v, p, e, t, i);\n    if (_ !== void 0) {\n      if (_)\n        continue;\n      u = !1;\n      break;\n    }\n    if (y) {\n      if (!ho(t, function(g, T) {\n        if (!yo(y, T) && (b === g || a(b, g, r, n, i)))\n          return y.push(T);\n      })) {\n        u = !1;\n        break;\n      }\n    } else if (!(b === v || a(b, v, r, n, i))) {\n      u = !1;\n      break;\n    }\n  }\n  return i.delete(e), i.delete(t), u;\n}\nfunction vo(e) {\n  var t = -1, r = Array(e.size);\n  return e.forEach(function(n, a) {\n    r[++t] = [a, n];\n  }), r;\n}\nfunction To(e) {\n  var t = -1, r = Array(e.size);\n  return e.forEach(function(n) {\n    r[++t] = n;\n  }), r;\n}\nvar $o = 1, Ao = 2, Oo = \"[object Boolean]\", wo = \"[object Date]\", mo = \"[object Error]\", Po = \"[object Map]\", So = \"[object Number]\", Eo = \"[object RegExp]\", Io = \"[object Set]\", Co = \"[object String]\", jo = \"[object Symbol]\", Lo = \"[object ArrayBuffer]\", xo = \"[object DataView]\", et = O ? O.prototype : void 0, fe = et ? et.valueOf : void 0;\nfunction Mo(e, t, r, n, a, i, o) {\n  switch (r) {\n    case xo:\n      if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset)\n        return !1;\n      e = e.buffer, t = t.buffer;\n    case Lo:\n      return !(e.byteLength != t.byteLength || !i(new k(e), new k(t)));\n    case Oo:\n    case wo:\n    case So:\n      return z(+e, +t);\n    case mo:\n      return e.name == t.name && e.message == t.message;\n    case Eo:\n    case Co:\n      return e == t + \"\";\n    case Po:\n      var s = vo;\n    case Io:\n      var f = n & $o;\n      if (s || (s = To), e.size != t.size && !f)\n        return !1;\n      var c = o.get(e);\n      if (c)\n        return c == t;\n      n |= Ao, o.set(e, t);\n      var l = Ct(s(e), s(t), n, a, i, o);\n      return o.delete(e), l;\n    case jo:\n      if (fe)\n        return fe.call(e) == fe.call(t);\n  }\n  return !1;\n}\nvar Ro = 1, Fo = Object.prototype, Do = Fo.hasOwnProperty;\nfunction No(e, t, r, n, a, i) {\n  var o = r & Ro, s = le(e), f = s.length, c = le(t), l = c.length;\n  if (f != l && !o)\n    return !1;\n  for (var p = f; p--; ) {\n    var u = s[p];\n    if (!(o ? u in t : Do.call(t, u)))\n      return !1;\n  }\n  var y = i.get(e), b = i.get(t);\n  if (y && b)\n    return y == t && b == e;\n  var v = !0;\n  i.set(e, t), i.set(t, e);\n  for (var _ = o; ++p < f; ) {\n    u = s[p];\n    var g = e[u], T = t[u];\n    if (n)\n      var X = o ? n(T, g, u, t, e, i) : n(g, T, u, e, t, i);\n    if (!(X === void 0 ? g === T || a(g, T, r, n, i) : X)) {\n      v = !1;\n      break;\n    }\n    _ || (_ = u == \"constructor\");\n  }\n  if (v && !_) {\n    var N = e.constructor, M = t.constructor;\n    N != M && \"constructor\" in e && \"constructor\" in t && !(typeof N == \"function\" && N instanceof N && typeof M == \"function\" && M instanceof M) && (v = !1);\n  }\n  return i.delete(e), i.delete(t), v;\n}\nvar Uo = 1, tt = \"[object Arguments]\", rt = \"[object Array]\", Y = \"[object Object]\", Go = Object.prototype, nt = Go.hasOwnProperty;\nfunction Bo(e, t, r, n, a, i) {\n  var o = $(e), s = $(t), f = o ? rt : K(e), c = s ? rt : K(t);\n  f = f == tt ? Y : f, c = c == tt ? Y : c;\n  var l = f == Y, p = c == Y, u = f == c;\n  if (u && B(e)) {\n    if (!B(t))\n      return !1;\n    o = !0, l = !1;\n  }\n  if (u && !l)\n    return i || (i = new A()), o || we(e) ? Ct(e, t, r, n, a, i) : Mo(e, t, f, r, n, a, i);\n  if (!(r & Uo)) {\n    var y = l && nt.call(e, \"__wrapped__\"), b = p && nt.call(t, \"__wrapped__\");\n    if (y || b) {\n      var v = y ? e.value() : e, _ = b ? t.value() : t;\n      return i || (i = new A()), a(v, _, r, n, i);\n    }\n  }\n  return u ? (i || (i = new A()), No(e, t, r, n, a, i)) : !1;\n}\nfunction Ce(e, t, r, n, a) {\n  return e === t ? !0 : e == null || t == null || !w(e) && !w(t) ? e !== e && t !== t : Bo(e, t, r, n, Ce, a);\n}\nvar Ho = 1, Wo = 2;\nfunction Ko(e, t, r, n) {\n  var a = r.length, i = a, o = !n;\n  if (e == null)\n    return !i;\n  for (e = Object(e); a--; ) {\n    var s = r[a];\n    if (o && s[2] ? s[1] !== e[s[0]] : !(s[0] in e))\n      return !1;\n  }\n  for (; ++a < i; ) {\n    s = r[a];\n    var f = s[0], c = e[f], l = s[1];\n    if (o && s[2]) {\n      if (c === void 0 && !(f in e))\n        return !1;\n    } else {\n      var p = new A();\n      if (n)\n        var u = n(c, l, f, e, t, p);\n      if (!(u === void 0 ? Ce(l, c, Ho | Wo, n, p) : u))\n        return !1;\n    }\n  }\n  return !0;\n}\nfunction jt(e) {\n  return e === e && !P(e);\n}\nfunction zo(e) {\n  for (var t = q(e), r = t.length; r--; ) {\n    var n = t[r], a = e[n];\n    t[r] = [n, a, jt(a)];\n  }\n  return t;\n}\nfunction Lt(e, t) {\n  return function(r) {\n    return r == null ? !1 : r[e] === t && (t !== void 0 || e in Object(r));\n  };\n}\nfunction qo(e) {\n  var t = zo(e);\n  return t.length == 1 && t[0][2] ? Lt(t[0][0], t[0][1]) : function(r) {\n    return r === e || Ko(r, e, t);\n  };\n}\nfunction Xo(e, t) {\n  return e != null && t in Object(e);\n}\nfunction Yo(e, t, r) {\n  t = ht(t, e);\n  for (var n = -1, a = t.length, i = !1; ++n < a; ) {\n    var o = ie(t[n]);\n    if (!(i = e != null && r(e, o)))\n      break;\n    e = e[o];\n  }\n  return i || ++n != a ? i : (a = e == null ? 0 : e.length, !!a && $e(a) && Te(o, a) && ($(e) || V(e)));\n}\nfunction Zo(e, t) {\n  return e != null && Yo(e, t, Xo);\n}\nvar Jo = 1, Qo = 2;\nfunction Vo(e, t) {\n  return me(e) && jt(t) ? Lt(ie(e), t) : function(r) {\n    var n = Ta(r, e);\n    return n === void 0 && n === t ? Zo(r, e) : Ce(t, n, Jo | Qo);\n  };\n}\nfunction ko(e) {\n  return function(t) {\n    return t == null ? void 0 : t[e];\n  };\n}\nfunction es(e) {\n  return function(t) {\n    return yt(t, e);\n  };\n}\nfunction ts(e) {\n  return me(e) ? ko(ie(e)) : es(e);\n}\nfunction rs(e) {\n  return typeof e == \"function\" ? e : e == null ? _e : typeof e == \"object\" ? $(e) ? Vo(e[0], e[1]) : qo(e) : ts(e);\n}\nfunction ns(e) {\n  return function(t, r, n) {\n    for (var a = -1, i = Object(t), o = n(t), s = o.length; s--; ) {\n      var f = o[e ? s : ++a];\n      if (r(i[f], f, i) === !1)\n        break;\n    }\n    return t;\n  };\n}\nvar as = ns();\nconst xt = as;\nfunction is(e, t) {\n  return e && xt(e, t, q);\n}\nfunction he(e, t, r) {\n  (r !== void 0 && !z(e[t], r) || r === void 0 && !(t in e)) && te(e, t, r);\n}\nfunction os(e) {\n  return w(e) && re(e);\n}\nfunction ye(e, t) {\n  if (!(t === \"constructor\" && typeof e[t] == \"function\") && t != \"__proto__\")\n    return e[t];\n}\nfunction ss(e) {\n  return F(e, D(e));\n}\nfunction fs(e, t, r, n, a, i, o) {\n  var s = ye(e, r), f = ye(t, r), c = o.get(f);\n  if (c) {\n    he(e, r, c);\n    return;\n  }\n  var l = i ? i(s, f, r + \"\", e, t, o) : void 0, p = l === void 0;\n  if (p) {\n    var u = $(f), y = !u && B(f), b = !u && !y && we(f);\n    l = f, u || y || b ? $(s) ? l = s : os(s) ? l = st(s) : y ? (p = !1, l = $t(f, !0)) : b ? (p = !1, l = mt(f, !0)) : l = [] : vt(f) || V(f) ? (l = s, V(s) ? l = ss(s) : (!P(s) || ve(s)) && (l = Pt(f))) : p = !1;\n  }\n  p && (o.set(f, l), a(l, f, n, i, o), o.delete(f)), he(e, r, l);\n}\nfunction Mt(e, t, r, n, a) {\n  e !== t && xt(t, function(i, o) {\n    if (a || (a = new A()), P(i))\n      fs(e, t, o, r, Mt, n, a);\n    else {\n      var s = n ? n(ye(e, o), i, o + \"\", e, t, a) : void 0;\n      s === void 0 && (s = i), he(e, o, s);\n    }\n  }, D);\n}\nvar us = ut(function(e, t, r, n) {\n  Mt(e, t, r, n);\n});\nconst cs = us;\nfunction ls(e, t) {\n  var r = {};\n  return t = rs(t), is(e, function(n, a, i) {\n    te(r, t(n, a, i), n);\n  }), r;\n}\nconst ps = /([\\p{Ll}\\d])(\\p{Lu})/gu, gs = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu, ds = /(\\d)(\\p{Ll})/gu, hs = /(\\p{L})(\\d)/gu, ys = /[^\\p{L}\\d]+/giu, Z = \"$1\\0$2\";\nfunction bs(e, t = {}) {\n  let r = e.replace(ps, Z).replace(gs, Z);\n  t.separateNumbers && (r = r.replace(ds, Z).replace(hs, Z)), r = r.replace(ys, \"\\0\");\n  let n = 0, a = r.length;\n  for (; r.charAt(n) === \"\\0\"; )\n    n++;\n  if (n === a)\n    return [];\n  for (; r.charAt(a - 1) === \"\\0\"; )\n    a--;\n  return r.slice(n, a).split(/\\0/g);\n}\nfunction Rt(e, t) {\n  const r = _s(t == null ? void 0 : t.locale), n = vs(t == null ? void 0 : t.locale), a = Ts(r, n);\n  return bs(e, t).map((i, o) => o === 0 ? r(i) : a(i, o)).join(\"\");\n}\nfunction _s(e) {\n  return e === !1 ? (t) => t.toLowerCase() : (t) => t.toLocaleLowerCase(e);\n}\nfunction vs(e) {\n  return e === !1 ? (t) => t.toUpperCase() : (t) => t.toLocaleUpperCase(e);\n}\nfunction Ts(e, t) {\n  return (r, n) => {\n    const a = r[0];\n    return (n > 0 && a >= \"0\" && a <= \"9\" ? \"_\" + a : t(a)) + e(r.slice(1));\n  };\n}\nfunction $s(e, t) {\n  const r = /* @__PURE__ */ Object.create(null), n = e.split(\",\");\n  for (let a = 0; a < n.length; a++)\n    r[n[a]] = !0;\n  return t ? (a) => !!r[a.toLowerCase()] : (a) => !!r[a];\n}\nconst As = /* @__PURE__ */ $s(\"String,Number,Boolean,Function,Symbol,BigInt\");\nfunction Os(e) {\n  const t = e == null ? void 0 : e.toString().match(/^\\s*function (\\w+)/);\n  return t ? t[1] : e === null ? \"null\" : \"\";\n}\nfunction ws(e, t) {\n  let r;\n  const n = Os(t);\n  if (As(n)) {\n    const a = typeof e;\n    r = a === n.toLowerCase(), !r && a === \"object\" && (r = e instanceof t);\n  } else\n    n === \"Object\" ? r = P(e) : n === \"Array\" ? r = Array.isArray(e) : n === \"null\" ? r = e === null : r = e instanceof t;\n  return {\n    valid: r,\n    expectedType: n\n  };\n}\nfunction ms({\n  prop: e,\n  type: t,\n  validator: r\n}) {\n  if (![void 0, null].includes(e) && t) {\n    let n = !1;\n    const a = Array.isArray(t) ? t : [t], i = [];\n    for (let o = 0; o < a.length && !n; o++) {\n      const { valid: s, expectedType: f } = ws(e, a[o]);\n      i.push(f || \"\"), n = s;\n    }\n    if (!n)\n      throw new Error(\n        `Invalid prop: type check failed, expecting [${i.join(\n          \", \"\n        )}], receiving: ${e}`\n      );\n  }\n  if (r && !r(e))\n    throw new Error(`Invalid prop: validator check failed, receiving: ${e}`);\n}\nfunction Ps(e, {\n  mergeObject: t,\n  mergeFunction: r\n}) {\n  const n = [];\n  for (let i = e.length - 1; i >= 0; i--)\n    n.push(e[i]);\n  const a = r ? (i, o) => typeof i == \"function\" && typeof o == \"function\" ? r(o, i) : void 0 : void 0;\n  return t === \"deep\" ? cs(...n, a) : Fn(...n, a);\n}\nfunction Ss(e, {\n  mergeFunction: t\n}) {\n  return e.reduce(t, () => {\n  });\n}\nfunction Es(e, t = {}) {\n  const {\n    type: r,\n    default: n,\n    defaultIsDynamic: a = !1,\n    required: i = !1,\n    validator: o,\n    camelizeObjectKeys: s = !1,\n    mergeObjectApplyOnlyToDefault: f = !1,\n    mergeFunctionApplyOnlyToDefault: c = !0\n  } = t;\n  let { mergeObject: l = \"deep\", mergeFunction: p = !1 } = t;\n  const u = [];\n  let y, b = !1, v = !1;\n  const _ = (g) => {\n    if (g !== void 0) {\n      ms({ type: r, prop: g, validator: o });\n      const T = vt(g), X = typeof g == \"function\";\n      return b = T, v = X, T ? (g = co(g), s ? ls(\n        g,\n        (N, M) => Rt(M, {\n          stripRegexp: /-/g\n          // Filter only short horizontal lines for kebab-case conversion to camelCase\n        })\n      ) : g) : g;\n    }\n  };\n  for (const g of e)\n    u.push(_(g));\n  if (!a)\n    u.push(_(n));\n  else if (typeof n != \"function\")\n    throw new TypeError(\n      `Invalid option: config.default should be Function when config.defaultIsDynamic enabled, receiving: ${n}`\n    );\n  b || (l = !1, v || (p = !1));\n  for (let g = 0; g < u.length; g++) {\n    const T = u[g];\n    if (T !== void 0) {\n      g === u.length - 1 ? y = T : l ? y = Ps(\n        f ? [T, n] : u,\n        {\n          mergeObject: l,\n          mergeFunction: p\n        }\n      ) : p ? y = Ss(\n        c ? [T, n] : u,\n        {\n          mergeFunction: p\n        }\n      ) : y = T;\n      break;\n    }\n  }\n  if (i && [void 0, null].includes(y))\n    throw new Error(\"Missing required prop\");\n  return a ? Es(e, {\n    ...t,\n    default: n(y),\n    defaultIsDynamic: !1\n  }) : y;\n}\nfunction Is(e, t) {\n  return Object.keys(e).filter((r) => t(r)).reduce((r, n) => (r[n] = e[n], r), {});\n}\nfunction js(e) {\n  return Is(e, (t) => !t.startsWith(\"hook:\"));\n}\nfunction Ls(e) {\n  if (Object.getOwnPropertyNames(e || {}).length) {\n    const t = this.$emit;\n    this.$emit = function(...r) {\n      var i;\n      t.apply(this, r);\n      const [n, ...a] = r;\n      (i = e[n]) == null || i.apply(this, a);\n    };\n  }\n}\nfunction ue(e) {\n  const t = Array.from(Rt(e, {\n    stripRegexp: /-/g\n    // Filter only short horizontal lines for kebab-case conversion to camelCase\n  }));\n  return t[0] = t[0].toUpperCase(), t.unshift(\"o\", \"n\"), t.join(\"\");\n}\nfunction xs(e, t = []) {\n  const r = {\n    props: {},\n    attrs: {},\n    listeners: {},\n    hooks: {},\n    slots: {}\n  }, n = Array.isArray(t) ? t : Object.keys(t);\n  for (const a in e)\n    if (a.startsWith(\"@\")) {\n      const i = a.substring(1);\n      Ft ? i.startsWith(\"vue:\") ? r.hooks[ue(i.replace(\"vue:\", \"vnode-\"))] = e[a] : i.startsWith(\"vnode\") ? r.hooks[ue(i)] = e[a] : r.listeners[ue(i)] = e[a] : i.startsWith(\"hook:\") ? r.hooks[i] = e[a] : r.listeners[i] = e[a];\n    } else if (a.startsWith(\"#\")) {\n      const i = a.substring(1);\n      i && (r.slots[i] = e[a]);\n    } else\n      n.includes(a) ? r.props[a] = e[a] : r.attrs[a] = e[a];\n  return r;\n}\nexport {\n  Es as conclude,\n  js as getLocalListeners,\n  Ls as listenGlobalHooks,\n  xs as resolveConfig\n};\n//# sourceMappingURL=vue-global-config.mjs.map\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nexport default debounce;\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var typeOf$1 = function (x) {\n      if (x === null) {\n        return 'null';\n      }\n      if (x === undefined) {\n        return 'undefined';\n      }\n      var t = typeof x;\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      }\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      }\n      return t;\n    };\n    var isEquatableType = function (x) {\n      return [\n        'undefined',\n        'boolean',\n        'number',\n        'string',\n        'function',\n        'xml',\n        'null'\n      ].indexOf(x) !== -1;\n    };\n\n    var sort$1 = function (xs, compareFn) {\n      var clone = Array.prototype.slice.call(xs);\n      return clone.sort(compareFn);\n    };\n\n    var contramap = function (eqa, f) {\n      return eq$2(function (x, y) {\n        return eqa.eq(f(x), f(y));\n      });\n    };\n    var eq$2 = function (f) {\n      return { eq: f };\n    };\n    var tripleEq = eq$2(function (x, y) {\n      return x === y;\n    });\n    var eqString = tripleEq;\n    var eqArray = function (eqa) {\n      return eq$2(function (x, y) {\n        if (x.length !== y.length) {\n          return false;\n        }\n        var len = x.length;\n        for (var i = 0; i < len; i++) {\n          if (!eqa.eq(x[i], y[i])) {\n            return false;\n          }\n        }\n        return true;\n      });\n    };\n    var eqSortedArray = function (eqa, compareFn) {\n      return contramap(eqArray(eqa), function (xs) {\n        return sort$1(xs, compareFn);\n      });\n    };\n    var eqRecord = function (eqa) {\n      return eq$2(function (x, y) {\n        var kx = Object.keys(x);\n        var ky = Object.keys(y);\n        if (!eqSortedArray(eqString).eq(kx, ky)) {\n          return false;\n        }\n        var len = kx.length;\n        for (var i = 0; i < len; i++) {\n          var q = kx[i];\n          if (!eqa.eq(x[q], y[q])) {\n            return false;\n          }\n        }\n        return true;\n      });\n    };\n    var eqAny = eq$2(function (x, y) {\n      if (x === y) {\n        return true;\n      }\n      var tx = typeOf$1(x);\n      var ty = typeOf$1(y);\n      if (tx !== ty) {\n        return false;\n      }\n      if (isEquatableType(tx)) {\n        return x === y;\n      } else if (tx === 'array') {\n        return eqArray(eqAny).eq(x, y);\n      } else if (tx === 'object') {\n        return eqRecord(eqAny).eq(x, y);\n      }\n      return false;\n    });\n\n    const getPrototypeOf$2 = Object.getPrototypeOf;\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$1 = t => a => t === a;\n    const is$4 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isPlainObject = value => is$4(value, Object);\n    const isArray$1 = isType$1('array');\n    const isNull = eq$1(null);\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$1(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n    const isArrayOf = (value, pred) => {\n      if (isArray$1(value)) {\n        for (let i = 0, len = value.length; i < len; ++i) {\n          if (!pred(value[i])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n\n    const noop = () => {\n    };\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const identity = x => {\n      return x;\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const not = f => t => !f(t);\n    const die = msg => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply$1 = f => {\n      return f();\n    };\n    const call = f => {\n      f();\n    };\n    const never = constant(false);\n    const always = constant(true);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const indexOf$1 = (xs, x) => {\n      const r = rawIndexOf(xs, x);\n      return r === -1 ? Optional.none() : Optional.some(r);\n    };\n    const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const map$3 = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$e = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const partition$2 = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        const arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$5 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const foldr = (xs, f, acc) => {\n      eachr(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const foldl = (xs, f, acc) => {\n      each$e(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil$1 = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$2 = (xs, pred) => {\n      return findUntil$1(xs, pred, never);\n    };\n    const findIndex$2 = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(i);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray$1(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind$3 = (xs, f) => flatten(map$3(xs, f));\n    const forall = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        const x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = xs => {\n      const r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    const difference = (a1, a2) => filter$5(a1, x => !contains$2(a2, x));\n    const mapToObject = (xs, f) => {\n      const r = {};\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    const sort = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    const get$b = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$b(xs, 0);\n    const last$3 = xs => get$b(xs, xs.length - 1);\n    const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n    const unique$1 = (xs, comparator) => {\n      const r = [];\n      const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$2(r, x);\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (!isDuplicated(x)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty$1 = Object.hasOwnProperty;\n    const each$d = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const map$2 = (obj, f) => {\n      return tupleMap(obj, (x, i) => ({\n        k: i,\n        v: f(x, i)\n      }));\n    };\n    const tupleMap = (obj, f) => {\n      const r = {};\n      each$d(obj, (x, i) => {\n        const tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each$d(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const bifilter = (obj, pred) => {\n      const t = {};\n      const f = {};\n      internalFilter(obj, pred, objAcc(t), objAcc(f));\n      return {\n        t,\n        f\n      };\n    };\n    const filter$4 = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const mapToArray = (obj, f) => {\n      const r = [];\n      each$d(obj, (value, name) => {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    const values = obj => {\n      return mapToArray(obj, identity);\n    };\n    const get$a = (obj, key) => {\n      return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has$2 = (obj, key) => hasOwnProperty$1.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n    const equal$1 = (a1, a2, eq = eqAny) => eqRecord(eq).eq(a1, a2);\n\n    const stringArray = a => {\n      const all = {};\n      each$e(a, key => {\n        all[key] = {};\n      });\n      return keys(all);\n    };\n\n    const isArrayLike = o => o.length !== undefined;\n    const isArray = Array.isArray;\n    const toArray$1 = obj => {\n      if (!isArray(obj)) {\n        const array = [];\n        for (let i = 0, l = obj.length; i < l; i++) {\n          array[i] = obj[i];\n        }\n        return array;\n      } else {\n        return obj;\n      }\n    };\n    const each$c = (o, cb, s) => {\n      if (!o) {\n        return false;\n      }\n      s = s || o;\n      if (isArrayLike(o)) {\n        for (let n = 0, l = o.length; n < l; n++) {\n          if (cb.call(s, o[n], n, o) === false) {\n            return false;\n          }\n        }\n      } else {\n        for (const n in o) {\n          if (has$2(o, n)) {\n            if (cb.call(s, o[n], n, o) === false) {\n              return false;\n            }\n          }\n        }\n      }\n      return true;\n    };\n    const map$1 = (array, callback) => {\n      const out = [];\n      each$c(array, (item, index) => {\n        out.push(callback(item, index, array));\n      });\n      return out;\n    };\n    const filter$3 = (a, f) => {\n      const o = [];\n      each$c(a, (v, index) => {\n        if (!f || f(v, index, a)) {\n          o.push(v);\n        }\n      });\n      return o;\n    };\n    const indexOf = (a, v) => {\n      if (a) {\n        for (let i = 0, l = a.length; i < l; i++) {\n          if (a[i] === v) {\n            return i;\n          }\n        }\n      }\n      return -1;\n    };\n    const reduce = (collection, iteratee, accumulator, thisArg) => {\n      let acc = isUndefined(accumulator) ? collection[0] : accumulator;\n      for (let i = 0; i < collection.length; i++) {\n        acc = iteratee.call(thisArg, acc, collection[i], i);\n      }\n      return acc;\n    };\n    const findIndex$1 = (array, predicate, thisArg) => {\n      for (let i = 0, l = array.length; i < l; i++) {\n        if (predicate.call(thisArg, array[i], i, array)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    const last$2 = collection => collection[collection.length - 1];\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const DeviceType = (os, browser, userAgent, mediaMatch) => {\n      const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      const isiPhone = os.isiOS() && !isiPad;\n      const isMobile = os.isiOS() || os.isAndroid();\n      const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview),\n        isDesktop: constant(isDesktop)\n      };\n    };\n\n    const firstMatch = (regexes, s) => {\n      for (let i = 0; i < regexes.length; i++) {\n        const x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    const find$1 = (regexes, agent) => {\n      const r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = i => {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$3(group(1), group(2));\n    };\n    const detect$5 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$2();\n      }\n      return find$1(versionRegexes, cleanedAgent);\n    };\n    const unknown$2 = () => {\n      return nu$3(0, 0);\n    };\n    const nu$3 = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$3,\n      detect: detect$5,\n      unknown: unknown$2\n    };\n\n    const detectBrowser$1 = (browsers, userAgentData) => {\n      return findMap(userAgentData.brands, uaBrand => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$2(browsers, browser => {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(info => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n\n    const detect$4 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$2(candidates, candidate => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers, userAgent) => {\n      return detect$4(browsers, userAgent).map(browser => {\n        const version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version\n        };\n      });\n    };\n    const detectOs = (oses, userAgent) => {\n      return detect$4(oses, userAgent).map(os => {\n        const version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version\n        };\n      });\n    };\n\n    const removeFromStart = (str, numChars) => {\n      return str.substring(numChars);\n    };\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const removeLeading = (str, prefix) => {\n      return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n    };\n    const contains$1 = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n    const endsWith = (str, suffix) => {\n      return checkRange(str, suffix, str.length - suffix.length);\n    };\n    const blank = r => s => s.replace(r, '');\n    const trim$4 = blank(/^\\s+|\\s+$/g);\n    const lTrim = blank(/^\\s+/g);\n    const rTrim = blank(/\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const isEmpty$3 = s => !isNotEmpty(s);\n    const repeat = (s, count) => count <= 0 ? '' : new Array(count + 1).join(s);\n    const toInt = (value, radix = 10) => {\n      const num = parseInt(value, radix);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = target => {\n      return uastring => {\n        return contains$1(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: uastring => {\n          return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chromium',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: uastring => {\n          return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: uastring => {\n          return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: uastring => {\n          return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: uastring => {\n          return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'macOS',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    const edge = 'Edge';\n    const chromium = 'Chromium';\n    const ie = 'IE';\n    const opera = 'Opera';\n    const firefox = 'Firefox';\n    const safari = 'Safari';\n    const unknown$1 = () => {\n      return nu$2({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$2 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isBrowser = name => () => current === name;\n      return {\n        current,\n        version,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$1,\n      nu: nu$2,\n      edge: constant(edge),\n      chromium: constant(chromium),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    const windows = 'Windows';\n    const ios = 'iOS';\n    const android = 'Android';\n    const linux = 'Linux';\n    const macos = 'macOS';\n    const solaris = 'Solaris';\n    const freebsd = 'FreeBSD';\n    const chromeos = 'ChromeOS';\n    const unknown = () => {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$1 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isOS = name => () => current === name;\n      return {\n        current,\n        version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown,\n      nu: nu$1,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      macos: constant(macos),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd),\n      chromeos: constant(chromeos)\n    };\n\n    const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n      const browsers = PlatformInfo.browsers();\n      const oses = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$3 };\n\n    const mediaMatch = query => window.matchMedia(query).matches;\n    let platform$4 = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect$2 = () => platform$4();\n\n    const userAgent = navigator.userAgent;\n    const platform$3 = detect$2();\n    const browser$3 = platform$3.browser;\n    const os$1 = platform$3.os;\n    const deviceType = platform$3.deviceType;\n    const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n    const Env = {\n      transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n      documentMode: browser$3.isIE() ? document.documentMode || 7 : 10,\n      cacheSuffix: null,\n      container: null,\n      canHaveCSP: !browser$3.isIE(),\n      windowsPhone,\n      browser: {\n        current: browser$3.current,\n        version: browser$3.version,\n        isChromium: browser$3.isChromium,\n        isEdge: browser$3.isEdge,\n        isFirefox: browser$3.isFirefox,\n        isIE: browser$3.isIE,\n        isOpera: browser$3.isOpera,\n        isSafari: browser$3.isSafari\n      },\n      os: {\n        current: os$1.current,\n        version: os$1.version,\n        isAndroid: os$1.isAndroid,\n        isChromeOS: os$1.isChromeOS,\n        isFreeBSD: os$1.isFreeBSD,\n        isiOS: os$1.isiOS,\n        isLinux: os$1.isLinux,\n        isMacOS: os$1.isMacOS,\n        isSolaris: os$1.isSolaris,\n        isWindows: os$1.isWindows\n      },\n      deviceType: {\n        isDesktop: deviceType.isDesktop,\n        isiPad: deviceType.isiPad,\n        isiPhone: deviceType.isiPhone,\n        isPhone: deviceType.isPhone,\n        isTablet: deviceType.isTablet,\n        isTouch: deviceType.isTouch,\n        isWebView: deviceType.isWebView\n      }\n    };\n\n    const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n    const trim$3 = str => {\n      return isNullable(str) ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n    };\n    const is$3 = (obj, type) => {\n      if (!type) {\n        return obj !== undefined;\n      }\n      if (type === 'array' && isArray(obj)) {\n        return true;\n      }\n      return typeof obj === type;\n    };\n    const makeMap$4 = (items, delim, map = {}) => {\n      const resolvedItems = isString(items) ? items.split(delim || ',') : items || [];\n      let i = resolvedItems.length;\n      while (i--) {\n        map[resolvedItems[i]] = {};\n      }\n      return map;\n    };\n    const hasOwnProperty = has$2;\n    const extend$3 = (obj, ...exts) => {\n      for (let i = 0; i < exts.length; i++) {\n        const ext = exts[i];\n        for (const name in ext) {\n          if (has$2(ext, name)) {\n            const value = ext[name];\n            if (value !== undefined) {\n              obj[name] = value;\n            }\n          }\n        }\n      }\n      return obj;\n    };\n    const walk$4 = function (o, f, n, s) {\n      s = s || this;\n      if (o) {\n        if (n) {\n          o = o[n];\n        }\n        each$c(o, (o, i) => {\n          if (f.call(s, o, i, n) === false) {\n            return false;\n          } else {\n            walk$4(o, f, n, s);\n            return true;\n          }\n        });\n      }\n    };\n    const resolve$3 = (n, o = window) => {\n      const path = n.split('.');\n      for (let i = 0, l = path.length; i < l; i++) {\n        o = o[path[i]];\n        if (!o) {\n          break;\n        }\n      }\n      return o;\n    };\n    const explode$3 = (s, d) => {\n      if (isArray$1(s)) {\n        return s;\n      } else if (s === '') {\n        return [];\n      } else {\n        return map$1(s.split(d || ','), trim$3);\n      }\n    };\n    const _addCacheSuffix = url => {\n      const cacheSuffix = Env.cacheSuffix;\n      if (cacheSuffix) {\n        url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n      }\n      return url;\n    };\n    const Tools = {\n      trim: trim$3,\n      isArray: isArray,\n      is: is$3,\n      toArray: toArray$1,\n      makeMap: makeMap$4,\n      each: each$c,\n      map: map$1,\n      grep: filter$3,\n      inArray: indexOf,\n      hasOwn: hasOwnProperty,\n      extend: extend$3,\n      walk: walk$4,\n      resolve: resolve$3,\n      explode: explode$3,\n      _addCacheSuffix\n    };\n\n    const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const path = (parts, scope) => {\n      let o = scope !== undefined && scope !== null ? scope : Global;\n      for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    const resolve$2 = (p, scope) => {\n      const parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    const unsafe = (name, scope) => {\n      return resolve$2(name, scope);\n    };\n    const getOrDie = (name, scope) => {\n      const actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n\n    const getPrototypeOf$1 = Object.getPrototypeOf;\n    const sandHTMLElement = scope => {\n      return getOrDie('HTMLElement', scope);\n    };\n    const isPrototypeOf = x => {\n      const scope = resolve$2('ownerDocument.defaultView', x);\n      return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n    };\n\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type$1 = element => element.dom.nodeType;\n    const isType = t => element => type$1(element) === t;\n    const isComment$1 = element => type$1(element) === COMMENT || name(element) === '#comment';\n    const isHTMLElement$1 = element => isElement$7(element) && isPrototypeOf(element.dom);\n    const isElement$7 = isType(ELEMENT);\n    const isText$b = isType(TEXT);\n    const isDocument$2 = isType(DOCUMENT);\n    const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement$7(e) && name(e) === tag;\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set$3 = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const setAll$1 = (element, attrs) => {\n      const dom = element.dom;\n      each$d(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const get$9 = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const getOpt = (element, key) => Optional.from(get$9(element, key));\n    const has$1 = (element, key) => {\n      const dom = element.dom;\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n    };\n    const remove$a = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n    const hasNone = element => {\n      const attrs = element.dom.attributes;\n      return attrs === undefined || attrs === null || attrs.length === 0;\n    };\n    const clone$4 = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const read$4 = (element, attr) => {\n      const value = get$9(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    const add$4 = (element, attr, id) => {\n      const old = read$4(element, attr);\n      const nu = old.concat([id]);\n      set$3(element, attr, nu.join(' '));\n      return true;\n    };\n    const remove$9 = (element, attr, id) => {\n      const nu = filter$5(read$4(element, attr), v => v !== id);\n      if (nu.length > 0) {\n        set$3(element, attr, nu.join(' '));\n      } else {\n        remove$a(element, attr);\n      }\n      return false;\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n    const get$8 = element => read$4(element, 'class');\n    const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n    const remove$8 = (element, clazz) => remove$9(element, 'class', clazz);\n    const toggle$2 = (element, clazz) => {\n      if (contains$2(get$8(element), clazz)) {\n        return remove$8(element, clazz);\n      } else {\n        return add$3(element, clazz);\n      }\n    };\n\n    const add$2 = (element, clazz) => {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$3(element, clazz);\n      }\n    };\n    const cleanClass = element => {\n      const classList = supports(element) ? element.dom.classList : get$8(element);\n      if (classList.length === 0) {\n        remove$a(element, 'class');\n      }\n    };\n    const remove$7 = (element, clazz) => {\n      if (supports(element)) {\n        const classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$8(element, clazz);\n      }\n      cleanClass(element);\n    };\n    const toggle$1 = (element, clazz) => {\n      const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n      cleanClass(element);\n      return result;\n    };\n    const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n    const fromHtml$1 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom$2(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom$2(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom$2(node);\n    };\n    const fromDom$2 = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint$2 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n    const SugarElement = {\n      fromHtml: fromHtml$1,\n      fromTag,\n      fromText,\n      fromDom: fromDom$2,\n      fromPoint: fromPoint$2\n    };\n\n    const toArray = (target, f) => {\n      const r = [];\n      const recurse = e => {\n        r.push(e);\n        return f(e);\n      };\n      let cur = f(target);\n      do {\n        cur = cur.bind(recurse);\n      } while (cur.isSome());\n      return r;\n    };\n\n    const is$1 = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    const eq = (e1, e2) => e1.dom === e2.dom;\n    const contains = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n\n    const owner$1 = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument$2(dos) ? dos : owner$1(dos);\n    const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n    const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n    const parents$1 = (element, isRoot) => {\n      const stop = isFunction(isRoot) ? isRoot : never;\n      let dom = element.dom;\n      const ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        const rawParent = dom.parentNode;\n        const p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    const siblings = element => {\n      const filterSelf = elements => filter$5(elements, x => !eq(element, x));\n      return parent(element).map(children$1).map(filterSelf).getOr([]);\n    };\n    const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const prevSiblings = element => reverse(toArray(element, prevSibling));\n    const nextSiblings = element => toArray(element, nextSibling);\n    const children$1 = element => map$3(element.dom.childNodes, SugarElement.fromDom);\n    const child$1 = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child$1(element, 0);\n    const lastChild = element => child$1(element, element.dom.childNodes.length - 1);\n    const childNodesCount = element => element.dom.childNodes.length;\n    const hasChildNodes = element => element.dom.hasChildNodes();\n\n    const getHead = doc => {\n      const b = doc.dom.head;\n      if (b === null || b === undefined) {\n        throw new Error('Head is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    const isShadowRoot = dos => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const isSupported$1 = constant(supported);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getStyleContainer = dos => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n    const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n    const getOriginalEventTarget = event => {\n      if (isSupported$1() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement$7(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n    const inBody = element => {\n      const dom = isText$b(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$4 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$4 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$4, scope, predicate, isRoot);\n    };\n    const sibling$1 = (scope, predicate) => {\n      const element = scope.dom;\n      if (!element.parentNode) {\n        return Optional.none();\n      }\n      return child(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n    };\n    const child = (scope, predicate) => {\n      const pred = node => predicate(SugarElement.fromDom(node));\n      const result = find$2(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n    const descendant$2 = (scope, predicate) => {\n      const descend = node => {\n        for (let i = 0; i < node.childNodes.length; i++) {\n          const child = SugarElement.fromDom(node.childNodes[i]);\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(node.childNodes[i]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n\n    const ancestor$3 = (scope, selector, isRoot) => ancestor$4(scope, e => is$1(e, selector), isRoot);\n    const descendant$1 = (scope, selector) => one(selector, scope);\n    const closest$3 = (scope, selector, isRoot) => {\n      const is = (element, selector) => is$1(element, selector);\n      return ClosestOrAncestor(is, ancestor$3, scope, selector, isRoot);\n    };\n\n    const closest$2 = target => closest$3(target, '[contenteditable]');\n    const isEditable$2 = (element, assumeEditable = false) => {\n      if (inBody(element)) {\n        return element.dom.isContentEditable;\n      } else {\n        return closest$2(element).fold(constant(assumeEditable), editable => getRaw$1(editable) === 'true');\n      }\n    };\n    const getRaw$1 = element => element.dom.contentEditable;\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const internalRemove = (dom, property) => {\n      if (isSupported(dom)) {\n        dom.style.removeProperty(property);\n      }\n    };\n    const set$2 = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n    const setAll = (element, css) => {\n      const dom = element.dom;\n      each$d(css, (v, k) => {\n        internalSet(dom, k, v);\n      });\n    };\n    const get$7 = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    const getRaw = (element, property) => {\n      const dom = element.dom;\n      const raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(r => r.length > 0);\n    };\n    const getAllRaw = element => {\n      const css = {};\n      const dom = element.dom;\n      if (isSupported(dom)) {\n        for (let i = 0; i < dom.style.length; i++) {\n          const ruleName = dom.style.item(i);\n          css[ruleName] = dom.style[ruleName];\n        }\n      }\n      return css;\n    };\n    const remove$6 = (element, property) => {\n      const dom = element.dom;\n      internalRemove(dom, property);\n      if (is$2(getOpt(element, 'style').map(trim$4), '')) {\n        remove$a(element, 'style');\n      }\n    };\n    const reflow = e => e.dom.offsetWidth;\n\n    const before$3 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after$4 = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$1(v, element);\n        });\n      }, v => {\n        before$3(v, element);\n      });\n    };\n    const prepend = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$1(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$1 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const wrap$2 = (element, wrapper) => {\n      before$3(element, wrapper);\n      append$1(wrapper, element);\n    };\n\n    const after$3 = (marker, elements) => {\n      each$e(elements, (x, i) => {\n        const e = i === 0 ? marker : elements[i - 1];\n        after$4(e, x);\n      });\n    };\n    const append = (parent, elements) => {\n      each$e(elements, x => {\n        append$1(parent, x);\n      });\n    };\n\n    const empty = element => {\n      element.dom.textContent = '';\n      each$e(children$1(element), rogue => {\n        remove$5(rogue);\n      });\n    };\n    const remove$5 = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    const unwrap = wrapper => {\n      const children = children$1(wrapper);\n      if (children.length > 0) {\n        after$3(wrapper, children);\n      }\n      remove$5(wrapper);\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      return children$1(SugarElement.fromDom(div));\n    };\n    const fromDom$1 = nodes => map$3(nodes, SugarElement.fromDom);\n\n    const get$6 = element => element.dom.innerHTML;\n    const set$1 = (element, content) => {\n      const owner = owner$1(element);\n      const docDom = owner.dom;\n      const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n      const contentElements = fromHtml(content, docDom);\n      append(fragment, contentElements);\n      empty(element);\n      append$1(element, fragment);\n    };\n    const getOuter = element => {\n      const container = SugarElement.fromTag('div');\n      const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n      append$1(container, clone);\n      return get$6(container);\n    };\n\n    const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n      target,\n      x,\n      y,\n      stop,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent = rawEvent => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n    };\n    const handle$1 = (filter, handler) => rawEvent => {\n      if (filter(rawEvent)) {\n        handler(fromRawEvent(rawEvent));\n      }\n    };\n    const binder = (element, event, filter, handler, useCapture) => {\n      const wrapped = handle$1(filter, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n\n    const r = (left, top) => {\n      const translate = (x, y) => r(left + x, top + y);\n      return {\n        left,\n        top,\n        translate\n      };\n    };\n    const SugarPosition = r;\n\n    const boxPosition = dom => {\n      const box = dom.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    const firstDefinedOrZero = (a, b) => {\n      if (a !== undefined) {\n        return a;\n      } else {\n        return b !== undefined ? b : 0;\n      }\n    };\n    const absolute = element => {\n      const doc = element.dom.ownerDocument;\n      const body = doc.body;\n      const win = doc.defaultView;\n      const html = doc.documentElement;\n      if (body === element.dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n      const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n      const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport = element => {\n      const dom = element.dom;\n      const doc = dom.ownerDocument;\n      const body = doc.body;\n      if (body === dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom);\n    };\n\n    const get$5 = _DOC => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n    const to = (x, y, _DOC) => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const win = doc.defaultView;\n      if (win) {\n        win.scrollTo(x, y);\n      }\n    };\n    const intoView = (element, alignToTop) => {\n      const isSafari = detect$2().browser.isSafari();\n      if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) {\n        element.dom.scrollIntoViewIfNeeded(false);\n      } else {\n        element.dom.scrollIntoView(alignToTop);\n      }\n    };\n\n    const get$4 = _win => {\n      const win = _win === undefined ? window : _win;\n      if (detect$2().browser.isFirefox()) {\n        return Optional.none();\n      } else {\n        return Optional.from(win.visualViewport);\n      }\n    };\n    const bounds = (x, y, width, height) => ({\n      x,\n      y,\n      width,\n      height,\n      right: x + width,\n      bottom: y + height\n    });\n    const getBounds = _win => {\n      const win = _win === undefined ? window : _win;\n      const doc = win.document;\n      const scroll = get$5(SugarElement.fromDom(doc));\n      return get$4(win).fold(() => {\n        const html = win.document.documentElement;\n        const width = html.clientWidth;\n        const height = html.clientHeight;\n        return bounds(scroll.left, scroll.top, width, height);\n      }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n    };\n\n    const children = (scope, predicate) => filter$5(children$1(scope), predicate);\n    const descendants$1 = (scope, predicate) => {\n      let result = [];\n      each$e(children$1(scope), x => {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants$1(x, predicate));\n      });\n      return result;\n    };\n\n    const descendants = (scope, selector) => all(selector, scope);\n\n    const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, selector, isRoot).isSome();\n\n    class DomTreeWalker {\n      constructor(startNode, rootNode) {\n        this.node = startNode;\n        this.rootNode = rootNode;\n        this.current = this.current.bind(this);\n        this.next = this.next.bind(this);\n        this.prev = this.prev.bind(this);\n        this.prev2 = this.prev2.bind(this);\n      }\n      current() {\n        return this.node;\n      }\n      next(shallow) {\n        this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n        return this.node;\n      }\n      prev(shallow) {\n        this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n        return this.node;\n      }\n      prev2(shallow) {\n        this.node = this.findPreviousNode(this.node, shallow);\n        return this.node;\n      }\n      findSibling(node, startName, siblingName, shallow) {\n        if (node) {\n          if (!shallow && node[startName]) {\n            return node[startName];\n          }\n          if (node !== this.rootNode) {\n            let sibling = node[siblingName];\n            if (sibling) {\n              return sibling;\n            }\n            for (let parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n              sibling = parent[siblingName];\n              if (sibling) {\n                return sibling;\n              }\n            }\n          }\n        }\n        return undefined;\n      }\n      findPreviousNode(node, shallow) {\n        if (node) {\n          const sibling = node.previousSibling;\n          if (this.rootNode && sibling === this.rootNode) {\n            return;\n          }\n          if (sibling) {\n            if (!shallow) {\n              for (let child = sibling.lastChild; child; child = child.lastChild) {\n                if (!child.lastChild) {\n                  return child;\n                }\n              }\n            }\n            return sibling;\n          }\n          const parent = node.parentNode;\n          if (parent && parent !== this.rootNode) {\n            return parent;\n          }\n        }\n        return undefined;\n      }\n    }\n\n    const isNodeType = type => {\n      return node => {\n        return !!node && node.nodeType === type;\n      };\n    };\n    const isRestrictedNode = node => !!node && !Object.getPrototypeOf(node);\n    const isElement$6 = isNodeType(1);\n    const isHTMLElement = node => isElement$6(node) && isHTMLElement$1(SugarElement.fromDom(node));\n    const isSVGElement = node => isElement$6(node) && node.namespaceURI === 'http://www.w3.org/2000/svg';\n    const matchNodeName = name => {\n      const lowerCasedName = name.toLowerCase();\n      return node => isNonNullable(node) && node.nodeName.toLowerCase() === lowerCasedName;\n    };\n    const matchNodeNames = names => {\n      const lowerCasedNames = names.map(s => s.toLowerCase());\n      return node => {\n        if (node && node.nodeName) {\n          const nodeName = node.nodeName.toLowerCase();\n          return contains$2(lowerCasedNames, nodeName);\n        }\n        return false;\n      };\n    };\n    const matchStyleValues = (name, values) => {\n      const items = values.toLowerCase().split(' ');\n      return node => {\n        if (isElement$6(node)) {\n          const win = node.ownerDocument.defaultView;\n          if (win) {\n            for (let i = 0; i < items.length; i++) {\n              const computed = win.getComputedStyle(node, null);\n              const cssValue = computed ? computed.getPropertyValue(name) : null;\n              if (cssValue === items[i]) {\n                return true;\n              }\n            }\n          }\n        }\n        return false;\n      };\n    };\n    const hasAttribute = attrName => {\n      return node => {\n        return isElement$6(node) && node.hasAttribute(attrName);\n      };\n    };\n    const hasAttributeValue = (attrName, attrValue) => {\n      return node => {\n        return isElement$6(node) && node.getAttribute(attrName) === attrValue;\n      };\n    };\n    const isBogus$2 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n    const isBogusAll$1 = node => isElement$6(node) && node.getAttribute('data-mce-bogus') === 'all';\n    const isTable$2 = node => isElement$6(node) && node.tagName === 'TABLE';\n    const hasContentEditableState = value => {\n      return node => {\n        if (isHTMLElement(node)) {\n          if (node.contentEditable === value) {\n            return true;\n          }\n          if (node.getAttribute('data-mce-contenteditable') === value) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    const isTextareaOrInput = matchNodeNames([\n      'textarea',\n      'input'\n    ]);\n    const isText$a = isNodeType(3);\n    const isCData = isNodeType(4);\n    const isPi = isNodeType(7);\n    const isComment = isNodeType(8);\n    const isDocument$1 = isNodeType(9);\n    const isDocumentFragment = isNodeType(11);\n    const isBr$6 = matchNodeName('br');\n    const isImg = matchNodeName('img');\n    const isContentEditableTrue$3 = hasContentEditableState('true');\n    const isContentEditableFalse$b = hasContentEditableState('false');\n    const isTableCell$3 = matchNodeNames([\n      'td',\n      'th'\n    ]);\n    const isTableCellOrCaption = matchNodeNames([\n      'td',\n      'th',\n      'caption'\n    ]);\n    const isMedia$2 = matchNodeNames([\n      'video',\n      'audio',\n      'object',\n      'embed'\n    ]);\n    const isListItem$2 = matchNodeName('li');\n    const isDetails = matchNodeName('details');\n    const isSummary$1 = matchNodeName('summary');\n\n    const zeroWidth = '\\uFEFF';\n    const nbsp = '\\xA0';\n    const isZwsp$2 = char => char === zeroWidth;\n    const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api$1 = NodeValue(isText$b, 'text');\n    const get$3 = element => api$1.get(element);\n    const getOption = element => api$1.getOption(element);\n    const set = (element, value) => api$1.set(element, value);\n\n    const tableCells = [\n      'td',\n      'th'\n    ];\n    const tableSections = [\n      'thead',\n      'tbody',\n      'tfoot'\n    ];\n    const textBlocks = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'p',\n      'div',\n      'address',\n      'pre',\n      'form',\n      'blockquote',\n      'center',\n      'dir',\n      'fieldset',\n      'header',\n      'footer',\n      'article',\n      'section',\n      'hgroup',\n      'aside',\n      'nav',\n      'figure'\n    ];\n    const listItems$1 = [\n      'li',\n      'dd',\n      'dt'\n    ];\n    const lists = [\n      'ul',\n      'ol',\n      'dl'\n    ];\n    const wsElements = [\n      'pre',\n      'script',\n      'textarea',\n      'style'\n    ];\n    const lazyLookup = items => {\n      let lookup;\n      return node => {\n        lookup = lookup ? lookup : mapToObject(items, always);\n        return has$2(lookup, name(node));\n      };\n    };\n    const isTable$1 = node => name(node) === 'table';\n    const isBr$5 = node => isElement$7(node) && name(node) === 'br';\n    const isTextBlock$2 = lazyLookup(textBlocks);\n    const isList = lazyLookup(lists);\n    const isListItem$1 = lazyLookup(listItems$1);\n    const isTableSection = lazyLookup(tableSections);\n    const isTableCell$2 = lazyLookup(tableCells);\n    const isWsPreserveElement = lazyLookup(wsElements);\n\n    const getLastChildren$1 = elm => {\n      const children = [];\n      let rawNode = elm.dom;\n      while (rawNode) {\n        children.push(SugarElement.fromDom(rawNode));\n        rawNode = rawNode.lastChild;\n      }\n      return children;\n    };\n    const removeTrailingBr = elm => {\n      const allBrs = descendants(elm, 'br');\n      const brs = filter$5(getLastChildren$1(elm).slice(-1), isBr$5);\n      if (allBrs.length === brs.length) {\n        each$e(brs, remove$5);\n      }\n    };\n    const createPaddingBr = () => {\n      const br = SugarElement.fromTag('br');\n      set$3(br, 'data-mce-bogus', '1');\n      return br;\n    };\n    const fillWithPaddingBr = elm => {\n      empty(elm);\n      append$1(elm, createPaddingBr());\n    };\n    const trimBlockTrailingBr = (elm, schema) => {\n      lastChild(elm).each(lastChild => {\n        prevSibling(lastChild).each(lastChildPrevSibling => {\n          if (schema.isBlock(name(elm)) && isBr$5(lastChild) && schema.isBlock(name(lastChildPrevSibling))) {\n            remove$5(lastChild);\n          }\n        });\n      });\n    };\n\n    const ZWSP$1 = zeroWidth;\n    const isZwsp$1 = isZwsp$2;\n    const trim$2 = removeZwsp;\n    const insert$5 = editor => editor.insertContent(ZWSP$1, { preserve_zwsp: true });\n\n    const isElement$5 = isElement$6;\n    const isText$9 = isText$a;\n    const isCaretContainerBlock$1 = node => {\n      if (isText$9(node)) {\n        node = node.parentNode;\n      }\n      return isElement$5(node) && node.hasAttribute('data-mce-caret');\n    };\n    const isCaretContainerInline = node => isText$9(node) && isZwsp$1(node.data);\n    const isCaretContainer$2 = node => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n    const hasContent = node => node.firstChild !== node.lastChild || !isBr$6(node.firstChild);\n    const insertInline$1 = (node, before) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const textNode = doc.createTextNode(ZWSP$1);\n      const parentNode = node.parentNode;\n      if (!before) {\n        const sibling = node.nextSibling;\n        if (isText$9(sibling)) {\n          if (isCaretContainer$2(sibling)) {\n            return sibling;\n          }\n          if (startsWithCaretContainer$1(sibling)) {\n            sibling.splitText(1);\n            return sibling;\n          }\n        }\n        if (node.nextSibling) {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node.nextSibling);\n        } else {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(textNode);\n        }\n      } else {\n        const sibling = node.previousSibling;\n        if (isText$9(sibling)) {\n          if (isCaretContainer$2(sibling)) {\n            return sibling;\n          }\n          if (endsWithCaretContainer$1(sibling)) {\n            return sibling.splitText(sibling.data.length - 1);\n          }\n        }\n        parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node);\n      }\n      return textNode;\n    };\n    const isBeforeInline = pos => {\n      const container = pos.container();\n      if (!isText$a(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n    };\n    const isAfterInline = pos => {\n      const container = pos.container();\n      if (!isText$a(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n    };\n    const insertBlock = (blockName, node, before) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const blockNode = doc.createElement(blockName);\n      blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n      blockNode.setAttribute('data-mce-bogus', 'all');\n      blockNode.appendChild(createPaddingBr().dom);\n      const parentNode = node.parentNode;\n      if (!before) {\n        if (node.nextSibling) {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node.nextSibling);\n        } else {\n          parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(blockNode);\n        }\n      } else {\n        parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node);\n      }\n      return blockNode;\n    };\n    const startsWithCaretContainer$1 = node => isText$9(node) && node.data[0] === ZWSP$1;\n    const endsWithCaretContainer$1 = node => isText$9(node) && node.data[node.data.length - 1] === ZWSP$1;\n    const trimBogusBr = elm => {\n      var _a;\n      const brs = elm.getElementsByTagName('br');\n      const lastBr = brs[brs.length - 1];\n      if (isBogus$2(lastBr)) {\n        (_a = lastBr.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(lastBr);\n      }\n    };\n    const showCaretContainerBlock = caretContainer => {\n      if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n        trimBogusBr(caretContainer);\n        caretContainer.removeAttribute('data-mce-caret');\n        caretContainer.removeAttribute('data-mce-bogus');\n        caretContainer.removeAttribute('style');\n        caretContainer.removeAttribute('data-mce-style');\n        caretContainer.removeAttribute('_moz_abspos');\n        return caretContainer;\n      }\n      return null;\n    };\n    const isRangeInCaretContainerBlock = range => isCaretContainerBlock$1(range.startContainer);\n\n    const isContentEditableTrue$2 = isContentEditableTrue$3;\n    const isContentEditableFalse$a = isContentEditableFalse$b;\n    const isBr$4 = isBr$6;\n    const isText$8 = isText$a;\n    const isInvalidTextElement = matchNodeNames([\n      'script',\n      'style',\n      'textarea'\n    ]);\n    const isAtomicInline = matchNodeNames([\n      'img',\n      'input',\n      'textarea',\n      'hr',\n      'iframe',\n      'video',\n      'audio',\n      'object',\n      'embed'\n    ]);\n    const isTable = matchNodeNames(['table']);\n    const isCaretContainer$1 = isCaretContainer$2;\n    const isCaretCandidate$3 = node => {\n      if (isCaretContainer$1(node)) {\n        return false;\n      }\n      if (isText$8(node)) {\n        return !isInvalidTextElement(node.parentNode);\n      }\n      return isAtomicInline(node) || isBr$4(node) || isTable(node) || isNonUiContentEditableFalse(node);\n    };\n    const isUnselectable = node => isElement$6(node) && node.getAttribute('unselectable') === 'true';\n    const isNonUiContentEditableFalse = node => !isUnselectable(node) && isContentEditableFalse$a(node);\n    const isInEditable = (node, root) => {\n      for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n        if (isNonUiContentEditableFalse(tempNode)) {\n          return false;\n        }\n        if (isContentEditableTrue$2(tempNode)) {\n          return true;\n        }\n      }\n      return true;\n    };\n    const isAtomicContentEditableFalse = node => {\n      if (!isNonUiContentEditableFalse(node)) {\n        return false;\n      }\n      return !foldl(from(node.getElementsByTagName('*')), (result, elm) => {\n        return result || isContentEditableTrue$2(elm);\n      }, false);\n    };\n    const isAtomic$1 = node => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n    const isEditableCaretCandidate$1 = (node, root) => isCaretCandidate$3(node) && isInEditable(node, root);\n\n    const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n    const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n    const isZwsp = text => {\n      for (const c of text) {\n        if (!isZwsp$2(c)) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const isCollapsibleWhitespace$1 = c => ' \\f\\t\\x0B'.indexOf(c) !== -1;\n    const isNewLineChar = c => c === '\\n' || c === '\\r';\n    const isNewline = (text, idx) => idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n    const normalize$4 = (text, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n      const tabSpace = repeat(' ', tabSpaces);\n      const normalizedText = text.replace(/\\t/g, tabSpace);\n      const result = foldl(normalizedText, (acc, c) => {\n        if (isCollapsibleWhitespace$1(c) || c === nbsp) {\n          if (acc.pcIsSpace || acc.str === '' && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n            return {\n              pcIsSpace: false,\n              str: acc.str + nbsp\n            };\n          } else {\n            return {\n              pcIsSpace: true,\n              str: acc.str + ' '\n            };\n          }\n        } else {\n          return {\n            pcIsSpace: isNewLineChar(c),\n            str: acc.str + c\n          };\n        }\n      }, {\n        pcIsSpace: false,\n        str: ''\n      });\n      return result.str;\n    };\n\n    const hasWhitespacePreserveParent = (node, rootNode) => {\n      const rootElement = SugarElement.fromDom(rootNode);\n      const startNode = SugarElement.fromDom(node);\n      return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n    };\n    const isWhitespace$1 = (node, rootNode) => {\n      return isText$a(node) && isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode);\n    };\n    const isNamedAnchor = node => {\n      return isElement$6(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n    };\n    const isContent$1 = (node, rootNode) => {\n      return isCaretCandidate$3(node) && !isWhitespace$1(node, rootNode) || isNamedAnchor(node) || isBookmark(node);\n    };\n    const isBookmark = hasAttribute('data-mce-bookmark');\n    const isBogus$1 = hasAttribute('data-mce-bogus');\n    const isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n    const hasNonEditableParent = node => parentElement(SugarElement.fromDom(node)).exists(parent => !isEditable$2(parent));\n    const isEmptyNode = (targetNode, skipBogus) => {\n      let brCount = 0;\n      if (isContent$1(targetNode, targetNode)) {\n        return false;\n      } else {\n        let node = targetNode.firstChild;\n        if (!node) {\n          return true;\n        }\n        const walker = new DomTreeWalker(node, targetNode);\n        do {\n          if (skipBogus) {\n            if (isBogusAll(node)) {\n              node = walker.next(true);\n              continue;\n            }\n            if (isBogus$1(node)) {\n              node = walker.next();\n              continue;\n            }\n          }\n          if (isContentEditableTrue$3(node) && hasNonEditableParent(node)) {\n            return false;\n          }\n          if (isBr$6(node)) {\n            brCount++;\n            node = walker.next();\n            continue;\n          }\n          if (isContent$1(node, targetNode)) {\n            return false;\n          }\n          node = walker.next();\n        } while (node);\n        return brCount <= 1;\n      }\n    };\n    const isEmpty$2 = (elm, skipBogus = true) => isEmptyNode(elm.dom, skipBogus);\n\n    const isNonHtmlElementRootName = name => name.toLowerCase() === 'svg';\n    const isNonHtmlElementRoot = node => isNonHtmlElementRootName(node.nodeName);\n    const toScopeType = node => (node === null || node === void 0 ? void 0 : node.nodeName) === 'svg' ? 'svg' : 'html';\n    const namespaceElements = ['svg'];\n    const createNamespaceTracker = () => {\n      let scopes = [];\n      const peek = () => scopes[scopes.length - 1];\n      const track = node => {\n        if (isNonHtmlElementRoot(node)) {\n          scopes.push(node);\n        }\n        let currentScope = peek();\n        if (currentScope && !currentScope.contains(node)) {\n          scopes.pop();\n          currentScope = peek();\n        }\n        return toScopeType(currentScope);\n      };\n      const current = () => toScopeType(peek());\n      const reset = () => {\n        scopes = [];\n      };\n      return {\n        track,\n        current,\n        reset\n      };\n    };\n\n    const transparentBlockAttr = 'data-mce-block';\n    const elementNames = map => filter$5(keys(map), key => !/[A-Z]/.test(key));\n    const makeSelectorFromSchemaMap = map => map$3(elementNames(map), name => {\n      return `${ name }:` + map$3(namespaceElements, ns => `not(${ ns } ${ name })`).join(':');\n    }).join(',');\n    const updateTransparent = (blocksSelector, transparent) => {\n      if (isNonNullable(transparent.querySelector(blocksSelector))) {\n        transparent.setAttribute(transparentBlockAttr, 'true');\n        if (transparent.getAttribute('data-mce-selected') === 'inline-boundary') {\n          transparent.removeAttribute('data-mce-selected');\n        }\n        return true;\n      } else {\n        transparent.removeAttribute(transparentBlockAttr);\n        return false;\n      }\n    };\n    const updateBlockStateOnChildren = (schema, scope) => {\n      const transparentSelector = makeSelectorFromSchemaMap(schema.getTransparentElements());\n      const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n      return filter$5(scope.querySelectorAll(transparentSelector), transparent => updateTransparent(blocksSelector, transparent));\n    };\n    const trimEdge = (el, leftSide) => {\n      var _a;\n      const childPropertyName = leftSide ? 'lastChild' : 'firstChild';\n      for (let child = el[childPropertyName]; child; child = child[childPropertyName]) {\n        if (isEmpty$2(SugarElement.fromDom(child))) {\n          (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);\n          return;\n        }\n      }\n    };\n    const split$2 = (parentElm, splitElm) => {\n      const range = document.createRange();\n      const parentNode = parentElm.parentNode;\n      if (parentNode) {\n        range.setStartBefore(parentElm);\n        range.setEndBefore(splitElm);\n        const beforeFragment = range.extractContents();\n        trimEdge(beforeFragment, true);\n        range.setStartAfter(splitElm);\n        range.setEndAfter(parentElm);\n        const afterFragment = range.extractContents();\n        trimEdge(afterFragment, false);\n        if (!isEmpty$2(SugarElement.fromDom(beforeFragment))) {\n          parentNode.insertBefore(beforeFragment, parentElm);\n        }\n        if (!isEmpty$2(SugarElement.fromDom(splitElm))) {\n          parentNode.insertBefore(splitElm, parentElm);\n        }\n        if (!isEmpty$2(SugarElement.fromDom(afterFragment))) {\n          parentNode.insertBefore(afterFragment, parentElm);\n        }\n        parentNode.removeChild(parentElm);\n      }\n    };\n    const splitInvalidChildren = (schema, scope, transparentBlocks) => {\n      const blocksElements = schema.getBlockElements();\n      const rootNode = SugarElement.fromDom(scope);\n      const isBlock = el => name(el) in blocksElements;\n      const isRoot = el => eq(el, rootNode);\n      each$e(fromDom$1(transparentBlocks), transparentBlock => {\n        ancestor$4(transparentBlock, isBlock, isRoot).each(parentBlock => {\n          const invalidChildren = children(transparentBlock, el => isBlock(el) && !schema.isValidChild(name(parentBlock), name(el)));\n          if (invalidChildren.length > 0) {\n            const stateScope = parentElement(parentBlock);\n            each$e(invalidChildren, child => {\n              ancestor$4(child, isBlock, isRoot).each(parentBlock => {\n                split$2(parentBlock.dom, child.dom);\n              });\n            });\n            stateScope.each(scope => updateBlockStateOnChildren(schema, scope.dom));\n          }\n        });\n      });\n    };\n    const unwrapInvalidChildren = (schema, scope, transparentBlocks) => {\n      each$e([\n        ...transparentBlocks,\n        ...isTransparentBlock(schema, scope) ? [scope] : []\n      ], block => each$e(descendants(SugarElement.fromDom(block), block.nodeName.toLowerCase()), elm => {\n        if (isTransparentInline(schema, elm.dom)) {\n          unwrap(elm);\n        }\n      }));\n    };\n    const updateChildren = (schema, scope) => {\n      const transparentBlocks = updateBlockStateOnChildren(schema, scope);\n      splitInvalidChildren(schema, scope, transparentBlocks);\n      unwrapInvalidChildren(schema, scope, transparentBlocks);\n    };\n    const updateElement = (schema, target) => {\n      if (isTransparentElement(schema, target)) {\n        const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n        updateTransparent(blocksSelector, target);\n      }\n    };\n    const updateCaret = (schema, root, caretParent) => {\n      const isRoot = el => eq(el, SugarElement.fromDom(root));\n      const parents = parents$1(SugarElement.fromDom(caretParent), isRoot);\n      get$b(parents, parents.length - 2).filter(isElement$7).fold(() => updateChildren(schema, root), scope => updateChildren(schema, scope.dom));\n    };\n    const hasBlockAttr = el => el.hasAttribute(transparentBlockAttr);\n    const isTransparentElementName = (schema, name) => has$2(schema.getTransparentElements(), name);\n    const isTransparentElement = (schema, node) => isElement$6(node) && isTransparentElementName(schema, node.nodeName);\n    const isTransparentBlock = (schema, node) => isTransparentElement(schema, node) && hasBlockAttr(node);\n    const isTransparentInline = (schema, node) => isTransparentElement(schema, node) && !hasBlockAttr(node);\n    const isTransparentAstBlock = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isString(node.attr(transparentBlockAttr));\n\n    const browser$2 = detect$2().browser;\n    const firstElement = nodes => find$2(nodes, isElement$7);\n    const getTableCaptionDeltaY = elm => {\n      if (browser$2.isFirefox() && name(elm) === 'table') {\n        return firstElement(children$1(elm)).filter(elm => {\n          return name(elm) === 'caption';\n        }).bind(caption => {\n          return firstElement(nextSiblings(caption)).map(body => {\n            const bodyTop = body.dom.offsetTop;\n            const captionTop = caption.dom.offsetTop;\n            const captionHeight = caption.dom.offsetHeight;\n            return bodyTop <= captionTop ? -captionHeight : 0;\n          });\n        }).getOr(0);\n      } else {\n        return 0;\n      }\n    };\n    const hasChild = (elm, child) => elm.children && contains$2(elm.children, child);\n    const getPos = (body, elm, rootElm) => {\n      let x = 0, y = 0;\n      const doc = body.ownerDocument;\n      rootElm = rootElm ? rootElm : body;\n      if (elm) {\n        if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), 'position') === 'static') {\n          const pos = elm.getBoundingClientRect();\n          x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n          y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n          return {\n            x,\n            y\n          };\n        }\n        let offsetParent = elm;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n          const castOffsetParent = offsetParent;\n          x += castOffsetParent.offsetLeft || 0;\n          y += castOffsetParent.offsetTop || 0;\n          offsetParent = castOffsetParent.offsetParent;\n        }\n        offsetParent = elm.parentNode;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n          x -= offsetParent.scrollLeft || 0;\n          y -= offsetParent.scrollTop || 0;\n          offsetParent = offsetParent.parentNode;\n        }\n        y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n      }\n      return {\n        x,\n        y\n      };\n    };\n\n    const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n      let idCount = 0;\n      const loadedStates = {};\n      const edos = SugarElement.fromDom(documentOrShadowRoot);\n      const doc = documentOrOwner(edos);\n      const _setReferrerPolicy = referrerPolicy => {\n        settings.referrerPolicy = referrerPolicy;\n      };\n      const _setContentCssCors = contentCssCors => {\n        settings.contentCssCors = contentCssCors;\n      };\n      const addStyle = element => {\n        append$1(getStyleContainer(edos), element);\n      };\n      const removeStyle = id => {\n        const styleContainer = getStyleContainer(edos);\n        descendant$1(styleContainer, '#' + id).each(remove$5);\n      };\n      const getOrCreateState = url => get$a(loadedStates, url).getOrThunk(() => ({\n        id: 'mce-u' + idCount++,\n        passed: [],\n        failed: [],\n        count: 0\n      }));\n      const load = url => new Promise((success, failure) => {\n        let link;\n        const urlWithSuffix = Tools._addCacheSuffix(url);\n        const state = getOrCreateState(urlWithSuffix);\n        loadedStates[urlWithSuffix] = state;\n        state.count++;\n        const resolve = (callbacks, status) => {\n          each$e(callbacks, call);\n          state.status = status;\n          state.passed = [];\n          state.failed = [];\n          if (link) {\n            link.onload = null;\n            link.onerror = null;\n            link = null;\n          }\n        };\n        const passed = () => resolve(state.passed, 2);\n        const failed = () => resolve(state.failed, 3);\n        if (success) {\n          state.passed.push(success);\n        }\n        if (failure) {\n          state.failed.push(failure);\n        }\n        if (state.status === 1) {\n          return;\n        }\n        if (state.status === 2) {\n          passed();\n          return;\n        }\n        if (state.status === 3) {\n          failed();\n          return;\n        }\n        state.status = 1;\n        const linkElem = SugarElement.fromTag('link', doc.dom);\n        setAll$1(linkElem, {\n          rel: 'stylesheet',\n          type: 'text/css',\n          id: state.id\n        });\n        if (settings.contentCssCors) {\n          set$3(linkElem, 'crossOrigin', 'anonymous');\n        }\n        if (settings.referrerPolicy) {\n          set$3(linkElem, 'referrerpolicy', settings.referrerPolicy);\n        }\n        link = linkElem.dom;\n        link.onload = passed;\n        link.onerror = failed;\n        addStyle(linkElem);\n        set$3(linkElem, 'href', urlWithSuffix);\n      });\n      const loadRawCss = (key, css) => {\n        const state = getOrCreateState(key);\n        loadedStates[key] = state;\n        state.count++;\n        const styleElem = SugarElement.fromTag('style', doc.dom);\n        setAll$1(styleElem, {\n          rel: 'stylesheet',\n          type: 'text/css',\n          id: state.id\n        });\n        styleElem.dom.innerHTML = css;\n        addStyle(styleElem);\n      };\n      const loadAll = urls => {\n        const loadedUrls = Promise.allSettled(map$3(urls, url => load(url).then(constant(url))));\n        return loadedUrls.then(results => {\n          const parts = partition$2(results, r => r.status === 'fulfilled');\n          if (parts.fail.length > 0) {\n            return Promise.reject(map$3(parts.fail, result => result.reason));\n          } else {\n            return map$3(parts.pass, result => result.value);\n          }\n        });\n      };\n      const unload = url => {\n        const urlWithSuffix = Tools._addCacheSuffix(url);\n        get$a(loadedStates, urlWithSuffix).each(state => {\n          const count = --state.count;\n          if (count === 0) {\n            delete loadedStates[urlWithSuffix];\n            removeStyle(state.id);\n          }\n        });\n      };\n      const unloadRawCss = key => {\n        get$a(loadedStates, key).each(state => {\n          const count = --state.count;\n          if (count === 0) {\n            delete loadedStates[key];\n            removeStyle(state.id);\n          }\n        });\n      };\n      const unloadAll = urls => {\n        each$e(urls, url => {\n          unload(url);\n        });\n      };\n      return {\n        load,\n        loadRawCss,\n        loadAll,\n        unload,\n        unloadRawCss,\n        unloadAll,\n        _setReferrerPolicy,\n        _setContentCssCors\n      };\n    };\n\n    const create$d = () => {\n      const map = new WeakMap();\n      const forElement = (referenceElement, settings) => {\n        const root = getRootNode(referenceElement);\n        const rootDom = root.dom;\n        return Optional.from(map.get(rootDom)).getOrThunk(() => {\n          const sl = StyleSheetLoader(rootDom, settings);\n          map.set(rootDom, sl);\n          return sl;\n        });\n      };\n      return { forElement };\n    };\n    const instance = create$d();\n\n    const isSpan = node => node.nodeName.toLowerCase() === 'span';\n    const isInlineContent = (node, root, schema) => isNonNullable(node) && (isContent$1(node, root) || schema.isInline(node.nodeName.toLowerCase()));\n    const surroundedByInlineContent = (node, root, schema) => {\n      const prev = new DomTreeWalker(node, root).prev(false);\n      const next = new DomTreeWalker(node, root).next(false);\n      const prevIsInline = isUndefined(prev) || isInlineContent(prev, root, schema);\n      const nextIsInline = isUndefined(next) || isInlineContent(next, root, schema);\n      return prevIsInline && nextIsInline;\n    };\n    const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n    const isKeepTextNode = (node, root, schema) => isText$a(node) && node.data.length > 0 && surroundedByInlineContent(node, root, schema);\n    const isKeepElement = node => isElement$6(node) ? node.childNodes.length > 0 : false;\n    const isDocument = node => isDocumentFragment(node) || isDocument$1(node);\n    const trimNode = (dom, node, schema, root) => {\n      var _a;\n      const rootNode = root || node;\n      if (isElement$6(node) && isBookmarkNode$2(node)) {\n        return node;\n      }\n      const children = node.childNodes;\n      for (let i = children.length - 1; i >= 0; i--) {\n        trimNode(dom, children[i], schema, rootNode);\n      }\n      if (isElement$6(node)) {\n        const currentChildren = node.childNodes;\n        if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n          (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(currentChildren[0], node);\n        }\n      }\n      if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode, schema)) {\n        dom.remove(node);\n      }\n      return node;\n    };\n\n    const makeMap$3 = Tools.makeMap;\n    const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    const rawCharsRegExp = /[<>&\\\"\\']/g;\n    const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n    const asciiMap = {\n      128: '\\u20AC',\n      130: '\\u201A',\n      131: '\\u0192',\n      132: '\\u201E',\n      133: '\\u2026',\n      134: '\\u2020',\n      135: '\\u2021',\n      136: '\\u02c6',\n      137: '\\u2030',\n      138: '\\u0160',\n      139: '\\u2039',\n      140: '\\u0152',\n      142: '\\u017d',\n      145: '\\u2018',\n      146: '\\u2019',\n      147: '\\u201C',\n      148: '\\u201D',\n      149: '\\u2022',\n      150: '\\u2013',\n      151: '\\u2014',\n      152: '\\u02DC',\n      153: '\\u2122',\n      154: '\\u0161',\n      155: '\\u203A',\n      156: '\\u0153',\n      158: '\\u017e',\n      159: '\\u0178'\n    };\n    const baseEntities = {\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '&': '&amp;',\n      '`': '&#96;'\n    };\n    const reverseEntities = {\n      '&lt;': '<',\n      '&gt;': '>',\n      '&amp;': '&',\n      '&quot;': '\"',\n      '&apos;': `'`\n    };\n    const nativeDecode = text => {\n      const elm = SugarElement.fromTag('div').dom;\n      elm.innerHTML = text;\n      return elm.textContent || elm.innerText || text;\n    };\n    const buildEntitiesLookup = (items, radix) => {\n      const lookup = {};\n      if (items) {\n        const itemList = items.split(',');\n        radix = radix || 10;\n        for (let i = 0; i < itemList.length; i += 2) {\n          const chr = String.fromCharCode(parseInt(itemList[i], radix));\n          if (!baseEntities[chr]) {\n            const entity = '&' + itemList[i + 1] + ';';\n            lookup[chr] = entity;\n            lookup[entity] = chr;\n          }\n        }\n        return lookup;\n      } else {\n        return undefined;\n      }\n    };\n    const namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n    const encodeRaw = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n      return baseEntities[chr] || chr;\n    });\n    const encodeAllRaw = text => ('' + text).replace(rawCharsRegExp, chr => {\n      return baseEntities[chr] || chr;\n    });\n    const encodeNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n      if (chr.length > 1) {\n        return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n      }\n      return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n    });\n    const encodeNamed = (text, attr, entities) => {\n      const resolveEntities = entities || namedEntities;\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n        return baseEntities[chr] || resolveEntities[chr] || chr;\n      });\n    };\n    const getEncodeFunc = (name, entities) => {\n      const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n      const encodeNamedAndNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n        if (baseEntities[chr] !== undefined) {\n          return baseEntities[chr];\n        }\n        if (entitiesMap[chr] !== undefined) {\n          return entitiesMap[chr];\n        }\n        if (chr.length > 1) {\n          return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n        }\n        return '&#' + chr.charCodeAt(0) + ';';\n      });\n      const encodeCustomNamed = (text, attr) => {\n        return encodeNamed(text, attr, entitiesMap);\n      };\n      const nameMap = makeMap$3(name.replace(/\\+/g, ','));\n      if (nameMap.named && nameMap.numeric) {\n        return encodeNamedAndNumeric;\n      }\n      if (nameMap.named) {\n        if (entities) {\n          return encodeCustomNamed;\n        }\n        return encodeNamed;\n      }\n      if (nameMap.numeric) {\n        return encodeNumeric;\n      }\n      return encodeRaw;\n    };\n    const decode = text => text.replace(entityRegExp, (all, numeric) => {\n      if (numeric) {\n        if (numeric.charAt(0).toLowerCase() === 'x') {\n          numeric = parseInt(numeric.substr(1), 16);\n        } else {\n          numeric = parseInt(numeric, 10);\n        }\n        if (numeric > 65535) {\n          numeric -= 65536;\n          return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n        }\n        return asciiMap[numeric] || String.fromCharCode(numeric);\n      }\n      return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n    });\n    const Entities = {\n      encodeRaw,\n      encodeAllRaw,\n      encodeNumeric,\n      encodeNamed,\n      getEncodeFunc,\n      decode\n    };\n\n    const split$1 = (items, delim) => {\n      items = Tools.trim(items);\n      return items ? items.split(delim || ' ') : [];\n    };\n    const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n\n    const parseCustomElementsRules = value => {\n      const customElementRegExp = /^(~)?(.+)$/;\n      return bind$3(split$1(value, ','), rule => {\n        const matches = customElementRegExp.exec(rule);\n        if (matches) {\n          const inline = matches[1] === '~';\n          const cloneName = inline ? 'span' : 'div';\n          const name = matches[2];\n          return [{\n              inline,\n              cloneName,\n              name\n            }];\n        } else {\n          return [];\n        }\n      });\n    };\n\n    const getElementSetsAsStrings = type => {\n      let globalAttributes, blockContent;\n      let phrasingContent;\n      globalAttributes = 'id accesskey class dir lang style tabindex title role';\n      blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n      phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n      if (type !== 'html4') {\n        const transparentContent = 'a ins del canvas map';\n        globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n        blockContent += ' article aside details dialog figure main header footer hgroup section nav ' + transparentContent;\n        phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen svg';\n      }\n      if (type !== 'html5-strict') {\n        globalAttributes += ' xml:lang';\n        const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n        phrasingContent = [\n          phrasingContent,\n          html4PhrasingContent\n        ].join(' ');\n        const html4BlockContent = 'center dir isindex noframes';\n        blockContent = [\n          blockContent,\n          html4BlockContent\n        ].join(' ');\n      }\n      const flowContent = [\n        blockContent,\n        phrasingContent\n      ].join(' ');\n      return {\n        globalAttributes,\n        blockContent,\n        phrasingContent,\n        flowContent\n      };\n    };\n\n    const makeSchema = type => {\n      const {globalAttributes, phrasingContent, flowContent} = getElementSetsAsStrings(type);\n      const schema = {};\n      const addElement = (name, attributes, children) => {\n        schema[name] = {\n          attributes: mapToObject(attributes, constant({})),\n          attributesOrder: attributes,\n          children: mapToObject(children, constant({}))\n        };\n      };\n      const add = (name, attributes = '', children = '') => {\n        const childNames = split$1(children);\n        const names = split$1(name);\n        let ni = names.length;\n        const allAttributes = split$1([\n          globalAttributes,\n          attributes\n        ].join(' '));\n        while (ni--) {\n          addElement(names[ni], allAttributes.slice(), childNames);\n        }\n      };\n      const addAttrs = (name, attributes) => {\n        const names = split$1(name);\n        const attrs = split$1(attributes);\n        let ni = names.length;\n        while (ni--) {\n          const schemaItem = schema[names[ni]];\n          for (let i = 0, l = attrs.length; i < l; i++) {\n            schemaItem.attributes[attrs[i]] = {};\n            schemaItem.attributesOrder.push(attrs[i]);\n          }\n        }\n      };\n      if (type !== 'html5-strict') {\n        const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n        each$e(split$1(html4PhrasingContent), name => {\n          add(name, '', phrasingContent);\n        });\n        const html4BlockContent = 'center dir isindex noframes';\n        each$e(split$1(html4BlockContent), name => {\n          add(name, '', flowContent);\n        });\n      }\n      add('html', 'manifest', 'head body');\n      add('head', '', 'base command link meta noscript script style title');\n      add('title hr noscript br');\n      add('base', 'href target');\n      add('link', 'href rel media hreflang type sizes hreflang');\n      add('meta', 'name http-equiv content charset');\n      add('style', 'media type scoped');\n      add('script', 'src async defer type charset');\n      add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n      add('dd div', '', flowContent);\n      add('address dt caption', '', type === 'html4' ? phrasingContent : flowContent);\n      add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n      add('blockquote', 'cite', flowContent);\n      add('ol', 'reversed start type', 'li');\n      add('ul', '', 'li');\n      add('li', 'value', flowContent);\n      add('dl', '', 'dt dd');\n      add('a', 'href target rel media hreflang type', type === 'html4' ? phrasingContent : flowContent);\n      add('q', 'cite', phrasingContent);\n      add('ins del', 'cite datetime', flowContent);\n      add('img', 'src sizes srcset alt usemap ismap width height');\n      add('iframe', 'src name width height', flowContent);\n      add('embed', 'src type width height');\n      add('object', 'data type typemustmatch name usemap form width height', [\n        flowContent,\n        'param'\n      ].join(' '));\n      add('param', 'name value');\n      add('map', 'name', [\n        flowContent,\n        'area'\n      ].join(' '));\n      add('area', 'alt coords shape href target rel media hreflang type');\n      add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n      add('colgroup', 'span', 'col');\n      add('col', 'span');\n      add('tbody thead tfoot', '', 'tr');\n      add('tr', '', 'td th');\n      add('td', 'colspan rowspan headers', flowContent);\n      add('th', 'colspan rowspan headers scope abbr', flowContent);\n      add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n      add('fieldset', 'disabled form name', [\n        flowContent,\n        'legend'\n      ].join(' '));\n      add('label', 'form for', phrasingContent);\n      add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n      add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n      add('select', 'disabled form multiple name required size', 'option optgroup');\n      add('optgroup', 'disabled label', 'option');\n      add('option', 'disabled label selected value');\n      add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n      add('menu', 'type label', [\n        flowContent,\n        'li'\n      ].join(' '));\n      add('noscript', '', flowContent);\n      if (type !== 'html4') {\n        add('wbr');\n        add('ruby', '', [\n          phrasingContent,\n          'rt rp'\n        ].join(' '));\n        add('figcaption', '', flowContent);\n        add('mark rt rp bdi', '', phrasingContent);\n        add('summary', '', [\n          phrasingContent,\n          'h1 h2 h3 h4 h5 h6'\n        ].join(' '));\n        add('canvas', 'width height', flowContent);\n        add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('picture', '', 'img source');\n        add('source', 'src srcset type media sizes');\n        add('track', 'kind src srclang label default');\n        add('datalist', '', [\n          phrasingContent,\n          'option'\n        ].join(' '));\n        add('article section nav aside main header footer', '', flowContent);\n        add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n        add('figure', '', [\n          flowContent,\n          'figcaption'\n        ].join(' '));\n        add('time', 'datetime', phrasingContent);\n        add('dialog', 'open', flowContent);\n        add('command', 'type label icon disabled checked radiogroup command');\n        add('output', 'for form name', phrasingContent);\n        add('progress', 'value max', phrasingContent);\n        add('meter', 'value min max low high optimum', phrasingContent);\n        add('details', 'open', [\n          flowContent,\n          'summary'\n        ].join(' '));\n        add('keygen', 'autofocus challenge disabled form keytype name');\n        addElement('svg', 'id tabindex lang xml:space class style x y width height viewBox preserveAspectRatio zoomAndPan transform'.split(' '), []);\n      }\n      if (type !== 'html5-strict') {\n        addAttrs('script', 'language xml:space');\n        addAttrs('style', 'xml:space');\n        addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n        addAttrs('embed', 'align name hspace vspace');\n        addAttrs('param', 'valuetype type');\n        addAttrs('a', 'charset name rev shape coords');\n        addAttrs('br', 'clear');\n        addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n        addAttrs('img', 'name longdesc align border hspace vspace');\n        addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n        addAttrs('font basefont', 'size color face');\n        addAttrs('input', 'usemap align');\n        addAttrs('select');\n        addAttrs('textarea');\n        addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n        addAttrs('ul', 'type compact');\n        addAttrs('li', 'type');\n        addAttrs('ol dl menu dir', 'compact');\n        addAttrs('pre', 'width xml:space');\n        addAttrs('hr', 'align noshade size width');\n        addAttrs('isindex', 'prompt');\n        addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n        addAttrs('col', 'width align char charoff valign');\n        addAttrs('colgroup', 'width align char charoff valign');\n        addAttrs('thead', 'align char charoff valign');\n        addAttrs('tr', 'align char charoff valign bgcolor');\n        addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n        addAttrs('form', 'accept');\n        addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n        addAttrs('tfoot', 'align char charoff valign');\n        addAttrs('tbody', 'align char charoff valign');\n        addAttrs('area', 'nohref');\n        addAttrs('body', 'background bgcolor text link vlink alink');\n      }\n      if (type !== 'html4') {\n        addAttrs('input button select textarea', 'autofocus');\n        addAttrs('input textarea', 'placeholder');\n        addAttrs('a', 'download');\n        addAttrs('link script img', 'crossorigin');\n        addAttrs('img', 'loading');\n        addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading');\n      }\n      if (type !== 'html4') {\n        each$e([\n          schema.video,\n          schema.audio\n        ], item => {\n          delete item.children.audio;\n          delete item.children.video;\n        });\n      }\n      each$e(split$1('a form meter progress dfn'), name => {\n        if (schema[name]) {\n          delete schema[name].children[name];\n        }\n      });\n      delete schema.caption.children.table;\n      delete schema.script;\n      return schema;\n    };\n\n    const prefixToOperation = prefix => prefix === '-' ? 'remove' : 'add';\n    const parseValidChildrenRules = value => {\n      const childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n      return bind$3(split$1(value, ','), rule => {\n        const matches = childRuleRegExp.exec(rule);\n        if (matches) {\n          const prefix = matches[1];\n          const operation = prefix ? prefixToOperation(prefix) : 'replace';\n          const name = matches[2];\n          const validChildren = split$1(matches[3], '|');\n          return [{\n              operation,\n              name,\n              validChildren\n            }];\n        } else {\n          return [];\n        }\n      });\n    };\n\n    const parseValidElementsAttrDataIntoElement = (attrData, targetElement) => {\n      const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n      const hasPatternsRegExp = /[*?+]/;\n      const {attributes, attributesOrder} = targetElement;\n      return each$e(split$1(attrData, '|'), rule => {\n        const matches = attrRuleRegExp.exec(rule);\n        if (matches) {\n          const attr = {};\n          const attrType = matches[1];\n          const attrName = matches[2].replace(/[\\\\:]:/g, ':');\n          const attrPrefix = matches[3];\n          const value = matches[4];\n          if (attrType === '!') {\n            targetElement.attributesRequired = targetElement.attributesRequired || [];\n            targetElement.attributesRequired.push(attrName);\n            attr.required = true;\n          }\n          if (attrType === '-') {\n            delete attributes[attrName];\n            attributesOrder.splice(Tools.inArray(attributesOrder, attrName), 1);\n            return;\n          }\n          if (attrPrefix) {\n            if (attrPrefix === '=') {\n              targetElement.attributesDefault = targetElement.attributesDefault || [];\n              targetElement.attributesDefault.push({\n                name: attrName,\n                value\n              });\n              attr.defaultValue = value;\n            } else if (attrPrefix === '~') {\n              targetElement.attributesForced = targetElement.attributesForced || [];\n              targetElement.attributesForced.push({\n                name: attrName,\n                value\n              });\n              attr.forcedValue = value;\n            } else if (attrPrefix === '<') {\n              attr.validValues = Tools.makeMap(value, '?');\n            }\n          }\n          if (hasPatternsRegExp.test(attrName)) {\n            const attrPattern = attr;\n            targetElement.attributePatterns = targetElement.attributePatterns || [];\n            attrPattern.pattern = patternToRegExp(attrName);\n            targetElement.attributePatterns.push(attrPattern);\n          } else {\n            if (!attributes[attrName]) {\n              attributesOrder.push(attrName);\n            }\n            attributes[attrName] = attr;\n          }\n        }\n      });\n    };\n    const cloneAttributesInto = (from, to) => {\n      each$d(from.attributes, (value, key) => {\n        to.attributes[key] = value;\n      });\n      to.attributesOrder.push(...from.attributesOrder);\n    };\n    const parseValidElementsRules = (globalElement, validElements) => {\n      const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n      return bind$3(split$1(validElements, ','), rule => {\n        const matches = elementRuleRegExp.exec(rule);\n        if (matches) {\n          const prefix = matches[1];\n          const elementName = matches[2];\n          const outputName = matches[3];\n          const attrsPrefix = matches[4];\n          const attrData = matches[5];\n          const element = {\n            attributes: {},\n            attributesOrder: []\n          };\n          globalElement.each(el => cloneAttributesInto(el, element));\n          if (prefix === '#') {\n            element.paddEmpty = true;\n          } else if (prefix === '-') {\n            element.removeEmpty = true;\n          }\n          if (attrsPrefix === '!') {\n            element.removeEmptyAttrs = true;\n          }\n          if (attrData) {\n            parseValidElementsAttrDataIntoElement(attrData, element);\n          }\n          if (outputName) {\n            element.outputName = elementName;\n          }\n          if (elementName === '@') {\n            if (globalElement.isNone()) {\n              globalElement = Optional.some(element);\n            } else {\n              return [];\n            }\n          }\n          return [outputName ? {\n              name: elementName,\n              element,\n              aliasName: outputName\n            } : {\n              name: elementName,\n              element\n            }];\n        } else {\n          return [];\n        }\n      });\n    };\n\n    const mapCache = {};\n    const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode;\n    const createMap = (defaultValue, extendWith = {}) => {\n      const value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n      return extend$2(value, extendWith);\n    };\n    const getTextRootBlockElements = schema => createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n    const compileElementMap = (value, mode) => {\n      if (value) {\n        const styles = {};\n        if (isString(value)) {\n          value = { '*': value };\n        }\n        each$b(value, (value, key) => {\n          styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$2(value, /[, ]/);\n        });\n        return styles;\n      } else {\n        return undefined;\n      }\n    };\n    const Schema = (settings = {}) => {\n      var _a;\n      const elements = {};\n      const children = {};\n      let patternElements = [];\n      const customElementsMap = {};\n      const specialElements = {};\n      const createLookupTable = (option, defaultValue, extendWith) => {\n        const value = settings[option];\n        if (!value) {\n          let newValue = mapCache[option];\n          if (!newValue) {\n            newValue = createMap(defaultValue, extendWith);\n            mapCache[option] = newValue;\n          }\n          return newValue;\n        } else {\n          return makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n        }\n      };\n      const schemaType = (_a = settings.schema) !== null && _a !== void 0 ? _a : 'html5';\n      const schemaItems = makeSchema(schemaType);\n      if (settings.verify_html === false) {\n        settings.valid_elements = '*[*]';\n      }\n      const validStyles = compileElementMap(settings.valid_styles);\n      const invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n      const validClasses = compileElementMap(settings.valid_classes, 'map');\n      const whitespaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n      const selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n      const voidElementsMap = createLookupTable('void_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n      const boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls allowfullscreen');\n      const nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n      const nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre svg', voidElementsMap);\n      const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n      const headings = 'h1 h2 h3 h4 h5 h6';\n      const textBlockElementsMap = createLookupTable('text_block_elements', headings + ' p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n      const blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary html body multicol listing', textBlockElementsMap);\n      const textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n      const transparentElementsMap = createLookupTable('transparent_elements', 'a ins del canvas map');\n      const wrapBlockElementsMap = createLookupTable('wrap_block_elements', 'pre ' + headings);\n      each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n        specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\n      });\n      const addValidElements = validElements => {\n        const globalElement = Optional.from(elements['@']);\n        const hasPatternsRegExp = /[*?+]/;\n        each$e(parseValidElementsRules(globalElement, validElements !== null && validElements !== void 0 ? validElements : ''), ({name, element, aliasName}) => {\n          if (aliasName) {\n            elements[aliasName] = element;\n          }\n          if (hasPatternsRegExp.test(name)) {\n            const patternElement = element;\n            patternElement.pattern = patternToRegExp(name);\n            patternElements.push(patternElement);\n          } else {\n            elements[name] = element;\n          }\n        });\n      };\n      const setValidElements = validElements => {\n        patternElements = [];\n        each$e(keys(elements), name => {\n          delete elements[name];\n        });\n        addValidElements(validElements);\n      };\n      const addCustomElements = customElements => {\n        delete mapCache.text_block_elements;\n        delete mapCache.block_elements;\n        each$e(parseCustomElementsRules(customElements !== null && customElements !== void 0 ? customElements : ''), ({inline, name, cloneName}) => {\n          children[name] = children[cloneName];\n          customElementsMap[name] = cloneName;\n          nonEmptyElementsMap[name.toUpperCase()] = {};\n          nonEmptyElementsMap[name] = {};\n          if (!inline) {\n            blockElementsMap[name.toUpperCase()] = {};\n            blockElementsMap[name] = {};\n          }\n          if (!elements[name]) {\n            let customRule = elements[cloneName];\n            customRule = extend$2({}, customRule);\n            delete customRule.removeEmptyAttrs;\n            delete customRule.removeEmpty;\n            elements[name] = customRule;\n          }\n          each$d(children, (element, elmName) => {\n            if (element[cloneName]) {\n              children[elmName] = element = extend$2({}, children[elmName]);\n              element[name] = element[cloneName];\n            }\n          });\n        });\n      };\n      const addValidChildren = validChildren => {\n        each$e(parseValidChildrenRules(validChildren !== null && validChildren !== void 0 ? validChildren : ''), ({operation, name, validChildren}) => {\n          const parent = operation === 'replace' ? { '#comment': {} } : children[name];\n          each$e(validChildren, child => {\n            if (operation === 'remove') {\n              delete parent[child];\n            } else {\n              parent[child] = {};\n            }\n          });\n          children[name] = parent;\n        });\n      };\n      const getElementRule = name => {\n        const element = elements[name];\n        if (element) {\n          return element;\n        }\n        let i = patternElements.length;\n        while (i--) {\n          const patternElement = patternElements[i];\n          if (patternElement.pattern.test(name)) {\n            return patternElement;\n          }\n        }\n        return undefined;\n      };\n      if (!settings.valid_elements) {\n        each$b(schemaItems, (element, name) => {\n          elements[name] = {\n            attributes: element.attributes,\n            attributesOrder: element.attributesOrder\n          };\n          children[name] = element.children;\n        });\n        each$b(split$1('strong/b em/i'), item => {\n          const items = split$1(item, '/');\n          elements[items[1]].outputName = items[0];\n        });\n        each$b(textInlineElementsMap, (_val, name) => {\n          if (elements[name]) {\n            if (settings.padd_empty_block_inline_children) {\n              elements[name].paddInEmptyBlock = true;\n            }\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$b(split$1('ol ul blockquote a table tbody'), name => {\n          if (elements[name]) {\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$b(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li summary'), name => {\n          if (elements[name]) {\n            elements[name].paddEmpty = true;\n          }\n        });\n        each$b(split$1('span'), name => {\n          elements[name].removeEmptyAttrs = true;\n        });\n      } else {\n        setValidElements(settings.valid_elements);\n        each$b(schemaItems, (element, name) => {\n          children[name] = element.children;\n        });\n      }\n      delete elements.svg;\n      addCustomElements(settings.custom_elements);\n      addValidChildren(settings.valid_children);\n      addValidElements(settings.extended_valid_elements);\n      addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n      each$b({\n        dd: 'dl',\n        dt: 'dl',\n        li: 'ul ol',\n        td: 'tr',\n        th: 'tr',\n        tr: 'tbody thead tfoot',\n        tbody: 'table',\n        thead: 'table',\n        tfoot: 'table',\n        legend: 'fieldset',\n        area: 'map',\n        param: 'video audio object'\n      }, (parents, item) => {\n        if (elements[item]) {\n          elements[item].parentsRequired = split$1(parents);\n        }\n      });\n      if (settings.invalid_elements) {\n        each$b(explode$2(settings.invalid_elements), item => {\n          if (elements[item]) {\n            delete elements[item];\n          }\n        });\n      }\n      if (!getElementRule('span')) {\n        addValidElements('span[!data-mce-type|*]');\n      }\n      const getValidStyles = constant(validStyles);\n      const getInvalidStyles = constant(invalidStyles);\n      const getValidClasses = constant(validClasses);\n      const getBoolAttrs = constant(boolAttrMap);\n      const getBlockElements = constant(blockElementsMap);\n      const getTextBlockElements = constant(textBlockElementsMap);\n      const getTextInlineElements = constant(textInlineElementsMap);\n      const getVoidElements = constant(Object.seal(voidElementsMap));\n      const getSelfClosingElements = constant(selfClosingElementsMap);\n      const getNonEmptyElements = constant(nonEmptyElementsMap);\n      const getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n      const getWhitespaceElements = constant(whitespaceElementsMap);\n      const getTransparentElements = constant(transparentElementsMap);\n      const getWrapBlockElements = constant(wrapBlockElementsMap);\n      const getSpecialElements = constant(Object.seal(specialElements));\n      const isValidChild = (name, child) => {\n        const parent = children[name.toLowerCase()];\n        return !!(parent && parent[child.toLowerCase()]);\n      };\n      const isValid = (name, attr) => {\n        const rule = getElementRule(name);\n        if (rule) {\n          if (attr) {\n            if (rule.attributes[attr]) {\n              return true;\n            }\n            const attrPatterns = rule.attributePatterns;\n            if (attrPatterns) {\n              let i = attrPatterns.length;\n              while (i--) {\n                if (attrPatterns[i].pattern.test(attr)) {\n                  return true;\n                }\n              }\n            }\n          } else {\n            return true;\n          }\n        }\n        return false;\n      };\n      const isBlock = name => has$2(getBlockElements(), name);\n      const isInline = name => isValid(name) && !isBlock(name);\n      const isWrapper = name => has$2(getWrapBlockElements(), name) || isInline(name);\n      const getCustomElements = constant(customElementsMap);\n      return {\n        type: schemaType,\n        children,\n        elements,\n        getValidStyles,\n        getValidClasses,\n        getBlockElements,\n        getInvalidStyles,\n        getVoidElements,\n        getTextBlockElements,\n        getTextInlineElements,\n        getBoolAttrs,\n        getElementRule,\n        getSelfClosingElements,\n        getNonEmptyElements,\n        getMoveCaretBeforeOnEnterElements,\n        getWhitespaceElements,\n        getTransparentElements,\n        getSpecialElements,\n        isValidChild,\n        isValid,\n        isBlock,\n        isInline,\n        isWrapper,\n        getCustomElements,\n        addValidElements,\n        setValidElements,\n        addCustomElements,\n        addValidChildren\n      };\n    };\n\n    const hexColour = value => ({ value: normalizeHex(value) });\n    const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n    const toHex = component => {\n      const hex = component.toString(16);\n      return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n    };\n    const fromRgba = rgbaColour => {\n      const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n      return hexColour(value);\n    };\n\n    const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n    const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n    const rgbaColour = (red, green, blue, alpha) => ({\n      red,\n      green,\n      blue,\n      alpha\n    });\n    const fromStringValues = (red, green, blue, alpha) => {\n      const r = parseInt(red, 10);\n      const g = parseInt(green, 10);\n      const b = parseInt(blue, 10);\n      const a = parseFloat(alpha);\n      return rgbaColour(r, g, b, a);\n    };\n    const fromString = rgbaString => {\n      if (rgbaString === 'transparent') {\n        return Optional.some(rgbaColour(0, 0, 0, 0));\n      }\n      const rgbMatch = rgbRegex.exec(rgbaString);\n      if (rgbMatch !== null) {\n        return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n      }\n      const rgbaMatch = rgbaRegex.exec(rgbaString);\n      if (rgbaMatch !== null) {\n        return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n      }\n      return Optional.none();\n    };\n    const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n\n    const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n    const Styles = (settings = {}, schema) => {\n      const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n      const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n      const trimRightRegExp = /\\s+$/;\n      const encodingLookup = {};\n      let validStyles;\n      let invalidStyles;\n      const invisibleChar = zeroWidth;\n      if (schema) {\n        validStyles = schema.getValidStyles();\n        invalidStyles = schema.getInvalidStyles();\n      }\n      const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(' ');\n      for (let i = 0; i < encodingItems.length; i++) {\n        encodingLookup[encodingItems[i]] = invisibleChar + i;\n        encodingLookup[invisibleChar + i] = encodingItems[i];\n      }\n      const self = {\n        parse: css => {\n          const styles = {};\n          let isEncoded = false;\n          const urlConverter = settings.url_converter;\n          const urlConverterScope = settings.url_converter_scope || self;\n          const compress = (prefix, suffix, noJoin) => {\n            const top = styles[prefix + '-top' + suffix];\n            if (!top) {\n              return;\n            }\n            const right = styles[prefix + '-right' + suffix];\n            if (!right) {\n              return;\n            }\n            const bottom = styles[prefix + '-bottom' + suffix];\n            if (!bottom) {\n              return;\n            }\n            const left = styles[prefix + '-left' + suffix];\n            if (!left) {\n              return;\n            }\n            const box = [\n              top,\n              right,\n              bottom,\n              left\n            ];\n            let i = box.length - 1;\n            while (i--) {\n              if (box[i] !== box[i + 1]) {\n                break;\n              }\n            }\n            if (i > -1 && noJoin) {\n              return;\n            }\n            styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n            delete styles[prefix + '-top' + suffix];\n            delete styles[prefix + '-right' + suffix];\n            delete styles[prefix + '-bottom' + suffix];\n            delete styles[prefix + '-left' + suffix];\n          };\n          const canCompress = key => {\n            const value = styles[key];\n            if (!value) {\n              return;\n            }\n            const values = value.indexOf(',') > -1 ? [value] : value.split(' ');\n            let i = values.length;\n            while (i--) {\n              if (values[i] !== values[0]) {\n                return false;\n              }\n            }\n            styles[key] = values[0];\n            return true;\n          };\n          const compress2 = (target, a, b, c) => {\n            if (!canCompress(a)) {\n              return;\n            }\n            if (!canCompress(b)) {\n              return;\n            }\n            if (!canCompress(c)) {\n              return;\n            }\n            styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n            delete styles[a];\n            delete styles[b];\n            delete styles[c];\n          };\n          const encode = str => {\n            isEncoded = true;\n            return encodingLookup[str];\n          };\n          const decode = (str, keepSlashes) => {\n            if (isEncoded) {\n              str = str.replace(/\\uFEFF[0-9]/g, str => {\n                return encodingLookup[str];\n              });\n            }\n            if (!keepSlashes) {\n              str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n            }\n            return str;\n          };\n          const decodeSingleHexSequence = escSeq => {\n            return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n          };\n          const decodeHexSequences = value => {\n            return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n          };\n          const processUrl = (match, url, url2, url3, str, str2) => {\n            str = str || str2;\n            if (str) {\n              str = decode(str);\n              return `'` + str.replace(/\\'/g, `\\\\'`) + `'`;\n            }\n            url = decode(url || url2 || url3 || '');\n            if (!settings.allow_script_urls) {\n              const scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n              if (/(java|vb)script:/i.test(scriptUrl)) {\n                return '';\n              }\n              if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n                return '';\n              }\n            }\n            if (urlConverter) {\n              url = urlConverter.call(urlConverterScope, url, 'style');\n            }\n            return `url('` + url.replace(/\\'/g, `\\\\'`) + `')`;\n          };\n          if (css) {\n            css = css.replace(/[\\u0000-\\u001F]/g, '');\n            css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, str => {\n              return str.replace(/[;:]/g, encode);\n            });\n            let matches;\n            while (matches = styleRegExp.exec(css)) {\n              styleRegExp.lastIndex = matches.index + matches[0].length;\n              let name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n              let value = matches[2].replace(trimRightRegExp, '');\n              if (name && value) {\n                name = decodeHexSequences(name);\n                value = decodeHexSequences(value);\n                if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n                  continue;\n                }\n                if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n                  continue;\n                }\n                if (name === 'font-weight' && value === '700') {\n                  value = 'bold';\n                } else if (name === 'color' || name === 'background-color') {\n                  value = value.toLowerCase();\n                }\n                if (isString(settings.force_hex_color) && settings.force_hex_color !== 'off') {\n                  fromString(value).each(rgba => {\n                    if (settings.force_hex_color === 'always' || rgba.alpha === 1) {\n                      value = rgbaToHexString(toString(rgba));\n                    }\n                  });\n                }\n                value = value.replace(urlOrStrRegExp, processUrl);\n                styles[name] = isEncoded ? decode(value, true) : value;\n              }\n            }\n            compress('border', '', true);\n            compress('border', '-width');\n            compress('border', '-color');\n            compress('border', '-style');\n            compress('padding', '');\n            compress('margin', '');\n            compress2('border', 'border-width', 'border-style', 'border-color');\n            if (styles.border === 'medium none') {\n              delete styles.border;\n            }\n            if (styles['border-image'] === 'none') {\n              delete styles['border-image'];\n            }\n          }\n          return styles;\n        },\n        serialize: (styles, elementName) => {\n          let css = '';\n          const serializeStyles = (elemName, validStyleList) => {\n            const styleList = validStyleList[elemName];\n            if (styleList) {\n              for (let i = 0, l = styleList.length; i < l; i++) {\n                const name = styleList[i];\n                const value = styles[name];\n                if (value) {\n                  css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n                }\n              }\n            }\n          };\n          const isValid = (name, elemName) => {\n            if (!invalidStyles || !elemName) {\n              return true;\n            }\n            let styleMap = invalidStyles['*'];\n            if (styleMap && styleMap[name]) {\n              return false;\n            }\n            styleMap = invalidStyles[elemName];\n            return !(styleMap && styleMap[name]);\n          };\n          if (elementName && validStyles) {\n            serializeStyles('*', validStyles);\n            serializeStyles(elementName, validStyles);\n          } else {\n            each$d(styles, (value, name) => {\n              if (value && isValid(name, elementName)) {\n                css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n              }\n            });\n          }\n          return css;\n        }\n      };\n      return self;\n    };\n\n    const deprecated = {\n      keyLocation: true,\n      layerX: true,\n      layerY: true,\n      returnValue: true,\n      webkitMovementX: true,\n      webkitMovementY: true,\n      keyIdentifier: true,\n      mozPressure: true\n    };\n    const isNativeEvent = event => event instanceof Event || isFunction(event.initEvent);\n    const hasIsDefaultPrevented = event => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n    const needsNormalizing = event => isNullable(event.preventDefault) || isNativeEvent(event);\n    const clone$3 = (originalEvent, data) => {\n      const event = data !== null && data !== void 0 ? data : {};\n      for (const name in originalEvent) {\n        if (!has$2(deprecated, name)) {\n          event[name] = originalEvent[name];\n        }\n      }\n      if (isNonNullable(originalEvent.composedPath)) {\n        event.composedPath = () => originalEvent.composedPath();\n      }\n      if (isNonNullable(originalEvent.getModifierState)) {\n        event.getModifierState = keyArg => originalEvent.getModifierState(keyArg);\n      }\n      if (isNonNullable(originalEvent.getTargetRanges)) {\n        event.getTargetRanges = () => originalEvent.getTargetRanges();\n      }\n      return event;\n    };\n    const normalize$3 = (type, originalEvent, fallbackTarget, data) => {\n      var _a;\n      const event = clone$3(originalEvent, data);\n      event.type = type;\n      if (isNullable(event.target)) {\n        event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n      }\n      if (needsNormalizing(originalEvent)) {\n        event.preventDefault = () => {\n          event.defaultPrevented = true;\n          event.isDefaultPrevented = always;\n          if (isFunction(originalEvent.preventDefault)) {\n            originalEvent.preventDefault();\n          }\n        };\n        event.stopPropagation = () => {\n          event.cancelBubble = true;\n          event.isPropagationStopped = always;\n          if (isFunction(originalEvent.stopPropagation)) {\n            originalEvent.stopPropagation();\n          }\n        };\n        event.stopImmediatePropagation = () => {\n          event.isImmediatePropagationStopped = always;\n          event.stopPropagation();\n        };\n        if (!hasIsDefaultPrevented(event)) {\n          event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n          event.isPropagationStopped = event.cancelBubble === true ? always : never;\n          event.isImmediatePropagationStopped = never;\n        }\n      }\n      return event;\n    };\n\n    const eventExpandoPrefix = 'mce-data-';\n    const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n    const addEvent = (target, name, callback, capture) => {\n      target.addEventListener(name, callback, capture || false);\n    };\n    const removeEvent = (target, name, callback, capture) => {\n      target.removeEventListener(name, callback, capture || false);\n    };\n    const isMouseEvent = event => isNonNullable(event) && mouseEventRe.test(event.type);\n    const fix = (originalEvent, data) => {\n      const event = normalize$3(originalEvent.type, originalEvent, document, data);\n      if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n        const eventDoc = event.target.ownerDocument || document;\n        const doc = eventDoc.documentElement;\n        const body = eventDoc.body;\n        const mouseEvent = event;\n        mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n        mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n      }\n      return event;\n    };\n    const bindOnReady = (win, callback, eventUtils) => {\n      const doc = win.document, event = { type: 'ready' };\n      if (eventUtils.domLoaded) {\n        callback(event);\n        return;\n      }\n      const isDocReady = () => {\n        return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n      };\n      const readyHandler = () => {\n        removeEvent(win, 'DOMContentLoaded', readyHandler);\n        removeEvent(win, 'load', readyHandler);\n        if (!eventUtils.domLoaded) {\n          eventUtils.domLoaded = true;\n          callback(event);\n        }\n        win = null;\n      };\n      if (isDocReady()) {\n        readyHandler();\n      } else {\n        addEvent(win, 'DOMContentLoaded', readyHandler);\n      }\n      if (!eventUtils.domLoaded) {\n        addEvent(win, 'load', readyHandler);\n      }\n    };\n    class EventUtils {\n      constructor() {\n        this.domLoaded = false;\n        this.events = {};\n        this.count = 1;\n        this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n        this.hasFocusIn = 'onfocusin' in document.documentElement;\n        this.count = 1;\n      }\n      bind(target, names, callback, scope) {\n        const self = this;\n        let callbackList;\n        const win = window;\n        const defaultNativeHandler = evt => {\n          self.executeHandlers(fix(evt || win.event), id);\n        };\n        if (!target || isText$a(target) || isComment(target)) {\n          return callback;\n        }\n        let id;\n        if (!target[self.expando]) {\n          id = self.count++;\n          target[self.expando] = id;\n          self.events[id] = {};\n        } else {\n          id = target[self.expando];\n        }\n        scope = scope || target;\n        const namesList = names.split(' ');\n        let i = namesList.length;\n        while (i--) {\n          let name = namesList[i];\n          let nativeHandler = defaultNativeHandler;\n          let capture = false;\n          let fakeName = false;\n          if (name === 'DOMContentLoaded') {\n            name = 'ready';\n          }\n          if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n            callback.call(scope, fix({ type: name }));\n            continue;\n          }\n          if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n            capture = true;\n            fakeName = name === 'focusin' ? 'focus' : 'blur';\n            nativeHandler = evt => {\n              const event = fix(evt || win.event);\n              event.type = event.type === 'focus' ? 'focusin' : 'focusout';\n              self.executeHandlers(event, id);\n            };\n          }\n          callbackList = self.events[id][name];\n          if (!callbackList) {\n            self.events[id][name] = callbackList = [{\n                func: callback,\n                scope\n              }];\n            callbackList.fakeName = fakeName;\n            callbackList.capture = capture;\n            callbackList.nativeHandler = nativeHandler;\n            if (name === 'ready') {\n              bindOnReady(target, nativeHandler, self);\n            } else {\n              addEvent(target, fakeName || name, nativeHandler, capture);\n            }\n          } else {\n            if (name === 'ready' && self.domLoaded) {\n              callback(fix({ type: name }));\n            } else {\n              callbackList.push({\n                func: callback,\n                scope\n              });\n            }\n          }\n        }\n        target = callbackList = null;\n        return callback;\n      }\n      unbind(target, names, callback) {\n        if (!target || isText$a(target) || isComment(target)) {\n          return this;\n        }\n        const id = target[this.expando];\n        if (id) {\n          let eventMap = this.events[id];\n          if (names) {\n            const namesList = names.split(' ');\n            let i = namesList.length;\n            while (i--) {\n              const name = namesList[i];\n              const callbackList = eventMap[name];\n              if (callbackList) {\n                if (callback) {\n                  let ci = callbackList.length;\n                  while (ci--) {\n                    if (callbackList[ci].func === callback) {\n                      const nativeHandler = callbackList.nativeHandler;\n                      const fakeName = callbackList.fakeName, capture = callbackList.capture;\n                      const newCallbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n                      newCallbackList.nativeHandler = nativeHandler;\n                      newCallbackList.fakeName = fakeName;\n                      newCallbackList.capture = capture;\n                      eventMap[name] = newCallbackList;\n                    }\n                  }\n                }\n                if (!callback || callbackList.length === 0) {\n                  delete eventMap[name];\n                  removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n                }\n              }\n            }\n          } else {\n            each$d(eventMap, (callbackList, name) => {\n              removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n            });\n            eventMap = {};\n          }\n          for (const name in eventMap) {\n            if (has$2(eventMap, name)) {\n              return this;\n            }\n          }\n          delete this.events[id];\n          try {\n            delete target[this.expando];\n          } catch (ex) {\n            target[this.expando] = null;\n          }\n        }\n        return this;\n      }\n      fire(target, name, args) {\n        return this.dispatch(target, name, args);\n      }\n      dispatch(target, name, args) {\n        if (!target || isText$a(target) || isComment(target)) {\n          return this;\n        }\n        const event = fix({\n          type: name,\n          target\n        }, args);\n        do {\n          const id = target[this.expando];\n          if (id) {\n            this.executeHandlers(event, id);\n          }\n          target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n        } while (target && !event.isPropagationStopped());\n        return this;\n      }\n      clean(target) {\n        if (!target || isText$a(target) || isComment(target)) {\n          return this;\n        }\n        if (target[this.expando]) {\n          this.unbind(target);\n        }\n        if (!target.getElementsByTagName) {\n          target = target.document;\n        }\n        if (target && target.getElementsByTagName) {\n          this.unbind(target);\n          const children = target.getElementsByTagName('*');\n          let i = children.length;\n          while (i--) {\n            target = children[i];\n            if (target[this.expando]) {\n              this.unbind(target);\n            }\n          }\n        }\n        return this;\n      }\n      destroy() {\n        this.events = {};\n      }\n      cancel(e) {\n        if (e) {\n          e.preventDefault();\n          e.stopImmediatePropagation();\n        }\n        return false;\n      }\n      executeHandlers(evt, id) {\n        const container = this.events[id];\n        const callbackList = container && container[evt.type];\n        if (callbackList) {\n          for (let i = 0, l = callbackList.length; i < l; i++) {\n            const callback = callbackList[i];\n            if (callback && callback.func.call(callback.scope, evt) === false) {\n              evt.preventDefault();\n            }\n            if (evt.isImmediatePropagationStopped()) {\n              return;\n            }\n          }\n        }\n      }\n    }\n    EventUtils.Event = new EventUtils();\n\n    const each$a = Tools.each;\n    const grep = Tools.grep;\n    const internalStyleName = 'data-mce-style';\n    const numericalCssMap = Tools.makeMap('fill-opacity font-weight line-height opacity orphans widows z-index zoom', ' ');\n    const legacySetAttribute = (elm, name, value) => {\n      if (isNullable(value) || value === '') {\n        remove$a(elm, name);\n      } else {\n        set$3(elm, name, value);\n      }\n    };\n    const camelCaseToHyphens = name => name.replace(/[A-Z]/g, v => '-' + v.toLowerCase());\n    const findNodeIndex = (node, normalized) => {\n      let idx = 0;\n      if (node) {\n        for (let lastNodeType = node.nodeType, tempNode = node.previousSibling; tempNode; tempNode = tempNode.previousSibling) {\n          const nodeType = tempNode.nodeType;\n          if (normalized && isText$a(tempNode)) {\n            if (nodeType === lastNodeType || !tempNode.data.length) {\n              continue;\n            }\n          }\n          idx++;\n          lastNodeType = nodeType;\n        }\n      }\n      return idx;\n    };\n    const updateInternalStyleAttr = (styles, elm) => {\n      const rawValue = get$9(elm, 'style');\n      const value = styles.serialize(styles.parse(rawValue), name(elm));\n      legacySetAttribute(elm, internalStyleName, value);\n    };\n    const convertStyleToString = (cssValue, cssName) => {\n      if (isNumber(cssValue)) {\n        return has$2(numericalCssMap, cssName) ? cssValue + '' : cssValue + 'px';\n      } else {\n        return cssValue;\n      }\n    };\n    const applyStyle$1 = ($elm, cssName, cssValue) => {\n      const normalizedName = camelCaseToHyphens(cssName);\n      if (isNullable(cssValue) || cssValue === '') {\n        remove$6($elm, normalizedName);\n      } else {\n        set$2($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n      }\n    };\n    const setupAttrHooks = (styles, settings, getContext) => {\n      const keepValues = settings.keep_values;\n      const keepUrlHook = {\n        set: (elm, value, name) => {\n          const sugarElm = SugarElement.fromDom(elm);\n          if (isFunction(settings.url_converter) && isNonNullable(value)) {\n            value = settings.url_converter.call(settings.url_converter_scope || getContext(), String(value), name, elm);\n          }\n          const internalName = 'data-mce-' + name;\n          legacySetAttribute(sugarElm, internalName, value);\n          legacySetAttribute(sugarElm, name, value);\n        },\n        get: (elm, name) => {\n          const sugarElm = SugarElement.fromDom(elm);\n          return get$9(sugarElm, 'data-mce-' + name) || get$9(sugarElm, name);\n        }\n      };\n      const attrHooks = {\n        style: {\n          set: (elm, value) => {\n            const sugarElm = SugarElement.fromDom(elm);\n            if (keepValues) {\n              legacySetAttribute(sugarElm, internalStyleName, value);\n            }\n            remove$a(sugarElm, 'style');\n            if (isString(value)) {\n              setAll(sugarElm, styles.parse(value));\n            }\n          },\n          get: elm => {\n            const sugarElm = SugarElement.fromDom(elm);\n            const value = get$9(sugarElm, internalStyleName) || get$9(sugarElm, 'style');\n            return styles.serialize(styles.parse(value), name(sugarElm));\n          }\n        }\n      };\n      if (keepValues) {\n        attrHooks.href = attrHooks.src = keepUrlHook;\n      }\n      return attrHooks;\n    };\n    const DOMUtils = (doc, settings = {}) => {\n      const addedStyles = {};\n      const win = window;\n      const files = {};\n      let counter = 0;\n      const stdMode = true;\n      const boxModel = true;\n      const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n        contentCssCors: settings.contentCssCors,\n        referrerPolicy: settings.referrerPolicy\n      });\n      const boundEvents = [];\n      const schema = settings.schema ? settings.schema : Schema({});\n      const styles = Styles({\n        url_converter: settings.url_converter,\n        url_converter_scope: settings.url_converter_scope,\n        force_hex_color: settings.force_hex_color\n      }, settings.schema);\n      const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n      const blockElementsMap = schema.getBlockElements();\n      const isBlock = node => {\n        if (isString(node)) {\n          return has$2(blockElementsMap, node);\n        } else {\n          return isElement$6(node) && (has$2(blockElementsMap, node.nodeName) || isTransparentBlock(schema, node));\n        }\n      };\n      const get = elm => elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n      const _get = elm => {\n        const value = get(elm);\n        return isNonNullable(value) ? SugarElement.fromDom(value) : null;\n      };\n      const getAttrib = (elm, name, defaultVal = '') => {\n        let value;\n        const $elm = _get(elm);\n        if (isNonNullable($elm) && isElement$7($elm)) {\n          const hook = attrHooks[name];\n          if (hook && hook.get) {\n            value = hook.get($elm.dom, name);\n          } else {\n            value = get$9($elm, name);\n          }\n        }\n        return isNonNullable(value) ? value : defaultVal;\n      };\n      const getAttribs = elm => {\n        const node = get(elm);\n        return isNullable(node) ? [] : node.attributes;\n      };\n      const setAttrib = (elm, name, value) => {\n        run(elm, e => {\n          if (isElement$6(e)) {\n            const $elm = SugarElement.fromDom(e);\n            const val = value === '' ? null : value;\n            const originalValue = get$9($elm, name);\n            const hook = attrHooks[name];\n            if (hook && hook.set) {\n              hook.set($elm.dom, val, name);\n            } else {\n              legacySetAttribute($elm, name, val);\n            }\n            if (originalValue !== val && settings.onSetAttrib) {\n              settings.onSetAttrib({\n                attrElm: $elm.dom,\n                attrName: name,\n                attrValue: val\n              });\n            }\n          }\n        });\n      };\n      const clone = (node, deep) => {\n        return node.cloneNode(deep);\n      };\n      const getRoot = () => settings.root_element || doc.body;\n      const getViewPort = argWin => {\n        const vp = getBounds(argWin);\n        return {\n          x: vp.x,\n          y: vp.y,\n          w: vp.width,\n          h: vp.height\n        };\n      };\n      const getPos$1 = (elm, rootElm) => getPos(doc.body, get(elm), rootElm);\n      const setStyle = (elm, name, value) => {\n        run(elm, e => {\n          const $elm = SugarElement.fromDom(e);\n          applyStyle$1($elm, name, value);\n          if (settings.update_styles) {\n            updateInternalStyleAttr(styles, $elm);\n          }\n        });\n      };\n      const setStyles = (elm, stylesArg) => {\n        run(elm, e => {\n          const $elm = SugarElement.fromDom(e);\n          each$d(stylesArg, (v, n) => {\n            applyStyle$1($elm, n, v);\n          });\n          if (settings.update_styles) {\n            updateInternalStyleAttr(styles, $elm);\n          }\n        });\n      };\n      const getStyle = (elm, name, computed) => {\n        const $elm = get(elm);\n        if (isNullable($elm) || !isHTMLElement($elm) && !isSVGElement($elm)) {\n          return undefined;\n        }\n        if (computed) {\n          return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name));\n        } else {\n          name = name.replace(/-(\\D)/g, (a, b) => b.toUpperCase());\n          if (name === 'float') {\n            name = 'cssFloat';\n          }\n          return $elm.style ? $elm.style[name] : undefined;\n        }\n      };\n      const getSize = elm => {\n        const $elm = get(elm);\n        if (!$elm) {\n          return {\n            w: 0,\n            h: 0\n          };\n        }\n        let w = getStyle($elm, 'width');\n        let h = getStyle($elm, 'height');\n        if (!w || w.indexOf('px') === -1) {\n          w = '0';\n        }\n        if (!h || h.indexOf('px') === -1) {\n          h = '0';\n        }\n        return {\n          w: parseInt(w, 10) || $elm.offsetWidth || $elm.clientWidth,\n          h: parseInt(h, 10) || $elm.offsetHeight || $elm.clientHeight\n        };\n      };\n      const getRect = elm => {\n        const $elm = get(elm);\n        const pos = getPos$1($elm);\n        const size = getSize($elm);\n        return {\n          x: pos.x,\n          y: pos.y,\n          w: size.w,\n          h: size.h\n        };\n      };\n      const is = (elm, selector) => {\n        if (!elm) {\n          return false;\n        }\n        const elms = isArray$1(elm) ? elm : [elm];\n        return exists(elms, e => {\n          return is$1(SugarElement.fromDom(e), selector);\n        });\n      };\n      const getParents = (elm, selector, root, collect) => {\n        const result = [];\n        let node = get(elm);\n        collect = collect === undefined;\n        const resolvedRoot = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n        if (isString(selector)) {\n          if (selector === '*') {\n            selector = isElement$6;\n          } else {\n            const selectorVal = selector;\n            selector = node => is(node, selectorVal);\n          }\n        }\n        while (node) {\n          if (node === resolvedRoot || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n            break;\n          }\n          if (!selector || selector(node)) {\n            if (collect) {\n              result.push(node);\n            } else {\n              return [node];\n            }\n          }\n          node = node.parentNode;\n        }\n        return collect ? result : null;\n      };\n      const getParent = (node, selector, root) => {\n        const parents = getParents(node, selector, root, false);\n        return parents && parents.length > 0 ? parents[0] : null;\n      };\n      const _findSib = (node, selector, name) => {\n        let func = selector;\n        if (node) {\n          if (isString(selector)) {\n            func = node => {\n              return is(node, selector);\n            };\n          }\n          for (let tempNode = node[name]; tempNode; tempNode = tempNode[name]) {\n            if (isFunction(func) && func(tempNode)) {\n              return tempNode;\n            }\n          }\n        }\n        return null;\n      };\n      const getNext = (node, selector) => _findSib(node, selector, 'nextSibling');\n      const getPrev = (node, selector) => _findSib(node, selector, 'previousSibling');\n      const isParentNode = node => isFunction(node.querySelectorAll);\n      const select = (selector, scope) => {\n        var _a, _b;\n        const elm = (_b = (_a = get(scope)) !== null && _a !== void 0 ? _a : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n        return isParentNode(elm) ? from(elm.querySelectorAll(selector)) : [];\n      };\n      const run = function (elm, func, scope) {\n        const context = scope !== null && scope !== void 0 ? scope : this;\n        if (isArray$1(elm)) {\n          const result = [];\n          each$a(elm, (e, i) => {\n            const node = get(e);\n            if (node) {\n              result.push(func.call(context, node, i));\n            }\n          });\n          return result;\n        } else {\n          const node = get(elm);\n          return !node ? false : func.call(context, node);\n        }\n      };\n      const setAttribs = (elm, attrs) => {\n        run(elm, $elm => {\n          each$d(attrs, (value, name) => {\n            setAttrib($elm, name, value);\n          });\n        });\n      };\n      const setHTML = (elm, html) => {\n        run(elm, e => {\n          const $elm = SugarElement.fromDom(e);\n          set$1($elm, html);\n        });\n      };\n      const add = (parentElm, name, attrs, html, create) => run(parentElm, parentElm => {\n        const newElm = isString(name) ? doc.createElement(name) : name;\n        if (isNonNullable(attrs)) {\n          setAttribs(newElm, attrs);\n        }\n        if (html) {\n          if (!isString(html) && html.nodeType) {\n            newElm.appendChild(html);\n          } else if (isString(html)) {\n            setHTML(newElm, html);\n          }\n        }\n        return !create ? parentElm.appendChild(newElm) : newElm;\n      });\n      const create = (name, attrs, html) => add(doc.createElement(name), name, attrs, html, true);\n      const decode = Entities.decode;\n      const encode = Entities.encodeAllRaw;\n      const createHTML = (name, attrs, html = '') => {\n        let outHtml = '<' + name;\n        for (const key in attrs) {\n          if (hasNonNullableKey(attrs, key)) {\n            outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n          }\n        }\n        if (isEmpty$3(html) && has$2(schema.getVoidElements(), name)) {\n          return outHtml + ' />';\n        } else {\n          return outHtml + '>' + html + '</' + name + '>';\n        }\n      };\n      const createFragment = html => {\n        const container = doc.createElement('div');\n        const frag = doc.createDocumentFragment();\n        frag.appendChild(container);\n        if (html) {\n          container.innerHTML = html;\n        }\n        let node;\n        while (node = container.firstChild) {\n          frag.appendChild(node);\n        }\n        frag.removeChild(container);\n        return frag;\n      };\n      const remove = (node, keepChildren) => {\n        return run(node, n => {\n          const $node = SugarElement.fromDom(n);\n          if (keepChildren) {\n            each$e(children$1($node), child => {\n              if (isText$b(child) && child.dom.length === 0) {\n                remove$5(child);\n              } else {\n                before$3($node, child);\n              }\n            });\n          }\n          remove$5($node);\n          return $node.dom;\n        });\n      };\n      const removeAllAttribs = e => run(e, e => {\n        const attrs = e.attributes;\n        for (let i = attrs.length - 1; i >= 0; i--) {\n          e.removeAttributeNode(attrs.item(i));\n        }\n      });\n      const parseStyle = cssText => styles.parse(cssText);\n      const serializeStyle = (stylesArg, name) => styles.serialize(stylesArg, name);\n      const addStyle = cssText => {\n        if (self !== DOMUtils.DOM && doc === document) {\n          if (addedStyles[cssText]) {\n            return;\n          }\n          addedStyles[cssText] = true;\n        }\n        let styleElm = doc.getElementById('mceDefaultStyles');\n        if (!styleElm) {\n          styleElm = doc.createElement('style');\n          styleElm.id = 'mceDefaultStyles';\n          styleElm.type = 'text/css';\n          const head = doc.head;\n          if (head.firstChild) {\n            head.insertBefore(styleElm, head.firstChild);\n          } else {\n            head.appendChild(styleElm);\n          }\n        }\n        if (styleElm.styleSheet) {\n          styleElm.styleSheet.cssText += cssText;\n        } else {\n          styleElm.appendChild(doc.createTextNode(cssText));\n        }\n      };\n      const loadCSS = urls => {\n        if (!urls) {\n          urls = '';\n        }\n        each$e(urls.split(','), url => {\n          files[url] = true;\n          styleSheetLoader.load(url).catch(noop);\n        });\n      };\n      const toggleClass = (elm, cls, state) => {\n        run(elm, e => {\n          if (isElement$6(e)) {\n            const $elm = SugarElement.fromDom(e);\n            const classes = cls.split(' ');\n            each$e(classes, c => {\n              if (isNonNullable(state)) {\n                const fn = state ? add$2 : remove$7;\n                fn($elm, c);\n              } else {\n                toggle$1($elm, c);\n              }\n            });\n          }\n        });\n      };\n      const addClass = (elm, cls) => {\n        toggleClass(elm, cls, true);\n      };\n      const removeClass = (elm, cls) => {\n        toggleClass(elm, cls, false);\n      };\n      const hasClass = (elm, cls) => {\n        const $elm = _get(elm);\n        const classes = cls.split(' ');\n        return isNonNullable($elm) && forall(classes, c => has($elm, c));\n      };\n      const show = elm => {\n        run(elm, e => remove$6(SugarElement.fromDom(e), 'display'));\n      };\n      const hide = elm => {\n        run(elm, e => set$2(SugarElement.fromDom(e), 'display', 'none'));\n      };\n      const isHidden = elm => {\n        const $elm = _get(elm);\n        return isNonNullable($elm) && is$2(getRaw($elm, 'display'), 'none');\n      };\n      const uniqueId = prefix => (!prefix ? 'mce_' : prefix) + counter++;\n      const getOuterHTML = elm => {\n        const $elm = _get(elm);\n        if (isNonNullable($elm)) {\n          return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n        } else {\n          return '';\n        }\n      };\n      const setOuterHTML = (elm, html) => {\n        run(elm, $elm => {\n          if (isElement$6($elm)) {\n            $elm.outerHTML = html;\n          }\n        });\n      };\n      const insertAfter = (node, reference) => {\n        const referenceNode = get(reference);\n        return run(node, node => {\n          const parent = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.parentNode;\n          const nextSibling = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.nextSibling;\n          if (parent) {\n            if (nextSibling) {\n              parent.insertBefore(node, nextSibling);\n            } else {\n              parent.appendChild(node);\n            }\n          }\n          return node;\n        });\n      };\n      const replace = (newElm, oldElm, keepChildren) => run(oldElm, elm => {\n        var _a;\n        const replacee = isArray$1(oldElm) ? newElm.cloneNode(true) : newElm;\n        if (keepChildren) {\n          each$a(grep(elm.childNodes), node => {\n            replacee.appendChild(node);\n          });\n        }\n        (_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(replacee, elm);\n        return elm;\n      });\n      const rename = (elm, name) => {\n        if (elm.nodeName !== name.toUpperCase()) {\n          const newElm = create(name);\n          each$a(getAttribs(elm), attrNode => {\n            setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n          });\n          replace(newElm, elm, true);\n          return newElm;\n        } else {\n          return elm;\n        }\n      };\n      const findCommonAncestor = (a, b) => {\n        let ps = a;\n        while (ps) {\n          let pe = b;\n          while (pe && ps !== pe) {\n            pe = pe.parentNode;\n          }\n          if (ps === pe) {\n            break;\n          }\n          ps = ps.parentNode;\n        }\n        if (!ps && a.ownerDocument) {\n          return a.ownerDocument.documentElement;\n        } else {\n          return ps;\n        }\n      };\n      const isNonEmptyElement = node => {\n        if (isElement$6(node)) {\n          const isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n          if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n            return true;\n          }\n        }\n        return false;\n      };\n      const isEmpty = (node, elements, options) => {\n        let brCount = 0;\n        if (isNonEmptyElement(node)) {\n          return false;\n        }\n        const firstChild = node.firstChild;\n        if (firstChild) {\n          const walker = new DomTreeWalker(firstChild, node);\n          const whitespaceElements = schema ? schema.getWhitespaceElements() : {};\n          const nonEmptyElements = elements || (schema ? schema.getNonEmptyElements() : null);\n          let tempNode = firstChild;\n          do {\n            if (isElement$6(tempNode)) {\n              const bogusVal = tempNode.getAttribute('data-mce-bogus');\n              if (bogusVal) {\n                tempNode = walker.next(bogusVal === 'all');\n                continue;\n              }\n              const name = tempNode.nodeName.toLowerCase();\n              if (nonEmptyElements && nonEmptyElements[name]) {\n                if (name === 'br') {\n                  brCount++;\n                  tempNode = walker.next();\n                  continue;\n                }\n                return false;\n              }\n              if (isNonEmptyElement(tempNode)) {\n                return false;\n              }\n            }\n            if (isComment(tempNode)) {\n              return false;\n            }\n            if (isText$a(tempNode) && !isWhitespaceText(tempNode.data) && (!(options === null || options === void 0 ? void 0 : options.includeZwsp) || !isZwsp(tempNode.data))) {\n              return false;\n            }\n            if (isText$a(tempNode) && tempNode.parentNode && whitespaceElements[tempNode.parentNode.nodeName] && isWhitespaceText(tempNode.data)) {\n              return false;\n            }\n            tempNode = walker.next();\n          } while (tempNode);\n        }\n        return brCount <= 1;\n      };\n      const createRng = () => doc.createRange();\n      const split = (parentElm, splitElm, replacementElm) => {\n        let range = createRng();\n        let beforeFragment;\n        let afterFragment;\n        if (parentElm && splitElm && parentElm.parentNode && splitElm.parentNode) {\n          const parentNode = parentElm.parentNode;\n          range.setStart(parentNode, findNodeIndex(parentElm));\n          range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n          beforeFragment = range.extractContents();\n          range = createRng();\n          range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n          range.setEnd(parentNode, findNodeIndex(parentElm) + 1);\n          afterFragment = range.extractContents();\n          parentNode.insertBefore(trimNode(self, beforeFragment, schema), parentElm);\n          if (replacementElm) {\n            parentNode.insertBefore(replacementElm, parentElm);\n          } else {\n            parentNode.insertBefore(splitElm, parentElm);\n          }\n          parentNode.insertBefore(trimNode(self, afterFragment, schema), parentElm);\n          remove(parentElm);\n          return replacementElm || splitElm;\n        } else {\n          return undefined;\n        }\n      };\n      const bind = (target, name, func, scope) => {\n        if (isArray$1(target)) {\n          let i = target.length;\n          const rv = [];\n          while (i--) {\n            rv[i] = bind(target[i], name, func, scope);\n          }\n          return rv;\n        } else {\n          if (settings.collect && (target === doc || target === win)) {\n            boundEvents.push([\n              target,\n              name,\n              func,\n              scope\n            ]);\n          }\n          return events.bind(target, name, func, scope || self);\n        }\n      };\n      const unbind = (target, name, func) => {\n        if (isArray$1(target)) {\n          let i = target.length;\n          const rv = [];\n          while (i--) {\n            rv[i] = unbind(target[i], name, func);\n          }\n          return rv;\n        } else {\n          if (boundEvents.length > 0 && (target === doc || target === win)) {\n            let i = boundEvents.length;\n            while (i--) {\n              const [boundTarget, boundName, boundFunc] = boundEvents[i];\n              if (target === boundTarget && (!name || name === boundName) && (!func || func === boundFunc)) {\n                events.unbind(boundTarget, boundName, boundFunc);\n              }\n            }\n          }\n          return events.unbind(target, name, func);\n        }\n      };\n      const dispatch = (target, name, evt) => events.dispatch(target, name, evt);\n      const fire = (target, name, evt) => events.dispatch(target, name, evt);\n      const getContentEditable = node => {\n        if (node && isHTMLElement(node)) {\n          const contentEditable = node.getAttribute('data-mce-contenteditable');\n          if (contentEditable && contentEditable !== 'inherit') {\n            return contentEditable;\n          }\n          return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n        } else {\n          return null;\n        }\n      };\n      const getContentEditableParent = node => {\n        const root = getRoot();\n        let state = null;\n        for (let tempNode = node; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n          state = getContentEditable(tempNode);\n          if (state !== null) {\n            break;\n          }\n        }\n        return state;\n      };\n      const isEditable = node => {\n        if (isNonNullable(node)) {\n          const scope = isElement$6(node) ? node : node.parentElement;\n          return isNonNullable(scope) && isHTMLElement(scope) && isEditable$2(SugarElement.fromDom(scope));\n        } else {\n          return false;\n        }\n      };\n      const destroy = () => {\n        if (boundEvents.length > 0) {\n          let i = boundEvents.length;\n          while (i--) {\n            const [boundTarget, boundName, boundFunc] = boundEvents[i];\n            events.unbind(boundTarget, boundName, boundFunc);\n          }\n        }\n        each$d(files, (_, url) => {\n          styleSheetLoader.unload(url);\n          delete files[url];\n        });\n      };\n      const isChildOf = (node, parent) => {\n        return node === parent || parent.contains(node);\n      };\n      const dumpRng = r => 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n      const self = {\n        doc,\n        settings,\n        win,\n        files,\n        stdMode,\n        boxModel,\n        styleSheetLoader,\n        boundEvents,\n        styles,\n        schema,\n        events,\n        isBlock: isBlock,\n        root: null,\n        clone,\n        getRoot,\n        getViewPort,\n        getRect,\n        getSize,\n        getParent,\n        getParents: getParents,\n        get,\n        getNext,\n        getPrev,\n        select,\n        is,\n        add,\n        create,\n        createHTML,\n        createFragment,\n        remove,\n        setStyle,\n        getStyle: getStyle,\n        setStyles,\n        removeAllAttribs,\n        setAttrib,\n        setAttribs,\n        getAttrib,\n        getPos: getPos$1,\n        parseStyle,\n        serializeStyle,\n        addStyle,\n        loadCSS,\n        addClass,\n        removeClass,\n        hasClass,\n        toggleClass,\n        show,\n        hide,\n        isHidden,\n        uniqueId,\n        setHTML,\n        getOuterHTML,\n        setOuterHTML,\n        decode,\n        encode,\n        insertAfter,\n        replace,\n        rename,\n        findCommonAncestor,\n        run,\n        getAttribs,\n        isEmpty,\n        createRng,\n        nodeIndex: findNodeIndex,\n        split,\n        bind: bind,\n        unbind: unbind,\n        fire,\n        dispatch,\n        getContentEditable,\n        getContentEditableParent,\n        isEditable,\n        destroy,\n        isChildOf,\n        dumpRng\n      };\n      const attrHooks = setupAttrHooks(styles, settings, constant(self));\n      return self;\n    };\n    DOMUtils.DOM = DOMUtils(document);\n    DOMUtils.nodeIndex = findNodeIndex;\n\n    const DOM$b = DOMUtils.DOM;\n    const QUEUED = 0;\n    const LOADING = 1;\n    const LOADED = 2;\n    const FAILED = 3;\n    class ScriptLoader {\n      constructor(settings = {}) {\n        this.states = {};\n        this.queue = [];\n        this.scriptLoadedCallbacks = {};\n        this.queueLoadedCallbacks = [];\n        this.loading = false;\n        this.settings = settings;\n      }\n      _setReferrerPolicy(referrerPolicy) {\n        this.settings.referrerPolicy = referrerPolicy;\n      }\n      loadScript(url) {\n        return new Promise((resolve, reject) => {\n          const dom = DOM$b;\n          let elm;\n          const cleanup = () => {\n            dom.remove(id);\n            if (elm) {\n              elm.onerror = elm.onload = elm = null;\n            }\n          };\n          const done = () => {\n            cleanup();\n            resolve();\n          };\n          const error = () => {\n            cleanup();\n            reject('Failed to load script: ' + url);\n          };\n          const id = dom.uniqueId();\n          elm = document.createElement('script');\n          elm.id = id;\n          elm.type = 'text/javascript';\n          elm.src = Tools._addCacheSuffix(url);\n          if (this.settings.referrerPolicy) {\n            dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n          }\n          elm.onload = done;\n          elm.onerror = error;\n          (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n        });\n      }\n      isDone(url) {\n        return this.states[url] === LOADED;\n      }\n      markDone(url) {\n        this.states[url] = LOADED;\n      }\n      add(url) {\n        const self = this;\n        self.queue.push(url);\n        const state = self.states[url];\n        if (state === undefined) {\n          self.states[url] = QUEUED;\n        }\n        return new Promise((resolve, reject) => {\n          if (!self.scriptLoadedCallbacks[url]) {\n            self.scriptLoadedCallbacks[url] = [];\n          }\n          self.scriptLoadedCallbacks[url].push({\n            resolve,\n            reject\n          });\n        });\n      }\n      load(url) {\n        return this.add(url);\n      }\n      remove(url) {\n        delete this.states[url];\n        delete this.scriptLoadedCallbacks[url];\n      }\n      loadQueue() {\n        const queue = this.queue;\n        this.queue = [];\n        return this.loadScripts(queue);\n      }\n      loadScripts(scripts) {\n        const self = this;\n        const execCallbacks = (name, url) => {\n          get$a(self.scriptLoadedCallbacks, url).each(callbacks => {\n            each$e(callbacks, callback => callback[name](url));\n          });\n          delete self.scriptLoadedCallbacks[url];\n        };\n        const processResults = results => {\n          const failures = filter$5(results, result => result.status === 'rejected');\n          if (failures.length > 0) {\n            return Promise.reject(bind$3(failures, ({reason}) => isArray$1(reason) ? reason : [reason]));\n          } else {\n            return Promise.resolve();\n          }\n        };\n        const load = urls => Promise.allSettled(map$3(urls, url => {\n          if (self.states[url] === LOADED) {\n            execCallbacks('resolve', url);\n            return Promise.resolve();\n          } else if (self.states[url] === FAILED) {\n            execCallbacks('reject', url);\n            return Promise.reject(url);\n          } else {\n            self.states[url] = LOADING;\n            return self.loadScript(url).then(() => {\n              self.states[url] = LOADED;\n              execCallbacks('resolve', url);\n              const queue = self.queue;\n              if (queue.length > 0) {\n                self.queue = [];\n                return load(queue).then(processResults);\n              } else {\n                return Promise.resolve();\n              }\n            }, () => {\n              self.states[url] = FAILED;\n              execCallbacks('reject', url);\n              return Promise.reject(url);\n            });\n          }\n        }));\n        const processQueue = urls => {\n          self.loading = true;\n          return load(urls).then(results => {\n            self.loading = false;\n            const nextQueuedItem = self.queueLoadedCallbacks.shift();\n            Optional.from(nextQueuedItem).each(call);\n            return processResults(results);\n          });\n        };\n        const uniqueScripts = stringArray(scripts);\n        if (self.loading) {\n          return new Promise((resolve, reject) => {\n            self.queueLoadedCallbacks.push(() => {\n              processQueue(uniqueScripts).then(resolve, reject);\n            });\n          });\n        } else {\n          return processQueue(uniqueScripts);\n        }\n      }\n    }\n    ScriptLoader.ScriptLoader = new ScriptLoader();\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const isDuplicated = (items, item) => {\n      const firstIndex = items.indexOf(item);\n      return firstIndex !== -1 && items.indexOf(item, firstIndex + 1) > firstIndex;\n    };\n    const isRaw = str => isObject(str) && has$2(str, 'raw');\n    const isTokenised = str => isArray$1(str) && str.length > 1;\n    const data = {};\n    const currentCode = Cell('en');\n    const getLanguageData = () => get$a(data, currentCode.get());\n    const getData$1 = () => map$2(data, value => ({ ...value }));\n    const setCode = newCode => {\n      if (newCode) {\n        currentCode.set(newCode);\n      }\n    };\n    const getCode = () => currentCode.get();\n    const add$1 = (code, items) => {\n      let langData = data[code];\n      if (!langData) {\n        data[code] = langData = {};\n      }\n      const lcNames = map$3(keys(items), name => name.toLowerCase());\n      each$d(items, (translation, name) => {\n        const lcName = name.toLowerCase();\n        if (lcName !== name && isDuplicated(lcNames, lcName)) {\n          if (!has$2(items, lcName)) {\n            langData[lcName] = translation;\n          }\n          langData[name] = translation;\n        } else {\n          langData[lcName] = translation;\n        }\n      });\n    };\n    const translate = text => {\n      const langData = getLanguageData().getOr({});\n      const toString = obj => {\n        if (isFunction(obj)) {\n          return Object.prototype.toString.call(obj);\n        }\n        return !isEmpty(obj) ? '' + obj : '';\n      };\n      const isEmpty = text => text === '' || text === null || text === undefined;\n      const getLangData = text => {\n        const textStr = toString(text);\n        return has$2(langData, textStr) ? toString(langData[textStr]) : get$a(langData, textStr.toLowerCase()).map(toString).getOr(textStr);\n      };\n      const removeContext = str => str.replace(/{context:\\w+}$/, '');\n      if (isEmpty(text)) {\n        return '';\n      }\n      if (isRaw(text)) {\n        return toString(text.raw);\n      }\n      if (isTokenised(text)) {\n        const values = text.slice(1);\n        const substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values, $2) ? toString(values[$2]) : $1);\n        return removeContext(substitued);\n      }\n      return removeContext(getLangData(text));\n    };\n    const isRtl$1 = () => getLanguageData().bind(items => get$a(items, '_dir')).exists(dir => dir === 'rtl');\n    const hasCode = code => has$2(data, code);\n    const I18n = {\n      getData: getData$1,\n      setCode,\n      getCode,\n      add: add$1,\n      translate,\n      isRtl: isRtl$1,\n      hasCode\n    };\n\n    const AddOnManager = () => {\n      const items = [];\n      const urls = {};\n      const lookup = {};\n      const _listeners = [];\n      const runListeners = (name, state) => {\n        const matchedListeners = filter$5(_listeners, listener => listener.name === name && listener.state === state);\n        each$e(matchedListeners, listener => listener.resolve());\n      };\n      const isLoaded = name => has$2(urls, name);\n      const isAdded = name => has$2(lookup, name);\n      const get = name => {\n        if (lookup[name]) {\n          return lookup[name].instance;\n        }\n        return undefined;\n      };\n      const loadLanguagePack = (name, languages) => {\n        const language = I18n.getCode();\n        const wrappedLanguages = ',' + (languages || '') + ',';\n        if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n          return;\n        }\n        ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n      };\n      const requireLangPack = (name, languages) => {\n        if (AddOnManager.languageLoad !== false) {\n          if (isLoaded(name)) {\n            loadLanguagePack(name, languages);\n          } else {\n            waitFor(name, 'loaded').then(() => loadLanguagePack(name, languages));\n          }\n        }\n      };\n      const add = (id, addOn) => {\n        items.push(addOn);\n        lookup[id] = { instance: addOn };\n        runListeners(id, 'added');\n        return addOn;\n      };\n      const remove = name => {\n        delete urls[name];\n        delete lookup[name];\n      };\n      const createUrl = (baseUrl, dep) => {\n        if (isString(dep)) {\n          return isString(baseUrl) ? {\n            prefix: '',\n            resource: dep,\n            suffix: ''\n          } : {\n            prefix: baseUrl.prefix,\n            resource: dep,\n            suffix: baseUrl.suffix\n          };\n        } else {\n          return dep;\n        }\n      };\n      const load = (name, addOnUrl) => {\n        if (urls[name]) {\n          return Promise.resolve();\n        }\n        let urlString = isString(addOnUrl) ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n        if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n          urlString = AddOnManager.baseURL + '/' + urlString;\n        }\n        urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n        const done = () => {\n          runListeners(name, 'loaded');\n          return Promise.resolve();\n        };\n        if (lookup[name]) {\n          return done();\n        } else {\n          return ScriptLoader.ScriptLoader.add(urlString).then(done);\n        }\n      };\n      const waitFor = (name, state = 'added') => {\n        if (state === 'added' && isAdded(name)) {\n          return Promise.resolve();\n        } else if (state === 'loaded' && isLoaded(name)) {\n          return Promise.resolve();\n        } else {\n          return new Promise(resolve => {\n            _listeners.push({\n              name,\n              state,\n              resolve\n            });\n          });\n        }\n      };\n      return {\n        items,\n        urls,\n        lookup,\n        get,\n        requireLangPack,\n        add,\n        remove,\n        createUrl,\n        load,\n        waitFor\n      };\n    };\n    AddOnManager.languageLoad = true;\n    AddOnManager.baseURL = '';\n    AddOnManager.PluginManager = AddOnManager();\n    AddOnManager.ThemeManager = AddOnManager();\n    AddOnManager.ModelManager = AddOnManager();\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const repeatable = delay => {\n      const intervalId = Cell(Optional.none());\n      const revoke = () => intervalId.get().each(id => clearInterval(id));\n      const clear = () => {\n        revoke();\n        intervalId.set(Optional.none());\n      };\n      const isSet = () => intervalId.get().isSome();\n      const get = () => intervalId.get();\n      const set = functionToRepeat => {\n        revoke();\n        intervalId.set(Optional.some(setInterval(functionToRepeat, delay)));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const value$2 = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const first$1 = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n    const last$1 = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const annotation = constant('mce-annotation');\n    const dataAnnotation = constant('data-mce-annotation');\n    const dataAnnotationId = constant('data-mce-annotation-uid');\n    const dataAnnotationActive = constant('data-mce-annotation-active');\n    const dataAnnotationClasses = constant('data-mce-annotation-classes');\n    const dataAnnotationAttributes = constant('data-mce-annotation-attrs');\n\n    const isRoot$1 = root => node => eq(node, root);\n    const identify = (editor, annotationName) => {\n      const rng = editor.selection.getRng();\n      const start = SugarElement.fromDom(rng.startContainer);\n      const root = SugarElement.fromDom(editor.getBody());\n      const selector = annotationName.fold(() => '.' + annotation(), an => `[${ dataAnnotation() }=\"${ an }\"]`);\n      const newStart = child$1(start, rng.startOffset).getOr(start);\n      const closest = closest$3(newStart, selector, isRoot$1(root));\n      return closest.bind(c => getOpt(c, `${ dataAnnotationId() }`).bind(uid => getOpt(c, `${ dataAnnotation() }`).map(name => {\n        const elements = findMarkers(editor, uid);\n        return {\n          uid,\n          name,\n          elements\n        };\n      })));\n    };\n    const isAnnotation = elem => isElement$7(elem) && has(elem, annotation());\n    const isBogusElement = (elem, root) => has$1(elem, 'data-mce-bogus') || ancestor$2(elem, '[data-mce-bogus=\"all\"]', isRoot$1(root));\n    const findMarkers = (editor, uid) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const descendants$1 = descendants(body, `[${ dataAnnotationId() }=\"${ uid }\"]`);\n      return filter$5(descendants$1, descendant => !isBogusElement(descendant, body));\n    };\n    const findAll = (editor, name) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const markers = descendants(body, `[${ dataAnnotation() }=\"${ name }\"]`);\n      const directory = {};\n      each$e(markers, m => {\n        if (!isBogusElement(m, body)) {\n          const uid = get$9(m, dataAnnotationId());\n          const nodesAlready = get$a(directory, uid).getOr([]);\n          directory[uid] = nodesAlready.concat([m]);\n        }\n      });\n      return directory;\n    };\n\n    const setup$y = (editor, registry) => {\n      const changeCallbacks = Cell({});\n      const initData = () => ({\n        listeners: [],\n        previous: value$2()\n      });\n      const withCallbacks = (name, f) => {\n        updateCallbacks(name, data => {\n          f(data);\n          return data;\n        });\n      };\n      const updateCallbacks = (name, f) => {\n        const callbackMap = changeCallbacks.get();\n        const data = get$a(callbackMap, name).getOrThunk(initData);\n        const outputData = f(data);\n        callbackMap[name] = outputData;\n        changeCallbacks.set(callbackMap);\n      };\n      const fireCallbacks = (name, uid, elements) => {\n        withCallbacks(name, data => {\n          each$e(data.listeners, f => f(true, name, {\n            uid,\n            nodes: map$3(elements, elem => elem.dom)\n          }));\n        });\n      };\n      const fireNoAnnotation = name => {\n        withCallbacks(name, data => {\n          each$e(data.listeners, f => f(false, name));\n        });\n      };\n      const toggleActiveAttr = (uid, state) => {\n        each$e(findMarkers(editor, uid), elem => {\n          if (state) {\n            set$3(elem, dataAnnotationActive(), 'true');\n          } else {\n            remove$a(elem, dataAnnotationActive());\n          }\n        });\n      };\n      const onNodeChange = last$1(() => {\n        const annotations = sort(registry.getNames());\n        each$e(annotations, name => {\n          updateCallbacks(name, data => {\n            const prev = data.previous.get();\n            identify(editor, Optional.some(name)).fold(() => {\n              prev.each(uid => {\n                fireNoAnnotation(name);\n                data.previous.clear();\n                toggleActiveAttr(uid, false);\n              });\n            }, ({uid, name, elements}) => {\n              if (!is$2(prev, uid)) {\n                prev.each(uid => toggleActiveAttr(uid, false));\n                fireCallbacks(name, uid, elements);\n                data.previous.set(uid);\n                toggleActiveAttr(uid, true);\n              }\n            });\n            return {\n              previous: data.previous,\n              listeners: data.listeners\n            };\n          });\n        });\n      }, 30);\n      editor.on('remove', () => {\n        onNodeChange.cancel();\n      });\n      editor.on('NodeChange', () => {\n        onNodeChange.throttle();\n      });\n      const addListener = (name, f) => {\n        updateCallbacks(name, data => ({\n          previous: data.previous,\n          listeners: data.listeners.concat([f])\n        }));\n      };\n      return { addListener };\n    };\n\n    const setup$x = (editor, registry) => {\n      const dataAnnotation$1 = dataAnnotation();\n      const identifyParserNode = node => Optional.from(node.attr(dataAnnotation$1)).bind(registry.lookup);\n      const removeDirectAnnotation = node => {\n        var _a, _b;\n        node.attr(dataAnnotationId(), null);\n        node.attr(dataAnnotation(), null);\n        node.attr(dataAnnotationActive(), null);\n        const customAttrNames = Optional.from(node.attr(dataAnnotationAttributes())).map(names => names.split(',')).getOr([]);\n        const customClasses = Optional.from(node.attr(dataAnnotationClasses())).map(names => names.split(',')).getOr([]);\n        each$e(customAttrNames, name => node.attr(name, null));\n        const classList = (_b = (_a = node.attr('class')) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];\n        const newClassList = difference(classList, [annotation()].concat(customClasses));\n        node.attr('class', newClassList.length > 0 ? newClassList.join(' ') : null);\n        node.attr(dataAnnotationClasses(), null);\n        node.attr(dataAnnotationAttributes(), null);\n      };\n      editor.serializer.addTempAttr(dataAnnotationActive());\n      editor.serializer.addAttributeFilter(dataAnnotation$1, nodes => {\n        for (const node of nodes) {\n          identifyParserNode(node).each(settings => {\n            if (settings.persistent === false) {\n              if (node.name === 'span') {\n                node.unwrap();\n              } else {\n                removeDirectAnnotation(node);\n              }\n            }\n          });\n        }\n      });\n    };\n\n    const create$c = () => {\n      const annotations = {};\n      const register = (name, settings) => {\n        annotations[name] = {\n          name,\n          settings\n        };\n      };\n      const lookup = name => get$a(annotations, name).map(a => a.settings);\n      const getNames = () => keys(annotations);\n      return {\n        register,\n        lookup,\n        getNames\n      };\n    };\n\n    let unique = 0;\n    const generate$1 = prefix => {\n      const date = new Date();\n      const time = date.getTime();\n      const random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    const add = (element, classes) => {\n      each$e(classes, x => {\n        add$2(element, x);\n      });\n    };\n    const remove$4 = (element, classes) => {\n      each$e(classes, x => {\n        remove$7(element, x);\n      });\n    };\n\n    const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const shallow$1 = original => clone$2(original, false);\n    const deep$1 = original => clone$2(original, true);\n    const shallowAs = (original, tag) => {\n      const nu = SugarElement.fromTag(tag);\n      const attributes = clone$4(original);\n      setAll$1(nu, attributes);\n      return nu;\n    };\n    const mutate = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      after$4(original, nu);\n      const children = children$1(original);\n      append(nu, children);\n      remove$5(original);\n      return nu;\n    };\n\n    const TextWalker = (startNode, rootNode, isBoundary = never) => {\n      const walker = new DomTreeWalker(startNode, rootNode);\n      const walk = direction => {\n        let next;\n        do {\n          next = walker[direction]();\n        } while (next && !isText$a(next) && !isBoundary(next));\n        return Optional.from(next).filter(isText$a);\n      };\n      return {\n        current: () => Optional.from(walker.current()).filter(isText$a),\n        next: () => walk('next'),\n        prev: () => walk('prev'),\n        prev2: () => walk('prev2')\n      };\n    };\n\n    const TextSeeker = (dom, isBoundary) => {\n      const isBlockBoundary = isBoundary ? isBoundary : node => dom.isBlock(node) || isBr$6(node) || isContentEditableFalse$b(node);\n      const walk = (node, offset, walker, process) => {\n        if (isText$a(node)) {\n          const newOffset = process(node, offset, node.data);\n          if (newOffset !== -1) {\n            return Optional.some({\n              container: node,\n              offset: newOffset\n            });\n          }\n        }\n        return walker().bind(next => walk(next.container, next.offset, walker, process));\n      };\n      const backwards = (node, offset, process, root) => {\n        const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n        return walk(node, offset, () => walker.prev().map(prev => ({\n          container: prev,\n          offset: prev.length\n        })), process).getOrNull();\n      };\n      const forwards = (node, offset, process, root) => {\n        const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n        return walk(node, offset, () => walker.next().map(next => ({\n          container: next,\n          offset: 0\n        })), process).getOrNull();\n      };\n      return {\n        backwards,\n        forwards\n      };\n    };\n\n    const round$2 = Math.round;\n    const clone$1 = rect => {\n      if (!rect) {\n        return {\n          left: 0,\n          top: 0,\n          bottom: 0,\n          right: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      return {\n        left: round$2(rect.left),\n        top: round$2(rect.top),\n        bottom: round$2(rect.bottom),\n        right: round$2(rect.right),\n        width: round$2(rect.width),\n        height: round$2(rect.height)\n      };\n    };\n    const collapse = (rect, toStart) => {\n      rect = clone$1(rect);\n      if (toStart) {\n        rect.right = rect.left;\n      } else {\n        rect.left = rect.left + rect.width;\n        rect.right = rect.left;\n      }\n      rect.width = 0;\n      return rect;\n    };\n    const isEqual = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n    const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n    const isAbove$1 = (rect1, rect2) => {\n      const halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n      if (rect1.bottom - halfHeight < rect2.top) {\n        return true;\n      }\n      if (rect1.top > rect2.bottom) {\n        return false;\n      }\n      return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n    };\n    const isBelow$1 = (rect1, rect2) => {\n      if (rect1.top > rect2.bottom) {\n        return true;\n      }\n      if (rect1.bottom < rect2.top) {\n        return false;\n      }\n      return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n    };\n    const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n    const boundingClientRectFromRects = rects => {\n      return foldl(rects, (acc, rect) => {\n        return acc.fold(() => Optional.some(rect), prevRect => {\n          const left = Math.min(rect.left, prevRect.left);\n          const top = Math.min(rect.top, prevRect.top);\n          const right = Math.max(rect.right, prevRect.right);\n          const bottom = Math.max(rect.bottom, prevRect.bottom);\n          return Optional.some({\n            top,\n            right,\n            bottom,\n            left,\n            width: right - left,\n            height: bottom - top\n          });\n        });\n      }, Optional.none());\n    };\n    const distanceToRectEdgeFromXY = (rect, x, y) => {\n      const cx = Math.max(Math.min(x, rect.left + rect.width), rect.left);\n      const cy = Math.max(Math.min(y, rect.top + rect.height), rect.top);\n      return Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n    };\n    const overlapY = (r1, r2) => Math.max(0, Math.min(r1.bottom, r2.bottom) - Math.max(r1.top, r2.top));\n\n    const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n\n    const getSelectedNode = range => {\n      const startContainer = range.startContainer, startOffset = range.startOffset;\n      if (startContainer === range.endContainer && startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n        return startContainer.childNodes[startOffset];\n      }\n      return null;\n    };\n    const getNode$1 = (container, offset) => {\n      if (isElement$6(container) && container.hasChildNodes()) {\n        const childNodes = container.childNodes;\n        const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n        return childNodes[safeOffset];\n      } else {\n        return container;\n      }\n    };\n    const getNodeUnsafe = (container, offset) => {\n      if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n        return undefined;\n      } else {\n        return getNode$1(container, offset);\n      }\n    };\n\n    const extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n    const isExtendingChar = ch => isString(ch) && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n\n    const or = (...args) => {\n      return x => {\n        for (let i = 0; i < args.length; i++) {\n          if (args[i](x)) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    const and = (...args) => {\n      return x => {\n        for (let i = 0; i < args.length; i++) {\n          if (!args[i](x)) {\n            return false;\n          }\n        }\n        return true;\n      };\n    };\n\n    const isElement$4 = isElement$6;\n    const isCaretCandidate$2 = isCaretCandidate$3;\n    const isBlock$2 = matchStyleValues('display', 'block table');\n    const isFloated = matchStyleValues('float', 'left right');\n    const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n    const isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n    const isText$7 = isText$a;\n    const isBr$3 = isBr$6;\n    const nodeIndex$1 = DOMUtils.nodeIndex;\n    const resolveIndex$1 = getNodeUnsafe;\n    const createRange$1 = doc => doc ? doc.createRange() : DOMUtils.DOM.createRng();\n    const isWhiteSpace$1 = chr => isString(chr) && /[\\r\\n\\t ]/.test(chr);\n    const isRange = rng => !!rng.setStart && !!rng.setEnd;\n    const isHiddenWhiteSpaceRange = range => {\n      const container = range.startContainer;\n      const offset = range.startOffset;\n      if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$a(container)) {\n        const text = container.data;\n        if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const getBrClientRect = brNode => {\n      const doc = brNode.ownerDocument;\n      const rng = createRange$1(doc);\n      const nbsp$1 = doc.createTextNode(nbsp);\n      const parentNode = brNode.parentNode;\n      parentNode.insertBefore(nbsp$1, brNode);\n      rng.setStart(nbsp$1, 0);\n      rng.setEnd(nbsp$1, 1);\n      const clientRect = clone$1(rng.getBoundingClientRect());\n      parentNode.removeChild(nbsp$1);\n      return clientRect;\n    };\n    const getBoundingClientRectWebKitText = rng => {\n      const sc = rng.startContainer;\n      const ec = rng.endContainer;\n      const so = rng.startOffset;\n      const eo = rng.endOffset;\n      if (sc === ec && isText$a(ec) && so === 0 && eo === 1) {\n        const newRng = rng.cloneRange();\n        newRng.setEndAfter(ec);\n        return getBoundingClientRect$1(newRng);\n      } else {\n        return null;\n      }\n    };\n    const isZeroRect = r => r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n    const getBoundingClientRect$1 = item => {\n      var _a;\n      let clientRect;\n      const clientRects = item.getClientRects();\n      if (clientRects.length > 0) {\n        clientRect = clone$1(clientRects[0]);\n      } else {\n        clientRect = clone$1(item.getBoundingClientRect());\n      }\n      if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n        return getBrClientRect(item);\n      }\n      if (isZeroRect(clientRect) && isRange(item)) {\n        return (_a = getBoundingClientRectWebKitText(item)) !== null && _a !== void 0 ? _a : clientRect;\n      }\n      return clientRect;\n    };\n    const collapseAndInflateWidth = (clientRect, toStart) => {\n      const newClientRect = collapse(clientRect, toStart);\n      newClientRect.width = 1;\n      newClientRect.right = newClientRect.left + 1;\n      return newClientRect;\n    };\n    const getCaretPositionClientRects = caretPosition => {\n      const clientRects = [];\n      const addUniqueAndValidRect = clientRect => {\n        if (clientRect.height === 0) {\n          return;\n        }\n        if (clientRects.length > 0) {\n          if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n            return;\n          }\n        }\n        clientRects.push(clientRect);\n      };\n      const addCharacterOffset = (container, offset) => {\n        const range = createRange$1(container.ownerDocument);\n        if (offset < container.data.length) {\n          if (isExtendingChar(container.data[offset])) {\n            return;\n          }\n          if (isExtendingChar(container.data[offset - 1])) {\n            range.setStart(container, offset);\n            range.setEnd(container, offset + 1);\n            if (!isHiddenWhiteSpaceRange(range)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n              return;\n            }\n          }\n        }\n        if (offset > 0) {\n          range.setStart(container, offset - 1);\n          range.setEnd(container, offset);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n          }\n        }\n        if (offset < container.data.length) {\n          range.setStart(container, offset);\n          range.setEnd(container, offset + 1);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n          }\n        }\n      };\n      const container = caretPosition.container();\n      const offset = caretPosition.offset();\n      if (isText$7(container)) {\n        addCharacterOffset(container, offset);\n        return clientRects;\n      }\n      if (isElement$4(container)) {\n        if (caretPosition.isAtEnd()) {\n          const node = resolveIndex$1(container, offset);\n          if (isText$7(node)) {\n            addCharacterOffset(node, node.data.length);\n          }\n          if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n          }\n        } else {\n          const node = resolveIndex$1(container, offset);\n          if (isText$7(node)) {\n            addCharacterOffset(node, 0);\n          }\n          if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n            return clientRects;\n          }\n          const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n          if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n            if (isBlock$2(beforeNode) || isBlock$2(node) || !isValidElementCaretCandidate(node)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n            }\n          }\n          if (isValidElementCaretCandidate(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n          }\n        }\n      }\n      return clientRects;\n    };\n    const CaretPosition = (container, offset, clientRects) => {\n      const isAtStart = () => {\n        if (isText$7(container)) {\n          return offset === 0;\n        }\n        return offset === 0;\n      };\n      const isAtEnd = () => {\n        if (isText$7(container)) {\n          return offset >= container.data.length;\n        }\n        return offset >= container.childNodes.length;\n      };\n      const toRange = () => {\n        const range = createRange$1(container.ownerDocument);\n        range.setStart(container, offset);\n        range.setEnd(container, offset);\n        return range;\n      };\n      const getClientRects = () => {\n        if (!clientRects) {\n          clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n        }\n        return clientRects;\n      };\n      const isVisible = () => getClientRects().length > 0;\n      const isEqual = caretPosition => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n      const getNode = before => resolveIndex$1(container, before ? offset - 1 : offset);\n      return {\n        container: constant(container),\n        offset: constant(offset),\n        toRange,\n        getClientRects,\n        isVisible,\n        isAtStart,\n        isAtEnd,\n        isEqual,\n        getNode\n      };\n    };\n    CaretPosition.fromRangeStart = range => CaretPosition(range.startContainer, range.startOffset);\n    CaretPosition.fromRangeEnd = range => CaretPosition(range.endContainer, range.endOffset);\n    CaretPosition.after = node => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n    CaretPosition.before = node => CaretPosition(node.parentNode, nodeIndex$1(node));\n    CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$3(pos1.getClientRects()), isAbove$1).getOr(false);\n    CaretPosition.isBelow = (pos1, pos2) => lift2(last$3(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n    CaretPosition.isAtStart = pos => pos ? pos.isAtStart() : false;\n    CaretPosition.isAtEnd = pos => pos ? pos.isAtEnd() : false;\n    CaretPosition.isTextPosition = pos => pos ? isText$a(pos.container()) : false;\n    CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n    const trimEmptyTextNode$1 = (dom, node) => {\n      if (isText$a(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    const insertNode = (dom, rng, node) => {\n      rng.insertNode(node);\n      trimEmptyTextNode$1(dom, node.previousSibling);\n      trimEmptyTextNode$1(dom, node.nextSibling);\n    };\n    const insertFragment = (dom, rng, frag) => {\n      const firstChild = Optional.from(frag.firstChild);\n      const lastChild = Optional.from(frag.lastChild);\n      rng.insertNode(frag);\n      firstChild.each(child => trimEmptyTextNode$1(dom, child.previousSibling));\n      lastChild.each(child => trimEmptyTextNode$1(dom, child.nextSibling));\n    };\n    const rangeInsertNode = (dom, rng, node) => {\n      if (isDocumentFragment(node)) {\n        insertFragment(dom, rng, node);\n      } else {\n        insertNode(dom, rng, node);\n      }\n    };\n\n    const isText$6 = isText$a;\n    const isBogus = isBogus$2;\n    const nodeIndex = DOMUtils.nodeIndex;\n    const normalizedParent = node => {\n      const parentNode = node.parentNode;\n      if (isBogus(parentNode)) {\n        return normalizedParent(parentNode);\n      }\n      return parentNode;\n    };\n    const getChildNodes = node => {\n      if (!node) {\n        return [];\n      }\n      return reduce(node.childNodes, (result, node) => {\n        if (isBogus(node) && node.nodeName !== 'BR') {\n          result = result.concat(getChildNodes(node));\n        } else {\n          result.push(node);\n        }\n        return result;\n      }, []);\n    };\n    const normalizedTextOffset = (node, offset) => {\n      let tempNode = node;\n      while (tempNode = tempNode.previousSibling) {\n        if (!isText$6(tempNode)) {\n          break;\n        }\n        offset += tempNode.data.length;\n      }\n      return offset;\n    };\n    const equal = a => b => a === b;\n    const normalizedNodeIndex = node => {\n      let nodes, index;\n      nodes = getChildNodes(normalizedParent(node));\n      index = findIndex$1(nodes, equal(node), node);\n      nodes = nodes.slice(0, index + 1);\n      const numTextFragments = reduce(nodes, (result, node, i) => {\n        if (isText$6(node) && isText$6(nodes[i - 1])) {\n          result++;\n        }\n        return result;\n      }, 0);\n      nodes = filter$3(nodes, matchNodeNames([node.nodeName]));\n      index = findIndex$1(nodes, equal(node), node);\n      return index - numTextFragments;\n    };\n    const createPathItem = node => {\n      const name = isText$6(node) ? 'text()' : node.nodeName.toLowerCase();\n      return name + '[' + normalizedNodeIndex(node) + ']';\n    };\n    const parentsUntil$1 = (root, node, predicate) => {\n      const parents = [];\n      for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n        if (predicate && predicate(tempNode)) {\n          break;\n        }\n        parents.push(tempNode);\n      }\n      return parents;\n    };\n    const create$b = (root, caretPosition) => {\n      let path = [];\n      let container = caretPosition.container();\n      let offset = caretPosition.offset();\n      let outputOffset;\n      if (isText$6(container)) {\n        outputOffset = normalizedTextOffset(container, offset);\n      } else {\n        const childNodes = container.childNodes;\n        if (offset >= childNodes.length) {\n          outputOffset = 'after';\n          offset = childNodes.length - 1;\n        } else {\n          outputOffset = 'before';\n        }\n        container = childNodes[offset];\n      }\n      path.push(createPathItem(container));\n      let parents = parentsUntil$1(root, container);\n      parents = filter$3(parents, not(isBogus$2));\n      path = path.concat(map$1(parents, node => {\n        return createPathItem(node);\n      }));\n      return path.reverse().join('/') + ',' + outputOffset;\n    };\n    const resolvePathItem = (node, name, index) => {\n      let nodes = getChildNodes(node);\n      nodes = filter$3(nodes, (node, index) => {\n        return !isText$6(node) || !isText$6(nodes[index - 1]);\n      });\n      nodes = filter$3(nodes, matchNodeNames([name]));\n      return nodes[index];\n    };\n    const findTextPosition = (container, offset) => {\n      let node = container;\n      let targetOffset = 0;\n      while (isText$6(node)) {\n        const dataLen = node.data.length;\n        if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n          container = node;\n          offset = offset - targetOffset;\n          break;\n        }\n        if (!isText$6(node.nextSibling)) {\n          container = node;\n          offset = dataLen;\n          break;\n        }\n        targetOffset += dataLen;\n        node = node.nextSibling;\n      }\n      if (isText$6(container) && offset > container.data.length) {\n        offset = container.data.length;\n      }\n      return CaretPosition(container, offset);\n    };\n    const resolve$1 = (root, path) => {\n      if (!path) {\n        return null;\n      }\n      const parts = path.split(',');\n      const paths = parts[0].split('/');\n      const offset = parts.length > 1 ? parts[1] : 'before';\n      const container = reduce(paths, (result, value) => {\n        const match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n        if (!match) {\n          return null;\n        }\n        if (match[1] === 'text()') {\n          match[1] = '#text';\n        }\n        return resolvePathItem(result, match[1], parseInt(match[2], 10));\n      }, root);\n      if (!container) {\n        return null;\n      }\n      if (!isText$6(container) && container.parentNode) {\n        let nodeOffset;\n        if (offset === 'after') {\n          nodeOffset = nodeIndex(container) + 1;\n        } else {\n          nodeOffset = nodeIndex(container);\n        }\n        return CaretPosition(container.parentNode, nodeOffset);\n      }\n      return findTextPosition(container, parseInt(offset, 10));\n    };\n\n    const isContentEditableFalse$9 = isContentEditableFalse$b;\n    const getNormalizedTextOffset$1 = (trim, container, offset) => {\n      let trimmedOffset = trim(container.data.slice(0, offset)).length;\n      for (let node = container.previousSibling; node && isText$a(node); node = node.previousSibling) {\n        trimmedOffset += trim(node.data).length;\n      }\n      return trimmedOffset;\n    };\n    const getPoint = (dom, trim, normalized, rng, start) => {\n      const container = start ? rng.startContainer : rng.endContainer;\n      let offset = start ? rng.startOffset : rng.endOffset;\n      const point = [];\n      const root = dom.getRoot();\n      if (isText$a(container)) {\n        point.push(normalized ? getNormalizedTextOffset$1(trim, container, offset) : offset);\n      } else {\n        let after = 0;\n        const childNodes = container.childNodes;\n        if (offset >= childNodes.length && childNodes.length) {\n          after = 1;\n          offset = Math.max(0, childNodes.length - 1);\n        }\n        point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n      }\n      for (let node = container; node && node !== root; node = node.parentNode) {\n        point.push(dom.nodeIndex(node, normalized));\n      }\n      return point;\n    };\n    const getLocation = (trim, selection, normalized, rng) => {\n      const dom = selection.dom;\n      const start = getPoint(dom, trim, normalized, rng, true);\n      const forward = selection.isForward();\n      const fakeCaret = isRangeInCaretContainerBlock(rng) ? { isFakeCaret: true } : {};\n      if (!selection.isCollapsed()) {\n        const end = getPoint(dom, trim, normalized, rng, false);\n        return {\n          start,\n          end,\n          forward,\n          ...fakeCaret\n        };\n      } else {\n        return {\n          start,\n          forward,\n          ...fakeCaret\n        };\n      }\n    };\n    const findIndex = (dom, name, element) => {\n      let count = 0;\n      Tools.each(dom.select(name), node => {\n        if (node.getAttribute('data-mce-bogus') === 'all') {\n          return;\n        } else if (node === element) {\n          return false;\n        } else {\n          count++;\n          return;\n        }\n      });\n      return count;\n    };\n    const moveEndPoint$1 = (rng, start) => {\n      let container = start ? rng.startContainer : rng.endContainer;\n      let offset = start ? rng.startOffset : rng.endOffset;\n      if (isElement$6(container) && container.nodeName === 'TR') {\n        const childNodes = container.childNodes;\n        container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n        if (container) {\n          offset = start ? 0 : container.childNodes.length;\n          if (start) {\n            rng.setStart(container, offset);\n          } else {\n            rng.setEnd(container, offset);\n          }\n        }\n      }\n    };\n    const normalizeTableCellSelection = rng => {\n      moveEndPoint$1(rng, true);\n      moveEndPoint$1(rng, false);\n      return rng;\n    };\n    const findSibling = (node, offset) => {\n      if (isElement$6(node)) {\n        node = getNode$1(node, offset);\n        if (isContentEditableFalse$9(node)) {\n          return node;\n        }\n      }\n      if (isCaretContainer$2(node)) {\n        if (isText$a(node) && isCaretContainerBlock$1(node)) {\n          node = node.parentNode;\n        }\n        let sibling = node.previousSibling;\n        if (isContentEditableFalse$9(sibling)) {\n          return sibling;\n        }\n        sibling = node.nextSibling;\n        if (isContentEditableFalse$9(sibling)) {\n          return sibling;\n        }\n      }\n      return undefined;\n    };\n    const findAdjacentContentEditableFalseElm = rng => {\n      return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n    };\n    const getOffsetBookmark = (trim, normalized, selection) => {\n      const element = selection.getNode();\n      const rng = selection.getRng();\n      if (element.nodeName === 'IMG' || isContentEditableFalse$9(element)) {\n        const name = element.nodeName;\n        return {\n          name,\n          index: findIndex(selection.dom, name, element)\n        };\n      }\n      const sibling = findAdjacentContentEditableFalseElm(rng);\n      if (sibling) {\n        const name = sibling.tagName;\n        return {\n          name,\n          index: findIndex(selection.dom, name, sibling)\n        };\n      }\n      return getLocation(trim, selection, normalized, rng);\n    };\n    const getCaretBookmark = selection => {\n      const rng = selection.getRng();\n      return {\n        start: create$b(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n        end: create$b(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)),\n        forward: selection.isForward()\n      };\n    };\n    const getRangeBookmark = selection => {\n      return {\n        rng: selection.getRng(),\n        forward: selection.isForward()\n      };\n    };\n    const createBookmarkSpan = (dom, id, filled) => {\n      const args = {\n        'data-mce-type': 'bookmark',\n        id,\n        'style': 'overflow:hidden;line-height:0px'\n      };\n      return filled ? dom.create('span', args, '&#xFEFF;') : dom.create('span', args);\n    };\n    const getPersistentBookmark = (selection, filled) => {\n      const dom = selection.dom;\n      let rng = selection.getRng();\n      const id = dom.uniqueId();\n      const collapsed = selection.isCollapsed();\n      const element = selection.getNode();\n      const name = element.nodeName;\n      const forward = selection.isForward();\n      if (name === 'IMG') {\n        return {\n          name,\n          index: findIndex(dom, name, element)\n        };\n      }\n      const rng2 = normalizeTableCellSelection(rng.cloneRange());\n      if (!collapsed) {\n        rng2.collapse(false);\n        const endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n        rangeInsertNode(dom, rng2, endBookmarkNode);\n      }\n      rng = normalizeTableCellSelection(rng);\n      rng.collapse(true);\n      const startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n      rangeInsertNode(dom, rng, startBookmarkNode);\n      selection.moveToBookmark({\n        id,\n        keep: true,\n        forward\n      });\n      return {\n        id,\n        forward\n      };\n    };\n    const getBookmark$2 = (selection, type, normalized = false) => {\n      if (type === 2) {\n        return getOffsetBookmark(trim$2, normalized, selection);\n      } else if (type === 3) {\n        return getCaretBookmark(selection);\n      } else if (type) {\n        return getRangeBookmark(selection);\n      } else {\n        return getPersistentBookmark(selection, false);\n      }\n    };\n    const getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n    const value$1 = value => {\n      const applyHelper = fn => fn(value);\n      const constHelper = constant(value);\n      const outputHelper = () => output;\n      const output = {\n        tag: true,\n        inner: value,\n        fold: (_onError, onValue) => onValue(value),\n        isValue: always,\n        isError: never,\n        map: mapper => Result.value(mapper(value)),\n        mapError: outputHelper,\n        bind: applyHelper,\n        exists: applyHelper,\n        forall: applyHelper,\n        getOr: constHelper,\n        or: outputHelper,\n        getOrThunk: constHelper,\n        orThunk: outputHelper,\n        getOrDie: constHelper,\n        each: fn => {\n          fn(value);\n        },\n        toOptional: () => Optional.some(value)\n      };\n      return output;\n    };\n    const error = error => {\n      const outputHelper = () => output;\n      const output = {\n        tag: false,\n        inner: error,\n        fold: (onError, _onValue) => onError(error),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: mapper => Result.error(mapper(error)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity,\n        or: identity,\n        getOrThunk: apply$1,\n        orThunk: apply$1,\n        getOrDie: die(String(error)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output;\n    };\n    const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n    const Result = {\n      value: value$1,\n      error,\n      fromOption\n    };\n\n    const generate = cases => {\n      if (!isArray$1(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      const constructors = [];\n      const adt = {};\n      each$e(cases, (acase, count) => {\n        const keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        const key = keys$1[0];\n        const value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray$1(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          const match = branches => {\n            const branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            const allReqd = forall(constructors, reqKey => {\n              return contains$2(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: (...foldArgs) => {\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              const target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match,\n            log: label => {\n              console.log(label, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    const Adt = { generate };\n\n    Adt.generate([\n      {\n        bothErrors: [\n          'error1',\n          'error2'\n        ]\n      },\n      {\n        firstError: [\n          'error1',\n          'value2'\n        ]\n      },\n      {\n        secondError: [\n          'value1',\n          'error2'\n        ]\n      },\n      {\n        bothValues: [\n          'value1',\n          'value2'\n        ]\n      }\n    ]);\n    const partition$1 = results => {\n      const errors = [];\n      const values = [];\n      each$e(results, result => {\n        result.fold(err => {\n          errors.push(err);\n        }, value => {\n          values.push(value);\n        });\n      });\n      return {\n        errors,\n        values\n      };\n    };\n\n    const isInlinePattern = pattern => pattern.type === 'inline-command' || pattern.type === 'inline-format';\n    const isBlockPattern = pattern => pattern.type === 'block-command' || pattern.type === 'block-format';\n    const normalizePattern = pattern => {\n      const err = message => Result.error({\n        message,\n        pattern\n      });\n      const formatOrCmd = (name, onFormat, onCommand) => {\n        if (pattern.format !== undefined) {\n          let formats;\n          if (isArray$1(pattern.format)) {\n            if (!forall(pattern.format, isString)) {\n              return err(name + ' pattern has non-string items in the `format` array');\n            }\n            formats = pattern.format;\n          } else if (isString(pattern.format)) {\n            formats = [pattern.format];\n          } else {\n            return err(name + ' pattern has non-string `format` parameter');\n          }\n          return Result.value(onFormat(formats));\n        } else if (pattern.cmd !== undefined) {\n          if (!isString(pattern.cmd)) {\n            return err(name + ' pattern has non-string `cmd` parameter');\n          }\n          return Result.value(onCommand(pattern.cmd, pattern.value));\n        } else {\n          return err(name + ' pattern is missing both `format` and `cmd` parameters');\n        }\n      };\n      if (!isObject(pattern)) {\n        return err('Raw pattern is not an object');\n      }\n      if (!isString(pattern.start)) {\n        return err('Raw pattern is missing `start` parameter');\n      }\n      if (pattern.end !== undefined) {\n        if (!isString(pattern.end)) {\n          return err('Inline pattern has non-string `end` parameter');\n        }\n        if (pattern.start.length === 0 && pattern.end.length === 0) {\n          return err('Inline pattern has empty `start` and `end` parameters');\n        }\n        let start = pattern.start;\n        let end = pattern.end;\n        if (end.length === 0) {\n          end = start;\n          start = '';\n        }\n        return formatOrCmd('Inline', format => ({\n          type: 'inline-format',\n          start,\n          end,\n          format\n        }), (cmd, value) => ({\n          type: 'inline-command',\n          start,\n          end,\n          cmd,\n          value\n        }));\n      } else if (pattern.replacement !== undefined) {\n        if (!isString(pattern.replacement)) {\n          return err('Replacement pattern has non-string `replacement` parameter');\n        }\n        if (pattern.start.length === 0) {\n          return err('Replacement pattern has empty `start` parameter');\n        }\n        return Result.value({\n          type: 'inline-command',\n          start: '',\n          end: pattern.start,\n          cmd: 'mceInsertContent',\n          value: pattern.replacement\n        });\n      } else {\n        if (pattern.start.length === 0) {\n          return err('Block pattern has empty `start` parameter');\n        }\n        return formatOrCmd('Block', formats => ({\n          type: 'block-format',\n          start: pattern.start,\n          format: formats[0]\n        }), (command, commandValue) => ({\n          type: 'block-command',\n          start: pattern.start,\n          cmd: command,\n          value: commandValue\n        }));\n      }\n    };\n    const getBlockPatterns = patterns => filter$5(patterns, isBlockPattern);\n    const getInlinePatterns = patterns => filter$5(patterns, isInlinePattern);\n    const createPatternSet = (patterns, dynamicPatternsLookup) => ({\n      inlinePatterns: getInlinePatterns(patterns),\n      blockPatterns: getBlockPatterns(patterns),\n      dynamicPatternsLookup\n    });\n    const fromRawPatterns = patterns => {\n      const normalized = partition$1(map$3(patterns, normalizePattern));\n      each$e(normalized.errors, err => console.error(err.message, err.pattern));\n      return normalized.values;\n    };\n    const fromRawPatternsLookup = lookupFn => {\n      return ctx => {\n        const rawPatterns = lookupFn(ctx);\n        return fromRawPatterns(rawPatterns);\n      };\n    };\n\n    const deviceDetection$1 = detect$2().deviceType;\n    const isTouch = deviceDetection$1.isTouch();\n    const DOM$a = DOMUtils.DOM;\n    const getHash = value => {\n      const items = value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(',');\n      return foldl(items, (output, item) => {\n        const arr = item.split('=');\n        const key = arr[0];\n        const val = arr.length > 1 ? arr[1] : key;\n        output[trim$4(key)] = trim$4(val);\n        return output;\n      }, {});\n    };\n    const isRegExp = x => is$4(x, RegExp);\n    const option = name => editor => editor.options.get(name);\n    const stringOrObjectProcessor = value => isString(value) || isObject(value);\n    const bodyOptionProcessor = (editor, defaultValue = '') => value => {\n      const valid = isString(value);\n      if (valid) {\n        if (value.indexOf('=') !== -1) {\n          const bodyObj = getHash(value);\n          return {\n            value: get$a(bodyObj, editor.id).getOr(defaultValue),\n            valid\n          };\n        } else {\n          return {\n            value,\n            valid\n          };\n        }\n      } else {\n        return {\n          valid: false,\n          message: 'Must be a string.'\n        };\n      }\n    };\n    const register$7 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('id', {\n        processor: 'string',\n        default: editor.id\n      });\n      registerOption('selector', { processor: 'string' });\n      registerOption('target', { processor: 'object' });\n      registerOption('suffix', { processor: 'string' });\n      registerOption('cache_suffix', { processor: 'string' });\n      registerOption('base_url', { processor: 'string' });\n      registerOption('referrer_policy', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('language_load', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('inline', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('iframe_attrs', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('doctype', {\n        processor: 'string',\n        default: '<!DOCTYPE html>'\n      });\n      registerOption('document_base_url', {\n        processor: 'string',\n        default: editor.documentBaseUrl\n      });\n      registerOption('body_id', {\n        processor: bodyOptionProcessor(editor, 'tinymce'),\n        default: 'tinymce'\n      });\n      registerOption('body_class', {\n        processor: bodyOptionProcessor(editor),\n        default: ''\n      });\n      registerOption('content_security_policy', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('br_in_pre', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('forced_root_block', {\n        processor: value => {\n          const valid = isString(value) && isNotEmpty(value);\n          if (valid) {\n            return {\n              value,\n              valid\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a non-empty string.'\n            };\n          }\n        },\n        default: 'p'\n      });\n      registerOption('forced_root_block_attrs', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('newline_behavior', {\n        processor: value => {\n          const valid = contains$2([\n            'block',\n            'linebreak',\n            'invert',\n            'default'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: block, linebreak, invert or default.'\n          };\n        },\n        default: 'default'\n      });\n      registerOption('br_newline_selector', {\n        processor: 'string',\n        default: '.mce-toc h2,figcaption,caption'\n      });\n      registerOption('no_newline_selector', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('keep_styles', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('end_container_on_empty_block', {\n        processor: value => {\n          if (isBoolean(value)) {\n            return {\n              valid: true,\n              value\n            };\n          } else if (isString(value)) {\n            return {\n              valid: true,\n              value\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be boolean or a string'\n            };\n          }\n        },\n        default: 'blockquote'\n      });\n      registerOption('font_size_style_values', {\n        processor: 'string',\n        default: 'xx-small,x-small,small,medium,large,x-large,xx-large'\n      });\n      registerOption('font_size_legacy_values', {\n        processor: 'string',\n        default: 'xx-small,small,medium,large,x-large,xx-large,300%'\n      });\n      registerOption('font_size_classes', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('automatic_uploads', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('images_reuse_filename', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('images_replace_blob_uris', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('icons', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('icons_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('images_upload_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('images_upload_base_path', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('images_upload_credentials', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('images_upload_handler', { processor: 'function' });\n      registerOption('language', {\n        processor: 'string',\n        default: 'en'\n      });\n      registerOption('language_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('entity_encoding', {\n        processor: 'string',\n        default: 'named'\n      });\n      registerOption('indent', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('indent_before', {\n        processor: 'string',\n        default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n      });\n      registerOption('indent_after', {\n        processor: 'string',\n        default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n      });\n      registerOption('indent_use_margin', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('indentation', {\n        processor: 'string',\n        default: '40px'\n      });\n      registerOption('content_css', {\n        processor: value => {\n          const valid = value === false || isString(value) || isArrayOf(value, isString);\n          if (valid) {\n            if (isString(value)) {\n              return {\n                value: map$3(value.split(','), trim$4),\n                valid\n              };\n            } else if (isArray$1(value)) {\n              return {\n                value,\n                valid\n              };\n            } else if (value === false) {\n              return {\n                value: [],\n                valid\n              };\n            } else {\n              return {\n                value,\n                valid\n              };\n            }\n          } else {\n            return {\n              valid: false,\n              message: 'Must be false, a string or an array of strings.'\n            };\n          }\n        },\n        default: isInline$1(editor) ? [] : ['default']\n      });\n      registerOption('content_style', { processor: 'string' });\n      registerOption('content_css_cors', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('font_css', {\n        processor: value => {\n          const valid = isString(value) || isArrayOf(value, isString);\n          if (valid) {\n            const newValue = isArray$1(value) ? value : map$3(value.split(','), trim$4);\n            return {\n              value: newValue,\n              valid\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a string or an array of strings.'\n            };\n          }\n        },\n        default: []\n      });\n      registerOption('inline_boundaries', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('inline_boundaries_selector', {\n        processor: 'string',\n        default: 'a[href],code,span.mce-annotation'\n      });\n      registerOption('object_resizing', {\n        processor: value => {\n          const valid = isBoolean(value) || isString(value);\n          if (valid) {\n            if (value === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n              return {\n                value: '',\n                valid\n              };\n            } else {\n              return {\n                value: value === true ? 'table,img,figure.image,div,video,iframe' : value,\n                valid\n              };\n            }\n          } else {\n            return {\n              valid: false,\n              message: 'Must be boolean or a string'\n            };\n          }\n        },\n        default: !isTouch\n      });\n      registerOption('resize_img_proportional', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('event_root', { processor: 'object' });\n      registerOption('service_message', { processor: 'string' });\n      registerOption('theme', {\n        processor: value => value === false || isString(value) || isFunction(value),\n        default: 'silver'\n      });\n      registerOption('theme_url', { processor: 'string' });\n      registerOption('formats', { processor: 'object' });\n      registerOption('format_empty_lines', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('format_noneditable_selector', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('preview_styles', {\n        processor: value => {\n          const valid = value === false || isString(value);\n          if (valid) {\n            return {\n              value: value === false ? '' : value,\n              valid\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be false or a string'\n            };\n          }\n        },\n        default: 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'\n      });\n      registerOption('custom_ui_selector', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('hidden_input', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('submit_patch', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('encoding', { processor: 'string' });\n      registerOption('add_form_submit_trigger', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('add_unload_trigger', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('custom_undo_redo_levels', {\n        processor: 'number',\n        default: 0\n      });\n      registerOption('disable_nodechange', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('readonly', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('editable_root', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('plugins', {\n        processor: 'string[]',\n        default: []\n      });\n      registerOption('external_plugins', { processor: 'object' });\n      registerOption('forced_plugins', { processor: 'string[]' });\n      registerOption('model', {\n        processor: 'string',\n        default: editor.hasPlugin('rtc') ? 'plugin' : 'dom'\n      });\n      registerOption('model_url', { processor: 'string' });\n      registerOption('block_unsupported_drop', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('visual', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('visual_table_class', {\n        processor: 'string',\n        default: 'mce-item-table'\n      });\n      registerOption('visual_anchor_class', {\n        processor: 'string',\n        default: 'mce-item-anchor'\n      });\n      registerOption('iframe_aria_text', {\n        processor: 'string',\n        default: 'Rich Text Area. Press ALT-0 for help.'\n      });\n      registerOption('setup', { processor: 'function' });\n      registerOption('init_instance_callback', { processor: 'function' });\n      registerOption('url_converter', {\n        processor: 'function',\n        default: editor.convertURL\n      });\n      registerOption('url_converter_scope', {\n        processor: 'object',\n        default: editor\n      });\n      registerOption('urlconverter_callback', { processor: 'function' });\n      registerOption('allow_conditional_comments', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_html_data_urls', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_svg_data_urls', { processor: 'boolean' });\n      registerOption('allow_html_in_named_anchor', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_script_urls', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('allow_unsafe_link_target', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('convert_fonts_to_spans', {\n        processor: 'boolean',\n        default: true,\n        deprecated: true\n      });\n      registerOption('fix_list_elements', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('preserve_cdata', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('remove_trailing_brs', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('pad_empty_with_br', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('inline_styles', {\n        processor: 'boolean',\n        default: true,\n        deprecated: true\n      });\n      registerOption('element_format', {\n        processor: 'string',\n        default: 'html'\n      });\n      registerOption('entities', { processor: 'string' });\n      registerOption('schema', {\n        processor: 'string',\n        default: 'html5'\n      });\n      registerOption('convert_urls', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('relative_urls', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('remove_script_host', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('custom_elements', { processor: 'string' });\n      registerOption('extended_valid_elements', { processor: 'string' });\n      registerOption('invalid_elements', { processor: 'string' });\n      registerOption('invalid_styles', { processor: stringOrObjectProcessor });\n      registerOption('valid_children', { processor: 'string' });\n      registerOption('valid_classes', { processor: stringOrObjectProcessor });\n      registerOption('valid_elements', { processor: 'string' });\n      registerOption('valid_styles', { processor: stringOrObjectProcessor });\n      registerOption('verify_html', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('auto_focus', { processor: value => isString(value) || value === true });\n      registerOption('browser_spellcheck', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('protect', { processor: 'array' });\n      registerOption('images_file_types', {\n        processor: 'string',\n        default: 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp'\n      });\n      registerOption('deprecation_warnings', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('a11y_advanced_options', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('api_key', { processor: 'string' });\n      registerOption('paste_block_drop', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('paste_data_images', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('paste_preprocess', { processor: 'function' });\n      registerOption('paste_postprocess', { processor: 'function' });\n      registerOption('paste_webkit_styles', {\n        processor: 'string',\n        default: 'none'\n      });\n      registerOption('paste_remove_styles_if_webkit', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('paste_merge_formats', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('smart_paste', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('paste_as_text', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('paste_tab_spaces', {\n        processor: 'number',\n        default: 4\n      });\n      registerOption('text_patterns', {\n        processor: value => {\n          if (isArrayOf(value, isObject) || value === false) {\n            const patterns = value === false ? [] : value;\n            return {\n              value: fromRawPatterns(patterns),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be an array of objects or false.'\n            };\n          }\n        },\n        default: [\n          {\n            start: '*',\n            end: '*',\n            format: 'italic'\n          },\n          {\n            start: '**',\n            end: '**',\n            format: 'bold'\n          },\n          {\n            start: '#',\n            format: 'h1'\n          },\n          {\n            start: '##',\n            format: 'h2'\n          },\n          {\n            start: '###',\n            format: 'h3'\n          },\n          {\n            start: '####',\n            format: 'h4'\n          },\n          {\n            start: '#####',\n            format: 'h5'\n          },\n          {\n            start: '######',\n            format: 'h6'\n          },\n          {\n            start: '1. ',\n            cmd: 'InsertOrderedList'\n          },\n          {\n            start: '* ',\n            cmd: 'InsertUnorderedList'\n          },\n          {\n            start: '- ',\n            cmd: 'InsertUnorderedList'\n          }\n        ]\n      });\n      registerOption('text_patterns_lookup', {\n        processor: value => {\n          if (isFunction(value)) {\n            return {\n              value: fromRawPatternsLookup(value),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a single function'\n            };\n          }\n        },\n        default: _ctx => []\n      });\n      registerOption('noneditable_class', {\n        processor: 'string',\n        default: 'mceNonEditable'\n      });\n      registerOption('editable_class', {\n        processor: 'string',\n        default: 'mceEditable'\n      });\n      registerOption('noneditable_regexp', {\n        processor: value => {\n          if (isArrayOf(value, isRegExp)) {\n            return {\n              value,\n              valid: true\n            };\n          } else if (isRegExp(value)) {\n            return {\n              value: [value],\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a RegExp or an array of RegExp.'\n            };\n          }\n        },\n        default: []\n      });\n      registerOption('table_tab_navigation', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('highlight_on_focus', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('xss_sanitization', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('details_initial_state', {\n        processor: value => {\n          const valid = contains$2([\n            'inherited',\n            'collapsed',\n            'expanded'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: inherited, collapsed, or expanded.'\n          };\n        },\n        default: 'inherited'\n      });\n      registerOption('details_serialized_state', {\n        processor: value => {\n          const valid = contains$2([\n            'inherited',\n            'collapsed',\n            'expanded'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: inherited, collapsed, or expanded.'\n          };\n        },\n        default: 'inherited'\n      });\n      registerOption('init_content_sync', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('newdocument_content', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('force_hex_color', {\n        processor: value => {\n          const options = [\n            'always',\n            'rgb_only',\n            'off'\n          ];\n          const valid = contains$2(options, value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: `Must be one of: ${ options.join(', ') }.`\n          };\n        },\n        default: 'off'\n      });\n      registerOption('sandbox_iframes', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('convert_unsafe_embeds', {\n        processor: 'boolean',\n        default: false\n      });\n      editor.on('ScriptsLoaded', () => {\n        registerOption('directionality', {\n          processor: 'string',\n          default: I18n.isRtl() ? 'rtl' : undefined\n        });\n        registerOption('placeholder', {\n          processor: 'string',\n          default: DOM$a.getAttrib(editor.getElement(), 'placeholder')\n        });\n      });\n    };\n    const getIframeAttrs = option('iframe_attrs');\n    const getDocType = option('doctype');\n    const getDocumentBaseUrl = option('document_base_url');\n    const getBodyId = option('body_id');\n    const getBodyClass = option('body_class');\n    const getContentSecurityPolicy = option('content_security_policy');\n    const shouldPutBrInPre$1 = option('br_in_pre');\n    const getForcedRootBlock = option('forced_root_block');\n    const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n    const getNewlineBehavior = option('newline_behavior');\n    const getBrNewLineSelector = option('br_newline_selector');\n    const getNoNewLineSelector = option('no_newline_selector');\n    const shouldKeepStyles = option('keep_styles');\n    const shouldEndContainerOnEmptyBlock = option('end_container_on_empty_block');\n    const isAutomaticUploadsEnabled = option('automatic_uploads');\n    const shouldReuseFileName = option('images_reuse_filename');\n    const shouldReplaceBlobUris = option('images_replace_blob_uris');\n    const getIconPackName = option('icons');\n    const getIconsUrl = option('icons_url');\n    const getImageUploadUrl = option('images_upload_url');\n    const getImageUploadBasePath = option('images_upload_base_path');\n    const getImagesUploadCredentials = option('images_upload_credentials');\n    const getImagesUploadHandler = option('images_upload_handler');\n    const shouldUseContentCssCors = option('content_css_cors');\n    const getReferrerPolicy = option('referrer_policy');\n    const getLanguageCode = option('language');\n    const getLanguageUrl = option('language_url');\n    const shouldIndentUseMargin = option('indent_use_margin');\n    const getIndentation = option('indentation');\n    const getContentCss = option('content_css');\n    const getContentStyle = option('content_style');\n    const getFontCss = option('font_css');\n    const getDirectionality = option('directionality');\n    const getInlineBoundarySelector = option('inline_boundaries_selector');\n    const getObjectResizing = option('object_resizing');\n    const getResizeImgProportional = option('resize_img_proportional');\n    const getPlaceholder = option('placeholder');\n    const getEventRoot = option('event_root');\n    const getServiceMessage = option('service_message');\n    const getTheme = option('theme');\n    const getThemeUrl = option('theme_url');\n    const getModel = option('model');\n    const getModelUrl = option('model_url');\n    const isInlineBoundariesEnabled = option('inline_boundaries');\n    const getFormats = option('formats');\n    const getPreviewStyles = option('preview_styles');\n    const canFormatEmptyLines = option('format_empty_lines');\n    const getFormatNoneditableSelector = option('format_noneditable_selector');\n    const getCustomUiSelector = option('custom_ui_selector');\n    const isInline$1 = option('inline');\n    const hasHiddenInput = option('hidden_input');\n    const shouldPatchSubmit = option('submit_patch');\n    const shouldAddFormSubmitTrigger = option('add_form_submit_trigger');\n    const shouldAddUnloadTrigger = option('add_unload_trigger');\n    const getCustomUndoRedoLevels = option('custom_undo_redo_levels');\n    const shouldDisableNodeChange = option('disable_nodechange');\n    const isReadOnly$1 = option('readonly');\n    const hasEditableRoot$1 = option('editable_root');\n    const hasContentCssCors = option('content_css_cors');\n    const getPlugins = option('plugins');\n    const getExternalPlugins$1 = option('external_plugins');\n    const shouldBlockUnsupportedDrop = option('block_unsupported_drop');\n    const isVisualAidsEnabled = option('visual');\n    const getVisualAidsTableClass = option('visual_table_class');\n    const getVisualAidsAnchorClass = option('visual_anchor_class');\n    const getIframeAriaText = option('iframe_aria_text');\n    const getSetupCallback = option('setup');\n    const getInitInstanceCallback = option('init_instance_callback');\n    const getUrlConverterCallback = option('urlconverter_callback');\n    const getAutoFocus = option('auto_focus');\n    const shouldBrowserSpellcheck = option('browser_spellcheck');\n    const getProtect = option('protect');\n    const shouldPasteBlockDrop = option('paste_block_drop');\n    const shouldPasteDataImages = option('paste_data_images');\n    const getPastePreProcess = option('paste_preprocess');\n    const getPastePostProcess = option('paste_postprocess');\n    const getNewDocumentContent = option('newdocument_content');\n    const getPasteWebkitStyles = option('paste_webkit_styles');\n    const shouldPasteRemoveWebKitStyles = option('paste_remove_styles_if_webkit');\n    const shouldPasteMergeFormats = option('paste_merge_formats');\n    const isSmartPasteEnabled = option('smart_paste');\n    const isPasteAsTextEnabled = option('paste_as_text');\n    const getPasteTabSpaces = option('paste_tab_spaces');\n    const shouldAllowHtmlDataUrls = option('allow_html_data_urls');\n    const getTextPatterns = option('text_patterns');\n    const getTextPatternsLookup = option('text_patterns_lookup');\n    const getNonEditableClass = option('noneditable_class');\n    const getEditableClass = option('editable_class');\n    const getNonEditableRegExps = option('noneditable_regexp');\n    const shouldPreserveCData = option('preserve_cdata');\n    const shouldHighlightOnFocus = option('highlight_on_focus');\n    const shouldSanitizeXss = option('xss_sanitization');\n    const shouldUseDocumentWrite = option('init_content_sync');\n    const hasTextPatternsLookup = editor => editor.options.isSet('text_patterns_lookup');\n    const getFontStyleValues = editor => Tools.explode(editor.options.get('font_size_style_values'));\n    const getFontSizeClasses = editor => Tools.explode(editor.options.get('font_size_classes'));\n    const isEncodingXml = editor => editor.options.get('encoding') === 'xml';\n    const getAllowedImageFileTypes = editor => Tools.explode(editor.options.get('images_file_types'));\n    const hasTableTabNavigation = option('table_tab_navigation');\n    const getDetailsInitialState = option('details_initial_state');\n    const getDetailsSerializedState = option('details_serialized_state');\n    const shouldForceHexColor = option('force_hex_color');\n    const shouldSandboxIframes = option('sandbox_iframes');\n\n    const isElement$3 = isElement$6;\n    const isText$5 = isText$a;\n    const removeNode$1 = node => {\n      const parentNode = node.parentNode;\n      if (parentNode) {\n        parentNode.removeChild(node);\n      }\n    };\n    const trimCount = text => {\n      const trimmedText = trim$2(text);\n      return {\n        count: text.length - trimmedText.length,\n        text: trimmedText\n      };\n    };\n    const deleteZwspChars = caretContainer => {\n      let idx;\n      while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n        caretContainer.deleteData(idx, 1);\n      }\n    };\n    const removeUnchanged = (caretContainer, pos) => {\n      remove$3(caretContainer);\n      return pos;\n    };\n    const removeTextAndReposition = (caretContainer, pos) => {\n      const before = trimCount(caretContainer.data.substr(0, pos.offset()));\n      const after = trimCount(caretContainer.data.substr(pos.offset()));\n      const text = before.text + after.text;\n      if (text.length > 0) {\n        deleteZwspChars(caretContainer);\n        return CaretPosition(caretContainer, pos.offset() - before.count);\n      } else {\n        return pos;\n      }\n    };\n    const removeElementAndReposition = (caretContainer, pos) => {\n      const parentNode = pos.container();\n      const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map(index => {\n        return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n      }).getOr(pos);\n      remove$3(caretContainer);\n      return newPosition;\n    };\n    const removeTextCaretContainer = (caretContainer, pos) => isText$5(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n    const remove$3 = caretContainerNode => {\n      if (isElement$3(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n        if (hasContent(caretContainerNode)) {\n          caretContainerNode.removeAttribute('data-mce-caret');\n        } else {\n          removeNode$1(caretContainerNode);\n        }\n      }\n      if (isText$5(caretContainerNode)) {\n        deleteZwspChars(caretContainerNode);\n        if (caretContainerNode.data.length === 0) {\n          removeNode$1(caretContainerNode);\n        }\n      }\n    };\n\n    const isContentEditableFalse$8 = isContentEditableFalse$b;\n    const isMedia$1 = isMedia$2;\n    const isTableCell$1 = isTableCell$3;\n    const inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n    const getAbsoluteClientRect = (root, element, before) => {\n      const clientRect = collapse(element.getBoundingClientRect(), before);\n      let scrollX;\n      let scrollY;\n      if (root.tagName === 'BODY') {\n        const docElm = root.ownerDocument.documentElement;\n        scrollX = root.scrollLeft || docElm.scrollLeft;\n        scrollY = root.scrollTop || docElm.scrollTop;\n      } else {\n        const rootRect = root.getBoundingClientRect();\n        scrollX = root.scrollLeft - rootRect.left;\n        scrollY = root.scrollTop - rootRect.top;\n      }\n      clientRect.left += scrollX;\n      clientRect.right += scrollX;\n      clientRect.top += scrollY;\n      clientRect.bottom += scrollY;\n      clientRect.width = 1;\n      let margin = element.offsetWidth - element.clientWidth;\n      if (margin > 0) {\n        if (before) {\n          margin *= -1;\n        }\n        clientRect.left += margin;\n        clientRect.right += margin;\n      }\n      return clientRect;\n    };\n    const trimInlineCaretContainers = root => {\n      var _a, _b;\n      const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n      for (let i = 0; i < fakeCaretTargetNodes.length; i++) {\n        const node = fakeCaretTargetNodes[i].dom;\n        let sibling = node.previousSibling;\n        if (endsWithCaretContainer$1(sibling)) {\n          const data = sibling.data;\n          if (data.length === 1) {\n            (_a = sibling.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(sibling);\n          } else {\n            sibling.deleteData(data.length - 1, 1);\n          }\n        }\n        sibling = node.nextSibling;\n        if (startsWithCaretContainer$1(sibling)) {\n          const data = sibling.data;\n          if (data.length === 1) {\n            (_b = sibling.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(sibling);\n          } else {\n            sibling.deleteData(0, 1);\n          }\n        }\n      }\n    };\n    const FakeCaret = (editor, root, isBlock, hasFocus) => {\n      const lastVisualCaret = value$2();\n      let cursorInterval;\n      let caretContainerNode;\n      const caretBlock = getForcedRootBlock(editor);\n      const dom = editor.dom;\n      const show = (before, element) => {\n        let rng;\n        hide();\n        if (isTableCell$1(element)) {\n          return null;\n        }\n        if (isBlock(element)) {\n          const caretContainer = insertBlock(caretBlock, element, before);\n          const clientRect = getAbsoluteClientRect(root, element, before);\n          dom.setStyle(caretContainer, 'top', clientRect.top);\n          caretContainerNode = caretContainer;\n          const caret = dom.create('div', {\n            'class': 'mce-visual-caret',\n            'data-mce-bogus': 'all'\n          });\n          dom.setStyles(caret, { ...clientRect });\n          dom.add(root, caret);\n          lastVisualCaret.set({\n            caret,\n            element,\n            before\n          });\n          if (before) {\n            dom.addClass(caret, 'mce-visual-caret-before');\n          }\n          startBlink();\n          rng = element.ownerDocument.createRange();\n          rng.setStart(caretContainer, 0);\n          rng.setEnd(caretContainer, 0);\n        } else {\n          caretContainerNode = insertInline$1(element, before);\n          rng = element.ownerDocument.createRange();\n          if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n            rng.setStart(caretContainerNode, 0);\n            rng.setEnd(caretContainerNode, 0);\n          } else {\n            rng.setStart(caretContainerNode, 1);\n            rng.setEnd(caretContainerNode, 1);\n          }\n          return rng;\n        }\n        return rng;\n      };\n      const hide = () => {\n        trimInlineCaretContainers(root);\n        if (caretContainerNode) {\n          remove$3(caretContainerNode);\n          caretContainerNode = null;\n        }\n        lastVisualCaret.on(caretState => {\n          dom.remove(caretState.caret);\n          lastVisualCaret.clear();\n        });\n        if (cursorInterval) {\n          clearInterval(cursorInterval);\n          cursorInterval = undefined;\n        }\n      };\n      const startBlink = () => {\n        cursorInterval = setInterval(() => {\n          lastVisualCaret.on(caretState => {\n            if (hasFocus()) {\n              dom.toggleClass(caretState.caret, 'mce-visual-caret-hidden');\n            } else {\n              dom.addClass(caretState.caret, 'mce-visual-caret-hidden');\n            }\n          });\n        }, 500);\n      };\n      const reposition = () => {\n        lastVisualCaret.on(caretState => {\n          const clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n          dom.setStyles(caretState.caret, { ...clientRect });\n        });\n      };\n      const destroy = () => clearInterval(cursorInterval);\n      const getCss = () => '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n      return {\n        show,\n        hide,\n        getCss,\n        reposition,\n        destroy\n      };\n    };\n    const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n    const isInlineFakeCaretTarget = node => isContentEditableFalse$8(node) || isMedia$1(node);\n    const isFakeCaretTarget = node => {\n      const isTarget = isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n      return isTarget && parentElement(SugarElement.fromDom(node)).exists(isEditable$2);\n    };\n\n    const isContentEditableTrue$1 = isContentEditableTrue$3;\n    const isContentEditableFalse$7 = isContentEditableFalse$b;\n    const isMedia = isMedia$2;\n    const isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n    const isCaretContainer = isCaretContainer$2;\n    const isCaretContainerBlock = isCaretContainerBlock$1;\n    const isElement$2 = isElement$6;\n    const isText$4 = isText$a;\n    const isCaretCandidate$1 = isCaretCandidate$3;\n    const isForwards = direction => direction > 0;\n    const isBackwards = direction => direction < 0;\n    const skipCaretContainers = (walk, shallow) => {\n      let node;\n      while (node = walk(shallow)) {\n        if (!isCaretContainerBlock(node)) {\n          return node;\n        }\n      }\n      return null;\n    };\n    const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n      const walker = new DomTreeWalker(node, rootNode);\n      const isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n      let tempNode;\n      if (isBackwards(direction)) {\n        if (isCefOrCaretContainer) {\n          tempNode = skipCaretContainers(walker.prev.bind(walker), true);\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n        while (tempNode = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n      }\n      if (isForwards(direction)) {\n        if (isCefOrCaretContainer) {\n          tempNode = skipCaretContainers(walker.next.bind(walker), true);\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n        while (tempNode = skipCaretContainers(walker.next.bind(walker), shallow)) {\n          if (predicateFn(tempNode)) {\n            return tempNode;\n          }\n        }\n      }\n      return null;\n    };\n    const getEditingHost = (node, rootNode) => {\n      const isCETrue = node => isContentEditableTrue$1(node.dom);\n      const isRoot = node => node.dom === rootNode;\n      return ancestor$4(SugarElement.fromDom(node), isCETrue, isRoot).map(elm => elm.dom).getOr(rootNode);\n    };\n    const getParentBlock$3 = (node, rootNode) => {\n      while (node && node !== rootNode) {\n        if (isBlockLike(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n    const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n      if (!caretPosition) {\n        return Optional.none();\n      }\n      const container = caretPosition.container();\n      const offset = caretPosition.offset();\n      if (!isElement$2(container)) {\n        return Optional.none();\n      }\n      return Optional.from(container.childNodes[offset + relativeOffset]);\n    };\n    const beforeAfter = (before, node) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const range = doc.createRange();\n      if (before) {\n        range.setStartBefore(node);\n        range.setEndBefore(node);\n      } else {\n        range.setStartAfter(node);\n        range.setEndAfter(node);\n      }\n      return range;\n    };\n    const isNodesInSameBlock = (root, node1, node2) => getParentBlock$3(node1, root) === getParentBlock$3(node2, root);\n    const lean = (left, root, node) => {\n      const siblingName = left ? 'previousSibling' : 'nextSibling';\n      let tempNode = node;\n      while (tempNode && tempNode !== root) {\n        let sibling = tempNode[siblingName];\n        if (sibling && isCaretContainer(sibling)) {\n          sibling = sibling[siblingName];\n        }\n        if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n          if (isNodesInSameBlock(root, sibling, tempNode)) {\n            return sibling;\n          }\n          break;\n        }\n        if (isCaretCandidate$1(sibling)) {\n          break;\n        }\n        tempNode = tempNode.parentNode;\n      }\n      return null;\n    };\n    const before$2 = curry(beforeAfter, true);\n    const after$2 = curry(beforeAfter, false);\n    const normalizeRange = (direction, root, range) => {\n      let node;\n      const leanLeft = curry(lean, true, root);\n      const leanRight = curry(lean, false, root);\n      const container = range.startContainer;\n      const offset = range.startOffset;\n      if (isCaretContainerBlock$1(container)) {\n        const block = isText$4(container) ? container.parentNode : container;\n        const location = block.getAttribute('data-mce-caret');\n        if (location === 'before') {\n          node = block.nextSibling;\n          if (isFakeCaretTarget(node)) {\n            return before$2(node);\n          }\n        }\n        if (location === 'after') {\n          node = block.previousSibling;\n          if (isFakeCaretTarget(node)) {\n            return after$2(node);\n          }\n        }\n      }\n      if (!range.collapsed) {\n        return range;\n      }\n      if (isText$a(container)) {\n        if (isCaretContainer(container)) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n          }\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (startsWithCaretContainer$1(container) && offset <= 1) {\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$2(node);\n            }\n          }\n          return range;\n        }\n        if (offset === container.data.length) {\n          node = leanRight(container);\n          if (node) {\n            return before$2(node);\n          }\n          return range;\n        }\n        if (offset === 0) {\n          node = leanLeft(container);\n          if (node) {\n            return after$2(node);\n          }\n          return range;\n        }\n      }\n      return range;\n    };\n    const getRelativeCefElm = (forward, caretPosition) => getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition).filter(isContentEditableFalse$7);\n    const getNormalizedRangeEndPoint = (direction, root, range) => {\n      const normalizedRange = normalizeRange(direction, root, range);\n      return direction === -1 ? CaretPosition.fromRangeStart(normalizedRange) : CaretPosition.fromRangeEnd(normalizedRange);\n    };\n    const getElementFromPosition = pos => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n    const getElementFromPrevPosition = pos => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n    const getVisualCaretPosition = (walkFn, caretPosition) => {\n      let pos = caretPosition;\n      while (pos = walkFn(pos)) {\n        if (pos.isVisible()) {\n          return pos;\n        }\n      }\n      return pos;\n    };\n    const isMoveInsideSameBlock = (from, to) => {\n      const inSameBlock = isInSameBlock(from, to);\n      if (!inSameBlock && isBr$6(from.getNode())) {\n        return true;\n      }\n      return inSameBlock;\n    };\n\n    var HDirection;\n    (function (HDirection) {\n      HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n      HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n    }(HDirection || (HDirection = {})));\n    const isContentEditableFalse$6 = isContentEditableFalse$b;\n    const isText$3 = isText$a;\n    const isElement$1 = isElement$6;\n    const isBr$2 = isBr$6;\n    const isCaretCandidate = isCaretCandidate$3;\n    const isAtomic = isAtomic$1;\n    const isEditableCaretCandidate = isEditableCaretCandidate$1;\n    const getParents$3 = (node, root) => {\n      const parents = [];\n      let tempNode = node;\n      while (tempNode && tempNode !== root) {\n        parents.push(tempNode);\n        tempNode = tempNode.parentNode;\n      }\n      return parents;\n    };\n    const nodeAtIndex = (container, offset) => {\n      if (container.hasChildNodes() && offset < container.childNodes.length) {\n        return container.childNodes[offset];\n      }\n      return null;\n    };\n    const getCaretCandidatePosition = (direction, node) => {\n      if (isForwards(direction)) {\n        if (isCaretCandidate(node.previousSibling) && !isText$3(node.previousSibling)) {\n          return CaretPosition.before(node);\n        }\n        if (isText$3(node)) {\n          return CaretPosition(node, 0);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isCaretCandidate(node.nextSibling) && !isText$3(node.nextSibling)) {\n          return CaretPosition.after(node);\n        }\n        if (isText$3(node)) {\n          return CaretPosition(node, node.data.length);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isBr$2(node)) {\n          return CaretPosition.before(node);\n        }\n        return CaretPosition.after(node);\n      }\n      return CaretPosition.before(node);\n    };\n    const moveForwardFromBr = (root, nextNode) => {\n      const nextSibling = nextNode.nextSibling;\n      if (nextSibling && isCaretCandidate(nextSibling)) {\n        if (isText$3(nextSibling)) {\n          return CaretPosition(nextSibling, 0);\n        } else {\n          return CaretPosition.before(nextSibling);\n        }\n      } else {\n        return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n      }\n    };\n    const findCaretPosition$1 = (direction, startPos, root) => {\n      let node;\n      let nextNode;\n      let innerNode;\n      let caretPosition;\n      if (!isElement$1(root) || !startPos) {\n        return null;\n      }\n      if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n        caretPosition = CaretPosition.after(root.lastChild);\n        if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement$1(root.lastChild)) {\n          return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n        }\n      } else {\n        caretPosition = startPos;\n      }\n      const container = caretPosition.container();\n      let offset = caretPosition.offset();\n      if (isText$3(container)) {\n        if (isBackwards(direction) && offset > 0) {\n          return CaretPosition(container, --offset);\n        }\n        if (isForwards(direction) && offset < container.length) {\n          return CaretPosition(container, ++offset);\n        }\n        node = container;\n      } else {\n        if (isBackwards(direction) && offset > 0) {\n          nextNode = nodeAtIndex(container, offset - 1);\n          if (isCaretCandidate(nextNode)) {\n            if (!isAtomic(nextNode)) {\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n              if (innerNode) {\n                if (isText$3(innerNode)) {\n                  return CaretPosition(innerNode, innerNode.data.length);\n                }\n                return CaretPosition.after(innerNode);\n              }\n            }\n            if (isText$3(nextNode)) {\n              return CaretPosition(nextNode, nextNode.data.length);\n            }\n            return CaretPosition.before(nextNode);\n          }\n        }\n        if (isForwards(direction) && offset < container.childNodes.length) {\n          nextNode = nodeAtIndex(container, offset);\n          if (isCaretCandidate(nextNode)) {\n            if (isBr$2(nextNode)) {\n              return moveForwardFromBr(root, nextNode);\n            }\n            if (!isAtomic(nextNode)) {\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n              if (innerNode) {\n                if (isText$3(innerNode)) {\n                  return CaretPosition(innerNode, 0);\n                }\n                return CaretPosition.before(innerNode);\n              }\n            }\n            if (isText$3(nextNode)) {\n              return CaretPosition(nextNode, 0);\n            }\n            return CaretPosition.after(nextNode);\n          }\n        }\n        node = nextNode ? nextNode : caretPosition.getNode();\n      }\n      if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n        node = findNode(node, direction, always, root, true);\n        if (isEditableCaretCandidate(node, root)) {\n          return getCaretCandidatePosition(direction, node);\n        }\n      }\n      nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n      const rootContentEditableFalseElm = last$2(filter$5(getParents$3(container, root), isContentEditableFalse$6));\n      if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n        if (isForwards(direction)) {\n          caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n        } else {\n          caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n        }\n        return caretPosition;\n      }\n      if (nextNode) {\n        return getCaretCandidatePosition(direction, nextNode);\n      }\n      return null;\n    };\n    const CaretWalker = root => ({\n      next: caretPosition => {\n        return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n      },\n      prev: caretPosition => {\n        return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n      }\n    });\n\n    const walkToPositionIn = (forward, root, start) => {\n      const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n      return fromPosition(forward, root, position);\n    };\n    const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n    const isBeforeOrStart = position => {\n      if (CaretPosition.isTextPosition(position)) {\n        return position.offset() === 0;\n      } else {\n        return isCaretCandidate$3(position.getNode());\n      }\n    };\n    const isAfterOrEnd = position => {\n      if (CaretPosition.isTextPosition(position)) {\n        const container = position.container();\n        return position.offset() === container.data.length;\n      } else {\n        return isCaretCandidate$3(position.getNode(true));\n      }\n    };\n    const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n    const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n    const shouldSkipPosition = (forward, from, to) => {\n      if (forward) {\n        return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n      } else {\n        return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n      }\n    };\n    const fromPosition = (forward, root, pos) => {\n      const walker = CaretWalker(root);\n      return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n    };\n    const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(to => {\n      if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n        return fromPosition(forward, root, to);\n      } else {\n        return Optional.some(to);\n      }\n    });\n    const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n    const positionIn = (forward, element) => {\n      const startNode = forward ? element.firstChild : element.lastChild;\n      if (isText$a(startNode)) {\n        return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n      } else if (startNode) {\n        if (isCaretCandidate$3(startNode)) {\n          return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n        } else {\n          return walkToPositionIn(forward, element, startNode);\n        }\n      } else {\n        return Optional.none();\n      }\n    };\n    const nextPosition = curry(fromPosition, true);\n    const prevPosition = curry(fromPosition, false);\n    const firstPositionIn = curry(positionIn, true);\n    const lastPositionIn = curry(positionIn, false);\n\n    const CARET_ID = '_mce_caret';\n    const isCaretNode = node => isElement$6(node) && node.id === CARET_ID;\n    const getParentCaretContainer = (body, node) => {\n      let currentNode = node;\n      while (currentNode && currentNode !== body) {\n        if (isCaretNode(currentNode)) {\n          return currentNode;\n        }\n        currentNode = currentNode.parentNode;\n      }\n      return null;\n    };\n\n    const isStringPathBookmark = bookmark => isString(bookmark.start);\n    const isRangeBookmark = bookmark => has$2(bookmark, 'rng');\n    const isIdBookmark = bookmark => has$2(bookmark, 'id');\n    const isIndexBookmark = bookmark => has$2(bookmark, 'name');\n    const isPathBookmark = bookmark => Tools.isArray(bookmark.start);\n\n    const isForwardBookmark = bookmark => !isIndexBookmark(bookmark) && isBoolean(bookmark.forward) ? bookmark.forward : true;\n    const addBogus = (dom, node) => {\n      if (isElement$6(node) && dom.isBlock(node) && !node.innerHTML) {\n        node.innerHTML = '<br data-mce-bogus=\"1\" />';\n      }\n      return node;\n    };\n    const resolveCaretPositionBookmark = (dom, bookmark) => {\n      const startPos = Optional.from(resolve$1(dom.getRoot(), bookmark.start));\n      const endPos = Optional.from(resolve$1(dom.getRoot(), bookmark.end));\n      return lift2(startPos, endPos, (start, end) => {\n        const range = dom.createRng();\n        range.setStart(start.container(), start.offset());\n        range.setEnd(end.container(), end.offset());\n        return {\n          range,\n          forward: isForwardBookmark(bookmark)\n        };\n      });\n    };\n    const insertZwsp = (node, rng) => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      const textNode = doc.createTextNode(ZWSP$1);\n      node.appendChild(textNode);\n      rng.setStart(textNode, 0);\n      rng.setEnd(textNode, 0);\n    };\n    const isEmpty$1 = node => !node.hasChildNodes();\n    const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, pos => {\n      rng.setStart(pos.container(), pos.offset());\n      rng.setEnd(pos.container(), pos.offset());\n      return true;\n    });\n    const padEmptyCaretContainer = (root, node, rng) => {\n      if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n        insertZwsp(node, rng);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const setEndPoint = (dom, start, bookmark, rng) => {\n      const point = bookmark[start ? 'start' : 'end'];\n      const root = dom.getRoot();\n      if (point) {\n        let node = root;\n        let offset = point[0];\n        for (let i = point.length - 1; node && i >= 1; i--) {\n          const children = node.childNodes;\n          if (padEmptyCaretContainer(root, node, rng)) {\n            return true;\n          }\n          if (point[i] > children.length - 1) {\n            if (padEmptyCaretContainer(root, node, rng)) {\n              return true;\n            }\n            return tryFindRangePosition(node, rng);\n          }\n          node = children[point[i]];\n        }\n        if (isText$a(node)) {\n          offset = Math.min(point[0], node.data.length);\n        }\n        if (isElement$6(node)) {\n          offset = Math.min(point[0], node.childNodes.length);\n        }\n        if (start) {\n          rng.setStart(node, offset);\n        } else {\n          rng.setEnd(node, offset);\n        }\n      }\n      return true;\n    };\n    const isValidTextNode = node => isText$a(node) && node.data.length > 0;\n    const restoreEndPoint = (dom, suffix, bookmark) => {\n      const marker = dom.get(bookmark.id + '_' + suffix);\n      const markerParent = marker === null || marker === void 0 ? void 0 : marker.parentNode;\n      const keep = bookmark.keep;\n      if (marker && markerParent) {\n        let container;\n        let offset;\n        if (suffix === 'start') {\n          if (!keep) {\n            container = markerParent;\n            offset = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              container = marker.firstChild;\n              offset = 1;\n            } else if (isValidTextNode(marker.nextSibling)) {\n              container = marker.nextSibling;\n              offset = 0;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              container = marker.previousSibling;\n              offset = marker.previousSibling.data.length;\n            } else {\n              container = markerParent;\n              offset = dom.nodeIndex(marker) + 1;\n            }\n          }\n        } else {\n          if (!keep) {\n            container = markerParent;\n            offset = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              container = marker.firstChild;\n              offset = 1;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              container = marker.previousSibling;\n              offset = marker.previousSibling.data.length;\n            } else {\n              container = markerParent;\n              offset = dom.nodeIndex(marker);\n            }\n          }\n        }\n        if (!keep) {\n          const prev = marker.previousSibling;\n          const next = marker.nextSibling;\n          Tools.each(Tools.grep(marker.childNodes), node => {\n            if (isText$a(node)) {\n              node.data = node.data.replace(/\\uFEFF/g, '');\n            }\n          });\n          let otherMarker;\n          while (otherMarker = dom.get(bookmark.id + '_' + suffix)) {\n            dom.remove(otherMarker, true);\n          }\n          if (isText$a(next) && isText$a(prev) && !Env.browser.isOpera()) {\n            const idx = prev.data.length;\n            prev.appendData(next.data);\n            dom.remove(next);\n            container = prev;\n            offset = idx;\n          }\n        }\n        return Optional.some(CaretPosition(container, offset));\n      } else {\n        return Optional.none();\n      }\n    };\n    const resolvePaths = (dom, bookmark) => {\n      const range = dom.createRng();\n      if (setEndPoint(dom, true, bookmark, range) && setEndPoint(dom, false, bookmark, range)) {\n        return Optional.some({\n          range,\n          forward: isForwardBookmark(bookmark)\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const resolveId = (dom, bookmark) => {\n      const startPos = restoreEndPoint(dom, 'start', bookmark);\n      const endPos = restoreEndPoint(dom, 'end', bookmark);\n      return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n        const range = dom.createRng();\n        range.setStart(addBogus(dom, spos.container()), spos.offset());\n        range.setEnd(addBogus(dom, epos.container()), epos.offset());\n        return {\n          range,\n          forward: isForwardBookmark(bookmark)\n        };\n      });\n    };\n    const resolveIndex = (dom, bookmark) => Optional.from(dom.select(bookmark.name)[bookmark.index]).map(elm => {\n      const range = dom.createRng();\n      range.selectNode(elm);\n      return {\n        range,\n        forward: true\n      };\n    });\n    const resolve = (selection, bookmark) => {\n      const dom = selection.dom;\n      if (bookmark) {\n        if (isPathBookmark(bookmark)) {\n          return resolvePaths(dom, bookmark);\n        } else if (isStringPathBookmark(bookmark)) {\n          return resolveCaretPositionBookmark(dom, bookmark);\n        } else if (isIdBookmark(bookmark)) {\n          return resolveId(dom, bookmark);\n        } else if (isIndexBookmark(bookmark)) {\n          return resolveIndex(dom, bookmark);\n        } else if (isRangeBookmark(bookmark)) {\n          return Optional.some({\n            range: bookmark.rng,\n            forward: isForwardBookmark(bookmark)\n          });\n        }\n      }\n      return Optional.none();\n    };\n\n    const getBookmark$1 = (selection, type, normalized) => {\n      return getBookmark$2(selection, type, normalized);\n    };\n    const moveToBookmark = (selection, bookmark) => {\n      resolve(selection, bookmark).each(({range, forward}) => {\n        selection.setRng(range, forward);\n      });\n    };\n    const isBookmarkNode$1 = node => {\n      return isElement$6(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n    };\n\n    const is = expected => actual => expected === actual;\n    const isNbsp = is(nbsp);\n    const isWhiteSpace = chr => chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n    const isContent = chr => !isWhiteSpace(chr) && !isNbsp(chr) && !isZwsp$2(chr);\n\n    const getRanges$1 = selection => {\n      const ranges = [];\n      if (selection) {\n        for (let i = 0; i < selection.rangeCount; i++) {\n          ranges.push(selection.getRangeAt(i));\n        }\n      }\n      return ranges;\n    };\n    const getSelectedNodes = ranges => {\n      return bind$3(ranges, range => {\n        const node = getSelectedNode(range);\n        return node ? [SugarElement.fromDom(node)] : [];\n      });\n    };\n    const hasMultipleRanges = selection => {\n      return getRanges$1(selection).length > 1;\n    };\n\n    const getCellsFromRanges = ranges => filter$5(getSelectedNodes(ranges), isTableCell$2);\n    const getCellsFromElement = elm => descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n    const getCellsFromElementOrRanges = (ranges, element) => {\n      const selectedCells = getCellsFromElement(element);\n      return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n    };\n    const getCellsFromEditor = editor => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n    const getClosestTable = (cell, isRoot) => ancestor$3(cell, 'table', isRoot);\n\n    const getStartNode = rng => {\n      const sc = rng.startContainer, so = rng.startOffset;\n      if (isText$a(sc)) {\n        return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n      } else {\n        return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n      }\n    };\n    const getEndNode = rng => {\n      const ec = rng.endContainer, eo = rng.endOffset;\n      if (isText$a(ec)) {\n        return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n      } else {\n        return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n      }\n    };\n    const getFirstChildren = node => {\n      return firstChild(node).fold(constant([node]), child => {\n        return [node].concat(getFirstChildren(child));\n      });\n    };\n    const getLastChildren = node => {\n      return lastChild(node).fold(constant([node]), child => {\n        if (name(child) === 'br') {\n          return prevSibling(child).map(sibling => {\n            return [node].concat(getLastChildren(sibling));\n          }).getOr([]);\n        } else {\n          return [node].concat(getLastChildren(child));\n        }\n      });\n    };\n    const hasAllContentsSelected = (elm, rng) => {\n      return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n        const start = find$2(getFirstChildren(elm), curry(eq, startNode));\n        const end = find$2(getLastChildren(elm), curry(eq, endNode));\n        return start.isSome() && end.isSome();\n      }).getOr(false);\n    };\n    const moveEndPoint = (dom, rng, node, start) => {\n      const root = node;\n      const walker = new DomTreeWalker(node, root);\n      const moveCaretBeforeOnEnterElementsMap = filter$4(dom.schema.getMoveCaretBeforeOnEnterElements(), (_, name) => !contains$2([\n        'td',\n        'th',\n        'table'\n      ], name.toLowerCase()));\n      let currentNode = node;\n      do {\n        if (isText$a(currentNode) && Tools.trim(currentNode.data).length !== 0) {\n          if (start) {\n            rng.setStart(currentNode, 0);\n          } else {\n            rng.setEnd(currentNode, currentNode.data.length);\n          }\n          return;\n        }\n        if (moveCaretBeforeOnEnterElementsMap[currentNode.nodeName]) {\n          if (start) {\n            rng.setStartBefore(currentNode);\n          } else {\n            if (currentNode.nodeName === 'BR') {\n              rng.setEndBefore(currentNode);\n            } else {\n              rng.setEndAfter(currentNode);\n            }\n          }\n          return;\n        }\n      } while (currentNode = start ? walker.next() : walker.prev());\n      if (root.nodeName === 'BODY') {\n        if (start) {\n          rng.setStart(root, 0);\n        } else {\n          rng.setEnd(root, root.childNodes.length);\n        }\n      }\n    };\n    const hasAnyRanges = editor => {\n      const sel = editor.selection.getSel();\n      return isNonNullable(sel) && sel.rangeCount > 0;\n    };\n    const runOnRanges = (editor, executor) => {\n      const fakeSelectionNodes = getCellsFromEditor(editor);\n      if (fakeSelectionNodes.length > 0) {\n        each$e(fakeSelectionNodes, elem => {\n          const node = elem.dom;\n          const fakeNodeRng = editor.dom.createRng();\n          fakeNodeRng.setStartBefore(node);\n          fakeNodeRng.setEndAfter(node);\n          executor(fakeNodeRng, true);\n        });\n      } else {\n        executor(editor.selection.getRng(), false);\n      }\n    };\n    const preserve = (selection, fillBookmark, executor) => {\n      const bookmark = getPersistentBookmark(selection, fillBookmark);\n      executor(bookmark);\n      selection.moveToBookmark(bookmark);\n    };\n\n    const isNode = node => isNumber(node === null || node === void 0 ? void 0 : node.nodeType);\n    const isElementNode$1 = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n    const isElementDirectlySelected = (dom, node) => {\n      if (isElementNode$1(node) && !/^(TD|TH)$/.test(node.nodeName)) {\n        const selectedAttr = dom.getAttrib(node, 'data-mce-selected');\n        const value = parseInt(selectedAttr, 10);\n        return !isNaN(value) && value > 0;\n      } else {\n        return false;\n      }\n    };\n    const preserveSelection = (editor, action, shouldMoveStart) => {\n      const {selection, dom} = editor;\n      const selectedNodeBeforeAction = selection.getNode();\n      const isSelectedBeforeNodeNoneditable = isContentEditableFalse$b(selectedNodeBeforeAction);\n      preserve(selection, true, () => {\n        action();\n      });\n      const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$b(selectedNodeBeforeAction);\n      if (isBeforeNodeStillNoneditable && dom.isChildOf(selectedNodeBeforeAction, editor.getBody())) {\n        editor.selection.select(selectedNodeBeforeAction);\n      } else if (shouldMoveStart(selection.getStart())) {\n        moveStartToNearestText(dom, selection);\n      }\n    };\n    const moveStartToNearestText = (dom, selection) => {\n      var _a, _b;\n      const rng = selection.getRng();\n      const {startContainer, startOffset} = rng;\n      const selectedNode = selection.getNode();\n      if (isElementDirectlySelected(dom, selectedNode)) {\n        return;\n      }\n      if (isElement$6(startContainer)) {\n        const nodes = startContainer.childNodes;\n        const root = dom.getRoot();\n        let walker;\n        if (startOffset < nodes.length) {\n          const startNode = nodes[startOffset];\n          walker = new DomTreeWalker(startNode, (_a = dom.getParent(startNode, dom.isBlock)) !== null && _a !== void 0 ? _a : root);\n        } else {\n          const startNode = nodes[nodes.length - 1];\n          walker = new DomTreeWalker(startNode, (_b = dom.getParent(startNode, dom.isBlock)) !== null && _b !== void 0 ? _b : root);\n          walker.next(true);\n        }\n        for (let node = walker.current(); node; node = walker.next()) {\n          if (dom.getContentEditable(node) === 'false') {\n            return;\n          } else if (isText$a(node) && !isWhiteSpaceNode$1(node)) {\n            rng.setStart(node, 0);\n            selection.setRng(rng);\n            return;\n          }\n        }\n      }\n    };\n    const getNonWhiteSpaceSibling = (node, next, inc) => {\n      if (node) {\n        const nextName = next ? 'nextSibling' : 'previousSibling';\n        for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n          if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n            return node;\n          }\n        }\n      }\n      return undefined;\n    };\n    const isTextBlock$1 = (schema, node) => !!schema.getTextBlockElements()[node.nodeName.toLowerCase()] || isTransparentBlock(schema, node);\n    const isValid = (ed, parent, child) => {\n      return ed.schema.isValidChild(parent, child);\n    };\n    const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n      if (isNonNullable(node) && isText$a(node)) {\n        const data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n        return isWhitespaceText(data);\n      } else {\n        return false;\n      }\n    };\n    const isEmptyTextNode$1 = node => {\n      return isNonNullable(node) && isText$a(node) && node.length === 0;\n    };\n    const isWrapNoneditableTarget = (editor, node) => {\n      const baseDataSelector = '[data-mce-cef-wrappable]';\n      const formatNoneditableSelector = getFormatNoneditableSelector(editor);\n      const selector = isEmpty$3(formatNoneditableSelector) ? baseDataSelector : `${ baseDataSelector },${ formatNoneditableSelector }`;\n      return is$1(SugarElement.fromDom(node), selector);\n    };\n    const isWrappableNoneditable = (editor, node) => {\n      const dom = editor.dom;\n      return isElementNode$1(node) && dom.getContentEditable(node) === 'false' && isWrapNoneditableTarget(editor, node) && dom.select('[contenteditable=\"true\"]', node).length === 0;\n    };\n    const replaceVars = (value, vars) => {\n      if (isFunction(value)) {\n        return value(vars);\n      } else if (isNonNullable(vars)) {\n        value = value.replace(/%(\\w+)/g, (str, name) => {\n          return vars[name] || str;\n        });\n      }\n      return value;\n    };\n    const isEq$5 = (str1, str2) => {\n      str1 = str1 || '';\n      str2 = str2 || '';\n      str1 = '' + (str1.nodeName || str1);\n      str2 = '' + (str2.nodeName || str2);\n      return str1.toLowerCase() === str2.toLowerCase();\n    };\n    const normalizeStyleValue = (value, name) => {\n      if (isNullable(value)) {\n        return null;\n      } else {\n        let strValue = String(value);\n        if (name === 'color' || name === 'backgroundColor') {\n          strValue = rgbaToHexString(strValue);\n        }\n        if (name === 'fontWeight' && value === 700) {\n          strValue = 'bold';\n        }\n        if (name === 'fontFamily') {\n          strValue = strValue.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n        }\n        return strValue;\n      }\n    };\n    const getStyle = (dom, node, name) => {\n      const style = dom.getStyle(node, name);\n      return normalizeStyleValue(style, name);\n    };\n    const getTextDecoration = (dom, node) => {\n      let decoration;\n      dom.getParent(node, n => {\n        if (isElement$6(n)) {\n          decoration = dom.getStyle(n, 'text-decoration');\n          return !!decoration && decoration !== 'none';\n        } else {\n          return false;\n        }\n      });\n      return decoration;\n    };\n    const getParents$2 = (dom, node, selector) => {\n      return dom.getParents(node, selector, dom.getRoot());\n    };\n    const isFormatPredicate = (editor, formatName, predicate) => {\n      const formats = editor.formatter.get(formatName);\n      return isNonNullable(formats) && exists(formats, predicate);\n    };\n    const isVariableFormatName = (editor, formatName) => {\n      const hasVariableValues = format => {\n        const isVariableValue = val => isFunction(val) || val.length > 1 && val.charAt(0) === '%';\n        return exists([\n          'styles',\n          'attributes'\n        ], key => get$a(format, key).exists(field => {\n          const fieldValues = isArray$1(field) ? field : values(field);\n          return exists(fieldValues, isVariableValue);\n        }));\n      };\n      return isFormatPredicate(editor, formatName, hasVariableValues);\n    };\n    const areSimilarFormats = (editor, formatName, otherFormatName) => {\n      const validKeys = [\n        'inline',\n        'block',\n        'selector',\n        'attributes',\n        'styles',\n        'classes'\n      ];\n      const filterObj = format => filter$4(format, (_, key) => exists(validKeys, validKey => validKey === key));\n      return isFormatPredicate(editor, formatName, fmt1 => {\n        const filteredFmt1 = filterObj(fmt1);\n        return isFormatPredicate(editor, otherFormatName, fmt2 => {\n          const filteredFmt2 = filterObj(fmt2);\n          return equal$1(filteredFmt1, filteredFmt2);\n        });\n      });\n    };\n    const isBlockFormat = format => hasNonNullableKey(format, 'block');\n    const isWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper === true;\n    const isNonWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper !== true;\n    const isSelectorFormat = format => hasNonNullableKey(format, 'selector');\n    const isInlineFormat = format => hasNonNullableKey(format, 'inline');\n    const isMixedFormat = format => isSelectorFormat(format) && isInlineFormat(format) && is$2(get$a(format, 'mixed'), true);\n    const shouldExpandToSelector = format => isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n    const getEmptyCaretContainers = node => {\n      const nodes = [];\n      let tempNode = node;\n      while (tempNode) {\n        if (isText$a(tempNode) && tempNode.data !== ZWSP$1 || tempNode.childNodes.length > 1) {\n          return [];\n        }\n        if (isElement$6(tempNode)) {\n          nodes.push(tempNode);\n        }\n        tempNode = tempNode.firstChild;\n      }\n      return nodes;\n    };\n    const isCaretContainerEmpty = node => {\n      return getEmptyCaretContainers(node).length > 0;\n    };\n    const isEmptyCaretFormatElement = element => {\n      return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n    };\n\n    const isBookmarkNode = isBookmarkNode$1;\n    const getParents$1 = getParents$2;\n    const isWhiteSpaceNode = isWhiteSpaceNode$1;\n    const isTextBlock = isTextBlock$1;\n    const isBogusBr = node => {\n      return isBr$6(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n    };\n    const findParentContentEditable = (dom, node) => {\n      let parent = node;\n      while (parent) {\n        if (isElement$6(parent) && dom.getContentEditable(parent)) {\n          return dom.getContentEditable(parent) === 'false' ? parent : node;\n        }\n        parent = parent.parentNode;\n      }\n      return node;\n    };\n    const walkText = (start, node, offset, predicate) => {\n      const str = node.data;\n      if (start) {\n        for (let i = offset; i > 0; i--) {\n          if (predicate(str.charAt(i - 1))) {\n            return i;\n          }\n        }\n      } else {\n        for (let i = offset; i < str.length; i++) {\n          if (predicate(str.charAt(i))) {\n            return i;\n          }\n        }\n      }\n      return -1;\n    };\n    const findSpace = (start, node, offset) => walkText(start, node, offset, c => isNbsp(c) || isWhiteSpace(c));\n    const findContent = (start, node, offset) => walkText(start, node, offset, isContent);\n    const findWordEndPoint = (dom, body, container, offset, start, includeTrailingSpaces) => {\n      let lastTextNode;\n      const rootNode = dom.getParent(container, dom.isBlock) || body;\n      const walk = (container, offset, pred) => {\n        const textSeeker = TextSeeker(dom);\n        const walker = start ? textSeeker.backwards : textSeeker.forwards;\n        return Optional.from(walker(container, offset, (text, textOffset) => {\n          if (isBookmarkNode(text.parentNode)) {\n            return -1;\n          } else {\n            lastTextNode = text;\n            return pred(start, text, textOffset);\n          }\n        }, rootNode));\n      };\n      const spaceResult = walk(container, offset, findSpace);\n      return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n        container: lastTextNode,\n        offset: start ? 0 : lastTextNode.length\n      }) : Optional.none());\n    };\n    const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n      const sibling = container[siblingName];\n      if (isText$a(container) && isEmpty$3(container.data) && sibling) {\n        container = sibling;\n      }\n      const parents = getParents$1(dom, container);\n      for (let i = 0; i < parents.length; i++) {\n        for (let y = 0; y < formatList.length; y++) {\n          const curFormat = formatList[y];\n          if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n            continue;\n          }\n          if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n            return parents[i];\n          }\n        }\n      }\n      return container;\n    };\n    const findBlockEndPoint = (dom, formatList, container, siblingName) => {\n      var _a;\n      let node = container;\n      const root = dom.getRoot();\n      const format = formatList[0];\n      if (isBlockFormat(format)) {\n        node = format.wrapper ? null : dom.getParent(container, format.block, root);\n      }\n      if (!node) {\n        const scopeRoot = (_a = dom.getParent(container, 'LI,TD,TH,SUMMARY')) !== null && _a !== void 0 ? _a : root;\n        node = dom.getParent(isText$a(container) ? container.parentNode : container, node => node !== root && isTextBlock(dom.schema, node), scopeRoot);\n      }\n      if (node && isBlockFormat(format) && format.wrapper) {\n        node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n      }\n      if (!node) {\n        node = container;\n        while (node && node[siblingName] && !dom.isBlock(node[siblingName])) {\n          node = node[siblingName];\n          if (isEq$5(node, 'br')) {\n            break;\n          }\n        }\n      }\n      return node || container;\n    };\n    const isAtBlockBoundary$1 = (dom, root, container, siblingName) => {\n      const parent = container.parentNode;\n      if (isNonNullable(container[siblingName])) {\n        return false;\n      } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n        return true;\n      } else {\n        return isAtBlockBoundary$1(dom, root, parent, siblingName);\n      }\n    };\n    const findParentContainer = (dom, formatList, container, offset, start) => {\n      let parent = container;\n      const siblingName = start ? 'previousSibling' : 'nextSibling';\n      const root = dom.getRoot();\n      if (isText$a(container) && !isWhiteSpaceNode(container)) {\n        if (start ? offset > 0 : offset < container.data.length) {\n          return container;\n        }\n      }\n      while (parent) {\n        if (!formatList[0].block_expand && dom.isBlock(parent)) {\n          return parent;\n        }\n        for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n          const allowSpaces = isText$a(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n          if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n            return parent;\n          }\n        }\n        if (parent === root || parent.parentNode === root) {\n          container = parent;\n          break;\n        }\n        parent = parent.parentNode;\n      }\n      return container;\n    };\n    const isSelfOrParentBookmark = container => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n    const expandRng = (dom, rng, formatList, includeTrailingSpace = false) => {\n      let {startContainer, startOffset, endContainer, endOffset} = rng;\n      const format = formatList[0];\n      if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n        startContainer = getNode$1(startContainer, startOffset);\n        if (isText$a(startContainer)) {\n          startOffset = 0;\n        }\n      }\n      if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n        endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n        if (isText$a(endContainer)) {\n          endOffset = endContainer.data.length;\n        }\n      }\n      startContainer = findParentContentEditable(dom, startContainer);\n      endContainer = findParentContentEditable(dom, endContainer);\n      if (isSelfOrParentBookmark(startContainer)) {\n        startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n        if (rng.collapsed) {\n          startContainer = startContainer.previousSibling || startContainer;\n        } else {\n          startContainer = startContainer.nextSibling || startContainer;\n        }\n        if (isText$a(startContainer)) {\n          startOffset = rng.collapsed ? startContainer.length : 0;\n        }\n      }\n      if (isSelfOrParentBookmark(endContainer)) {\n        endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n        if (rng.collapsed) {\n          endContainer = endContainer.nextSibling || endContainer;\n        } else {\n          endContainer = endContainer.previousSibling || endContainer;\n        }\n        if (isText$a(endContainer)) {\n          endOffset = rng.collapsed ? 0 : endContainer.length;\n        }\n      }\n      if (rng.collapsed) {\n        const startPoint = findWordEndPoint(dom, dom.getRoot(), startContainer, startOffset, true, includeTrailingSpace);\n        startPoint.each(({container, offset}) => {\n          startContainer = container;\n          startOffset = offset;\n        });\n        const endPoint = findWordEndPoint(dom, dom.getRoot(), endContainer, endOffset, false, includeTrailingSpace);\n        endPoint.each(({container, offset}) => {\n          endContainer = container;\n          endOffset = offset;\n        });\n      }\n      if (isInlineFormat(format) || format.block_expand) {\n        if (!isInlineFormat(format) || (!isText$a(startContainer) || startOffset === 0)) {\n          startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n        }\n        if (!isInlineFormat(format) || (!isText$a(endContainer) || endOffset === endContainer.data.length)) {\n          endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n        }\n      }\n      if (shouldExpandToSelector(format)) {\n        startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n        endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n      }\n      if (isBlockFormat(format) || isSelectorFormat(format)) {\n        startContainer = findBlockEndPoint(dom, formatList, startContainer, 'previousSibling');\n        endContainer = findBlockEndPoint(dom, formatList, endContainer, 'nextSibling');\n        if (isBlockFormat(format)) {\n          if (!dom.isBlock(startContainer)) {\n            startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n          }\n          if (!dom.isBlock(endContainer)) {\n            endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n          }\n        }\n      }\n      if (isElement$6(startContainer) && startContainer.parentNode) {\n        startOffset = dom.nodeIndex(startContainer);\n        startContainer = startContainer.parentNode;\n      }\n      if (isElement$6(endContainer) && endContainer.parentNode) {\n        endOffset = dom.nodeIndex(endContainer) + 1;\n        endContainer = endContainer.parentNode;\n      }\n      return {\n        startContainer,\n        startOffset,\n        endContainer,\n        endOffset\n      };\n    };\n\n    const walk$3 = (dom, rng, callback) => {\n      var _a;\n      const startOffset = rng.startOffset;\n      const startContainer = getNode$1(rng.startContainer, startOffset);\n      const endOffset = rng.endOffset;\n      const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n      const exclude = nodes => {\n        const firstNode = nodes[0];\n        if (isText$a(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n          nodes.splice(0, 1);\n        }\n        const lastNode = nodes[nodes.length - 1];\n        if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$a(lastNode)) {\n          nodes.splice(nodes.length - 1, 1);\n        }\n        return nodes;\n      };\n      const collectSiblings = (node, name, endNode) => {\n        const siblings = [];\n        for (; node && node !== endNode; node = node[name]) {\n          siblings.push(node);\n        }\n        return siblings;\n      };\n      const findEndPoint = (node, root) => dom.getParent(node, node => node.parentNode === root, root);\n      const walkBoundary = (startNode, endNode, next) => {\n        const siblingName = next ? 'nextSibling' : 'previousSibling';\n        for (let node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n          parent = node.parentNode;\n          const siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n          if (siblings.length) {\n            if (!next) {\n              siblings.reverse();\n            }\n            callback(exclude(siblings));\n          }\n        }\n      };\n      if (startContainer === endContainer) {\n        return callback(exclude([startContainer]));\n      }\n      const ancestor = (_a = dom.findCommonAncestor(startContainer, endContainer)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      if (dom.isChildOf(startContainer, endContainer)) {\n        return walkBoundary(startContainer, ancestor, true);\n      }\n      if (dom.isChildOf(endContainer, startContainer)) {\n        return walkBoundary(endContainer, ancestor);\n      }\n      const startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n      const endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n      walkBoundary(startContainer, startPoint, true);\n      const siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n      if (siblings.length) {\n        callback(exclude(siblings));\n      }\n      walkBoundary(endContainer, endPoint);\n    };\n\n    const validBlocks = [\n      'pre[class*=language-][contenteditable=\"false\"]',\n      'figure.image',\n      'div[data-ephox-embed-iri]',\n      'div.tiny-pageembed',\n      'div.mce-toc',\n      'div[data-mce-toc]'\n    ];\n    const isZeroWidth = elem => isText$b(elem) && get$3(elem) === ZWSP$1;\n    const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => 'skipping', parent => {\n      if (nodeName === 'br' || isZeroWidth(elem)) {\n        return 'valid';\n      } else if (isAnnotation(elem)) {\n        return 'existing';\n      } else if (isCaretNode(elem.dom)) {\n        return 'caret';\n      } else if (exists(validBlocks, selector => is$1(elem, selector))) {\n        return 'valid-block';\n      } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n        return 'invalid-child';\n      } else {\n        return 'valid';\n      }\n    });\n\n    const applyWordGrab = (editor, rng) => {\n      const r = expandRng(editor.dom, rng, [{ inline: 'span' }]);\n      rng.setStart(r.startContainer, r.startOffset);\n      rng.setEnd(r.endContainer, r.endOffset);\n      editor.selection.setRng(rng);\n    };\n    const applyAnnotation = (elem, masterUId, data, annotationName, decorate, directAnnotation) => {\n      const {uid = masterUId, ...otherData} = data;\n      add$2(elem, annotation());\n      set$3(elem, `${ dataAnnotationId() }`, uid);\n      set$3(elem, `${ dataAnnotation() }`, annotationName);\n      const {attributes = {}, classes = []} = decorate(uid, otherData);\n      setAll$1(elem, attributes);\n      add(elem, classes);\n      if (directAnnotation) {\n        if (classes.length > 0) {\n          set$3(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n        }\n        const attributeNames = keys(attributes);\n        if (attributeNames.length > 0) {\n          set$3(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n        }\n      }\n    };\n    const removeDirectAnnotation = elem => {\n      remove$7(elem, annotation());\n      remove$a(elem, `${ dataAnnotationId() }`);\n      remove$a(elem, `${ dataAnnotation() }`);\n      remove$a(elem, `${ dataAnnotationActive() }`);\n      const customAttrNames = getOpt(elem, `${ dataAnnotationAttributes() }`).map(names => names.split(',')).getOr([]);\n      const customClasses = getOpt(elem, `${ dataAnnotationClasses() }`).map(names => names.split(',')).getOr([]);\n      each$e(customAttrNames, name => remove$a(elem, name));\n      remove$4(elem, customClasses);\n      remove$a(elem, `${ dataAnnotationClasses() }`);\n      remove$a(elem, `${ dataAnnotationAttributes() }`);\n    };\n    const makeAnnotation = (eDoc, uid, data, annotationName, decorate) => {\n      const master = SugarElement.fromTag('span', eDoc);\n      applyAnnotation(master, uid, data, annotationName, decorate, false);\n      return master;\n    };\n    const annotate = (editor, rng, uid, annotationName, decorate, data) => {\n      const newWrappers = [];\n      const master = makeAnnotation(editor.getDoc(), uid, data, annotationName, decorate);\n      const wrapper = value$2();\n      const finishWrapper = () => {\n        wrapper.clear();\n      };\n      const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n        const nu = shallow$1(master);\n        newWrappers.push(nu);\n        wrapper.set(nu);\n        return nu;\n      });\n      const processElements = elems => {\n        each$e(elems, processElement);\n      };\n      const processElement = elem => {\n        const ctx = context(editor, elem, 'span', name(elem));\n        switch (ctx) {\n        case 'invalid-child': {\n            finishWrapper();\n            const children = children$1(elem);\n            processElements(children);\n            finishWrapper();\n            break;\n          }\n        case 'valid-block': {\n            finishWrapper();\n            applyAnnotation(elem, uid, data, annotationName, decorate, true);\n            break;\n          }\n        case 'valid': {\n            const w = getOrOpenWrapper();\n            wrap$2(elem, w);\n            break;\n          }\n        }\n      };\n      const processNodes = nodes => {\n        const elems = map$3(nodes, SugarElement.fromDom);\n        processElements(elems);\n      };\n      walk$3(editor.dom, rng, nodes => {\n        finishWrapper();\n        processNodes(nodes);\n      });\n      return newWrappers;\n    };\n    const annotateWithBookmark = (editor, name, settings, data) => {\n      editor.undoManager.transact(() => {\n        const selection = editor.selection;\n        const initialRng = selection.getRng();\n        const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n        const masterUid = generate$1('mce-annotation');\n        if (initialRng.collapsed && !hasFakeSelection) {\n          applyWordGrab(editor, initialRng);\n        }\n        if (selection.getRng().collapsed && !hasFakeSelection) {\n          const wrapper = makeAnnotation(editor.getDoc(), masterUid, data, name, settings.decorate);\n          set$1(wrapper, nbsp);\n          selection.getRng().insertNode(wrapper.dom);\n          selection.select(wrapper.dom);\n        } else {\n          preserve(selection, false, () => {\n            runOnRanges(editor, selectionRng => {\n              annotate(editor, selectionRng, masterUid, name, settings.decorate, data);\n            });\n          });\n        }\n      });\n    };\n\n    const Annotator = editor => {\n      const registry = create$c();\n      setup$x(editor, registry);\n      const changes = setup$y(editor, registry);\n      const isSpan = isTag('span');\n      const removeAnnotations = elements => {\n        each$e(elements, element => {\n          if (isSpan(element)) {\n            unwrap(element);\n          } else {\n            removeDirectAnnotation(element);\n          }\n        });\n      };\n      return {\n        register: (name, settings) => {\n          registry.register(name, settings);\n        },\n        annotate: (name, data) => {\n          registry.lookup(name).each(settings => {\n            annotateWithBookmark(editor, name, settings, data);\n          });\n        },\n        annotationChanged: (name, callback) => {\n          changes.addListener(name, callback);\n        },\n        remove: name => {\n          identify(editor, Optional.some(name)).each(({elements}) => {\n            const bookmark = editor.selection.getBookmark();\n            removeAnnotations(elements);\n            editor.selection.moveToBookmark(bookmark);\n          });\n        },\n        removeAll: name => {\n          const bookmark = editor.selection.getBookmark();\n          each$d(findAll(editor, name), (elements, _) => {\n            removeAnnotations(elements);\n          });\n          editor.selection.moveToBookmark(bookmark);\n        },\n        getAll: name => {\n          const directory = findAll(editor, name);\n          return map$2(directory, elems => map$3(elems, elem => elem.dom));\n        }\n      };\n    };\n\n    const BookmarkManager = selection => {\n      return {\n        getBookmark: curry(getBookmark$1, selection),\n        moveToBookmark: curry(moveToBookmark, selection)\n      };\n    };\n    BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n    const isXYWithinRange = (clientX, clientY, range) => {\n      if (range.collapsed) {\n        return false;\n      } else {\n        return exists(range.getClientRects(), rect => containsXY(rect, clientX, clientY));\n      }\n    };\n\n    const firePreProcess = (editor, args) => editor.dispatch('PreProcess', args);\n    const firePostProcess = (editor, args) => editor.dispatch('PostProcess', args);\n    const fireRemove = editor => {\n      editor.dispatch('remove');\n    };\n    const fireDetach = editor => {\n      editor.dispatch('detach');\n    };\n    const fireSwitchMode = (editor, mode) => {\n      editor.dispatch('SwitchMode', { mode });\n    };\n    const fireObjectResizeStart = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResizeStart', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const fireObjectResized = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResized', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const firePreInit = editor => {\n      editor.dispatch('PreInit');\n    };\n    const firePostRender = editor => {\n      editor.dispatch('PostRender');\n    };\n    const fireInit = editor => {\n      editor.dispatch('Init');\n    };\n    const firePlaceholderToggle = (editor, state) => {\n      editor.dispatch('PlaceholderToggle', { state });\n    };\n    const fireError = (editor, errorType, error) => {\n      editor.dispatch(errorType, error);\n    };\n    const fireFormatApply = (editor, format, node, vars) => {\n      editor.dispatch('FormatApply', {\n        format,\n        node,\n        vars\n      });\n    };\n    const fireFormatRemove = (editor, format, node, vars) => {\n      editor.dispatch('FormatRemove', {\n        format,\n        node,\n        vars\n      });\n    };\n    const fireBeforeSetContent = (editor, args) => editor.dispatch('BeforeSetContent', args);\n    const fireSetContent = (editor, args) => editor.dispatch('SetContent', args);\n    const fireBeforeGetContent = (editor, args) => editor.dispatch('BeforeGetContent', args);\n    const fireGetContent = (editor, args) => editor.dispatch('GetContent', args);\n    const fireAutocompleterStart = (editor, args) => {\n      editor.dispatch('AutocompleterStart', args);\n    };\n    const fireAutocompleterUpdate = (editor, args) => {\n      editor.dispatch('AutocompleterUpdate', args);\n    };\n    const fireAutocompleterEnd = editor => {\n      editor.dispatch('AutocompleterEnd');\n    };\n    const firePastePreProcess = (editor, html, internal) => editor.dispatch('PastePreProcess', {\n      content: html,\n      internal\n    });\n    const firePastePostProcess = (editor, node, internal) => editor.dispatch('PastePostProcess', {\n      node,\n      internal\n    });\n    const firePastePlainTextToggle = (editor, state) => editor.dispatch('PastePlainTextToggle', { state });\n    const fireEditableRootStateChange = (editor, state) => editor.dispatch('EditableRootStateChange', { state });\n\n    const VK = {\n      BACKSPACE: 8,\n      DELETE: 46,\n      DOWN: 40,\n      ENTER: 13,\n      ESC: 27,\n      LEFT: 37,\n      RIGHT: 39,\n      SPACEBAR: 32,\n      TAB: 9,\n      UP: 38,\n      PAGE_UP: 33,\n      PAGE_DOWN: 34,\n      END: 35,\n      HOME: 36,\n      modifierPressed: e => {\n        return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n      },\n      metaKeyPressed: e => {\n        return Env.os.isMacOS() || Env.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n      }\n    };\n\n    const elementSelectionAttr = 'data-mce-selected';\n    const controlElmSelector = 'table,img,figure.image,hr,video,span.mce-preview-object,details';\n    const abs = Math.abs;\n    const round$1 = Math.round;\n    const resizeHandles = {\n      nw: [\n        0,\n        0,\n        -1,\n        -1\n      ],\n      ne: [\n        1,\n        0,\n        1,\n        -1\n      ],\n      se: [\n        1,\n        1,\n        1,\n        1\n      ],\n      sw: [\n        0,\n        1,\n        -1,\n        1\n      ]\n    };\n    const isTouchEvent = evt => evt.type === 'longpress' || evt.type.indexOf('touch') === 0;\n    const ControlSelection = (selection, editor) => {\n      const dom = editor.dom;\n      const editableDoc = editor.getDoc();\n      const rootDocument = document;\n      const rootElement = editor.getBody();\n      let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n      let startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n      let width;\n      let height;\n      let startScrollWidth;\n      let startScrollHeight;\n      const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n      const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n      const isEventOnImageOutsideRange = (evt, range) => {\n        if (isTouchEvent(evt)) {\n          const touch = evt.touches[0];\n          return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n        } else {\n          return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n        }\n      };\n      const contextMenuSelectImage = evt => {\n        const target = evt.target;\n        if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n          editor.selection.select(target);\n        }\n      };\n      const getResizeTargets = elm => {\n        if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n          return [\n            elm,\n            elm.firstElementChild\n          ];\n        } else if (dom.is(elm, 'figure.image')) {\n          return [elm.querySelector('img')];\n        } else {\n          return [elm];\n        }\n      };\n      const isResizable = elm => {\n        const selector = getObjectResizing(editor);\n        if (!selector) {\n          return false;\n        }\n        if (elm.getAttribute('data-mce-resize') === 'false') {\n          return false;\n        }\n        if (elm === editor.getBody()) {\n          return false;\n        }\n        if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n          return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n        } else {\n          return is$1(SugarElement.fromDom(elm), selector);\n        }\n      };\n      const createGhostElement = elm => {\n        if (isMedia(elm)) {\n          return dom.create('img', { src: Env.transparentSrc });\n        } else {\n          return elm.cloneNode(true);\n        }\n      };\n      const setSizeProp = (element, name, value) => {\n        if (isNonNullable(value)) {\n          const targets = getResizeTargets(element);\n          each$e(targets, target => {\n            if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n              dom.setStyle(target, name, value);\n            } else {\n              dom.setAttrib(target, name, '' + value);\n            }\n          });\n        }\n      };\n      const setGhostElmSize = (ghostElm, width, height) => {\n        setSizeProp(ghostElm, 'width', width);\n        setSizeProp(ghostElm, 'height', height);\n      };\n      const resizeGhostElement = e => {\n        let deltaX, deltaY, proportional;\n        let resizeHelperX, resizeHelperY;\n        deltaX = e.screenX - startX;\n        deltaY = e.screenY - startY;\n        width = deltaX * selectedHandle[2] + startW;\n        height = deltaY * selectedHandle[3] + startH;\n        width = width < 5 ? 5 : width;\n        height = height < 5 ? 5 : height;\n        if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n          proportional = !VK.modifierPressed(e);\n        } else {\n          proportional = VK.modifierPressed(e);\n        }\n        if (proportional) {\n          if (abs(deltaX) > abs(deltaY)) {\n            height = round$1(width * ratio);\n            width = round$1(height / ratio);\n          } else {\n            width = round$1(height / ratio);\n            height = round$1(width * ratio);\n          }\n        }\n        setGhostElmSize(selectedElmGhost, width, height);\n        resizeHelperX = selectedHandle.startPos.x + deltaX;\n        resizeHelperY = selectedHandle.startPos.y + deltaY;\n        resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n        resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n        dom.setStyles(resizeHelper, {\n          left: resizeHelperX,\n          top: resizeHelperY,\n          display: 'block'\n        });\n        resizeHelper.innerHTML = width + ' &times; ' + height;\n        if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n          dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n        }\n        if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n          dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n        }\n        deltaX = rootElement.scrollWidth - startScrollWidth;\n        deltaY = rootElement.scrollHeight - startScrollHeight;\n        if (deltaX + deltaY !== 0) {\n          dom.setStyles(resizeHelper, {\n            left: resizeHelperX - deltaX,\n            top: resizeHelperY - deltaY\n          });\n        }\n        if (!resizeStarted) {\n          fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n          resizeStarted = true;\n        }\n      };\n      const endGhostResize = () => {\n        const wasResizeStarted = resizeStarted;\n        resizeStarted = false;\n        if (wasResizeStarted) {\n          setSizeProp(selectedElm, 'width', width);\n          setSizeProp(selectedElm, 'height', height);\n        }\n        dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n        dom.unbind(editableDoc, 'mouseup', endGhostResize);\n        if (rootDocument !== editableDoc) {\n          dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n          dom.unbind(rootDocument, 'mouseup', endGhostResize);\n        }\n        dom.remove(selectedElmGhost);\n        dom.remove(resizeHelper);\n        dom.remove(resizeBackdrop);\n        showResizeRect(selectedElm);\n        if (wasResizeStarted) {\n          fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n          dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n        }\n        editor.nodeChanged();\n      };\n      const showResizeRect = targetElm => {\n        unbindResizeHandleEvents();\n        const position = dom.getPos(targetElm, rootElement);\n        const selectedElmX = position.x;\n        const selectedElmY = position.y;\n        const rect = targetElm.getBoundingClientRect();\n        const targetWidth = rect.width || rect.right - rect.left;\n        const targetHeight = rect.height || rect.bottom - rect.top;\n        if (selectedElm !== targetElm) {\n          hideResizeRect();\n          selectedElm = targetElm;\n          width = height = 0;\n        }\n        const e = editor.dispatch('ObjectSelected', { target: targetElm });\n        if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n          each$d(resizeHandles, (handle, name) => {\n            const startDrag = e => {\n              const target = getResizeTargets(selectedElm)[0];\n              startX = e.screenX;\n              startY = e.screenY;\n              startW = target.clientWidth;\n              startH = target.clientHeight;\n              ratio = startH / startW;\n              selectedHandle = handle;\n              selectedHandle.name = name;\n              selectedHandle.startPos = {\n                x: targetWidth * handle[0] + selectedElmX,\n                y: targetHeight * handle[1] + selectedElmY\n              };\n              startScrollWidth = rootElement.scrollWidth;\n              startScrollHeight = rootElement.scrollHeight;\n              resizeBackdrop = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-backdrop',\n                'data-mce-bogus': 'all'\n              });\n              dom.setStyles(resizeBackdrop, {\n                position: 'fixed',\n                left: '0',\n                top: '0',\n                width: '100%',\n                height: '100%'\n              });\n              selectedElmGhost = createGhostElement(selectedElm);\n              dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n              dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n              selectedElmGhost.contentEditable = 'false';\n              dom.setStyles(selectedElmGhost, {\n                left: selectedElmX,\n                top: selectedElmY,\n                margin: 0\n              });\n              setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n              selectedElmGhost.removeAttribute(elementSelectionAttr);\n              rootElement.appendChild(selectedElmGhost);\n              dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n              dom.bind(editableDoc, 'mouseup', endGhostResize);\n              if (rootDocument !== editableDoc) {\n                dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n                dom.bind(rootDocument, 'mouseup', endGhostResize);\n              }\n              resizeHelper = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-helper',\n                'data-mce-bogus': 'all'\n              }, startW + ' &times; ' + startH);\n            };\n            let handleElm = dom.get('mceResizeHandle' + name);\n            if (handleElm) {\n              dom.remove(handleElm);\n            }\n            handleElm = dom.add(rootElement, 'div', {\n              'id': 'mceResizeHandle' + name,\n              'data-mce-bogus': 'all',\n              'class': 'mce-resizehandle',\n              'unselectable': true,\n              'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n            });\n            dom.bind(handleElm, 'mousedown', e => {\n              e.stopImmediatePropagation();\n              e.preventDefault();\n              startDrag(e);\n            });\n            handle.elm = handleElm;\n            dom.setStyles(handleElm, {\n              left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n              top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n            });\n          });\n        } else {\n          hideResizeRect(false);\n        }\n      };\n      const throttledShowResizeRect = first$1(showResizeRect, 0);\n      const hideResizeRect = (removeSelected = true) => {\n        throttledShowResizeRect.cancel();\n        unbindResizeHandleEvents();\n        if (selectedElm && removeSelected) {\n          selectedElm.removeAttribute(elementSelectionAttr);\n        }\n        each$d(resizeHandles, (value, name) => {\n          const handleElm = dom.get('mceResizeHandle' + name);\n          if (handleElm) {\n            dom.unbind(handleElm);\n            dom.remove(handleElm);\n          }\n        });\n      };\n      const isChildOrEqual = (node, parent) => dom.isChildOf(node, parent);\n      const updateResizeRect = e => {\n        if (resizeStarted || editor.removed || editor.composing) {\n          return;\n        }\n        const targetElm = e.type === 'mousedown' ? e.target : selection.getNode();\n        const controlElm = closest$3(SugarElement.fromDom(targetElm), controlElmSelector).map(e => e.dom).filter(e => dom.isEditable(e.parentElement) || e.nodeName === 'IMG' && dom.isEditable(e)).getOrUndefined();\n        const selectedValue = isNonNullable(controlElm) ? dom.getAttrib(controlElm, elementSelectionAttr, '1') : '1';\n        each$e(dom.select(`img[${ elementSelectionAttr }],hr[${ elementSelectionAttr }]`), img => {\n          img.removeAttribute(elementSelectionAttr);\n        });\n        if (isNonNullable(controlElm) && isChildOrEqual(controlElm, rootElement) && editor.hasFocus()) {\n          disableGeckoResize();\n          const startElm = selection.getStart(true);\n          if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n            dom.setAttrib(controlElm, elementSelectionAttr, selectedValue);\n            throttledShowResizeRect.throttle(controlElm);\n            return;\n          }\n        }\n        hideResizeRect();\n      };\n      const unbindResizeHandleEvents = () => {\n        each$d(resizeHandles, handle => {\n          if (handle.elm) {\n            dom.unbind(handle.elm);\n            delete handle.elm;\n          }\n        });\n      };\n      const disableGeckoResize = () => {\n        try {\n          editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n        } catch (ex) {\n        }\n      };\n      editor.on('init', () => {\n        disableGeckoResize();\n        editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n        editor.on('keyup compositionend', e => {\n          if (selectedElm && selectedElm.nodeName === 'TABLE') {\n            updateResizeRect(e);\n          }\n        });\n        editor.on('hide blur', hideResizeRect);\n        editor.on('contextmenu longpress', contextMenuSelectImage, true);\n      });\n      editor.on('remove', unbindResizeHandleEvents);\n      const destroy = () => {\n        throttledShowResizeRect.cancel();\n        selectedElm = selectedElmGhost = resizeBackdrop = null;\n      };\n      return {\n        isResizable,\n        showResizeRect,\n        hideResizeRect,\n        updateResizeRect,\n        destroy\n      };\n    };\n\n    const setStart = (rng, situ) => {\n      situ.fold(e => {\n        rng.setStartBefore(e.dom);\n      }, (e, o) => {\n        rng.setStart(e.dom, o);\n      }, e => {\n        rng.setStartAfter(e.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold(e => {\n        rng.setEndBefore(e.dom);\n      }, (e, o) => {\n        rng.setEnd(e.dom, o);\n      }, e => {\n        rng.setEndAfter(e.dom);\n      });\n    };\n    const relativeToNative = (win, startSitu, finishSitu) => {\n      const range = win.document.createRange();\n      setStart(range, startSitu);\n      setFinish(range, finishSitu);\n      return range;\n    };\n    const exactToNative = (win, start, soffset, finish, foffset) => {\n      const rng = win.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n\n    const adt$3 = Adt.generate([\n      {\n        ltr: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      },\n      {\n        rtl: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n    const getRanges = (win, selection) => selection.match({\n      domRange: rng => {\n        return {\n          ltr: constant(rng),\n          rtl: Optional.none\n        };\n      },\n      relative: (startSitu, finishSitu) => {\n        return {\n          ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n          rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n        };\n      },\n      exact: (start, soffset, finish, foffset) => {\n        return {\n          ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n          rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n        };\n      }\n    });\n    const doDiagnose = (win, ranges) => {\n      const rng = ranges.ltr();\n      if (rng.collapsed) {\n        const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n        return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n      } else {\n        return fromRange(win, adt$3.ltr, rng);\n      }\n    };\n    const diagnose = (win, selection) => {\n      const ranges = getRanges(win, selection);\n      return doDiagnose(win, ranges);\n    };\n    adt$3.ltr;\n    adt$3.rtl;\n\n    const create$a = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$a };\n\n    const caretPositionFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n        if (pos.offsetNode === null) {\n          return Optional.none();\n        }\n        const r = doc.dom.createRange();\n        r.setStart(pos.offsetNode, pos.offset);\n        r.collapse();\n        return Optional.some(r);\n      });\n    };\n    const caretRangeFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n    };\n    const availableSearch = (() => {\n      if (document.caretPositionFromPoint) {\n        return caretPositionFromPoint;\n      } else if (document.caretRangeFromPoint) {\n        return caretRangeFromPoint;\n      } else {\n        return Optional.none;\n      }\n    })();\n    const fromPoint$1 = (win, x, y) => {\n      const doc = SugarElement.fromDom(win.document);\n      return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n    };\n\n    const adt$2 = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n    const getStart$2 = situ => situ.fold(identity, identity, identity);\n    const before$1 = adt$2.before;\n    const on = adt$2.on;\n    const after$1 = adt$2.after;\n    const Situ = {\n      before: before$1,\n      on,\n      after: after$1,\n      cata,\n      getStart: getStart$2\n    };\n\n    const adt$1 = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const exactFromRange = simRange => adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    const getStart$1 = selection => selection.match({\n      domRange: rng => SugarElement.fromDom(rng.startContainer),\n      relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n      exact: (start, _soffset, _finish, _foffset) => start\n    });\n    const domRange = adt$1.domRange;\n    const relative = adt$1.relative;\n    const exact = adt$1.exact;\n    const getWin = selection => {\n      const start = getStart$1(selection);\n      return defaultView(start);\n    };\n    const range = SimRange.create;\n    const SimSelection = {\n      domRange,\n      relative,\n      exact,\n      exactFromRange,\n      getWin,\n      range\n    };\n\n    const beforeSpecial = (element, offset) => {\n      const name$1 = name(element);\n      if ('input' === name$1) {\n        return Situ.after(element);\n      } else if (!contains$2([\n          'br',\n          'img'\n        ], name$1)) {\n        return Situ.on(element, offset);\n      } else {\n        return offset === 0 ? Situ.before(element) : Situ.after(element);\n      }\n    };\n    const preprocessRelative = (startSitu, finishSitu) => {\n      const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      return SimSelection.relative(start, finish);\n    };\n    const preprocessExact = (start, soffset, finish, foffset) => {\n      const startSitu = beforeSpecial(start, soffset);\n      const finishSitu = beforeSpecial(finish, foffset);\n      return SimSelection.relative(startSitu, finishSitu);\n    };\n    const preprocess = selection => selection.match({\n      domRange: rng => {\n        const start = SugarElement.fromDom(rng.startContainer);\n        const finish = SugarElement.fromDom(rng.endContainer);\n        return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n      },\n      relative: preprocessRelative,\n      exact: preprocessExact\n    });\n\n    const fromElements = (elements, scope) => {\n      const doc = scope || document;\n      const fragment = doc.createDocumentFragment();\n      each$e(elements, element => {\n        fragment.appendChild(element.dom);\n      });\n      return SugarElement.fromDom(fragment);\n    };\n\n    const toNative = selection => {\n      const win = SimSelection.getWin(selection).dom;\n      const getDomRange = (start, soffset, finish, foffset) => exactToNative(win, start, soffset, finish, foffset);\n      const filtered = preprocess(selection);\n      return diagnose(win, filtered).match({\n        ltr: getDomRange,\n        rtl: getDomRange\n      });\n    };\n    const getAtPoint = (win, x, y) => fromPoint$1(win, x, y);\n\n    const fromPoint = (clientX, clientY, doc) => {\n      const win = defaultView(SugarElement.fromDom(doc));\n      return getAtPoint(win.dom, clientX, clientY).map(simRange => {\n        const rng = doc.createRange();\n        rng.setStart(simRange.start.dom, simRange.soffset);\n        rng.setEnd(simRange.finish.dom, simRange.foffset);\n        return rng;\n      }).getOrUndefined();\n    };\n\n    const isEq$4 = (rng1, rng2) => {\n      return isNonNullable(rng1) && isNonNullable(rng2) && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n    };\n\n    const findParent = (node, rootNode, predicate) => {\n      let currentNode = node;\n      while (currentNode && currentNode !== rootNode) {\n        if (predicate(currentNode)) {\n          return currentNode;\n        }\n        currentNode = currentNode.parentNode;\n      }\n      return null;\n    };\n    const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n    const hasParentWithName = (node, rootNode, name) => hasParent$1(node, rootNode, node => node.nodeName === name);\n    const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && !hasParent$1(node, rootNode, isCaretNode);\n    const hasBrBeforeAfter = (dom, node, left) => {\n      const parentNode = node.parentNode;\n      if (parentNode) {\n        const walker = new DomTreeWalker(node, dom.getParent(parentNode, dom.isBlock) || dom.getRoot());\n        let currentNode;\n        while (currentNode = walker[left ? 'prev' : 'next']()) {\n          if (isBr$6(currentNode)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const isPrevNode = (node, name) => {\n      var _a;\n      return ((_a = node.previousSibling) === null || _a === void 0 ? void 0 : _a.nodeName) === name;\n    };\n    const hasContentEditableFalseParent = (root, node) => {\n      let currentNode = node;\n      while (currentNode && currentNode !== root) {\n        if (isContentEditableFalse$b(currentNode)) {\n          return true;\n        }\n        currentNode = currentNode.parentNode;\n      }\n      return false;\n    };\n    const findTextNodeRelative = (dom, isAfterNode, collapsed, left, startNode) => {\n      const body = dom.getRoot();\n      const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      const parentNode = startNode.parentNode;\n      let lastInlineElement;\n      let node;\n      if (!parentNode) {\n        return Optional.none();\n      }\n      const parentBlockContainer = dom.getParent(parentNode, dom.isBlock) || body;\n      if (left && isBr$6(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n        return Optional.some(CaretPosition(parentNode, dom.nodeIndex(startNode)));\n      }\n      const walker = new DomTreeWalker(startNode, parentBlockContainer);\n      while (node = walker[left ? 'prev' : 'next']()) {\n        if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n          return Optional.none();\n        }\n        if (isText$a(node) && node.data.length > 0) {\n          if (!hasParentWithName(node, body, 'A')) {\n            return Optional.some(CaretPosition(node, left ? node.data.length : 0));\n          }\n          return Optional.none();\n        }\n        if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n          return Optional.none();\n        }\n        lastInlineElement = node;\n      }\n      if (isComment(lastInlineElement)) {\n        return Optional.none();\n      }\n      if (collapsed && lastInlineElement) {\n        return Optional.some(CaretPosition(lastInlineElement, 0));\n      }\n      return Optional.none();\n    };\n    const normalizeEndPoint = (dom, collapsed, start, rng) => {\n      const body = dom.getRoot();\n      let node;\n      let normalized = false;\n      let container = start ? rng.startContainer : rng.endContainer;\n      let offset = start ? rng.startOffset : rng.endOffset;\n      const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n      const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      let directionLeft = start;\n      if (isCaretContainer$2(container)) {\n        return Optional.none();\n      }\n      if (isElement$6(container) && offset > container.childNodes.length - 1) {\n        directionLeft = false;\n      }\n      if (isDocument$1(container)) {\n        container = body;\n        offset = 0;\n      }\n      if (container === body) {\n        if (directionLeft) {\n          node = container.childNodes[offset > 0 ? offset - 1 : 0];\n          if (node) {\n            if (isCaretContainer$2(node)) {\n              return Optional.none();\n            }\n            if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n              return Optional.none();\n            }\n          }\n        }\n        if (container.hasChildNodes()) {\n          offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n          container = container.childNodes[offset];\n          offset = isText$a(container) && isAfterNode ? container.data.length : 0;\n          if (!collapsed && container === body.lastChild && isTable$2(container)) {\n            return Optional.none();\n          }\n          if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n            return Optional.none();\n          }\n          if (isDetails(container)) {\n            return Optional.none();\n          }\n          if (container.hasChildNodes() && !isTable$2(container)) {\n            node = container;\n            const walker = new DomTreeWalker(container, body);\n            do {\n              if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n                normalized = false;\n                break;\n              }\n              if (isText$a(node) && node.data.length > 0) {\n                offset = directionLeft ? 0 : node.data.length;\n                container = node;\n                normalized = true;\n                break;\n              }\n              if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCellOrCaption(node)) {\n                offset = dom.nodeIndex(node);\n                container = node.parentNode;\n                if (!directionLeft) {\n                  offset++;\n                }\n                normalized = true;\n                break;\n              }\n            } while (node = directionLeft ? walker.next() : walker.prev());\n          }\n        }\n      }\n      if (collapsed) {\n        if (isText$a(container) && offset === 0) {\n          findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(pos => {\n            container = pos.container();\n            offset = pos.offset();\n            normalized = true;\n          });\n        }\n        if (isElement$6(container)) {\n          node = container.childNodes[offset];\n          if (!node) {\n            node = container.childNodes[offset - 1];\n          }\n          if (node && isBr$6(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n            findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(pos => {\n              container = pos.container();\n              offset = pos.offset();\n              normalized = true;\n            });\n          }\n        }\n      }\n      if (directionLeft && !collapsed && isText$a(container) && offset === container.data.length) {\n        findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(pos => {\n          container = pos.container();\n          offset = pos.offset();\n          normalized = true;\n        });\n      }\n      return normalized && container ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n    };\n    const normalize$2 = (dom, rng) => {\n      const collapsed = rng.collapsed, normRng = rng.cloneRange();\n      const startPos = CaretPosition.fromRangeStart(rng);\n      normalizeEndPoint(dom, collapsed, true, normRng).each(pos => {\n        if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n          normRng.setStart(pos.container(), pos.offset());\n        }\n      });\n      if (!collapsed) {\n        normalizeEndPoint(dom, collapsed, false, normRng).each(pos => {\n          normRng.setEnd(pos.container(), pos.offset());\n        });\n      }\n      if (collapsed) {\n        normRng.collapse(true);\n      }\n      return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n    };\n\n    const splitText = (node, offset) => {\n      return node.splitText(offset);\n    };\n    const split = rng => {\n      let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n      if (startContainer === endContainer && isText$a(startContainer)) {\n        if (startOffset > 0 && startOffset < startContainer.data.length) {\n          endContainer = splitText(startContainer, startOffset);\n          startContainer = endContainer.previousSibling;\n          if (endOffset > startOffset) {\n            endOffset = endOffset - startOffset;\n            const newContainer = splitText(endContainer, endOffset).previousSibling;\n            startContainer = endContainer = newContainer;\n            endOffset = newContainer.data.length;\n            startOffset = 0;\n          } else {\n            endOffset = 0;\n          }\n        }\n      } else {\n        if (isText$a(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n          startContainer = splitText(startContainer, startOffset);\n          startOffset = 0;\n        }\n        if (isText$a(endContainer) && endOffset > 0 && endOffset < endContainer.data.length) {\n          const newContainer = splitText(endContainer, endOffset).previousSibling;\n          endContainer = newContainer;\n          endOffset = newContainer.data.length;\n        }\n      }\n      return {\n        startContainer,\n        startOffset,\n        endContainer,\n        endOffset\n      };\n    };\n\n    const RangeUtils = dom => {\n      const walk = (rng, callback) => {\n        return walk$3(dom, rng, callback);\n      };\n      const split$1 = split;\n      const normalize = rng => {\n        return normalize$2(dom, rng).fold(never, normalizedRng => {\n          rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n          rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n          return true;\n        });\n      };\n      const expand = (rng, options = { type: 'word' }) => {\n        if (options.type === 'word') {\n          const rangeLike = expandRng(dom, rng, [{ inline: 'span' }]);\n          const newRange = dom.createRng();\n          newRange.setStart(rangeLike.startContainer, rangeLike.startOffset);\n          newRange.setEnd(rangeLike.endContainer, rangeLike.endOffset);\n          return newRange;\n        }\n        return rng;\n      };\n      return {\n        walk,\n        split: split$1,\n        expand,\n        normalize\n      };\n    };\n    RangeUtils.compareRanges = isEq$4;\n    RangeUtils.getCaretRangeFromPoint = fromPoint;\n    RangeUtils.getSelectedNode = getSelectedNode;\n    RangeUtils.getNode = getNode$1;\n\n    const Dimension = (name, getOffset) => {\n      const set = (element, h) => {\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n        }\n        const dom = element.dom;\n        if (isSupported(dom)) {\n          dom.style[name] = h + 'px';\n        }\n      };\n      const get = element => {\n        const r = getOffset(element);\n        if (r <= 0 || r === null) {\n          const css = get$7(element, name);\n          return parseFloat(css) || 0;\n        }\n        return r;\n      };\n      const getOuter = get;\n      const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n        const val = get$7(element, property);\n        const value = val === undefined ? 0 : parseInt(val, 10);\n        return isNaN(value) ? acc : acc + value;\n      }, 0);\n      const max = (element, value, properties) => {\n        const cumulativeInclusions = aggregate(element, properties);\n        const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set,\n        get,\n        getOuter,\n        aggregate,\n        max\n      };\n    };\n\n    const api = Dimension('height', element => {\n      const dom = element.dom;\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n    });\n    const get$2 = element => api.get(element);\n\n    const getDocument = () => SugarElement.fromDom(document);\n\n    const walkUp = (navigation, doc) => {\n      const frame = navigation.view(doc);\n      return frame.fold(constant([]), f => {\n        const parent = navigation.owner(f);\n        const rest = walkUp(navigation, parent);\n        return [f].concat(rest);\n      });\n    };\n    const pathTo = (element, navigation) => {\n      const d = navigation.owner(element);\n      return walkUp(navigation, d);\n    };\n\n    const view = doc => {\n      var _a;\n      const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n      return element.map(SugarElement.fromDom);\n    };\n    const owner = element => documentOrOwner(element);\n\n    var Navigation = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        view: view,\n        owner: owner\n    });\n\n    const find = element => {\n      const doc = getDocument();\n      const scroll = get$5(doc);\n      const frames = pathTo(element, Navigation);\n      const offset = viewport(element);\n      const r = foldr(frames, (b, a) => {\n        const loc = viewport(a);\n        return {\n          left: b.left + loc.left,\n          top: b.top + loc.top\n        };\n      }, {\n        left: 0,\n        top: 0\n      });\n      return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n    };\n\n    const excludeFromDescend = element => name(element) === 'textarea';\n    const fireScrollIntoViewEvent = (editor, data) => {\n      const scrollEvent = editor.dispatch('ScrollIntoView', data);\n      return scrollEvent.isDefaultPrevented();\n    };\n    const fireAfterScrollIntoViewEvent = (editor, data) => {\n      editor.dispatch('AfterScrollIntoView', data);\n    };\n    const descend = (element, offset) => {\n      const children = children$1(element);\n      if (children.length === 0 || excludeFromDescend(element)) {\n        return {\n          element,\n          offset\n        };\n      } else if (offset < children.length && !excludeFromDescend(children[offset])) {\n        return {\n          element: children[offset],\n          offset: 0\n        };\n      } else {\n        const last = children[children.length - 1];\n        if (excludeFromDescend(last)) {\n          return {\n            element,\n            offset\n          };\n        } else {\n          if (name(last) === 'img') {\n            return {\n              element: last,\n              offset: 1\n            };\n          } else if (isText$b(last)) {\n            return {\n              element: last,\n              offset: get$3(last).length\n            };\n          } else {\n            return {\n              element: last,\n              offset: children$1(last).length\n            };\n          }\n        }\n      }\n    };\n    const markerInfo = (element, cleanupFun) => {\n      const pos = absolute(element);\n      const height = get$2(element);\n      return {\n        element,\n        bottom: pos.top + height,\n        height,\n        pos,\n        cleanup: cleanupFun\n      };\n    };\n    const createMarker$1 = (element, offset) => {\n      const startPoint = descend(element, offset);\n      const span = SugarElement.fromHtml('<span data-mce-bogus=\"all\" style=\"display: inline-block;\">' + ZWSP$1 + '</span>');\n      before$3(startPoint.element, span);\n      return markerInfo(span, () => remove$5(span));\n    };\n    const elementMarker = element => markerInfo(SugarElement.fromDom(element), noop);\n    const withMarker = (editor, f, rng, alignToTop) => {\n      preserveWith(editor, (_s, _e) => applyWithMarker(editor, f, rng, alignToTop), rng);\n    };\n    const withScrollEvents = (editor, doc, f, marker, alignToTop) => {\n      const data = {\n        elm: marker.element.dom,\n        alignToTop\n      };\n      if (fireScrollIntoViewEvent(editor, data)) {\n        return;\n      }\n      const scrollTop = get$5(doc).top;\n      f(editor, doc, scrollTop, marker, alignToTop);\n      fireAfterScrollIntoViewEvent(editor, data);\n    };\n    const applyWithMarker = (editor, f, rng, alignToTop) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const doc = SugarElement.fromDom(editor.getDoc());\n      reflow(body);\n      const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n      withScrollEvents(editor, doc, f, marker, alignToTop);\n      marker.cleanup();\n    };\n    const withElement = (editor, element, f, alignToTop) => {\n      const doc = SugarElement.fromDom(editor.getDoc());\n      withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n    };\n    const preserveWith = (editor, f, rng) => {\n      const startElement = rng.startContainer;\n      const startOffset = rng.startOffset;\n      const endElement = rng.endContainer;\n      const endOffset = rng.endOffset;\n      f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n      const newRng = editor.dom.createRng();\n      newRng.setStart(startElement, startOffset);\n      newRng.setEnd(endElement, endOffset);\n      editor.selection.setRng(rng);\n    };\n    const scrollToMarker = (editor, marker, viewHeight, alignToTop, doc) => {\n      const pos = marker.pos;\n      if (alignToTop) {\n        to(pos.left, pos.top, doc);\n      } else {\n        const y = pos.top - viewHeight + marker.height;\n        to(-editor.getBody().getBoundingClientRect().left, y, doc);\n      }\n    };\n    const intoWindowIfNeeded = (editor, doc, scrollTop, viewHeight, marker, alignToTop) => {\n      const viewportBottom = viewHeight + scrollTop;\n      const markerTop = marker.pos.top;\n      const markerBottom = marker.bottom;\n      const largerThanViewport = markerBottom - markerTop >= viewHeight;\n      if (markerTop < scrollTop) {\n        scrollToMarker(editor, marker, viewHeight, alignToTop !== false, doc);\n      } else if (markerTop > viewportBottom) {\n        const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n        scrollToMarker(editor, marker, viewHeight, align, doc);\n      } else if (markerBottom > viewportBottom && !largerThanViewport) {\n        scrollToMarker(editor, marker, viewHeight, alignToTop === true, doc);\n      }\n    };\n    const intoWindow = (editor, doc, scrollTop, marker, alignToTop) => {\n      const viewHeight = defaultView(doc).dom.innerHeight;\n      intoWindowIfNeeded(editor, doc, scrollTop, viewHeight, marker, alignToTop);\n    };\n    const intoFrame = (editor, doc, scrollTop, marker, alignToTop) => {\n      const frameViewHeight = defaultView(doc).dom.innerHeight;\n      intoWindowIfNeeded(editor, doc, scrollTop, frameViewHeight, marker, alignToTop);\n      const op = find(marker.element);\n      const viewportBounds = getBounds(window);\n      if (op.top < viewportBounds.y) {\n        intoView(marker.element, alignToTop !== false);\n      } else if (op.top > viewportBounds.bottom) {\n        intoView(marker.element, alignToTop === true);\n      }\n    };\n    const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n    const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n    const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n    const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n    const scrollElementIntoView = (editor, element, alignToTop) => {\n      const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n      scroller(editor, element, alignToTop);\n    };\n    const scrollRangeIntoView = (editor, rng, alignToTop) => {\n      const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n      scroller(editor, rng, alignToTop);\n    };\n\n    const focus$1 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\n    const hasFocus$1 = element => {\n      const root = getRootNode(element).dom;\n      return element.dom === root.activeElement;\n    };\n    const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n    const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n    const clamp$1 = (offset, element) => {\n      const max = isText$b(element) ? get$3(element).length : children$1(element).length + 1;\n      if (offset > max) {\n        return max;\n      } else if (offset < 0) {\n        return 0;\n      }\n      return offset;\n    };\n    const normalizeRng = rng => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n    const isOrContains = (root, elm) => !isRestrictedNode(elm.dom) && (contains(root, elm) || eq(root, elm));\n    const isRngInRoot = root => rng => isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n    const shouldStore = editor => editor.inline || Env.browser.isFirefox();\n    const nativeRangeToSelectionRange = r => SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n    const readRange = win => {\n      const selection = win.getSelection();\n      const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n      return rng.map(nativeRangeToSelectionRange);\n    };\n    const getBookmark = root => {\n      const win = defaultView(root);\n      return readRange(win.dom).filter(isRngInRoot(root));\n    };\n    const validate = (root, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n    const bookmarkToNativeRng = bookmark => {\n      const rng = document.createRange();\n      try {\n        rng.setStart(bookmark.start.dom, bookmark.soffset);\n        rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n        return Optional.some(rng);\n      } catch (_) {\n        return Optional.none();\n      }\n    };\n    const store = editor => {\n      const newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n    };\n    const getRng = editor => {\n      const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n      return bookmark.bind(x => validate(SugarElement.fromDom(editor.getBody()), x)).bind(bookmarkToNativeRng);\n    };\n    const restore = editor => {\n      getRng(editor).each(rng => editor.selection.setRng(rng));\n    };\n\n    const isEditorUIElement$1 = elm => {\n      const className = elm.className.toString();\n      return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n    };\n    const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n    const wrappedSetTimeout = (callback, time) => {\n      if (!isNumber(time)) {\n        time = 0;\n      }\n      return setTimeout(callback, time);\n    };\n    const wrappedSetInterval = (callback, time) => {\n      if (!isNumber(time)) {\n        time = 0;\n      }\n      return setInterval(callback, time);\n    };\n    const Delay = {\n      setEditorTimeout: (editor, callback, time) => {\n        return wrappedSetTimeout(() => {\n          if (!editor.removed) {\n            callback();\n          }\n        }, time);\n      },\n      setEditorInterval: (editor, callback, time) => {\n        const timer = wrappedSetInterval(() => {\n          if (!editor.removed) {\n            callback();\n          } else {\n            clearInterval(timer);\n          }\n        }, time);\n        return timer;\n      }\n    };\n\n    const isManualNodeChange = e => {\n      return e.type === 'nodechange' && e.selectionChange;\n    };\n    const registerPageMouseUp = (editor, throttledStore) => {\n      const mouseUpPage = () => {\n        throttledStore.throttle();\n      };\n      DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n      editor.on('remove', () => {\n        DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n      });\n    };\n    const registerMouseUp = (editor, throttledStore) => {\n      editor.on('mouseup touchend', _e => {\n        throttledStore.throttle();\n      });\n    };\n    const registerEditorEvents = (editor, throttledStore) => {\n      registerMouseUp(editor, throttledStore);\n      editor.on('keyup NodeChange AfterSetSelectionRange', e => {\n        if (!isManualNodeChange(e)) {\n          store(editor);\n        }\n      });\n    };\n    const register$6 = editor => {\n      const throttledStore = first$1(() => {\n        store(editor);\n      }, 0);\n      editor.on('init', () => {\n        if (editor.inline) {\n          registerPageMouseUp(editor, throttledStore);\n        }\n        registerEditorEvents(editor, throttledStore);\n      });\n      editor.on('remove', () => {\n        throttledStore.cancel();\n      });\n    };\n\n    let documentFocusInHandler;\n    const DOM$9 = DOMUtils.DOM;\n    const isEditorUIElement = elm => {\n      return isElement$6(elm) && FocusManager.isEditorUIElement(elm);\n    };\n    const isEditorContentAreaElement = elm => {\n      const classList = elm.classList;\n      if (classList !== undefined) {\n        return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n      } else {\n        return false;\n      }\n    };\n    const isUIElement = (editor, elm) => {\n      const customSelector = getCustomUiSelector(editor);\n      const parent = DOM$9.getParent(elm, elm => {\n        return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n      });\n      return parent !== null;\n    };\n    const getActiveElement = editor => {\n      try {\n        const root = getRootNode(SugarElement.fromDom(editor.getElement()));\n        return active$1(root).fold(() => document.body, x => x.dom);\n      } catch (ex) {\n        return document.body;\n      }\n    };\n    const registerEvents$1 = (editorManager, e) => {\n      const editor = e.editor;\n      register$6(editor);\n      const toggleContentAreaOnFocus = (editor, fn) => {\n        if (shouldHighlightOnFocus(editor) && editor.inline !== true) {\n          const contentArea = SugarElement.fromDom(editor.getContainer());\n          fn(contentArea, 'tox-edit-focus');\n        }\n      };\n      editor.on('focusin', () => {\n        const focusedEditor = editorManager.focusedEditor;\n        if (isEditorContentAreaElement(getActiveElement(editor))) {\n          toggleContentAreaOnFocus(editor, add$2);\n        }\n        if (focusedEditor !== editor) {\n          if (focusedEditor) {\n            focusedEditor.dispatch('blur', { focusedEditor: editor });\n          }\n          editorManager.setActive(editor);\n          editorManager.focusedEditor = editor;\n          editor.dispatch('focus', { blurredEditor: focusedEditor });\n          editor.focus(true);\n        }\n      });\n      editor.on('focusout', () => {\n        Delay.setEditorTimeout(editor, () => {\n          const focusedEditor = editorManager.focusedEditor;\n          if (!isEditorContentAreaElement(getActiveElement(editor)) || focusedEditor !== editor) {\n            toggleContentAreaOnFocus(editor, remove$7);\n          }\n          if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n            editor.dispatch('blur', { focusedEditor: null });\n            editorManager.focusedEditor = null;\n          }\n        });\n      });\n      if (!documentFocusInHandler) {\n        documentFocusInHandler = e => {\n          const activeEditor = editorManager.activeEditor;\n          if (activeEditor) {\n            getOriginalEventTarget(e).each(target => {\n              const elem = target;\n              if (elem.ownerDocument === document) {\n                if (elem !== document.body && !isUIElement(activeEditor, elem) && editorManager.focusedEditor === activeEditor) {\n                  activeEditor.dispatch('blur', { focusedEditor: null });\n                  editorManager.focusedEditor = null;\n                }\n              }\n            });\n          }\n        };\n        DOM$9.bind(document, 'focusin', documentFocusInHandler);\n      }\n    };\n    const unregisterDocumentEvents = (editorManager, e) => {\n      if (editorManager.focusedEditor === e.editor) {\n        editorManager.focusedEditor = null;\n      }\n      if (!editorManager.activeEditor && documentFocusInHandler) {\n        DOM$9.unbind(document, 'focusin', documentFocusInHandler);\n        documentFocusInHandler = null;\n      }\n    };\n    const setup$w = editorManager => {\n      editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n      editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n    };\n\n    const getContentEditableHost = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'true');\n    const getCollapsedNode = rng => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n    const getFocusInElement = (root, rng) => getCollapsedNode(rng).bind(node => {\n      if (isTableSection(node)) {\n        return Optional.some(node);\n      } else if (!contains(root, node)) {\n        return Optional.some(root);\n      } else {\n        return Optional.none();\n      }\n    });\n    const normalizeSelection = (editor, rng) => {\n      getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(elm => {\n        return firstPositionIn(elm.dom);\n      }).fold(() => {\n        editor.selection.normalize();\n      }, caretPos => editor.selection.setRng(caretPos.toRange()));\n    };\n    const focusBody = body => {\n      if (body.setActive) {\n        try {\n          body.setActive();\n        } catch (ex) {\n          body.focus();\n        }\n      } else {\n        body.focus();\n      }\n    };\n    const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n    const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n    const hasInlineFocus = editor => {\n      const rawBody = editor.getBody();\n      return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n    };\n    const hasUiFocus = editor => {\n      const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n      return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n    };\n    const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n    const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n    const focusEditor = editor => {\n      const selection = editor.selection;\n      const body = editor.getBody();\n      let rng = selection.getRng();\n      editor.quirks.refreshContentEditable();\n      if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n        getRng(editor).each(bookmarkRng => {\n          editor.selection.setRng(bookmarkRng);\n          rng = bookmarkRng;\n        });\n      }\n      const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n      if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n        focusBody(contentEditableHost);\n        normalizeSelection(editor, rng);\n        activateEditor(editor);\n        return;\n      }\n      if (!editor.inline) {\n        if (!Env.browser.isOpera()) {\n          focusBody(body);\n        }\n        editor.getWin().focus();\n      }\n      if (Env.browser.isFirefox() || editor.inline) {\n        focusBody(body);\n        normalizeSelection(editor, rng);\n      }\n      activateEditor(editor);\n    };\n    const activateEditor = editor => editor.editorManager.setActive(editor);\n    const focus = (editor, skipFocus) => {\n      if (editor.removed) {\n        return;\n      }\n      if (skipFocus) {\n        activateEditor(editor);\n      } else {\n        focusEditor(editor);\n      }\n    };\n\n    const isEditableRange = (dom, rng) => {\n      if (rng.collapsed) {\n        return dom.isEditable(rng.startContainer);\n      } else {\n        return dom.isEditable(rng.startContainer) && dom.isEditable(rng.endContainer);\n      }\n    };\n\n    const getEndpointElement = (root, rng, start, real, resolve) => {\n      const container = start ? rng.startContainer : rng.endContainer;\n      const offset = start ? rng.startOffset : rng.endOffset;\n      return Optional.from(container).map(SugarElement.fromDom).map(elm => !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm).bind(elm => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map(elm => elm.dom).getOr(root);\n    };\n    const getStart = (root, rng, real = false) => getEndpointElement(root, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n    const getEnd$1 = (root, rng, real = false) => getEndpointElement(root, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n    const skipEmptyTextNodes = (node, forwards) => {\n      const orig = node;\n      while (node && isText$a(node) && node.length === 0) {\n        node = forwards ? node.nextSibling : node.previousSibling;\n      }\n      return node || orig;\n    };\n    const getNode = (root, rng) => {\n      if (!rng) {\n        return root;\n      }\n      let startContainer = rng.startContainer;\n      let endContainer = rng.endContainer;\n      const startOffset = rng.startOffset;\n      const endOffset = rng.endOffset;\n      let node = rng.commonAncestorContainer;\n      if (!rng.collapsed) {\n        if (startContainer === endContainer) {\n          if (endOffset - startOffset < 2) {\n            if (startContainer.hasChildNodes()) {\n              node = startContainer.childNodes[startOffset];\n            }\n          }\n        }\n        if (isText$a(startContainer) && isText$a(endContainer)) {\n          if (startContainer.length === startOffset) {\n            startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n          } else {\n            startContainer = startContainer.parentNode;\n          }\n          if (endOffset === 0) {\n            endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n          } else {\n            endContainer = endContainer.parentNode;\n          }\n          if (startContainer && startContainer === endContainer) {\n            node = startContainer;\n          }\n        }\n      }\n      const elm = isText$a(node) ? node.parentNode : node;\n      return isHTMLElement(elm) ? elm : root;\n    };\n    const getSelectedBlocks = (dom, rng, startElm, endElm) => {\n      const selectedBlocks = [];\n      const root = dom.getRoot();\n      const start = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n      const end = dom.getParent(endElm || getEnd$1(root, rng, rng.collapsed), dom.isBlock);\n      if (start && start !== root) {\n        selectedBlocks.push(start);\n      }\n      if (start && end && start !== end) {\n        let node;\n        const walker = new DomTreeWalker(start, root);\n        while ((node = walker.next()) && node !== end) {\n          if (dom.isBlock(node)) {\n            selectedBlocks.push(node);\n          }\n        }\n      }\n      if (end && start !== end && end !== root) {\n        selectedBlocks.push(end);\n      }\n      return selectedBlocks;\n    };\n    const select = (dom, node, content) => Optional.from(node).bind(node => Optional.from(node.parentNode).map(parent => {\n      const idx = dom.nodeIndex(node);\n      const rng = dom.createRng();\n      rng.setStart(parent, idx);\n      rng.setEnd(parent, idx + 1);\n      if (content) {\n        moveEndPoint(dom, rng, node, true);\n        moveEndPoint(dom, rng, node, false);\n      }\n      return rng;\n    }));\n\n    const processRanges = (editor, ranges) => map$3(ranges, range => {\n      const evt = editor.dispatch('GetSelectionRange', { range });\n      return evt.range !== range ? evt.range : range;\n    });\n\n    const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$1(element).length, v => v.length);\n    const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n    const isContentEditableFalse$5 = elem => isHTMLElement$1(elem) && get$9(elem, 'contenteditable') === 'false';\n    const elementsWithCursorPosition = [\n      'img',\n      'br'\n    ];\n    const isCursorPosition = elem => {\n      const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n      return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse$5(elem);\n    };\n\n    const first = element => descendant$2(element, isCursorPosition);\n    const last = element => descendantRtl(element, isCursorPosition);\n    const descendantRtl = (scope, predicate) => {\n      const descend = element => {\n        const children = children$1(element);\n        for (let i = children.length - 1; i >= 0; i--) {\n          const child = children[i];\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(child);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope);\n    };\n\n    const autocompleteSelector = '[data-mce-autocompleter]';\n    const create$9 = (editor, range) => {\n      if (findIn(SugarElement.fromDom(editor.getBody())).isNone()) {\n        const wrapper = SugarElement.fromHtml('<span data-mce-autocompleter=\"1\" data-mce-bogus=\"1\"></span>', editor.getDoc());\n        append$1(wrapper, SugarElement.fromDom(range.extractContents()));\n        range.insertNode(wrapper.dom);\n        parent(wrapper).each(elm => elm.dom.normalize());\n        last(wrapper).map(last => {\n          editor.selection.setCursorLocation(last.dom, getEnd(last));\n        });\n      }\n    };\n    const detect$1 = elm => closest$3(elm, autocompleteSelector);\n    const findIn = elm => descendant$1(elm, autocompleteSelector);\n    const remove$2 = (editor, elm) => findIn(elm).each(wrapper => {\n      const bookmark = editor.selection.getBookmark();\n      unwrap(wrapper);\n      editor.selection.moveToBookmark(bookmark);\n    });\n\n    const typeLookup = {\n      '#text': 3,\n      '#comment': 8,\n      '#cdata': 4,\n      '#pi': 7,\n      '#doctype': 10,\n      '#document-fragment': 11\n    };\n    const walk$2 = (node, root, prev) => {\n      const startName = prev ? 'lastChild' : 'firstChild';\n      const siblingName = prev ? 'prev' : 'next';\n      if (node[startName]) {\n        return node[startName];\n      }\n      if (node !== root) {\n        let sibling = node[siblingName];\n        if (sibling) {\n          return sibling;\n        }\n        for (let parent = node.parent; parent && parent !== root; parent = parent.parent) {\n          sibling = parent[siblingName];\n          if (sibling) {\n            return sibling;\n          }\n        }\n      }\n      return undefined;\n    };\n    const isEmptyTextNode = node => {\n      var _a;\n      const text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n      if (!isWhitespaceText(text)) {\n        return false;\n      }\n      const parentNode = node.parent;\n      if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(text)) {\n        return false;\n      }\n      return true;\n    };\n    const isNonEmptyElement = node => {\n      const isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n      return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n    };\n    class AstNode {\n      static create(name, attrs) {\n        const node = new AstNode(name, typeLookup[name] || 1);\n        if (attrs) {\n          each$d(attrs, (value, attrName) => {\n            node.attr(attrName, value);\n          });\n        }\n        return node;\n      }\n      constructor(name, type) {\n        this.name = name;\n        this.type = type;\n        if (type === 1) {\n          this.attributes = [];\n          this.attributes.map = {};\n        }\n      }\n      replace(node) {\n        const self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        self.insert(node, self);\n        self.remove();\n        return self;\n      }\n      attr(name, value) {\n        const self = this;\n        if (!isString(name)) {\n          if (isNonNullable(name)) {\n            each$d(name, (value, key) => {\n              self.attr(key, value);\n            });\n          }\n          return self;\n        }\n        const attrs = self.attributes;\n        if (attrs) {\n          if (value !== undefined) {\n            if (value === null) {\n              if (name in attrs.map) {\n                delete attrs.map[name];\n                let i = attrs.length;\n                while (i--) {\n                  if (attrs[i].name === name) {\n                    attrs.splice(i, 1);\n                    return self;\n                  }\n                }\n              }\n              return self;\n            }\n            if (name in attrs.map) {\n              let i = attrs.length;\n              while (i--) {\n                if (attrs[i].name === name) {\n                  attrs[i].value = value;\n                  break;\n                }\n              }\n            } else {\n              attrs.push({\n                name,\n                value\n              });\n            }\n            attrs.map[name] = value;\n            return self;\n          }\n          return attrs.map[name];\n        }\n        return undefined;\n      }\n      clone() {\n        const self = this;\n        const clone = new AstNode(self.name, self.type);\n        const selfAttrs = self.attributes;\n        if (selfAttrs) {\n          const cloneAttrs = [];\n          cloneAttrs.map = {};\n          for (let i = 0, l = selfAttrs.length; i < l; i++) {\n            const selfAttr = selfAttrs[i];\n            if (selfAttr.name !== 'id') {\n              cloneAttrs[cloneAttrs.length] = {\n                name: selfAttr.name,\n                value: selfAttr.value\n              };\n              cloneAttrs.map[selfAttr.name] = selfAttr.value;\n            }\n          }\n          clone.attributes = cloneAttrs;\n        }\n        clone.value = self.value;\n        return clone;\n      }\n      wrap(wrapper) {\n        const self = this;\n        if (self.parent) {\n          self.parent.insert(wrapper, self);\n          wrapper.append(self);\n        }\n        return self;\n      }\n      unwrap() {\n        const self = this;\n        for (let node = self.firstChild; node;) {\n          const next = node.next;\n          self.insert(node, self, true);\n          node = next;\n        }\n        self.remove();\n      }\n      remove() {\n        const self = this, parent = self.parent, next = self.next, prev = self.prev;\n        if (parent) {\n          if (parent.firstChild === self) {\n            parent.firstChild = next;\n            if (next) {\n              next.prev = null;\n            }\n          } else if (prev) {\n            prev.next = next;\n          }\n          if (parent.lastChild === self) {\n            parent.lastChild = prev;\n            if (prev) {\n              prev.next = null;\n            }\n          } else if (next) {\n            next.prev = prev;\n          }\n          self.parent = self.next = self.prev = null;\n        }\n        return self;\n      }\n      append(node) {\n        const self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        const last = self.lastChild;\n        if (last) {\n          last.next = node;\n          node.prev = last;\n          self.lastChild = node;\n        } else {\n          self.lastChild = self.firstChild = node;\n        }\n        node.parent = self;\n        return node;\n      }\n      insert(node, refNode, before) {\n        if (node.parent) {\n          node.remove();\n        }\n        const parent = refNode.parent || this;\n        if (before) {\n          if (refNode === parent.firstChild) {\n            parent.firstChild = node;\n          } else if (refNode.prev) {\n            refNode.prev.next = node;\n          }\n          node.prev = refNode.prev;\n          node.next = refNode;\n          refNode.prev = node;\n        } else {\n          if (refNode === parent.lastChild) {\n            parent.lastChild = node;\n          } else if (refNode.next) {\n            refNode.next.prev = node;\n          }\n          node.next = refNode.next;\n          node.prev = refNode;\n          refNode.next = node;\n        }\n        node.parent = parent;\n        return node;\n      }\n      getAll(name) {\n        const self = this;\n        const collection = [];\n        for (let node = self.firstChild; node; node = walk$2(node, self)) {\n          if (node.name === name) {\n            collection.push(node);\n          }\n        }\n        return collection;\n      }\n      children() {\n        const self = this;\n        const collection = [];\n        for (let node = self.firstChild; node; node = node.next) {\n          collection.push(node);\n        }\n        return collection;\n      }\n      empty() {\n        const self = this;\n        if (self.firstChild) {\n          const nodes = [];\n          for (let node = self.firstChild; node; node = walk$2(node, self)) {\n            nodes.push(node);\n          }\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n          }\n        }\n        self.firstChild = self.lastChild = null;\n        return self;\n      }\n      isEmpty(elements, whitespace = {}, predicate) {\n        var _a;\n        const self = this;\n        let node = self.firstChild;\n        if (isNonEmptyElement(self)) {\n          return false;\n        }\n        if (node) {\n          do {\n            if (node.type === 1) {\n              if (node.attr('data-mce-bogus')) {\n                continue;\n              }\n              if (elements[node.name]) {\n                return false;\n              }\n              if (isNonEmptyElement(node)) {\n                return false;\n              }\n            }\n            if (node.type === 8) {\n              return false;\n            }\n            if (node.type === 3 && !isEmptyTextNode(node)) {\n              return false;\n            }\n            if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText((_a = node.value) !== null && _a !== void 0 ? _a : '')) {\n              return false;\n            }\n            if (predicate && predicate(node)) {\n              return false;\n            }\n          } while (node = walk$2(node, self));\n        }\n        return true;\n      }\n      walk(prev) {\n        return walk$2(this, null, prev);\n      }\n    }\n\n    const unescapedTextParents = Tools.makeMap('NOSCRIPT STYLE SCRIPT XMP IFRAME NOEMBED NOFRAMES PLAINTEXT', ' ');\n    const containsZwsp = node => isString(node.nodeValue) && node.nodeValue.includes(ZWSP$1);\n    const getTemporaryNodeSelector = tempAttrs => `${ tempAttrs.length === 0 ? '' : `${ map$3(tempAttrs, attr => `[${ attr }]`).join(',') },` }[data-mce-bogus=\"all\"]`;\n    const getTemporaryNodes = (tempAttrs, body) => body.querySelectorAll(getTemporaryNodeSelector(tempAttrs));\n    const createZwspCommentWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_COMMENT, node => containsZwsp(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);\n    const createUnescapedZwspTextWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_TEXT, node => {\n      if (containsZwsp(node)) {\n        const parent = node.parentNode;\n        return parent && has$2(unescapedTextParents, parent.nodeName) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n      } else {\n        return NodeFilter.FILTER_SKIP;\n      }\n    });\n    const hasZwspComment = body => createZwspCommentWalker(body).nextNode() !== null;\n    const hasUnescapedZwspText = body => createUnescapedZwspTextWalker(body).nextNode() !== null;\n    const hasTemporaryNode = (tempAttrs, body) => body.querySelector(getTemporaryNodeSelector(tempAttrs)) !== null;\n    const trimTemporaryNodes = (tempAttrs, body) => {\n      each$e(getTemporaryNodes(tempAttrs, body), elm => {\n        const element = SugarElement.fromDom(elm);\n        if (get$9(element, 'data-mce-bogus') === 'all') {\n          remove$5(element);\n        } else {\n          each$e(tempAttrs, attr => {\n            if (has$1(element, attr)) {\n              remove$a(element, attr);\n            }\n          });\n        }\n      });\n    };\n    const emptyAllNodeValuesInWalker = walker => {\n      let curr = walker.nextNode();\n      while (curr !== null) {\n        curr.nodeValue = null;\n        curr = walker.nextNode();\n      }\n    };\n    const emptyZwspComments = compose(emptyAllNodeValuesInWalker, createZwspCommentWalker);\n    const emptyUnescapedZwspTexts = compose(emptyAllNodeValuesInWalker, createUnescapedZwspTextWalker);\n    const trim$1 = (body, tempAttrs) => {\n      const conditionalTrims = [\n        {\n          condition: curry(hasTemporaryNode, tempAttrs),\n          action: curry(trimTemporaryNodes, tempAttrs)\n        },\n        {\n          condition: hasZwspComment,\n          action: emptyZwspComments\n        },\n        {\n          condition: hasUnescapedZwspText,\n          action: emptyUnescapedZwspTexts\n        }\n      ];\n      let trimmed = body;\n      let cloned = false;\n      each$e(conditionalTrims, ({condition, action}) => {\n        if (condition(trimmed)) {\n          if (!cloned) {\n            trimmed = body.cloneNode(true);\n            cloned = true;\n          }\n          action(trimmed);\n        }\n      });\n      return trimmed;\n    };\n\n    const cleanupBogusElements = parent => {\n      const bogusElements = descendants(parent, '[data-mce-bogus]');\n      each$e(bogusElements, elem => {\n        const bogusValue = get$9(elem, 'data-mce-bogus');\n        if (bogusValue === 'all') {\n          remove$5(elem);\n        } else if (isBr$5(elem)) {\n          before$3(elem, SugarElement.fromText(zeroWidth));\n          remove$5(elem);\n        } else {\n          unwrap(elem);\n        }\n      });\n    };\n    const cleanupInputNames = parent => {\n      const inputs = descendants(parent, 'input');\n      each$e(inputs, input => {\n        remove$a(input, 'name');\n      });\n    };\n\n    const trimEmptyContents = (editor, html) => {\n      const blockName = getForcedRootBlock(editor);\n      const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>(&nbsp;|&#160;|\\\\s|\\u00a0|<br \\\\/>|)<\\\\/${ blockName }>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$`);\n      return html.replace(emptyRegExp, '');\n    };\n    const getPlainTextContent = (editor, body) => {\n      const doc = editor.getDoc();\n      const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n      const offscreenDiv = SugarElement.fromTag('div', doc);\n      set$3(offscreenDiv, 'data-mce-bogus', 'all');\n      setAll(offscreenDiv, {\n        position: 'fixed',\n        left: '-9999999px',\n        top: '0'\n      });\n      set$1(offscreenDiv, body.innerHTML);\n      cleanupBogusElements(offscreenDiv);\n      cleanupInputNames(offscreenDiv);\n      const root = getContentContainer(dos);\n      append$1(root, offscreenDiv);\n      const content = trim$2(offscreenDiv.dom.innerText);\n      remove$5(offscreenDiv);\n      return content;\n    };\n    const getContentFromBody = (editor, args, body) => {\n      let content;\n      if (args.format === 'raw') {\n        content = Tools.trim(trim$2(trim$1(body, editor.serializer.getTempAttrs()).innerHTML));\n      } else if (args.format === 'text') {\n        content = getPlainTextContent(editor, body);\n      } else if (args.format === 'tree') {\n        content = editor.serializer.serialize(body, args);\n      } else {\n        content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n      }\n      const shouldTrim = args.format !== 'text' && !isWsPreserveElement(SugarElement.fromDom(body));\n      return shouldTrim && isString(content) ? Tools.trim(content) : content;\n    };\n    const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), body => getContentFromBody(editor, args, body));\n\n    const makeMap$1 = Tools.makeMap;\n    const Writer = settings => {\n      const html = [];\n      settings = settings || {};\n      const indent = settings.indent;\n      const indentBefore = makeMap$1(settings.indent_before || '');\n      const indentAfter = makeMap$1(settings.indent_after || '');\n      const encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n      const htmlOutput = settings.element_format !== 'xhtml';\n      return {\n        start: (name, attrs, empty) => {\n          if (indent && indentBefore[name] && html.length > 0) {\n            const value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n          html.push('<', name);\n          if (attrs) {\n            for (let i = 0, l = attrs.length; i < l; i++) {\n              const attr = attrs[i];\n              html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n            }\n          }\n          if (!empty || htmlOutput) {\n            html[html.length] = '>';\n          } else {\n            html[html.length] = ' />';\n          }\n          if (empty && indent && indentAfter[name] && html.length > 0) {\n            const value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        end: name => {\n          let value;\n          html.push('</', name, '>');\n          if (indent && indentAfter[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        text: (text, raw) => {\n          if (text.length > 0) {\n            html[html.length] = raw ? text : encode(text);\n          }\n        },\n        cdata: text => {\n          html.push('<![CDATA[', text, ']]>');\n        },\n        comment: text => {\n          html.push('<!--', text, '-->');\n        },\n        pi: (name, text) => {\n          if (text) {\n            html.push('<?', name, ' ', encode(text), '?>');\n          } else {\n            html.push('<?', name, '?>');\n          }\n          if (indent) {\n            html.push('\\n');\n          }\n        },\n        doctype: text => {\n          html.push('<!DOCTYPE', text, '>', indent ? '\\n' : '');\n        },\n        reset: () => {\n          html.length = 0;\n        },\n        getContent: () => {\n          return html.join('').replace(/\\n$/, '');\n        }\n      };\n    };\n\n    const HtmlSerializer = (settings = {}, schema = Schema()) => {\n      const writer = Writer(settings);\n      settings.validate = 'validate' in settings ? settings.validate : true;\n      const serialize = node => {\n        const validate = settings.validate;\n        const handlers = {\n          3: node => {\n            var _a;\n            writer.text((_a = node.value) !== null && _a !== void 0 ? _a : '', node.raw);\n          },\n          8: node => {\n            var _a;\n            writer.comment((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          },\n          7: node => {\n            writer.pi(node.name, node.value);\n          },\n          10: node => {\n            var _a;\n            writer.doctype((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          },\n          4: node => {\n            var _a;\n            writer.cdata((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          },\n          11: node => {\n            let tempNode = node;\n            if (tempNode = tempNode.firstChild) {\n              do {\n                walk(tempNode);\n              } while (tempNode = tempNode.next);\n            }\n          }\n        };\n        writer.reset();\n        const walk = node => {\n          var _a;\n          const handler = handlers[node.type];\n          if (!handler) {\n            const name = node.name;\n            const isEmpty = name in schema.getVoidElements();\n            let attrs = node.attributes;\n            if (validate && attrs && attrs.length > 1) {\n              const sortedAttrs = [];\n              sortedAttrs.map = {};\n              const elementRule = schema.getElementRule(node.name);\n              if (elementRule) {\n                for (let i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n                  const attrName = elementRule.attributesOrder[i];\n                  if (attrName in attrs.map) {\n                    const attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                for (let i = 0, l = attrs.length; i < l; i++) {\n                  const attrName = attrs[i].name;\n                  if (!(attrName in sortedAttrs.map)) {\n                    const attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                attrs = sortedAttrs;\n              }\n            }\n            writer.start(name, attrs, isEmpty);\n            if (isNonHtmlElementRootName(name)) {\n              if (isString(node.value)) {\n                writer.text(node.value, true);\n              }\n              writer.end(name);\n            } else {\n              if (!isEmpty) {\n                let child = node.firstChild;\n                if (child) {\n                  if ((name === 'pre' || name === 'textarea') && child.type === 3 && ((_a = child.value) === null || _a === void 0 ? void 0 : _a[0]) === '\\n') {\n                    writer.text('\\n', true);\n                  }\n                  do {\n                    walk(child);\n                  } while (child = child.next);\n                }\n                writer.end(name);\n              }\n            }\n          } else {\n            handler(node);\n          }\n        };\n        if (node.type === 1 && !settings.inner) {\n          walk(node);\n        } else if (node.type === 3) {\n          handlers[3](node);\n        } else {\n          handlers[11](node);\n        }\n        return writer.getContent();\n      };\n      return { serialize };\n    };\n\n    const nonInheritableStyles = new Set();\n    (() => {\n      const nonInheritableStylesArr = [\n        'margin',\n        'margin-left',\n        'margin-right',\n        'margin-top',\n        'margin-bottom',\n        'padding',\n        'padding-left',\n        'padding-right',\n        'padding-top',\n        'padding-bottom',\n        'border',\n        'border-width',\n        'border-style',\n        'border-color',\n        'background',\n        'background-attachment',\n        'background-clip',\n        'background-color',\n        'background-image',\n        'background-origin',\n        'background-position',\n        'background-repeat',\n        'background-size',\n        'float',\n        'position',\n        'left',\n        'right',\n        'top',\n        'bottom',\n        'z-index',\n        'display',\n        'transform',\n        'width',\n        'max-width',\n        'min-width',\n        'height',\n        'max-height',\n        'min-height',\n        'overflow',\n        'overflow-x',\n        'overflow-y',\n        'text-overflow',\n        'vertical-align',\n        'transition',\n        'transition-delay',\n        'transition-duration',\n        'transition-property',\n        'transition-timing-function'\n      ];\n      each$e(nonInheritableStylesArr, style => {\n        nonInheritableStyles.add(style);\n      });\n    })();\n    const shorthandStyleProps = [\n      'font',\n      'text-decoration',\n      'text-emphasis'\n    ];\n    const getStyleProps = (dom, node) => keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n    const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n    const hasInheritableStyles = (dom, node) => forall(getStyleProps(dom, node), style => !isNonInheritableStyle(style));\n    const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));\n    const hasStyleConflict = (dom, node, parentNode) => {\n      const nodeStyleProps = getStyleProps(dom, node);\n      const parentNodeStyleProps = getStyleProps(dom, parentNode);\n      const valueMismatch = prop => {\n        var _a, _b;\n        const nodeValue = (_a = dom.getStyle(node, prop)) !== null && _a !== void 0 ? _a : '';\n        const parentValue = (_b = dom.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : '';\n        return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n      };\n      return exists(nodeStyleProps, nodeStyleProp => {\n        const propExists = props => exists(props, prop => prop === nodeStyleProp);\n        if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n          const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n          return exists(longhandProps, valueMismatch);\n        } else {\n          return valueMismatch(nodeStyleProp);\n        }\n      });\n    };\n\n    const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$a).exists(text => {\n      const delta = forward ? 0 : -1;\n      return predicate(text.data.charAt(pos.offset() + delta));\n    });\n    const isBeforeSpace = curry(isChar, true, isWhiteSpace);\n    const isAfterSpace = curry(isChar, false, isWhiteSpace);\n    const isEmptyText = pos => {\n      const container = pos.container();\n      return isText$a(container) && (container.data.length === 0 || isZwsp$1(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n    };\n    const matchesElementPosition = (before, predicate) => pos => getChildNodeAtRelativeOffset(before ? 0 : -1, pos).filter(predicate).isSome();\n    const isImageBlock = node => isImg(node) && get$7(SugarElement.fromDom(node), 'display') === 'block';\n    const isCefNode = node => isContentEditableFalse$b(node) && !isBogusAll$1(node);\n    const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n    const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n    const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n    const isAfterMedia = matchesElementPosition(false, isMedia$2);\n    const isBeforeTable = matchesElementPosition(true, isTable$2);\n    const isAfterTable = matchesElementPosition(false, isTable$2);\n    const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n    const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n    const dropLast = xs => xs.slice(0, -1);\n    const parentsUntil = (start, root, predicate) => {\n      if (contains(root, start)) {\n        return dropLast(parents$1(start, elm => {\n          return predicate(elm) || eq(elm, root);\n        }));\n      } else {\n        return [];\n      }\n    };\n    const parents = (start, root) => parentsUntil(start, root, never);\n    const parentsAndSelf = (start, root) => [start].concat(parents(start, root));\n\n    const navigateIgnoreEmptyTextNodes = (forward, root, from) => navigateIgnore(forward, root, from, isEmptyText);\n    const isBlock$1 = schema => el => schema.isBlock(name(el));\n    const getClosestBlock$1 = (root, pos, schema) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$1(schema));\n    const isAtBeforeAfterBlockBoundary = (forward, root, pos, schema) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos, schema).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n    const isAtBlockBoundary = (forward, root, pos, schema) => getClosestBlock$1(root, pos, schema).fold(() => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => !isInSameBlock(newPos, pos, root.dom)), parent => navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone());\n    const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n    const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n    const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n    const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n    const isBr$1 = pos => getElementFromPosition(pos).exists(isBr$5);\n    const findBr = (forward, root, pos, schema) => {\n      const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n      const scope = head(parentBlocks).getOr(root);\n      return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n    };\n    const isBeforeBr$1 = (root, pos, schema) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos, schema).isSome();\n    const isAfterBr = (root, pos, schema) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos, schema).isSome();\n    const findPreviousBr = curry(findBr, false);\n    const findNextBr = curry(findBr, true);\n\n    const isInMiddleOfText = pos => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n    const getClosestBlock = (root, pos, schema) => {\n      const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n      return head(parentBlocks).getOr(root);\n    };\n    const hasSpaceBefore = (root, pos, schema) => {\n      if (isInMiddleOfText(pos)) {\n        return isAfterSpace(pos);\n      } else {\n        return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isAfterSpace);\n      }\n    };\n    const hasSpaceAfter = (root, pos, schema) => {\n      if (isInMiddleOfText(pos)) {\n        return isBeforeSpace(pos);\n      } else {\n        return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isBeforeSpace);\n      }\n    };\n    const isPreValue = value => contains$2([\n      'pre',\n      'pre-wrap'\n    ], value);\n    const isInPre = pos => getElementFromPosition(pos).bind(elm => closest$4(elm, isElement$7)).exists(elm => isPreValue(get$7(elm, 'white-space')));\n    const isAtBeginningOfBody = (root, pos) => prevPosition(root.dom, pos).isNone();\n    const isAtEndOfBody = (root, pos) => nextPosition(root.dom, pos).isNone();\n    const isAtLineBoundary = (root, pos, schema) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos, schema) || isAtEndOfBlock(root, pos, schema) || isAfterBr(root, pos, schema) || isBeforeBr$1(root, pos, schema);\n    const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$b(node) && isBlockLike(node);\n    const isSiblingCefBlock = (root, direction) => container => {\n      return isCefBlock(new DomTreeWalker(container, root)[direction]());\n    };\n    const isBeforeCefBlock = (root, pos) => {\n      const nextPos = nextPosition(root.dom, pos).getOr(pos);\n      const isNextCefBlock = isSiblingCefBlock(root.dom, 'next');\n      return pos.isAtEnd() && (isNextCefBlock(pos.container()) || isNextCefBlock(nextPos.container()));\n    };\n    const isAfterCefBlock = (root, pos) => {\n      const prevPos = prevPosition(root.dom, pos).getOr(pos);\n      const isPrevCefBlock = isSiblingCefBlock(root.dom, 'prev');\n      return pos.isAtStart() && (isPrevCefBlock(pos.container()) || isPrevCefBlock(prevPos.container()));\n    };\n    const needsToHaveNbsp = (root, pos, schema) => {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtLineBoundary(root, pos, schema) || hasSpaceBefore(root, pos, schema) || hasSpaceAfter(root, pos, schema);\n      }\n    };\n    const needsToBeNbspLeft = (root, pos, schema) => {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtStartOfBlock(root, pos, schema) || isBeforeBlock(root, pos, schema) || isAfterBr(root, pos, schema) || hasSpaceBefore(root, pos, schema) || isAfterCefBlock(root, pos);\n      }\n    };\n    const leanRight = pos => {\n      const container = pos.container();\n      const offset = pos.offset();\n      if (isText$a(container) && offset < container.data.length) {\n        return CaretPosition(container, offset + 1);\n      } else {\n        return pos;\n      }\n    };\n    const needsToBeNbspRight = (root, pos, schema) => {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtEndOfBlock(root, pos, schema) || isAfterBlock(root, pos, schema) || isBeforeBr$1(root, pos, schema) || hasSpaceAfter(root, pos, schema) || isBeforeCefBlock(root, pos);\n      }\n    };\n    const needsToBeNbsp = (root, pos, schema) => needsToBeNbspLeft(root, pos, schema) || needsToBeNbspRight(root, leanRight(pos), schema);\n    const isNbspAt = (text, offset) => isNbsp(text.charAt(offset));\n    const isWhiteSpaceAt = (text, offset) => isWhiteSpace(text.charAt(offset));\n    const hasNbsp = pos => {\n      const container = pos.container();\n      return isText$a(container) && contains$1(container.data, nbsp);\n    };\n    const normalizeNbspMiddle = text => {\n      const chars = text.split('');\n      return map$3(chars, (chr, i) => {\n        if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {\n          return ' ';\n        } else {\n          return chr;\n        }\n      }).join('');\n    };\n    const normalizeNbspAtStart = (root, node, makeNbsp, schema) => {\n      const text = node.data;\n      const firstPos = CaretPosition(node, 0);\n      if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos, schema)) {\n        node.data = ' ' + text.slice(1);\n        return true;\n      } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos, schema)) {\n        node.data = nbsp + text.slice(1);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const normalizeNbspInMiddleOfTextNode = node => {\n      const text = node.data;\n      const newText = normalizeNbspMiddle(text);\n      if (newText !== text) {\n        node.data = newText;\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const normalizeNbspAtEnd = (root, node, makeNbsp, schema) => {\n      const text = node.data;\n      const lastPos = CaretPosition(node, text.length - 1);\n      if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos, schema)) {\n        node.data = text.slice(0, -1) + ' ';\n        return true;\n      } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos, schema)) {\n        node.data = text.slice(0, -1) + nbsp;\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const normalizeNbsps = (root, pos, schema) => {\n      const container = pos.container();\n      if (!isText$a(container)) {\n        return Optional.none();\n      }\n      if (hasNbsp(pos)) {\n        const normalized = normalizeNbspAtStart(root, container, false, schema) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false, schema);\n        return someIf(normalized, pos);\n      } else if (needsToBeNbsp(root, pos, schema)) {\n        const normalized = normalizeNbspAtStart(root, container, true, schema) || normalizeNbspAtEnd(root, container, true, schema);\n        return someIf(normalized, pos);\n      } else {\n        return Optional.none();\n      }\n    };\n    const normalizeNbspsInEditor = editor => {\n      const root = SugarElement.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng()), editor.schema).each(pos => {\n          editor.selection.setRng(pos.toRange());\n        });\n      }\n    };\n\n    const normalize$1 = (node, offset, count, schema) => {\n      if (count === 0) {\n        return;\n      }\n      const elm = SugarElement.fromDom(node);\n      const root = ancestor$4(elm, el => schema.isBlock(name(el))).getOr(elm);\n      const whitespace = node.data.slice(offset, offset + count);\n      const isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length), schema);\n      const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0), schema);\n      node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n    };\n    const normalizeWhitespaceAfter = (node, offset, schema) => {\n      const content = node.data.slice(offset);\n      const whitespaceCount = content.length - lTrim(content).length;\n      normalize$1(node, offset, whitespaceCount, schema);\n    };\n    const normalizeWhitespaceBefore = (node, offset, schema) => {\n      const content = node.data.slice(0, offset);\n      const whitespaceCount = content.length - rTrim(content).length;\n      normalize$1(node, offset - whitespaceCount, whitespaceCount, schema);\n    };\n    const mergeTextNodes = (prevNode, nextNode, schema, normalizeWhitespace, mergeToPrev = true) => {\n      const whitespaceOffset = rTrim(prevNode.data).length;\n      const newNode = mergeToPrev ? prevNode : nextNode;\n      const removeNode = mergeToPrev ? nextNode : prevNode;\n      if (mergeToPrev) {\n        newNode.appendData(removeNode.data);\n      } else {\n        newNode.insertData(0, removeNode.data);\n      }\n      remove$5(SugarElement.fromDom(removeNode));\n      if (normalizeWhitespace) {\n        normalizeWhitespaceAfter(newNode, whitespaceOffset, schema);\n      }\n      return newNode;\n    };\n\n    const needsReposition = (pos, elm) => {\n      const container = pos.container();\n      const offset = pos.offset();\n      return !CaretPosition.isTextPosition(pos) && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n    };\n    const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n    const beforeOrStartOf = node => isText$a(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n    const afterOrEndOf = node => isText$a(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n    const getPreviousSiblingCaretPosition = elm => {\n      if (isCaretCandidate$3(elm.previousSibling)) {\n        return Optional.some(afterOrEndOf(elm.previousSibling));\n      } else {\n        return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n      }\n    };\n    const getNextSiblingCaretPosition = elm => {\n      if (isCaretCandidate$3(elm.nextSibling)) {\n        return Optional.some(beforeOrStartOf(elm.nextSibling));\n      } else {\n        return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n      }\n    };\n    const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n      return Optional.from(elm.previousSibling ? elm.previousSibling : elm.parentNode).bind(node => prevPosition(rootElement, CaretPosition.before(node))).orThunk(() => nextPosition(rootElement, CaretPosition.after(elm)));\n    };\n    const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).orThunk(() => prevPosition(rootElement, CaretPosition.before(elm)));\n    const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n    const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n    const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n    const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n    const setSelection$1 = (editor, forward, pos) => {\n      pos.fold(() => {\n        editor.focus();\n      }, pos => {\n        editor.selection.setRng(pos.toRange(), forward);\n      });\n    };\n    const eqRawNode = rawNode => elm => elm.dom === rawNode;\n    const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n    const paddEmptyBlock = (elm, preserveEmptyCaret) => {\n      if (isEmpty$2(elm)) {\n        const br = SugarElement.fromHtml('<br data-mce-bogus=\"1\">');\n        if (preserveEmptyCaret) {\n          each$e(children$1(elm), node => {\n            if (!isEmptyCaretFormatElement(node)) {\n              remove$5(node);\n            }\n          });\n        } else {\n          empty(elm);\n        }\n        append$1(elm, br);\n        return Optional.some(CaretPosition.before(br.dom));\n      } else {\n        return Optional.none();\n      }\n    };\n    const deleteNormalized = (elm, afterDeletePosOpt, schema, normalizeWhitespace) => {\n      const prevTextOpt = prevSibling(elm).filter(isText$b);\n      const nextTextOpt = nextSibling(elm).filter(isText$b);\n      remove$5(elm);\n      return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev, next, pos) => {\n        const prevNode = prev.dom, nextNode = next.dom;\n        const offset = prevNode.data.length;\n        mergeTextNodes(prevNode, nextNode, schema, normalizeWhitespace);\n        return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n      }).orThunk(() => {\n        if (normalizeWhitespace) {\n          prevTextOpt.each(elm => normalizeWhitespaceBefore(elm.dom, elm.dom.length, schema));\n          nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0, schema));\n        }\n        return afterDeletePosOpt;\n      });\n    };\n    const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n    const deleteElement$2 = (editor, forward, elm, moveCaret = true, preserveEmptyCaret = false) => {\n      const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n      const parentBlock = ancestor$4(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n      const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, editor.schema, isInlineElement(editor, elm));\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('');\n        editor.selection.setCursorLocation();\n      } else {\n        parentBlock.bind(elm => paddEmptyBlock(elm, preserveEmptyCaret)).fold(() => {\n          if (moveCaret) {\n            setSelection$1(editor, forward, normalizedAfterDeletePos);\n          }\n        }, paddPos => {\n          if (moveCaret) {\n            setSelection$1(editor, forward, Optional.some(paddPos));\n          }\n        });\n      }\n    };\n\n    const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n    const hasStrongRtl = text => strongRtl.test(text);\n\n    const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor)) && !isTransparentBlock(editor.schema, elm) && editor.dom.isEditable(elm);\n    const isRtl = element => {\n      var _a;\n      return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl((_a = element.textContent) !== null && _a !== void 0 ? _a : '');\n    };\n    const findInlineParents = (isInlineTarget, rootNode, pos) => filter$5(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n    const findRootInline = (isInlineTarget, rootNode, pos) => {\n      const parents = findInlineParents(isInlineTarget, rootNode, pos);\n      return Optional.from(parents[parents.length - 1]);\n    };\n    const hasSameParentBlock = (rootNode, node1, node2) => {\n      const block1 = getParentBlock$3(node1, rootNode);\n      const block2 = getParentBlock$3(node2, rootNode);\n      return isNonNullable(block1) && block1 === block2;\n    };\n    const isAtZwsp = pos => isBeforeInline(pos) || isAfterInline(pos);\n    const normalizePosition = (forward, pos) => {\n      const container = pos.container(), offset = pos.offset();\n      if (forward) {\n        if (isCaretContainerInline(container)) {\n          if (isText$a(container.nextSibling)) {\n            return CaretPosition(container.nextSibling, 0);\n          } else {\n            return CaretPosition.after(container);\n          }\n        } else {\n          return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n        }\n      } else {\n        if (isCaretContainerInline(container)) {\n          if (isText$a(container.previousSibling)) {\n            return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n          } else {\n            return CaretPosition.before(container);\n          }\n        } else {\n          return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n        }\n      }\n    };\n    const normalizeForwards = curry(normalizePosition, true);\n    const normalizeBackwards = curry(normalizePosition, false);\n\n    const execCommandIgnoreInputEvents = (editor, command) => {\n      const inputBlocker = e => e.stopImmediatePropagation();\n      editor.on('beforeinput input', inputBlocker, true);\n      editor.getDoc().execCommand(command);\n      editor.off('beforeinput input', inputBlocker);\n    };\n    const execEditorDeleteCommand = editor => {\n      editor.execCommand('delete');\n    };\n    const execNativeDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'Delete');\n    const execNativeForwardDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'ForwardDelete');\n    const isBeforeRoot = rootNode => elm => is$2(parent(elm), rootNode, eq);\n    const isTextBlockOrListItem = element => isTextBlock$2(element) || isListItem$1(element);\n    const getParentBlock$2 = (rootNode, elm) => {\n      if (contains(rootNode, elm)) {\n        return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n      } else {\n        return Optional.none();\n      }\n    };\n    const paddEmptyBody = (editor, moveSelection = true) => {\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('', { no_selection: !moveSelection });\n      }\n    };\n    const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n      const normalizedFirstPos = normalizePosition(true, firstPos);\n      const normalizedLastPos = normalizePosition(false, lastPos);\n      const normalizedFromPos = normalizePosition(false, fromPos);\n      if (forward) {\n        return nextPosition(elm, normalizedFromPos).exists(nextPos => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n      } else {\n        return prevPosition(elm, normalizedFromPos).exists(prevPos => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n      }\n    }).getOr(true);\n    const freefallRtl = root => {\n      const child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n      return child.bind(freefallRtl).orThunk(() => Optional.some(root));\n    };\n    const deleteRangeContents = (editor, rng, root, moveSelection = true) => {\n      var _a;\n      rng.deleteContents();\n      const lastNode = freefallRtl(root).getOr(root);\n      const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);\n      if (lastBlock.dom === editor.getBody()) {\n        paddEmptyBody(editor, moveSelection);\n      } else if (isEmpty$2(lastBlock)) {\n        fillWithPaddingBr(lastBlock);\n        if (moveSelection) {\n          editor.selection.setCursorLocation(lastBlock.dom, 0);\n        }\n      }\n      if (!eq(root, lastBlock)) {\n        const additionalCleanupNodes = is$2(parent(lastBlock), root) ? [] : siblings(lastBlock);\n        each$e(additionalCleanupNodes.concat(children$1(root)), node => {\n          if (!eq(node, lastBlock) && !contains(node, lastBlock) && isEmpty$2(node)) {\n            remove$5(node);\n          }\n        });\n      }\n    };\n\n    const ancestor$1 = (scope, predicate, isRoot) => ancestor$4(scope, predicate, isRoot).isSome();\n    const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n    const descendant = (scope, predicate) => descendant$2(scope, predicate).isSome();\n\n    const isRootFromElement = root => cur => eq(root, cur);\n    const getTableCells = table => descendants(table, 'td,th');\n    const getTable$1 = (node, isRoot) => getClosestTable(SugarElement.fromDom(node), isRoot);\n    const selectionInTableWithNestedTable = details => {\n      return lift2(details.startTable, details.endTable, (startTable, endTable) => {\n        const isStartTableParentOfEndTable = descendant(startTable, t => eq(t, endTable));\n        const isEndTableParentOfStartTable = descendant(endTable, t => eq(t, startTable));\n        return !isStartTableParentOfEndTable && !isEndTableParentOfStartTable ? details : {\n          ...details,\n          startTable: isStartTableParentOfEndTable ? Optional.none() : details.startTable,\n          endTable: isEndTableParentOfStartTable ? Optional.none() : details.endTable,\n          isSameTable: false,\n          isMultiTable: false\n        };\n      }).getOr(details);\n    };\n    const adjustQuirksInDetails = details => {\n      return selectionInTableWithNestedTable(details);\n    };\n    const getTableDetailsFromRange = (rng, isRoot) => {\n      const startTable = getTable$1(rng.startContainer, isRoot);\n      const endTable = getTable$1(rng.endContainer, isRoot);\n      const isStartInTable = startTable.isSome();\n      const isEndInTable = endTable.isSome();\n      const isSameTable = lift2(startTable, endTable, eq).getOr(false);\n      const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n      return adjustQuirksInDetails({\n        startTable,\n        endTable,\n        isStartInTable,\n        isEndInTable,\n        isSameTable,\n        isMultiTable\n      });\n    };\n\n    const tableCellRng = (start, end) => ({\n      start,\n      end\n    });\n    const tableSelection = (rng, table, cells) => ({\n      rng,\n      table,\n      cells\n    });\n    const deleteAction = Adt.generate([\n      {\n        singleCellTable: [\n          'rng',\n          'cell'\n        ]\n      },\n      { fullTable: ['table'] },\n      {\n        partialTable: [\n          'cells',\n          'outsideDetails'\n        ]\n      },\n      {\n        multiTable: [\n          'startTableCells',\n          'endTableCells',\n          'betweenRng'\n        ]\n      }\n    ]);\n    const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), 'td,th', isRoot);\n    const isExpandedCellRng = cellRng => !eq(cellRng.start, cellRng.end);\n    const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind(startParentTable => getClosestTable(cellRng.end, isRoot).bind(endParentTable => someIf(eq(startParentTable, endParentTable), startParentTable)));\n    const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(table => {\n      const rows = table.dom.rows;\n      return rows.length === 1 && rows[0].cells.length === 1;\n    });\n    const getCellRng = (rng, isRoot) => {\n      const startCell = getClosestCell$1(rng.startContainer, isRoot);\n      const endCell = getClosestCell$1(rng.endContainer, isRoot);\n      return lift2(startCell, endCell, tableCellRng);\n    };\n    const getCellRangeFromStartTable = isRoot => startCell => getClosestTable(startCell, isRoot).bind(table => last$3(getTableCells(table)).map(endCell => tableCellRng(startCell, endCell)));\n    const getCellRangeFromEndTable = isRoot => endCell => getClosestTable(endCell, isRoot).bind(table => head(getTableCells(table)).map(startCell => tableCellRng(startCell, endCell)));\n    const getTableSelectionFromCellRng = isRoot => cellRng => getTableFromCellRng(cellRng, isRoot).map(table => tableSelection(cellRng, table, getTableCells(table)));\n    const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n      if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n        return Optional.none();\n      } else if (selectionDetails.isSameTable) {\n        const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n        return Optional.some({\n          start: sameTableSelection,\n          end: sameTableSelection\n        });\n      } else {\n        const startCell = getClosestCell$1(rng.startContainer, isRoot);\n        const endCell = getClosestCell$1(rng.endContainer, isRoot);\n        const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n        const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n        return Optional.some({\n          start: startTableSelection,\n          end: endTableSelection\n        });\n      }\n    };\n    const getCellIndex = (cells, cell) => findIndex$2(cells, x => eq(x, cell));\n    const getSelectedCells = tableSelection => lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), (startIndex, endIndex) => tableSelection.cells.slice(startIndex, endIndex + 1));\n    const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists(cellRng => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n    const unselectCells = (rng, selectionDetails) => {\n      const {startTable, endTable} = selectionDetails;\n      const otherContentRng = rng.cloneRange();\n      startTable.each(table => otherContentRng.setStartAfter(table.dom));\n      endTable.each(table => otherContentRng.setEndBefore(table.dom));\n      return otherContentRng;\n    };\n    const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => start.or(end)).bind(tableSelection => {\n      const {isSameTable} = selectionDetails;\n      const selectedCells = getSelectedCells(tableSelection).getOr([]);\n      if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n        return Optional.some(deleteAction.fullTable(tableSelection.table));\n      } else if (selectedCells.length > 0) {\n        if (isSameTable) {\n          return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n        } else {\n          const otherContentRng = unselectCells(rng, selectionDetails);\n          return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n            ...selectionDetails,\n            rng: otherContentRng\n          })));\n        }\n      } else {\n        return Optional.none();\n      }\n    });\n    const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => {\n      const startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n      const endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n      if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n        const otherContentRng = unselectCells(rng, selectionDetails);\n        return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n      } else {\n        return Optional.none();\n      }\n    });\n    const getActionFromRange = (root, rng) => {\n      const isRoot = isRootFromElement(root);\n      const optCellRng = getCellRng(rng, isRoot);\n      const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n      if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n        return optCellRng.map(cellRng => deleteAction.singleCellTable(rng, cellRng.start));\n      } else if (selectionDetails.isMultiTable) {\n        return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n      } else {\n        return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n      }\n    };\n\n    const cleanCells = cells => each$e(cells, cell => {\n      remove$a(cell, 'contenteditable');\n      fillWithPaddingBr(cell);\n    });\n    const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n    const handleEmptyBlock = (editor, startInTable, emptyBlock) => {\n      emptyBlock.each(block => {\n        if (startInTable) {\n          remove$5(block);\n        } else {\n          fillWithPaddingBr(block);\n          editor.selection.setCursorLocation(block.dom, 0);\n        }\n      });\n    };\n    const deleteContentInsideCell = (editor, cell, rng, isFirstCellInSelection) => {\n      const insideTableRng = rng.cloneRange();\n      if (isFirstCellInSelection) {\n        insideTableRng.setStart(rng.startContainer, rng.startOffset);\n        insideTableRng.setEndAfter(cell.dom.lastChild);\n      } else {\n        insideTableRng.setStartBefore(cell.dom.firstChild);\n        insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n      }\n      deleteCellContents(editor, insideTableRng, cell, false).each(action => action());\n    };\n    const collapseAndRestoreCellSelection = editor => {\n      const selectedCells = getCellsFromEditor(editor);\n      const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n      if (isTableCell$3(selectedNode.dom) && isEmpty$2(selectedNode)) {\n        editor.selection.setCursorLocation(selectedNode.dom, 0);\n      } else {\n        editor.selection.collapse(true);\n      }\n      if (selectedCells.length > 1 && exists(selectedCells, cell => eq(cell, selectedNode))) {\n        set$3(selectedNode, 'data-mce-selected', '1');\n      }\n    };\n    const emptySingleTableCells = (editor, cells, outsideDetails) => Optional.some(() => {\n      const editorRng = editor.selection.getRng();\n      const cellsToClean = outsideDetails.bind(({rng, isStartInTable}) => {\n        const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n        rng.deleteContents();\n        handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n        const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n        deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n        if (!isEmpty$2(endPointCell)) {\n          return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n        } else {\n          return Optional.none();\n        }\n      }).getOr(cells);\n      cleanCells(cellsToClean);\n      collapseAndRestoreCellSelection(editor);\n    });\n    const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n      const rng = editor.selection.getRng();\n      const startCell = startTableCells[0];\n      const endCell = endTableCells[endTableCells.length - 1];\n      deleteContentInsideCell(editor, startCell, rng, true);\n      deleteContentInsideCell(editor, endCell, rng, false);\n      const startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n      const endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n      cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n      betweenRng.deleteContents();\n      collapseAndRestoreCellSelection(editor);\n    });\n    const deleteCellContents = (editor, rng, cell, moveSelection = true) => Optional.some(() => {\n      deleteRangeContents(editor, rng, cell, moveSelection);\n    });\n    const deleteTableElement = (editor, table) => Optional.some(() => deleteElement$2(editor, false, table));\n    const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind(action => action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n    const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n    const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), caption => deleteCaptionRange(editor, caption));\n    const deleteRange$3 = (editor, startElm, selectedCells) => {\n      const rootNode = SugarElement.fromDom(editor.getBody());\n      const rng = editor.selection.getRng();\n      return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n    };\n    const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$2);\n    const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag('caption'));\n    const deleteBetweenCells = (editor, rootElm, forward, fromCell, from) => navigate(forward, editor.getBody(), from).bind(to => getParentCell(rootElm, SugarElement.fromDom(to.getNode())).bind(toCell => eq(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n    const emptyElement = (editor, elm) => Optional.some(() => {\n      fillWithPaddingBr(elm);\n      editor.selection.setCursorLocation(elm.dom, 0);\n    });\n    const isDeleteOfLastCharPos = (fromCaption, forward, from, to) => firstPositionIn(fromCaption.dom).bind(first => lastPositionIn(fromCaption.dom).map(last => forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first))).getOr(true);\n    const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n    const validateCaretCaption = (rootElm, fromCaption, to) => getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).fold(() => Optional.some(noop), toCaption => someIf(!eq(toCaption, fromCaption), noop));\n    const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from) => navigate(forward, editor.getBody(), from).fold(() => Optional.some(noop), to => isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to));\n    const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n      const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return getParentCell(rootElm, startElm).bind(fromCell => isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from));\n    };\n    const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n      const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n    };\n    const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n    const isBeforeOrAfterTable = (editor, forward) => {\n      const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(pos => isNearTable(forward, pos));\n    };\n    const deleteCaret$3 = (editor, forward, startElm) => {\n      const rootElm = SugarElement.fromDom(editor.getBody());\n      return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n    };\n    const backspaceDelete$a = (editor, forward) => {\n      const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n      const cells = getCellsFromEditor(editor);\n      return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$3(editor, startElm, cells);\n    };\n\n    const getContentEditableRoot$1 = (root, node) => {\n      let tempNode = node;\n      while (tempNode && tempNode !== root) {\n        if (isContentEditableTrue$3(tempNode) || isContentEditableFalse$b(tempNode)) {\n          return tempNode;\n        }\n        tempNode = tempNode.parentNode;\n      }\n      return null;\n    };\n\n    const internalAttributesPrefixes = [\n      'data-ephox-',\n      'data-mce-',\n      'data-alloy-',\n      'data-snooker-',\n      '_'\n    ];\n    const each$9 = Tools.each;\n    const ElementUtils = editor => {\n      const dom = editor.dom;\n      const internalAttributes = new Set(editor.serializer.getTempAttrs());\n      const compare = (node1, node2) => {\n        if (node1.nodeName !== node2.nodeName || node1.nodeType !== node2.nodeType) {\n          return false;\n        }\n        const getAttribs = node => {\n          const attribs = {};\n          each$9(dom.getAttribs(node), attr => {\n            const name = attr.nodeName.toLowerCase();\n            if (name !== 'style' && !isAttributeInternal(name)) {\n              attribs[name] = dom.getAttrib(node, name);\n            }\n          });\n          return attribs;\n        };\n        const compareObjects = (obj1, obj2) => {\n          for (const name in obj1) {\n            if (has$2(obj1, name)) {\n              const value = obj2[name];\n              if (isUndefined(value)) {\n                return false;\n              }\n              if (obj1[name] !== value) {\n                return false;\n              }\n              delete obj2[name];\n            }\n          }\n          for (const name in obj2) {\n            if (has$2(obj2, name)) {\n              return false;\n            }\n          }\n          return true;\n        };\n        if (isElement$6(node1) && isElement$6(node2)) {\n          if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n            return false;\n          }\n          if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n            return false;\n          }\n        }\n        return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n      };\n      const isAttributeInternal = attributeName => exists(internalAttributesPrefixes, value => startsWith(attributeName, value)) || internalAttributes.has(attributeName);\n      return {\n        compare,\n        isAttributeInternal\n      };\n    };\n\n    const isHeading = node => [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6'\n    ].includes(node.name);\n    const isSummary = node => node.name === 'summary';\n\n    const traverse = (root, fn) => {\n      let node = root;\n      while (node = node.walk()) {\n        fn(node);\n      }\n    };\n    const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n      const name = node.name;\n      for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n        const filter = nodeFilters[ni];\n        if (filter.name === name) {\n          const match = matches.nodes[name];\n          if (match) {\n            match.nodes.push(node);\n          } else {\n            matches.nodes[name] = {\n              filter,\n              nodes: [node]\n            };\n          }\n        }\n      }\n      if (node.attributes) {\n        for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n          const filter = attributeFilters[ai];\n          const attrName = filter.name;\n          if (attrName in node.attributes.map) {\n            const match = matches.attributes[attrName];\n            if (match) {\n              match.nodes.push(node);\n            } else {\n              matches.attributes[attrName] = {\n                filter,\n                nodes: [node]\n              };\n            }\n          }\n        }\n      }\n    };\n    const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n      const matches = {\n        nodes: {},\n        attributes: {}\n      };\n      if (node.firstChild) {\n        traverse(node, childNode => {\n          matchNode$1(nodeFilters, attributeFilters, childNode, matches);\n        });\n      }\n      return matches;\n    };\n    const runFilters = (matches, args) => {\n      const run = (matchRecord, filteringAttributes) => {\n        each$d(matchRecord, match => {\n          const nodes = from(match.nodes);\n          each$e(match.filter.callbacks, callback => {\n            for (let i = nodes.length - 1; i >= 0; i--) {\n              const node = nodes[i];\n              const valueMatches = filteringAttributes ? node.attr(match.filter.name) !== undefined : node.name === match.filter.name;\n              if (!valueMatches || isNullable(node.parent)) {\n                nodes.splice(i, 1);\n              }\n            }\n            if (nodes.length > 0) {\n              callback(nodes, match.filter.name, args);\n            }\n          });\n        });\n      };\n      run(matches.nodes, false);\n      run(matches.attributes, true);\n    };\n    const filter$2 = (nodeFilters, attributeFilters, node, args = {}) => {\n      const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n      runFilters(matches, args);\n    };\n\n    const paddEmptyNode = (settings, args, isBlock, node) => {\n      const brPreferred = settings.pad_empty_with_br || args.insert;\n      if (brPreferred && isBlock(node)) {\n        const astNode = new AstNode('br', 1);\n        if (args.insert) {\n          astNode.attr('data-mce-bogus', '1');\n        }\n        node.empty().append(astNode);\n      } else {\n        node.empty().append(new AstNode('#text', 3)).value = nbsp;\n      }\n    };\n    const isPaddedWithNbsp = node => {\n      var _a;\n      return hasOnlyChild(node, '#text') && ((_a = node === null || node === void 0 ? void 0 : node.firstChild) === null || _a === void 0 ? void 0 : _a.value) === nbsp;\n    };\n    const hasOnlyChild = (node, name) => {\n      const firstChild = node === null || node === void 0 ? void 0 : node.firstChild;\n      return isNonNullable(firstChild) && firstChild === node.lastChild && firstChild.name === name;\n    };\n    const isPadded = (schema, node) => {\n      const rule = schema.getElementRule(node.name);\n      return (rule === null || rule === void 0 ? void 0 : rule.paddEmpty) === true;\n    };\n    const isEmpty = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, node => isPadded(schema, node));\n    const isLineBreakNode = (node, isBlock) => isNonNullable(node) && (isBlock(node) || node.name === 'br');\n    const findClosestEditingHost = scope => {\n      let editableNode;\n      for (let node = scope; node; node = node.parent) {\n        const contentEditable = node.attr('contenteditable');\n        if (contentEditable === 'false') {\n          break;\n        } else if (contentEditable === 'true') {\n          editableNode = node;\n        }\n      }\n      return Optional.from(editableNode);\n    };\n\n    const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n      if (schema.getSpecialElements()[node.name]) {\n        node.empty().remove();\n      } else {\n        const children = node.children();\n        for (const childNode of children) {\n          if (originalNodeParent && !schema.isValidChild(originalNodeParent.name, childNode.name)) {\n            removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n          }\n        }\n        node.unwrap();\n      }\n    };\n    const cleanInvalidNodes = (nodes, schema, rootNode, onCreate = noop) => {\n      const textBlockElements = schema.getTextBlockElements();\n      const nonEmptyElements = schema.getNonEmptyElements();\n      const whitespaceElements = schema.getWhitespaceElements();\n      const nonSplittableElements = Tools.makeMap('tr,td,th,tbody,thead,tfoot,table,summary');\n      const fixed = new Set();\n      const isSplittableElement = node => node !== rootNode && !nonSplittableElements[node.name];\n      for (let ni = 0; ni < nodes.length; ni++) {\n        const node = nodes[ni];\n        let parent;\n        let newParent;\n        let tempNode;\n        if (!node.parent || fixed.has(node)) {\n          continue;\n        }\n        if (textBlockElements[node.name] && node.parent.name === 'li') {\n          let sibling = node.next;\n          while (sibling) {\n            if (textBlockElements[sibling.name]) {\n              sibling.name = 'li';\n              fixed.add(sibling);\n              node.parent.insert(sibling, node.parent);\n            } else {\n              break;\n            }\n            sibling = sibling.next;\n          }\n          node.unwrap();\n          continue;\n        }\n        const parents = [node];\n        for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && isSplittableElement(parent); parent = parent.parent) {\n          parents.push(parent);\n        }\n        if (parent && parents.length > 1) {\n          if (!isInvalid(schema, node, parent)) {\n            parents.reverse();\n            newParent = parents[0].clone();\n            onCreate(newParent);\n            let currentNode = newParent;\n            for (let i = 0; i < parents.length - 1; i++) {\n              if (schema.isValidChild(currentNode.name, parents[i].name) && i > 0) {\n                tempNode = parents[i].clone();\n                onCreate(tempNode);\n                currentNode.append(tempNode);\n              } else {\n                tempNode = currentNode;\n              }\n              for (let childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n                const nextNode = childNode.next;\n                tempNode.append(childNode);\n                childNode = nextNode;\n              }\n              currentNode = tempNode;\n            }\n            if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n              parent.insert(newParent, parents[0], true);\n              parent.insert(node, newParent);\n            } else {\n              parent.insert(node, parents[0], true);\n            }\n            parent = parents[0];\n            if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n              parent.empty().remove();\n            }\n          } else {\n            removeOrUnwrapInvalidNode(node, schema);\n          }\n        } else if (node.parent) {\n          if (node.name === 'li') {\n            let sibling = node.prev;\n            if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n              sibling.append(node);\n              continue;\n            }\n            sibling = node.next;\n            if (sibling && (sibling.name === 'ul' || sibling.name === 'ol') && sibling.firstChild) {\n              sibling.insert(node, sibling.firstChild, true);\n              continue;\n            }\n            const wrapper = new AstNode('ul', 1);\n            onCreate(wrapper);\n            node.wrap(wrapper);\n            continue;\n          }\n          if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n            const wrapper = new AstNode('div', 1);\n            onCreate(wrapper);\n            node.wrap(wrapper);\n          } else {\n            removeOrUnwrapInvalidNode(node, schema);\n          }\n        }\n      }\n    };\n    const hasClosest = (node, parentName) => {\n      let tempNode = node;\n      while (tempNode) {\n        if (tempNode.name === parentName) {\n          return true;\n        }\n        tempNode = tempNode.parent;\n      }\n      return false;\n    };\n    const isInvalid = (schema, node, parent = node.parent) => {\n      if (!parent) {\n        return false;\n      }\n      if (schema.children[node.name] && !schema.isValidChild(parent.name, node.name)) {\n        return true;\n      }\n      if (node.name === 'a' && hasClosest(parent, 'a')) {\n        return true;\n      }\n      if (isSummary(parent) && isHeading(node)) {\n        return !((parent === null || parent === void 0 ? void 0 : parent.firstChild) === node && (parent === null || parent === void 0 ? void 0 : parent.lastChild) === node);\n      }\n      return false;\n    };\n\n    const createRange = (sc, so, ec, eo) => {\n      const rng = document.createRange();\n      rng.setStart(sc, so);\n      rng.setEnd(ec, eo);\n      return rng;\n    };\n    const normalizeBlockSelectionRange = rng => {\n      const startPos = CaretPosition.fromRangeStart(rng);\n      const endPos = CaretPosition.fromRangeEnd(rng);\n      const rootNode = rng.commonAncestorContainer;\n      return fromPosition(false, rootNode, endPos).map(newEndPos => {\n        if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n          return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n        } else {\n          return rng;\n        }\n      }).getOr(rng);\n    };\n    const normalize = rng => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n\n    const hasOnlyOneChild$1 = node => {\n      return isNonNullable(node.firstChild) && node.firstChild === node.lastChild;\n    };\n    const isPaddingNode = node => {\n      return node.name === 'br' || node.value === nbsp;\n    };\n    const isPaddedEmptyBlock = (schema, node) => {\n      const blockElements = schema.getBlockElements();\n      return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n    };\n    const isEmptyFragmentElement = (schema, node) => {\n      const nonEmptyElements = schema.getNonEmptyElements();\n      return isNonNullable(node) && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n    };\n    const isListFragment = (schema, fragment) => {\n      let firstChild = fragment.firstChild;\n      let lastChild = fragment.lastChild;\n      if (firstChild && firstChild.name === 'meta') {\n        firstChild = firstChild.next;\n      }\n      if (lastChild && lastChild.attr('id') === 'mce_marker') {\n        lastChild = lastChild.prev;\n      }\n      if (isEmptyFragmentElement(schema, lastChild)) {\n        lastChild = lastChild === null || lastChild === void 0 ? void 0 : lastChild.prev;\n      }\n      if (!firstChild || firstChild !== lastChild) {\n        return false;\n      }\n      return firstChild.name === 'ul' || firstChild.name === 'ol';\n    };\n    const cleanupDomFragment = domFragment => {\n      var _a, _b;\n      const firstChild = domFragment.firstChild;\n      const lastChild = domFragment.lastChild;\n      if (firstChild && firstChild.nodeName === 'META') {\n        (_a = firstChild.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(firstChild);\n      }\n      if (lastChild && lastChild.id === 'mce_marker') {\n        (_b = lastChild.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(lastChild);\n      }\n      return domFragment;\n    };\n    const toDomFragment = (dom, serializer, fragment) => {\n      const html = serializer.serialize(fragment);\n      const domFragment = dom.createFragment(html);\n      return cleanupDomFragment(domFragment);\n    };\n    const listItems = elm => {\n      var _a;\n      return filter$5((_a = elm === null || elm === void 0 ? void 0 : elm.childNodes) !== null && _a !== void 0 ? _a : [], child => {\n        return child.nodeName === 'LI';\n      });\n    };\n    const isPadding = node => {\n      return node.data === nbsp || isBr$6(node);\n    };\n    const isListItemPadded = node => {\n      return isNonNullable(node === null || node === void 0 ? void 0 : node.firstChild) && node.firstChild === node.lastChild && isPadding(node.firstChild);\n    };\n    const isEmptyOrPadded = elm => {\n      return !elm.firstChild || isListItemPadded(elm);\n    };\n    const trimListItems = elms => {\n      return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n    };\n    const getParentLi = (dom, node) => {\n      const parentBlock = dom.getParent(node, dom.isBlock);\n      return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n    };\n    const isParentBlockLi = (dom, node) => {\n      return !!getParentLi(dom, node);\n    };\n    const getSplit = (parentNode, rng) => {\n      const beforeRng = rng.cloneRange();\n      const afterRng = rng.cloneRange();\n      beforeRng.setStartBefore(parentNode);\n      afterRng.setEndAfter(parentNode);\n      return [\n        beforeRng.cloneContents(),\n        afterRng.cloneContents()\n      ];\n    };\n    const findFirstIn = (node, rootNode) => {\n      const caretPos = CaretPosition.before(node);\n      const caretWalker = CaretWalker(rootNode);\n      const newCaretPos = caretWalker.next(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    const findLastOf = (node, rootNode) => {\n      const caretPos = CaretPosition.after(node);\n      const caretWalker = CaretWalker(rootNode);\n      const newCaretPos = caretWalker.prev(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    const insertMiddle = (target, elms, rootNode, rng) => {\n      const parts = getSplit(target, rng);\n      const parentElm = target.parentNode;\n      if (parentElm) {\n        parentElm.insertBefore(parts[0], target);\n        Tools.each(elms, li => {\n          parentElm.insertBefore(li, target);\n        });\n        parentElm.insertBefore(parts[1], target);\n        parentElm.removeChild(target);\n      }\n      return findLastOf(elms[elms.length - 1], rootNode);\n    };\n    const insertBefore$2 = (target, elms, rootNode) => {\n      const parentElm = target.parentNode;\n      if (parentElm) {\n        Tools.each(elms, elm => {\n          parentElm.insertBefore(elm, target);\n        });\n      }\n      return findFirstIn(target, rootNode);\n    };\n    const insertAfter$2 = (target, elms, rootNode, dom) => {\n      dom.insertAfter(elms.reverse(), target);\n      return findLastOf(elms[0], rootNode);\n    };\n    const insertAtCaret$1 = (serializer, dom, rng, fragment) => {\n      const domFragment = toDomFragment(dom, serializer, fragment);\n      const liTarget = getParentLi(dom, rng.startContainer);\n      const liElms = trimListItems(listItems(domFragment.firstChild));\n      const BEGINNING = 1, END = 2;\n      const rootNode = dom.getRoot();\n      const isAt = location => {\n        const caretPos = CaretPosition.fromRangeStart(rng);\n        const caretWalker = CaretWalker(dom.getRoot());\n        const newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n        const newPosNode = newPos === null || newPos === void 0 ? void 0 : newPos.getNode();\n        return newPosNode ? getParentLi(dom, newPosNode) !== liTarget : true;\n      };\n      if (!liTarget) {\n        return null;\n      } else if (isAt(BEGINNING)) {\n        return insertBefore$2(liTarget, liElms, rootNode);\n      } else if (isAt(END)) {\n        return insertAfter$2(liTarget, liElms, rootNode, dom);\n      } else {\n        return insertMiddle(liTarget, liElms, rootNode, rng);\n      }\n    };\n\n    const mergeableWrappedElements = ['pre'];\n    const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {\n      var _a;\n      const firstNode = fragment.firstChild;\n      const lastNode = fragment.lastChild;\n      const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;\n      const isPastingSingleElement = firstNode === last;\n      const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);\n      if (isPastingSingleElement && isWrappedElement) {\n        const isContentEditable = firstNode.attr('contenteditable') !== 'false';\n        const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;\n        const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$3);\n        return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;\n      } else {\n        return false;\n      }\n    };\n    const isTableCell = isTableCell$3;\n    const isTableCellContentSelected = (dom, rng, cell) => {\n      if (isNonNullable(cell)) {\n        const endCell = dom.getParent(rng.endContainer, isTableCell);\n        return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n      } else {\n        return false;\n      }\n    };\n    const validInsertion = (editor, value, parentNode) => {\n      var _a;\n      if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n        (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n      } else {\n        const node = parentNode.firstChild;\n        const node2 = parentNode.lastChild;\n        if (!node || node === node2 && node.nodeName === 'BR') {\n          editor.dom.setHTML(parentNode, value);\n        } else {\n          editor.selection.setContent(value, { no_events: true });\n        }\n      }\n    };\n    const trimBrsFromTableCell = (dom, elm, schema) => {\n      Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(el => trimBlockTrailingBr(el, schema));\n    };\n    const reduceInlineTextElements = (editor, merge) => {\n      const textInlineElements = editor.schema.getTextInlineElements();\n      const dom = editor.dom;\n      if (merge) {\n        const root = editor.getBody();\n        const elementUtils = ElementUtils(editor);\n        Tools.each(dom.select('*[data-mce-fragment]'), node => {\n          const isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n          if (isInline && hasInheritableStyles(dom, node)) {\n            for (let parentNode = node.parentElement; isNonNullable(parentNode) && parentNode !== root; parentNode = parentNode.parentElement) {\n              const styleConflict = hasStyleConflict(dom, node, parentNode);\n              if (styleConflict) {\n                break;\n              }\n              if (elementUtils.compare(parentNode, node)) {\n                dom.remove(node, true);\n                break;\n              }\n            }\n          }\n        });\n      }\n    };\n    const markFragmentElements = fragment => {\n      let node = fragment;\n      while (node = node.walk()) {\n        if (node.type === 1) {\n          node.attr('data-mce-fragment', '1');\n        }\n      }\n    };\n    const unmarkFragmentElements = elm => {\n      Tools.each(elm.getElementsByTagName('*'), elm => {\n        elm.removeAttribute('data-mce-fragment');\n      });\n    };\n    const isPartOfFragment = node => {\n      return !!node.getAttribute('data-mce-fragment');\n    };\n    const canHaveChildren = (editor, node) => {\n      return isNonNullable(node) && !editor.schema.getVoidElements()[node.nodeName];\n    };\n    const moveSelectionToMarker = (editor, marker) => {\n      var _a, _b, _c;\n      let nextRng;\n      const dom = editor.dom;\n      const selection = editor.selection;\n      if (!marker) {\n        return;\n      }\n      selection.scrollIntoView(marker);\n      const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n      if (parentEditableElm && dom.getContentEditable(parentEditableElm) === 'false') {\n        dom.remove(marker);\n        selection.select(parentEditableElm);\n        return;\n      }\n      let rng = dom.createRng();\n      const node = marker.previousSibling;\n      if (isText$a(node)) {\n        rng.setStart(node, (_b = (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);\n        const node2 = marker.nextSibling;\n        if (isText$a(node2)) {\n          node.appendData(node2.data);\n          (_c = node2.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(node2);\n        }\n      } else {\n        rng.setStartBefore(marker);\n        rng.setEndBefore(marker);\n      }\n      const findNextCaretRng = rng => {\n        let caretPos = CaretPosition.fromRangeStart(rng);\n        const caretWalker = CaretWalker(editor.getBody());\n        caretPos = caretWalker.next(caretPos);\n        return caretPos === null || caretPos === void 0 ? void 0 : caretPos.toRange();\n      };\n      const parentBlock = dom.getParent(marker, dom.isBlock);\n      dom.remove(marker);\n      if (parentBlock && dom.isEmpty(parentBlock)) {\n        const isCell = isTableCell(parentBlock);\n        empty(SugarElement.fromDom(parentBlock));\n        rng.setStart(parentBlock, 0);\n        rng.setEnd(parentBlock, 0);\n        if (!isCell && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n          rng = nextRng;\n          dom.remove(parentBlock);\n        } else {\n          dom.add(parentBlock, dom.create('br', isCell ? {} : { 'data-mce-bogus': '1' }));\n        }\n      }\n      selection.setRng(rng);\n    };\n    const deleteSelectedContent = editor => {\n      const dom = editor.dom;\n      const rng = normalize(editor.selection.getRng());\n      editor.selection.setRng(rng);\n      const startCell = dom.getParent(rng.startContainer, isTableCell);\n      if (isTableCellContentSelected(dom, rng, startCell)) {\n        deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n      } else if (rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset === 1 && isText$a(rng.startContainer.childNodes[rng.startOffset])) {\n        rng.deleteContents();\n      } else {\n        editor.getDoc().execCommand('Delete', false);\n      }\n    };\n    const findMarkerNode = scope => {\n      for (let markerNode = scope; markerNode; markerNode = markerNode.walk()) {\n        if (markerNode.attr('id') === 'mce_marker') {\n          return Optional.some(markerNode);\n        }\n      }\n      return Optional.none();\n    };\n    const notHeadingsInSummary = (dom, node, fragment) => {\n      var _a;\n      return exists(fragment.children(), isHeading) && ((_a = dom.getParent(node, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName) === 'SUMMARY';\n    };\n    const insertHtmlAtCaret = (editor, value, details) => {\n      var _a, _b;\n      const selection = editor.selection;\n      const dom = editor.dom;\n      const parser = editor.parser;\n      const merge = details.merge;\n      const serializer = HtmlSerializer({ validate: true }, editor.schema);\n      const bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;</span>';\n      if (!details.preserve_zwsp) {\n        value = trim$2(value);\n      }\n      if (value.indexOf('{$caret}') === -1) {\n        value += '{$caret}';\n      }\n      value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n      let rng = selection.getRng();\n      const caretElement = rng.startContainer;\n      const body = editor.getBody();\n      if (caretElement === body && selection.isCollapsed()) {\n        if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n          rng = dom.createRng();\n          rng.setStart(body.firstChild, 0);\n          rng.setEnd(body.firstChild, 0);\n          selection.setRng(rng);\n        }\n      }\n      if (!selection.isCollapsed()) {\n        deleteSelectedContent(editor);\n      }\n      const parentNode = selection.getNode();\n      const parserArgs = {\n        context: parentNode.nodeName.toLowerCase(),\n        data: details.data,\n        insert: true\n      };\n      const fragment = parser.parse(value, parserArgs);\n      if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n        rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n        if (rng) {\n          selection.setRng(rng);\n        }\n        return value;\n      }\n      if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {\n        (_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();\n      }\n      markFragmentElements(fragment);\n      let node = fragment.lastChild;\n      if (node && node.attr('id') === 'mce_marker') {\n        const marker = node;\n        for (node = node.prev; node; node = node.walk(true)) {\n          if (node.type === 3 || !dom.isBlock(node.name)) {\n            if (node.parent && editor.schema.isValidChild(node.parent.name, 'span')) {\n              node.parent.insert(marker, node, node.name === 'br');\n            }\n            break;\n          }\n        }\n      }\n      editor._selectionOverrides.showBlockCaretContainer(parentNode);\n      if (!parserArgs.invalid && !notHeadingsInSummary(dom, parentNode, fragment)) {\n        value = serializer.serialize(fragment);\n        validInsertion(editor, value, parentNode);\n      } else {\n        editor.selection.setContent(bookmarkHtml);\n        let parentNode = selection.getNode();\n        let tempNode;\n        const rootNode = editor.getBody();\n        if (isDocument$1(parentNode)) {\n          parentNode = tempNode = rootNode;\n        } else {\n          tempNode = parentNode;\n        }\n        while (tempNode && tempNode !== rootNode) {\n          parentNode = tempNode;\n          tempNode = tempNode.parentNode;\n        }\n        value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n        const root = parser.parse(value);\n        const markerNode = findMarkerNode(root);\n        const editingHost = markerNode.bind(findClosestEditingHost).getOr(root);\n        markerNode.each(marker => marker.replace(fragment));\n        const toExtract = fragment.children();\n        const parent = (_b = fragment.parent) !== null && _b !== void 0 ? _b : root;\n        fragment.unwrap();\n        const invalidChildren = filter$5(toExtract, node => isInvalid(editor.schema, node, parent));\n        cleanInvalidNodes(invalidChildren, editor.schema, editingHost);\n        filter$2(parser.getNodeFilters(), parser.getAttributeFilters(), root);\n        value = serializer.serialize(root);\n        if (parentNode === rootNode) {\n          dom.setHTML(rootNode, value);\n        } else {\n          dom.setOuterHTML(parentNode, value);\n        }\n      }\n      reduceInlineTextElements(editor, merge);\n      moveSelectionToMarker(editor, dom.get('mce_marker'));\n      unmarkFragmentElements(editor.getBody());\n      trimBrsFromTableCell(dom, selection.getStart(), editor.schema);\n      updateCaret(editor.schema, editor.getBody(), selection.getStart());\n      return value;\n    };\n\n    const isTreeNode = content => content instanceof AstNode;\n\n    const moveSelection = editor => {\n      if (hasFocus(editor)) {\n        firstPositionIn(editor.getBody()).each(pos => {\n          const node = pos.getNode();\n          const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n          editor.selection.setRng(caretPos.toRange());\n        });\n      }\n    };\n    const setEditorHtml = (editor, html, noSelection) => {\n      editor.dom.setHTML(editor.getBody(), html);\n      if (noSelection !== true) {\n        moveSelection(editor);\n      }\n    };\n    const setContentString = (editor, body, content, args) => {\n      content = trim$2(content);\n      if (content.length === 0 || /^\\s+$/.test(content)) {\n        const padd = '<br data-mce-bogus=\"1\">';\n        if (body.nodeName === 'TABLE') {\n          content = '<tr><td>' + padd + '</td></tr>';\n        } else if (/^(UL|OL)$/.test(body.nodeName)) {\n          content = '<li>' + padd + '</li>';\n        }\n        const forcedRootBlockName = getForcedRootBlock(editor);\n        if (editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n          content = padd;\n          content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n        } else if (!content) {\n          content = padd;\n        }\n        setEditorHtml(editor, content, args.no_selection);\n        return {\n          content,\n          html: content\n        };\n      } else {\n        if (args.format !== 'raw') {\n          content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n            isRootContent: true,\n            insert: true\n          }));\n        }\n        const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n        setEditorHtml(editor, trimmedHtml, args.no_selection);\n        return {\n          content: trimmedHtml,\n          html: trimmedHtml\n        };\n      }\n    };\n    const setContentTree = (editor, body, content, args) => {\n      filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n      const html = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n      const trimmedHtml = trim$2(isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html));\n      setEditorHtml(editor, trimmedHtml, args.no_selection);\n      return {\n        content,\n        html: trimmedHtml\n      };\n    };\n    const setContentInternal = (editor, content, args) => {\n      return Optional.from(editor.getBody()).map(body => {\n        if (isTreeNode(content)) {\n          return setContentTree(editor, body, content, args);\n        } else {\n          return setContentString(editor, body, content, args);\n        }\n      }).getOr({\n        content,\n        html: isTreeNode(args.content) ? '' : args.content\n      });\n    };\n\n    const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n    const ancestor = (scope, transform, isRoot) => {\n      let element = scope.dom;\n      const stop = ensureIsRoot(isRoot);\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        const transformed = transform(el);\n        if (transformed.isSome()) {\n          return transformed;\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$1 = (scope, transform, isRoot) => {\n      const current = transform(scope);\n      const stop = ensureIsRoot(isRoot);\n      return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop));\n    };\n\n    const isEq$3 = isEq$5;\n    const matchesUnInheritedFormatSelector = (ed, node, name) => {\n      const formatList = ed.formatter.get(name);\n      if (formatList) {\n        for (let i = 0; i < formatList.length; i++) {\n          const format = formatList[i];\n          if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const matchParents = (editor, node, name, vars, similar) => {\n      const root = editor.dom.getRoot();\n      if (node === root) {\n        return false;\n      }\n      const matchedNode = editor.dom.getParent(node, elm => {\n        if (matchesUnInheritedFormatSelector(editor, elm, name)) {\n          return true;\n        }\n        return elm.parentNode === root || !!matchNode(editor, elm, name, vars, true);\n      });\n      return !!matchNode(editor, matchedNode, name, vars, similar);\n    };\n    const matchName = (dom, node, format) => {\n      if (isInlineFormat(format) && isEq$3(node, format.inline)) {\n        return true;\n      }\n      if (isBlockFormat(format) && isEq$3(node, format.block)) {\n        return true;\n      }\n      if (isSelectorFormat(format)) {\n        return isElement$6(node) && dom.is(node, format.selector);\n      }\n      return false;\n    };\n    const matchItems = (dom, node, format, itemName, similar, vars) => {\n      const items = format[itemName];\n      const matchAttributes = itemName === 'attributes';\n      if (isFunction(format.onmatch)) {\n        return format.onmatch(node, format, itemName);\n      }\n      if (items) {\n        if (!isArrayLike(items)) {\n          for (const key in items) {\n            if (has$2(items, key)) {\n              const value = matchAttributes ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n              const expectedValue = replaceVars(items[key], vars);\n              const isEmptyValue = isNullable(value) || isEmpty$3(value);\n              if (isEmptyValue && isNullable(expectedValue)) {\n                continue;\n              }\n              if (similar && isEmptyValue && !format.exact) {\n                return false;\n              }\n              if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(expectedValue, key))) {\n                return false;\n              }\n            }\n          }\n        } else {\n          for (let i = 0; i < items.length; i++) {\n            if (matchAttributes ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n              return true;\n            }\n          }\n        }\n      }\n      return true;\n    };\n    const matchNode = (ed, node, name, vars, similar) => {\n      const formatList = ed.formatter.get(name);\n      const dom = ed.dom;\n      if (formatList && isElement$6(node)) {\n        for (let i = 0; i < formatList.length; i++) {\n          const format = formatList[i];\n          if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n            const classes = format.classes;\n            if (classes) {\n              for (let x = 0; x < classes.length; x++) {\n                if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n                  return;\n                }\n              }\n            }\n            return format;\n          }\n        }\n      }\n      return undefined;\n    };\n    const match$2 = (editor, name, vars, node, similar) => {\n      if (node) {\n        return matchParents(editor, node, name, vars, similar);\n      }\n      node = editor.selection.getNode();\n      if (matchParents(editor, node, name, vars, similar)) {\n        return true;\n      }\n      const startNode = editor.selection.getStart();\n      if (startNode !== node) {\n        if (matchParents(editor, startNode, name, vars, similar)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const matchAll = (editor, names, vars) => {\n      const matchedFormatNames = [];\n      const checkedMap = {};\n      const startElement = editor.selection.getStart();\n      editor.dom.getParent(startElement, node => {\n        for (let i = 0; i < names.length; i++) {\n          const name = names[i];\n          if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n            checkedMap[name] = true;\n            matchedFormatNames.push(name);\n          }\n        }\n      }, editor.dom.getRoot());\n      return matchedFormatNames;\n    };\n    const closest = (editor, names) => {\n      const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n      const match = (elm, name) => matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n      return Optional.from(editor.selection.getStart(true)).bind(rawElm => closest$1(SugarElement.fromDom(rawElm), elm => findMap(names, name => match(elm, name)), isRoot)).getOrNull();\n    };\n    const canApply = (editor, name) => {\n      const formatList = editor.formatter.get(name);\n      const dom = editor.dom;\n      if (formatList && editor.selection.isEditable()) {\n        const startNode = editor.selection.getStart();\n        const parents = getParents$2(dom, startNode);\n        for (let x = formatList.length - 1; x >= 0; x--) {\n          const format = formatList[x];\n          if (!isSelectorFormat(format)) {\n            return true;\n          }\n          for (let i = parents.length - 1; i >= 0; i--) {\n            if (dom.is(parents[i], format.selector)) {\n              return true;\n            }\n          }\n        }\n      }\n      return false;\n    };\n    const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name) => {\n      const matchSimilar = isVariableFormatName(editor, name);\n      if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n        return acc.concat([name]);\n      } else {\n        return acc;\n      }\n    }, []);\n\n    const ZWSP = ZWSP$1;\n    const importNode = (ownerDocument, node) => {\n      return ownerDocument.importNode(node, true);\n    };\n    const findFirstTextNode = node => {\n      if (node) {\n        const walker = new DomTreeWalker(node, node);\n        for (let tempNode = walker.current(); tempNode; tempNode = walker.next()) {\n          if (isText$a(tempNode)) {\n            return tempNode;\n          }\n        }\n      }\n      return null;\n    };\n    const createCaretContainer = fill => {\n      const caretContainer = SugarElement.fromTag('span');\n      setAll$1(caretContainer, {\n        'id': CARET_ID,\n        'data-mce-bogus': '1',\n        'data-mce-type': 'format-caret'\n      });\n      if (fill) {\n        append$1(caretContainer, SugarElement.fromText(ZWSP));\n      }\n      return caretContainer;\n    };\n    const trimZwspFromCaretContainer = caretContainerNode => {\n      const textNode = findFirstTextNode(caretContainerNode);\n      if (textNode && textNode.data.charAt(0) === ZWSP) {\n        textNode.deleteData(0, 1);\n      }\n      return textNode;\n    };\n    const removeCaretContainerNode = (editor, node, moveCaret) => {\n      const dom = editor.dom, selection = editor.selection;\n      if (isCaretContainerEmpty(node)) {\n        deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret, true);\n      } else {\n        const rng = selection.getRng();\n        const block = dom.getParent(node, dom.isBlock);\n        const startContainer = rng.startContainer;\n        const startOffset = rng.startOffset;\n        const endContainer = rng.endContainer;\n        const endOffset = rng.endOffset;\n        const textNode = trimZwspFromCaretContainer(node);\n        dom.remove(node, true);\n        if (startContainer === textNode && startOffset > 0) {\n          rng.setStart(textNode, startOffset - 1);\n        }\n        if (endContainer === textNode && endOffset > 0) {\n          rng.setEnd(textNode, endOffset - 1);\n        }\n        if (block && dom.isEmpty(block)) {\n          fillWithPaddingBr(SugarElement.fromDom(block));\n        }\n        selection.setRng(rng);\n      }\n    };\n    const removeCaretContainer = (editor, node, moveCaret) => {\n      const dom = editor.dom, selection = editor.selection;\n      if (!node) {\n        node = getParentCaretContainer(editor.getBody(), selection.getStart());\n        if (!node) {\n          while (node = dom.get(CARET_ID)) {\n            removeCaretContainerNode(editor, node, moveCaret);\n          }\n        }\n      } else {\n        removeCaretContainerNode(editor, node, moveCaret);\n      }\n    };\n    const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n      var _a, _b;\n      const dom = editor.dom;\n      const block = dom.getParent(formatNode, curry(isTextBlock$1, editor.schema));\n      if (block && dom.isEmpty(block)) {\n        (_a = formatNode.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(caretContainer, formatNode);\n      } else {\n        removeTrailingBr(SugarElement.fromDom(formatNode));\n        if (dom.isEmpty(formatNode)) {\n          (_b = formatNode.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(caretContainer, formatNode);\n        } else {\n          dom.insertAfter(caretContainer, formatNode);\n        }\n      }\n    };\n    const appendNode = (parentNode, node) => {\n      parentNode.appendChild(node);\n      return node;\n    };\n    const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n      var _a;\n      const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n        return appendNode(parentNode, formatNode.cloneNode(false));\n      }, caretContainer);\n      const doc = (_a = innerMostFormatNode.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      return appendNode(innerMostFormatNode, doc.createTextNode(ZWSP));\n    };\n    const cleanFormatNode = (editor, caretContainer, formatNode, name, vars, similar) => {\n      const formatter = editor.formatter;\n      const dom = editor.dom;\n      const validFormats = filter$5(keys(formatter.get()), formatName => formatName !== name && !contains$1(formatName, 'removeformat'));\n      const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n      const uniqueFormats = filter$5(matchedFormats, fmtName => !areSimilarFormats(editor, fmtName, name));\n      if (uniqueFormats.length > 0) {\n        const clonedFormatNode = formatNode.cloneNode(false);\n        dom.add(caretContainer, clonedFormatNode);\n        formatter.remove(name, vars, clonedFormatNode, similar);\n        dom.remove(clonedFormatNode);\n        return Optional.some(clonedFormatNode);\n      } else {\n        return Optional.none();\n      }\n    };\n    const applyCaretFormat = (editor, name, vars) => {\n      let caretContainer;\n      const selection = editor.selection;\n      const formatList = editor.formatter.get(name);\n      if (!formatList) {\n        return;\n      }\n      const selectionRng = selection.getRng();\n      let offset = selectionRng.startOffset;\n      const container = selectionRng.startContainer;\n      const text = container.nodeValue;\n      caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n      const wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n      if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n        const bookmark = selection.getBookmark();\n        selectionRng.collapse(true);\n        let rng = expandRng(editor.dom, selectionRng, formatList);\n        rng = split(rng);\n        editor.formatter.apply(name, vars, rng);\n        selection.moveToBookmark(bookmark);\n      } else {\n        let textNode = caretContainer ? findFirstTextNode(caretContainer) : null;\n        if (!caretContainer || (textNode === null || textNode === void 0 ? void 0 : textNode.data) !== ZWSP) {\n          caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n          textNode = caretContainer.firstChild;\n          selectionRng.insertNode(caretContainer);\n          offset = 1;\n          editor.formatter.apply(name, vars, caretContainer);\n        } else {\n          editor.formatter.apply(name, vars, caretContainer);\n        }\n        selection.setCursorLocation(textNode, offset);\n      }\n    };\n    const removeCaretFormat = (editor, name, vars, similar) => {\n      const dom = editor.dom;\n      const selection = editor.selection;\n      let hasContentAfter = false;\n      const formatList = editor.formatter.get(name);\n      if (!formatList) {\n        return;\n      }\n      const rng = selection.getRng();\n      const container = rng.startContainer;\n      const offset = rng.startOffset;\n      let node = container;\n      if (isText$a(container)) {\n        if (offset !== container.data.length) {\n          hasContentAfter = true;\n        }\n        node = node.parentNode;\n      }\n      const parents = [];\n      let formatNode;\n      while (node) {\n        if (matchNode(editor, node, name, vars, similar)) {\n          formatNode = node;\n          break;\n        }\n        if (node.nextSibling) {\n          hasContentAfter = true;\n        }\n        parents.push(node);\n        node = node.parentNode;\n      }\n      if (!formatNode) {\n        return;\n      }\n      if (hasContentAfter) {\n        const bookmark = selection.getBookmark();\n        rng.collapse(true);\n        let expandedRng = expandRng(dom, rng, formatList, true);\n        expandedRng = split(expandedRng);\n        editor.formatter.remove(name, vars, expandedRng, similar);\n        selection.moveToBookmark(bookmark);\n      } else {\n        const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n        const parentsAfter = isNonNullable(caretContainer) ? dom.getParents(formatNode.parentNode, always, caretContainer) : [];\n        const newCaretContainer = createCaretContainer(false).dom;\n        insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null && caretContainer !== void 0 ? caretContainer : formatNode);\n        const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n        const caretTextNode = insertFormatNodesIntoCaretContainer([\n          ...parents,\n          ...cleanedFormatNode.toArray(),\n          ...parentsAfter\n        ], newCaretContainer);\n        if (caretContainer) {\n          removeCaretContainerNode(editor, caretContainer, isNonNullable(caretContainer));\n        }\n        selection.setCursorLocation(caretTextNode, 1);\n        if (dom.isEmpty(formatNode)) {\n          dom.remove(formatNode);\n        }\n      }\n    };\n    const disableCaretContainer = (editor, keyCode, moveCaret) => {\n      const selection = editor.selection, body = editor.getBody();\n      removeCaretContainer(editor, null, moveCaret);\n      if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n      }\n      if (keyCode === 37 || keyCode === 39) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n      }\n    };\n    const endsWithNbsp = element => isText$a(element) && endsWith(element.data, nbsp);\n    const setup$v = editor => {\n      editor.on('mouseup keydown', e => {\n        disableCaretContainer(editor, e.keyCode, endsWithNbsp(editor.selection.getRng().endContainer));\n      });\n    };\n    const createCaretFormat = formatNodes => {\n      const caretContainer = createCaretContainer(false);\n      const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n      return {\n        caretContainer,\n        caretPosition: CaretPosition(innerMost, 0)\n      };\n    };\n    const replaceWithCaretFormat = (targetNode, formatNodes) => {\n      const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n      before$3(SugarElement.fromDom(targetNode), caretContainer);\n      remove$5(SugarElement.fromDom(targetNode));\n      return caretPosition;\n    };\n    const createCaretFormatAtStart$1 = (rng, formatNodes) => {\n      const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n      rng.insertNode(caretContainer.dom);\n      return caretPosition;\n    };\n    const isFormatElement = (editor, element) => {\n      if (isCaretNode(element.dom)) {\n        return false;\n      }\n      const inlineElements = editor.schema.getTextInlineElements();\n      return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n    };\n\n    const postProcessHooks = {};\n    const isPre = matchNodeNames(['pre']);\n    const addPostProcessHook = (name, hook) => {\n      const hooks = postProcessHooks[name];\n      if (!hooks) {\n        postProcessHooks[name] = [];\n      }\n      postProcessHooks[name].push(hook);\n    };\n    const postProcess$1 = (name, editor) => {\n      if (has$2(postProcessHooks, name)) {\n        each$e(postProcessHooks[name], hook => {\n          hook(editor);\n        });\n      }\n    };\n    addPostProcessHook('pre', editor => {\n      const rng = editor.selection.getRng();\n      const hasPreSibling = blocks => pre => {\n        const prev = pre.previousSibling;\n        return isPre(prev) && contains$2(blocks, prev);\n      };\n      const joinPre = (pre1, pre2) => {\n        const sPre2 = SugarElement.fromDom(pre2);\n        const doc = documentOrOwner(sPre2).dom;\n        remove$5(sPre2);\n        append(SugarElement.fromDom(pre1), [\n          SugarElement.fromTag('br', doc),\n          SugarElement.fromTag('br', doc),\n          ...children$1(sPre2)\n        ]);\n      };\n      if (!rng.collapsed) {\n        const blocks = editor.selection.getSelectedBlocks();\n        const preBlocks = filter$5(filter$5(blocks, isPre), hasPreSibling(blocks));\n        each$e(preBlocks, pre => {\n          joinPre(pre.previousSibling, pre);\n        });\n      }\n    });\n\n    const listItemStyles = [\n      'fontWeight',\n      'fontStyle',\n      'color',\n      'fontSize',\n      'fontFamily'\n    ];\n    const hasListStyles = fmt => isObject(fmt.styles) && exists(keys(fmt.styles), name => contains$2(listItemStyles, name));\n    const findExpandedListItemFormat = formats => find$2(formats, fmt => isInlineFormat(fmt) && fmt.inline === 'span' && hasListStyles(fmt));\n    const getExpandedListItemFormat = (formatter, format) => {\n      const formatList = formatter.get(format);\n      return isArray$1(formatList) ? findExpandedListItemFormat(formatList) : Optional.none();\n    };\n    const isRngStartAtStartOfElement = (rng, elm) => prevPosition(elm, CaretPosition.fromRangeStart(rng)).isNone();\n    const isRngEndAtEndOfElement = (rng, elm) => {\n      return nextPosition(elm, CaretPosition.fromRangeEnd(rng)).exists(pos => !isBr$6(pos.getNode()) || nextPosition(elm, pos).isSome()) === false;\n    };\n    const isEditableListItem = dom => elm => isListItem$2(elm) && dom.isEditable(elm);\n    const getFullySelectedBlocks = selection => {\n      const blocks = selection.getSelectedBlocks();\n      const rng = selection.getRng();\n      if (selection.isCollapsed()) {\n        return [];\n      }\n      if (blocks.length === 1) {\n        return isRngStartAtStartOfElement(rng, blocks[0]) && isRngEndAtEndOfElement(rng, blocks[0]) ? blocks : [];\n      } else {\n        const first = head(blocks).filter(elm => isRngStartAtStartOfElement(rng, elm)).toArray();\n        const last = last$3(blocks).filter(elm => isRngEndAtEndOfElement(rng, elm)).toArray();\n        const middle = blocks.slice(1, -1);\n        return first.concat(middle).concat(last);\n      }\n    };\n    const getFullySelectedListItems = selection => filter$5(getFullySelectedBlocks(selection), isEditableListItem(selection.dom));\n    const getPartiallySelectedListItems = selection => filter$5(selection.getSelectedBlocks(), isEditableListItem(selection.dom));\n\n    const each$8 = Tools.each;\n    const isElementNode = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n    const findElementSibling = (node, siblingName) => {\n      for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n        if (isText$a(sibling) && isNotEmpty(sibling.data)) {\n          return node;\n        }\n        if (isElement$6(sibling) && !isBookmarkNode$1(sibling)) {\n          return sibling;\n        }\n      }\n      return node;\n    };\n    const mergeSiblingsNodes = (editor, prev, next) => {\n      const elementUtils = ElementUtils(editor);\n      const isPrevEditable = isHTMLElement(prev) && editor.dom.isEditable(prev);\n      const isNextEditable = isHTMLElement(next) && editor.dom.isEditable(next);\n      if (isPrevEditable && isNextEditable) {\n        const prevSibling = findElementSibling(prev, 'previousSibling');\n        const nextSibling = findElementSibling(next, 'nextSibling');\n        if (elementUtils.compare(prevSibling, nextSibling)) {\n          for (let sibling = prevSibling.nextSibling; sibling && sibling !== nextSibling;) {\n            const tmpSibling = sibling;\n            sibling = sibling.nextSibling;\n            prevSibling.appendChild(tmpSibling);\n          }\n          editor.dom.remove(nextSibling);\n          Tools.each(Tools.grep(nextSibling.childNodes), node => {\n            prevSibling.appendChild(node);\n          });\n          return prevSibling;\n        }\n      }\n      return next;\n    };\n    const mergeSiblings = (editor, format, vars, node) => {\n      var _a;\n      if (node && format.merge_siblings !== false) {\n        const newNode = (_a = mergeSiblingsNodes(editor, getNonWhiteSpaceSibling(node), node)) !== null && _a !== void 0 ? _a : node;\n        mergeSiblingsNodes(editor, newNode, getNonWhiteSpaceSibling(newNode, true));\n      }\n    };\n    const clearChildStyles = (dom, format, node) => {\n      if (format.clear_child_styles) {\n        const selector = format.links ? '*:not(a)' : '*';\n        each$8(dom.select(selector, node), childNode => {\n          if (isElementNode(childNode) && dom.isEditable(childNode)) {\n            each$8(format.styles, (_value, name) => {\n              dom.setStyle(childNode, name, '');\n            });\n          }\n        });\n      }\n    };\n    const processChildElements = (node, filter, process) => {\n      each$8(node.childNodes, node => {\n        if (isElementNode(node)) {\n          if (filter(node)) {\n            process(node);\n          }\n          if (node.hasChildNodes()) {\n            processChildElements(node, filter, process);\n          }\n        }\n      });\n    };\n    const unwrapEmptySpan = (dom, node) => {\n      if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n        dom.remove(node, true);\n      }\n    };\n    const hasStyle = (dom, name) => node => !!(node && getStyle(dom, node, name));\n    const applyStyle = (dom, name, value) => node => {\n      dom.setStyle(node, name, value);\n      if (node.getAttribute('style') === '') {\n        node.removeAttribute('style');\n      }\n      unwrapEmptySpan(dom, node);\n    };\n\n    const removeResult = Adt.generate([\n      { keep: [] },\n      { rename: ['name'] },\n      { removed: [] }\n    ]);\n    const MCE_ATTR_RE = /^(src|href|style)$/;\n    const each$7 = Tools.each;\n    const isEq$2 = isEq$5;\n    const isTableCellOrRow = node => /^(TR|TH|TD)$/.test(node.nodeName);\n    const isChildOfInlineParent = (dom, node, parent) => dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n    const getContainer = (ed, rng, start) => {\n      let container = rng[start ? 'startContainer' : 'endContainer'];\n      let offset = rng[start ? 'startOffset' : 'endOffset'];\n      if (isElement$6(container)) {\n        const lastIdx = container.childNodes.length - 1;\n        if (!start && offset) {\n          offset--;\n        }\n        container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n      }\n      if (isText$a(container) && start && offset >= container.data.length) {\n        container = new DomTreeWalker(container, ed.getBody()).next() || container;\n      }\n      if (isText$a(container) && !start && offset === 0) {\n        container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n      }\n      return container;\n    };\n    const normalizeTableSelection = (node, start) => {\n      const prop = start ? 'firstChild' : 'lastChild';\n      const childNode = node[prop];\n      if (isTableCellOrRow(node) && childNode) {\n        if (node.nodeName === 'TR') {\n          return childNode[prop] || childNode;\n        } else {\n          return childNode;\n        }\n      }\n      return node;\n    };\n    const wrap$1 = (dom, node, name, attrs) => {\n      var _a;\n      const wrapper = dom.create(name, attrs);\n      (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrapper, node);\n      wrapper.appendChild(node);\n      return wrapper;\n    };\n    const wrapWithSiblings = (dom, node, next, name, attrs) => {\n      const start = SugarElement.fromDom(node);\n      const wrapper = SugarElement.fromDom(dom.create(name, attrs));\n      const siblings = next ? nextSiblings(start) : prevSiblings(start);\n      append(wrapper, siblings);\n      if (next) {\n        before$3(start, wrapper);\n        prepend(wrapper, start);\n      } else {\n        after$4(start, wrapper);\n        append$1(wrapper, start);\n      }\n      return wrapper.dom;\n    };\n    const isColorFormatAndAnchor = (node, format) => format.links && node.nodeName === 'A';\n    const removeNode = (ed, node, format) => {\n      const parentNode = node.parentNode;\n      let rootBlockElm;\n      const dom = ed.dom;\n      const forcedRootBlock = getForcedRootBlock(ed);\n      if (isBlockFormat(format)) {\n        if (parentNode === dom.getRoot()) {\n          if (!format.list_block || !isEq$2(node, format.list_block)) {\n            each$e(from(node.childNodes), node => {\n              if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n                if (!rootBlockElm) {\n                  rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n                  dom.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n                } else {\n                  rootBlockElm.appendChild(node);\n                }\n              } else {\n                rootBlockElm = null;\n              }\n            });\n          }\n        }\n      }\n      if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n        return;\n      }\n      dom.remove(node, true);\n    };\n    const processFormatAttrOrStyle = (name, value, vars) => {\n      if (isNumber(name)) {\n        return {\n          name: value,\n          value: null\n        };\n      } else {\n        return {\n          name,\n          value: replaceVars(value, vars)\n        };\n      }\n    };\n    const removeEmptyStyleAttributeIfNeeded = (dom, elm) => {\n      if (dom.getAttrib(elm, 'style') === '') {\n        elm.removeAttribute('style');\n        elm.removeAttribute('data-mce-style');\n      }\n    };\n    const removeStyles = (dom, elm, format, vars, compareNode) => {\n      let stylesModified = false;\n      each$7(format.styles, (value, name) => {\n        const {\n          name: styleName,\n          value: styleValue\n        } = processFormatAttrOrStyle(name, value, vars);\n        const normalizedStyleValue = normalizeStyleValue(styleValue, styleName);\n        if (format.remove_similar || isNull(styleValue) || !isElement$6(compareNode) || isEq$2(getStyle(dom, compareNode, styleName), normalizedStyleValue)) {\n          dom.setStyle(elm, styleName, '');\n        }\n        stylesModified = true;\n      });\n      if (stylesModified) {\n        removeEmptyStyleAttributeIfNeeded(dom, elm);\n      }\n    };\n    const removeListStyleFormats = (editor, name, vars) => {\n      if (name === 'removeformat') {\n        each$e(getPartiallySelectedListItems(editor.selection), li => {\n          each$e(listItemStyles, name => editor.dom.setStyle(li, name, ''));\n          removeEmptyStyleAttributeIfNeeded(editor.dom, li);\n        });\n      } else {\n        getExpandedListItemFormat(editor.formatter, name).each(liFmt => {\n          each$e(getPartiallySelectedListItems(editor.selection), li => removeStyles(editor.dom, li, liFmt, vars, null));\n        });\n      }\n    };\n    const removeNodeFormatInternal = (ed, format, vars, node, compareNode) => {\n      const dom = ed.dom;\n      const elementUtils = ElementUtils(ed);\n      const schema = ed.schema;\n      if (isInlineFormat(format) && isTransparentElementName(schema, format.inline) && isTransparentBlock(schema, node) && node.parentElement === ed.getBody()) {\n        removeNode(ed, node, format);\n        return removeResult.removed();\n      }\n      if (!format.ceFalseOverride && node && dom.getContentEditableParent(node) === 'false') {\n        return removeResult.keep();\n      }\n      if (node && !matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n        return removeResult.keep();\n      }\n      const elm = node;\n      const preserveAttributes = format.preserve_attributes;\n      if (isInlineFormat(format) && format.remove === 'all' && isArray$1(preserveAttributes)) {\n        const attrsToPreserve = filter$5(dom.getAttribs(elm), attr => contains$2(preserveAttributes, attr.name.toLowerCase()));\n        dom.removeAllAttribs(elm);\n        each$e(attrsToPreserve, attr => dom.setAttrib(elm, attr.name, attr.value));\n        if (attrsToPreserve.length > 0) {\n          return removeResult.rename('span');\n        }\n      }\n      if (format.remove !== 'all') {\n        removeStyles(dom, elm, format, vars, compareNode);\n        each$7(format.attributes, (value, name) => {\n          const {\n            name: attrName,\n            value: attrValue\n          } = processFormatAttrOrStyle(name, value, vars);\n          if (format.remove_similar || isNull(attrValue) || !isElement$6(compareNode) || isEq$2(dom.getAttrib(compareNode, attrName), attrValue)) {\n            if (attrName === 'class') {\n              const currentValue = dom.getAttrib(elm, attrName);\n              if (currentValue) {\n                let valueOut = '';\n                each$e(currentValue.split(/\\s+/), cls => {\n                  if (/mce\\-\\w+/.test(cls)) {\n                    valueOut += (valueOut ? ' ' : '') + cls;\n                  }\n                });\n                if (valueOut) {\n                  dom.setAttrib(elm, attrName, valueOut);\n                  return;\n                }\n              }\n            }\n            if (MCE_ATTR_RE.test(attrName)) {\n              elm.removeAttribute('data-mce-' + attrName);\n            }\n            if (attrName === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n              elm.removeAttribute(attrName);\n              dom.setStyle(elm, 'list-style-type', 'none');\n              return;\n            }\n            if (attrName === 'class') {\n              elm.removeAttribute('className');\n            }\n            elm.removeAttribute(attrName);\n          }\n        });\n        each$7(format.classes, value => {\n          value = replaceVars(value, vars);\n          if (!isElement$6(compareNode) || dom.hasClass(compareNode, value)) {\n            dom.removeClass(elm, value);\n          }\n        });\n        const attrs = dom.getAttribs(elm);\n        for (let i = 0; i < attrs.length; i++) {\n          const attrName = attrs[i].nodeName;\n          if (!elementUtils.isAttributeInternal(attrName)) {\n            return removeResult.keep();\n          }\n        }\n      }\n      if (format.remove !== 'none') {\n        removeNode(ed, elm, format);\n        return removeResult.removed();\n      }\n      return removeResult.keep();\n    };\n    const findFormatRoot = (editor, container, name, vars, similar) => {\n      let formatRoot;\n      if (container.parentNode) {\n        each$e(getParents$2(editor.dom, container.parentNode).reverse(), parent => {\n          if (!formatRoot && isElement$6(parent) && parent.id !== '_start' && parent.id !== '_end') {\n            const format = matchNode(editor, parent, name, vars, similar);\n            if (format && format.split !== false) {\n              formatRoot = parent;\n            }\n          }\n        });\n      }\n      return formatRoot;\n    };\n    const removeNodeFormatFromClone = (editor, format, vars, clone) => removeNodeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), newName => {\n      const fragment = editor.dom.createFragment();\n      fragment.appendChild(clone);\n      return editor.dom.rename(clone, newName);\n    }, constant(null));\n    const wrapAndSplit = (editor, formatList, formatRoot, container, target, split, format, vars) => {\n      var _a, _b;\n      let lastClone;\n      let firstClone;\n      const dom = editor.dom;\n      if (formatRoot) {\n        const formatRootParent = formatRoot.parentNode;\n        for (let parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n          let clone = dom.clone(parent, false);\n          for (let i = 0; i < formatList.length; i++) {\n            clone = removeNodeFormatFromClone(editor, formatList[i], vars, clone);\n            if (clone === null) {\n              break;\n            }\n          }\n          if (clone) {\n            if (lastClone) {\n              clone.appendChild(lastClone);\n            }\n            if (!firstClone) {\n              firstClone = clone;\n            }\n            lastClone = clone;\n          }\n        }\n        if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n          container = (_a = dom.split(formatRoot, container)) !== null && _a !== void 0 ? _a : container;\n        }\n        if (lastClone && firstClone) {\n          (_b = target.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(lastClone, target);\n          firstClone.appendChild(target);\n          if (isInlineFormat(format)) {\n            mergeSiblings(editor, format, vars, lastClone);\n          }\n        }\n      }\n      return container;\n    };\n    const removeFormatInternal = (ed, name, vars, node, similar) => {\n      const formatList = ed.formatter.get(name);\n      const format = formatList[0];\n      const dom = ed.dom;\n      const selection = ed.selection;\n      const splitToFormatRoot = container => {\n        const formatRoot = findFormatRoot(ed, container, name, vars, similar);\n        return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n      };\n      const isRemoveBookmarkNode = node => isBookmarkNode$1(node) && isElement$6(node) && (node.id === '_start' || node.id === '_end');\n      const removeFormatOnNode = node => exists(formatList, fmt => removeNodeFormat(ed, fmt, vars, node, node));\n      const process = node => {\n        const children = from(node.childNodes);\n        const removed = removeFormatOnNode(node);\n        const currentNodeMatches = removed || exists(formatList, f => matchName(dom, node, f));\n        const parentNode = node.parentNode;\n        if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n          removeFormatOnNode(parentNode);\n        }\n        if (format.deep) {\n          if (children.length) {\n            for (let i = 0; i < children.length; i++) {\n              process(children[i]);\n            }\n          }\n        }\n        const textDecorations = [\n          'underline',\n          'line-through',\n          'overline'\n        ];\n        each$e(textDecorations, decoration => {\n          if (isElement$6(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n            removeNodeFormat(ed, {\n              deep: false,\n              exact: true,\n              inline: 'span',\n              styles: { textDecoration: decoration }\n            }, undefined, node);\n          }\n        });\n      };\n      const unwrap = start => {\n        const node = dom.get(start ? '_start' : '_end');\n        if (node) {\n          let out = node[start ? 'firstChild' : 'lastChild'];\n          if (isRemoveBookmarkNode(out)) {\n            out = out[start ? 'firstChild' : 'lastChild'];\n          }\n          if (isText$a(out) && out.data.length === 0) {\n            out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n          }\n          dom.remove(node, true);\n          return out;\n        } else {\n          return null;\n        }\n      };\n      const removeRngStyle = rng => {\n        let startContainer;\n        let endContainer;\n        let expandedRng = expandRng(dom, rng, formatList, rng.collapsed);\n        if (format.split) {\n          expandedRng = split(expandedRng);\n          startContainer = getContainer(ed, expandedRng, true);\n          endContainer = getContainer(ed, expandedRng);\n          if (startContainer !== endContainer) {\n            startContainer = normalizeTableSelection(startContainer, true);\n            endContainer = normalizeTableSelection(endContainer, false);\n            if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n              const marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n                'id': '_start',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(true);\n              return;\n            }\n            if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n              const marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n                'id': '_end',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(false);\n              return;\n            }\n            startContainer = wrap$1(dom, startContainer, 'span', {\n              'id': '_start',\n              'data-mce-type': 'bookmark'\n            });\n            endContainer = wrap$1(dom, endContainer, 'span', {\n              'id': '_end',\n              'data-mce-type': 'bookmark'\n            });\n            const newRng = dom.createRng();\n            newRng.setStartAfter(startContainer);\n            newRng.setEndBefore(endContainer);\n            walk$3(dom, newRng, nodes => {\n              each$e(nodes, n => {\n                if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n                  splitToFormatRoot(n);\n                }\n              });\n            });\n            splitToFormatRoot(startContainer);\n            splitToFormatRoot(endContainer);\n            startContainer = unwrap(true);\n            endContainer = unwrap();\n          } else {\n            startContainer = endContainer = splitToFormatRoot(startContainer);\n          }\n          expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n          expandedRng.startOffset = dom.nodeIndex(startContainer);\n          expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n          expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n        }\n        walk$3(dom, expandedRng, nodes => {\n          each$e(nodes, process);\n        });\n      };\n      if (node) {\n        if (isNode(node)) {\n          const rng = dom.createRng();\n          rng.setStartBefore(node);\n          rng.setEndAfter(node);\n          removeRngStyle(rng);\n        } else {\n          removeRngStyle(node);\n        }\n        fireFormatRemove(ed, name, node, vars);\n        return;\n      }\n      if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n        preserveSelection(ed, () => runOnRanges(ed, removeRngStyle), startNode => isInlineFormat(format) && match$2(ed, name, vars, startNode));\n        ed.nodeChanged();\n      } else {\n        removeCaretFormat(ed, name, vars, similar);\n      }\n      removeListStyleFormats(ed, name, vars);\n      fireFormatRemove(ed, name, node, vars);\n    };\n    const removeFormat$1 = (ed, name, vars, node, similar) => {\n      if (node || ed.selection.isEditable()) {\n        removeFormatInternal(ed, name, vars, node, similar);\n      }\n    };\n    const removeNodeFormat = (editor, format, vars, node, compareNode) => {\n      return removeNodeFormatInternal(editor, format, vars, node, compareNode).fold(never, newName => {\n        editor.dom.rename(node, newName);\n        return true;\n      }, always);\n    };\n\n    const each$6 = Tools.each;\n    const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n      const processTextDecorationsAndColor = n => {\n        if (isHTMLElement(n) && isElement$6(n.parentNode) && dom.isEditable(n)) {\n          const parentTextDecoration = getTextDecoration(dom, n.parentNode);\n          if (dom.getStyle(n, 'color') && parentTextDecoration) {\n            dom.setStyle(n, 'text-decoration', parentTextDecoration);\n          } else if (dom.getStyle(n, 'text-decoration') === parentTextDecoration) {\n            dom.setStyle(n, 'text-decoration', null);\n          }\n        }\n      };\n      if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n        Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n        processTextDecorationsAndColor(node);\n      }\n    };\n    const mergeBackgroundColorAndFontSize = (dom, format, vars, node) => {\n      if (format.styles && format.styles.backgroundColor) {\n        const hasFontSize = hasStyle(dom, 'fontSize');\n        processChildElements(node, elm => hasFontSize(elm) && dom.isEditable(elm), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n      }\n    };\n    const mergeSubSup = (dom, format, vars, node) => {\n      if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n        const hasFontSize = hasStyle(dom, 'fontSize');\n        processChildElements(node, elm => hasFontSize(elm) && dom.isEditable(elm), applyStyle(dom, 'fontSize', ''));\n        const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), dom.isEditable);\n        dom.remove(inverseTagDescendants, true);\n      }\n    };\n    const mergeWithChildren = (editor, formatList, vars, node) => {\n      each$6(formatList, format => {\n        if (isInlineFormat(format)) {\n          each$6(editor.dom.select(format.inline, node), child => {\n            if (isElementNode(child)) {\n              removeNodeFormat(editor, format, vars, child, format.exact ? child : null);\n            }\n          });\n        }\n        clearChildStyles(editor.dom, format, node);\n      });\n    };\n    const mergeWithParents = (editor, format, name, vars, node) => {\n      const parentNode = node.parentNode;\n      if (matchNode(editor, parentNode, name, vars)) {\n        if (removeNodeFormat(editor, format, vars, node)) {\n          return;\n        }\n      }\n      if (format.merge_with_parents && parentNode) {\n        editor.dom.getParent(parentNode, parent => {\n          if (matchNode(editor, parent, name, vars)) {\n            removeNodeFormat(editor, format, vars, node);\n            return true;\n          } else {\n            return false;\n          }\n        });\n      }\n    };\n\n    const each$5 = Tools.each;\n    const canFormatBR = (editor, format, node, parentName) => {\n      if (canFormatEmptyLines(editor) && isInlineFormat(format) && node.parentNode) {\n        const validBRParentElements = getTextRootBlockElements(editor.schema);\n        const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), sibling => isCaretNode(sibling.dom));\n        return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n      } else {\n        return false;\n      }\n    };\n    const applyStyles = (dom, elm, format, vars) => {\n      each$5(format.styles, (value, name) => {\n        dom.setStyle(elm, name, replaceVars(value, vars));\n      });\n      if (format.styles) {\n        const styleVal = dom.getAttrib(elm, 'style');\n        if (styleVal) {\n          dom.setAttrib(elm, 'data-mce-style', styleVal);\n        }\n      }\n    };\n    const applyFormatAction = (ed, name, vars, node) => {\n      const formatList = ed.formatter.get(name);\n      const format = formatList[0];\n      const isCollapsed = !node && ed.selection.isCollapsed();\n      const dom = ed.dom;\n      const selection = ed.selection;\n      const setElementFormat = (elm, fmt = format) => {\n        if (isFunction(fmt.onformat)) {\n          fmt.onformat(elm, fmt, vars, node);\n        }\n        applyStyles(dom, elm, fmt, vars);\n        each$5(fmt.attributes, (value, name) => {\n          dom.setAttrib(elm, name, replaceVars(value, vars));\n        });\n        each$5(fmt.classes, value => {\n          const newValue = replaceVars(value, vars);\n          if (!dom.hasClass(elm, newValue)) {\n            dom.addClass(elm, newValue);\n          }\n        });\n      };\n      const applyNodeStyle = (formatList, node) => {\n        let found = false;\n        each$5(formatList, format => {\n          if (!isSelectorFormat(format)) {\n            return false;\n          }\n          if (dom.getContentEditable(node) === 'false' && !format.ceFalseOverride) {\n            return true;\n          }\n          if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n            return true;\n          }\n          if (dom.is(node, format.selector) && !isCaretNode(node)) {\n            setElementFormat(node, format);\n            found = true;\n            return false;\n          }\n          return true;\n        });\n        return found;\n      };\n      const createWrapElement = wrapName => {\n        if (isString(wrapName)) {\n          const wrapElm = dom.create(wrapName);\n          setElementFormat(wrapElm);\n          return wrapElm;\n        } else {\n          return null;\n        }\n      };\n      const applyRngStyle = (dom, rng, nodeSpecific) => {\n        const newWrappers = [];\n        let contentEditable = true;\n        const wrapName = format.inline || format.block;\n        const wrapElm = createWrapElement(wrapName);\n        const isMatchingWrappingBlock = node => isWrappingBlockFormat(format) && matchNode(ed, node, name, vars);\n        const canRenameBlock = (node, parentName, isEditableDescendant) => {\n          const isValidBlockFormatForNode = isNonWrappingBlockFormat(format) && isTextBlock$1(ed.schema, node) && isValid(ed, parentName, wrapName);\n          return isEditableDescendant && isValidBlockFormatForNode;\n        };\n        const canWrapNode = (node, parentName, isEditableDescendant, isWrappableNoneditableElm) => {\n          const nodeName = node.nodeName.toLowerCase();\n          const isValidWrapNode = isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName);\n          const isZwsp = !nodeSpecific && isText$a(node) && isZwsp$1(node.data);\n          const isCaret = isCaretNode(node);\n          const isCorrectFormatForNode = !isInlineFormat(format) || !dom.isBlock(node);\n          return (isEditableDescendant || isWrappableNoneditableElm) && isValidWrapNode && !isZwsp && !isCaret && isCorrectFormatForNode;\n        };\n        walk$3(dom, rng, nodes => {\n          let currentWrapElm;\n          const process = node => {\n            let hasContentEditableState = false;\n            let lastContentEditable = contentEditable;\n            let isWrappableNoneditableElm = false;\n            const parentNode = node.parentNode;\n            const parentName = parentNode.nodeName.toLowerCase();\n            const contentEditableValue = dom.getContentEditable(node);\n            if (isNonNullable(contentEditableValue)) {\n              lastContentEditable = contentEditable;\n              contentEditable = contentEditableValue === 'true';\n              hasContentEditableState = true;\n              isWrappableNoneditableElm = isWrappableNoneditable(ed, node);\n            }\n            const isEditableDescendant = contentEditable && !hasContentEditableState;\n            if (isBr$6(node) && !canFormatBR(ed, format, node, parentName)) {\n              currentWrapElm = null;\n              if (isBlockFormat(format)) {\n                dom.remove(node);\n              }\n              return;\n            }\n            if (isMatchingWrappingBlock(node)) {\n              currentWrapElm = null;\n              return;\n            }\n            if (canRenameBlock(node, parentName, isEditableDescendant)) {\n              const elm = dom.rename(node, wrapName);\n              setElementFormat(elm);\n              newWrappers.push(elm);\n              currentWrapElm = null;\n              return;\n            }\n            if (isSelectorFormat(format)) {\n              let found = applyNodeStyle(formatList, node);\n              if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n                found = applyNodeStyle(formatList, parentNode);\n              }\n              if (!isInlineFormat(format) || found) {\n                currentWrapElm = null;\n                return;\n              }\n            }\n            if (isNonNullable(wrapElm) && canWrapNode(node, parentName, isEditableDescendant, isWrappableNoneditableElm)) {\n              if (!currentWrapElm) {\n                currentWrapElm = dom.clone(wrapElm, false);\n                parentNode.insertBefore(currentWrapElm, node);\n                newWrappers.push(currentWrapElm);\n              }\n              if (isWrappableNoneditableElm && hasContentEditableState) {\n                contentEditable = lastContentEditable;\n              }\n              currentWrapElm.appendChild(node);\n            } else {\n              currentWrapElm = null;\n              each$e(from(node.childNodes), process);\n              if (hasContentEditableState) {\n                contentEditable = lastContentEditable;\n              }\n              currentWrapElm = null;\n            }\n          };\n          each$e(nodes, process);\n        });\n        if (format.links === true) {\n          each$e(newWrappers, node => {\n            const process = node => {\n              if (node.nodeName === 'A') {\n                setElementFormat(node, format);\n              }\n              each$e(from(node.childNodes), process);\n            };\n            process(node);\n          });\n        }\n        each$e(newWrappers, node => {\n          const getChildCount = node => {\n            let count = 0;\n            each$e(node.childNodes, node => {\n              if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n                count++;\n              }\n            });\n            return count;\n          };\n          const mergeStyles = node => {\n            const childElement = find$2(node.childNodes, isElementNode$1).filter(child => dom.getContentEditable(child) !== 'false' && matchName(dom, child, format));\n            return childElement.map(child => {\n              const clone = dom.clone(child, false);\n              setElementFormat(clone);\n              dom.replace(clone, node, true);\n              dom.remove(child, true);\n              return clone;\n            }).getOr(node);\n          };\n          const childCount = getChildCount(node);\n          if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n            dom.remove(node, true);\n            return;\n          }\n          if (isInlineFormat(format) || isBlockFormat(format) && format.wrapper) {\n            if (!format.exact && childCount === 1) {\n              node = mergeStyles(node);\n            }\n            mergeWithChildren(ed, formatList, vars, node);\n            mergeWithParents(ed, format, name, vars, node);\n            mergeBackgroundColorAndFontSize(dom, format, vars, node);\n            mergeTextDecorationsAndColor(dom, format, vars, node);\n            mergeSubSup(dom, format, vars, node);\n            mergeSiblings(ed, format, vars, node);\n          }\n        });\n      };\n      const targetNode = isNode(node) ? node : selection.getNode();\n      if (dom.getContentEditable(targetNode) === 'false' && !isWrappableNoneditable(ed, targetNode)) {\n        node = targetNode;\n        applyNodeStyle(formatList, node);\n        fireFormatApply(ed, name, node, vars);\n        return;\n      }\n      if (format) {\n        if (node) {\n          if (isNode(node)) {\n            if (!applyNodeStyle(formatList, node)) {\n              const rng = dom.createRng();\n              rng.setStartBefore(node);\n              rng.setEndAfter(node);\n              applyRngStyle(dom, expandRng(dom, rng, formatList), true);\n            }\n          } else {\n            applyRngStyle(dom, node, true);\n          }\n        } else {\n          if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n            selection.setRng(normalize(selection.getRng()));\n            preserveSelection(ed, () => {\n              runOnRanges(ed, (selectionRng, fake) => {\n                const expandedRng = fake ? selectionRng : expandRng(dom, selectionRng, formatList);\n                applyRngStyle(dom, expandedRng, false);\n              });\n            }, always);\n            ed.nodeChanged();\n          } else {\n            applyCaretFormat(ed, name, vars);\n          }\n          getExpandedListItemFormat(ed.formatter, name).each(liFmt => {\n            each$e(getFullySelectedListItems(ed.selection), li => applyStyles(dom, li, liFmt, vars));\n          });\n        }\n        postProcess$1(name, ed);\n      }\n      fireFormatApply(ed, name, node, vars);\n    };\n    const applyFormat$1 = (editor, name, vars, node) => {\n      if (node || editor.selection.isEditable()) {\n        applyFormatAction(editor, name, vars, node);\n      }\n    };\n\n    const hasVars = value => has$2(value, 'vars');\n    const setup$u = (registeredFormatListeners, editor) => {\n      registeredFormatListeners.set({});\n      editor.on('NodeChange', e => {\n        updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n      });\n      editor.on('FormatApply FormatRemove', e => {\n        const element = Optional.from(e.node).map(nodeOrRange => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind(node => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n        updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n      });\n    };\n    const fallbackElement = editor => editor.selection.getStart();\n    const matchingNode = (editor, parents, format, similar, vars) => {\n      const isMatchingNode = node => {\n        const matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n        return !isUndefined(matchingFormat);\n      };\n      const isUnableToMatch = node => {\n        if (matchesUnInheritedFormatSelector(editor, node, format)) {\n          return true;\n        } else {\n          if (!similar) {\n            return isNonNullable(editor.formatter.matchNode(node, format, vars, true));\n          } else {\n            return false;\n          }\n        }\n      };\n      return findUntil$1(parents, isMatchingNode, isUnableToMatch);\n    };\n    const getParents = (editor, elm) => {\n      const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n      return filter$5(getParents$2(editor.dom, element), node => isElement$6(node) && !isBogus$2(node));\n    };\n    const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n      const parents = getParents(editor, elm);\n      each$d(registeredCallbacks, (data, format) => {\n        const runIfChanged = spec => {\n          const match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n          const isSet = match.isSome();\n          if (spec.state.get() !== isSet) {\n            spec.state.set(isSet);\n            const node = match.getOr(elm);\n            if (hasVars(spec)) {\n              spec.callback(isSet, {\n                node,\n                format,\n                parents\n              });\n            } else {\n              each$e(spec.callbacks, callback => callback(isSet, {\n                node,\n                format,\n                parents\n              }));\n            }\n          }\n        };\n        each$e([\n          data.withSimilar,\n          data.withoutSimilar\n        ], runIfChanged);\n        each$e(data.withVars, runIfChanged);\n      });\n    };\n    const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n      const formatChangeItems = registeredFormatListeners.get();\n      each$e(formats.split(','), format => {\n        const group = get$a(formatChangeItems, format).getOrThunk(() => {\n          const base = {\n            withSimilar: {\n              state: Cell(false),\n              similar: true,\n              callbacks: []\n            },\n            withoutSimilar: {\n              state: Cell(false),\n              similar: false,\n              callbacks: []\n            },\n            withVars: []\n          };\n          formatChangeItems[format] = base;\n          return base;\n        });\n        const getCurrent = () => {\n          const parents = getParents(editor);\n          return matchingNode(editor, parents, format, similar, vars).isSome();\n        };\n        if (isUndefined(vars)) {\n          const toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n          toAppendTo.callbacks.push(callback);\n          if (toAppendTo.callbacks.length === 1) {\n            toAppendTo.state.set(getCurrent());\n          }\n        } else {\n          group.withVars.push({\n            state: Cell(getCurrent()),\n            similar,\n            vars,\n            callback\n          });\n        }\n      });\n      registeredFormatListeners.set(formatChangeItems);\n    };\n    const removeListeners = (registeredFormatListeners, formats, callback) => {\n      const formatChangeItems = registeredFormatListeners.get();\n      each$e(formats.split(','), format => get$a(formatChangeItems, format).each(group => {\n        formatChangeItems[format] = {\n          withSimilar: {\n            ...group.withSimilar,\n            callbacks: filter$5(group.withSimilar.callbacks, cb => cb !== callback)\n          },\n          withoutSimilar: {\n            ...group.withoutSimilar,\n            callbacks: filter$5(group.withoutSimilar.callbacks, cb => cb !== callback)\n          },\n          withVars: filter$5(group.withVars, item => item.callback !== callback)\n        };\n      }));\n      registeredFormatListeners.set(formatChangeItems);\n    };\n    const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n      addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n      return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n    };\n\n    const toggle = (editor, name, vars, node) => {\n      const fmt = editor.formatter.get(name);\n      if (fmt) {\n        if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n          removeFormat$1(editor, name, vars, node);\n        } else {\n          applyFormat$1(editor, name, vars, node);\n        }\n      }\n    };\n\n    const explode$1 = Tools.explode;\n    const create$8 = () => {\n      const filters = {};\n      const addFilter = (name, callback) => {\n        each$e(explode$1(name), name => {\n          if (!has$2(filters, name)) {\n            filters[name] = {\n              name,\n              callbacks: []\n            };\n          }\n          filters[name].callbacks.push(callback);\n        });\n      };\n      const getFilters = () => values(filters);\n      const removeFilter = (name, callback) => {\n        each$e(explode$1(name), name => {\n          if (has$2(filters, name)) {\n            if (isNonNullable(callback)) {\n              const filter = filters[name];\n              const newCallbacks = filter$5(filter.callbacks, c => c !== callback);\n              if (newCallbacks.length > 0) {\n                filter.callbacks = newCallbacks;\n              } else {\n                delete filters[name];\n              }\n            } else {\n              delete filters[name];\n            }\n          }\n        });\n      };\n      return {\n        addFilter,\n        getFilters,\n        removeFilter\n      };\n    };\n\n    const removeAttrs = (node, names) => {\n      each$e(names, name => {\n        node.attr(name, null);\n      });\n    };\n    const addFontToSpansFilter = (domParser, styles, fontSizes) => {\n      domParser.addNodeFilter('font', nodes => {\n        each$e(nodes, node => {\n          const props = styles.parse(node.attr('style'));\n          const color = node.attr('color');\n          const face = node.attr('face');\n          const size = node.attr('size');\n          if (color) {\n            props.color = color;\n          }\n          if (face) {\n            props['font-family'] = face;\n          }\n          if (size) {\n            toInt(size).each(num => {\n              props['font-size'] = fontSizes[num - 1];\n            });\n          }\n          node.name = 'span';\n          node.attr('style', styles.serialize(props));\n          removeAttrs(node, [\n            'color',\n            'face',\n            'size'\n          ]);\n        });\n      });\n    };\n    const addStrikeFilter = (domParser, schema, styles) => {\n      domParser.addNodeFilter('strike', nodes => {\n        const convertToSTag = schema.type !== 'html4';\n        each$e(nodes, node => {\n          if (convertToSTag) {\n            node.name = 's';\n          } else {\n            const props = styles.parse(node.attr('style'));\n            props['text-decoration'] = 'line-through';\n            node.name = 'span';\n            node.attr('style', styles.serialize(props));\n          }\n        });\n      });\n    };\n    const addFilters = (domParser, settings, schema) => {\n      var _a;\n      const styles = Styles();\n      if (settings.convert_fonts_to_spans) {\n        addFontToSpansFilter(domParser, styles, Tools.explode((_a = settings.font_size_legacy_values) !== null && _a !== void 0 ? _a : ''));\n      }\n      addStrikeFilter(domParser, schema, styles);\n    };\n    const register$5 = (domParser, settings, schema) => {\n      if (settings.inline_styles) {\n        addFilters(domParser, settings, schema);\n      }\n    };\n\n    const addNodeFilter = (settings, htmlParser, schema) => {\n      htmlParser.addNodeFilter('br', (nodes, _, args) => {\n        const blockElements = Tools.extend({}, schema.getBlockElements());\n        const nonEmptyElements = schema.getNonEmptyElements();\n        const whitespaceElements = schema.getWhitespaceElements();\n        blockElements.body = 1;\n        const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node);\n        for (let i = 0, l = nodes.length; i < l; i++) {\n          let node = nodes[i];\n          let parent = node.parent;\n          if (parent && isBlock(parent) && node === parent.lastChild) {\n            let prev = node.prev;\n            while (prev) {\n              const prevName = prev.name;\n              if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n                if (prevName === 'br') {\n                  node = null;\n                }\n                break;\n              }\n              prev = prev.prev;\n            }\n            if (node) {\n              node.remove();\n              if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent)) {\n                const elementRule = schema.getElementRule(parent.name);\n                if (elementRule) {\n                  if (elementRule.removeEmpty) {\n                    parent.remove();\n                  } else if (elementRule.paddEmpty) {\n                    paddEmptyNode(settings, args, isBlock, parent);\n                  }\n                }\n              }\n            }\n          } else {\n            let lastParent = node;\n            while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n              lastParent = parent;\n              if (blockElements[parent.name]) {\n                break;\n              }\n              parent = parent.parent;\n            }\n            if (lastParent === parent) {\n              const textNode = new AstNode('#text', 3);\n              textNode.value = nbsp;\n              node.replace(textNode);\n            }\n          }\n        }\n      });\n    };\n\n    const blobUriToBlob = url => fetch(url).then(res => res.ok ? res.blob() : Promise.reject()).catch(() => Promise.reject({\n      message: `Cannot convert ${ url } to Blob. Resource might not exist or is inaccessible.`,\n      uriType: 'blob'\n    }));\n    const extractBase64Data = data => {\n      const matches = /([a-z0-9+\\/=\\s]+)/i.exec(data);\n      return matches ? matches[1] : '';\n    };\n    const parseDataUri = uri => {\n      const [type, ...rest] = uri.split(',');\n      const data = rest.join(',');\n      const matches = /data:([^/]+\\/[^;]+)(;.+)?/.exec(type);\n      if (matches) {\n        const base64Encoded = matches[2] === ';base64';\n        const extractedData = base64Encoded ? extractBase64Data(data) : decodeURIComponent(data);\n        return Optional.some({\n          type: matches[1],\n          data: extractedData,\n          base64Encoded\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const buildBlob = (type, data, base64Encoded = true) => {\n      let str = data;\n      if (base64Encoded) {\n        try {\n          str = atob(data);\n        } catch (e) {\n          return Optional.none();\n        }\n      }\n      const arr = new Uint8Array(str.length);\n      for (let i = 0; i < arr.length; i++) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return Optional.some(new Blob([arr], { type }));\n    };\n    const dataUriToBlob = uri => {\n      return new Promise((resolve, reject) => {\n        parseDataUri(uri).bind(({type, data, base64Encoded}) => buildBlob(type, data, base64Encoded)).fold(() => reject('Invalid data URI'), resolve);\n      });\n    };\n    const uriToBlob = url => {\n      if (startsWith(url, 'blob:')) {\n        return blobUriToBlob(url);\n      } else if (startsWith(url, 'data:')) {\n        return dataUriToBlob(url);\n      } else {\n        return Promise.reject('Unknown URI format');\n      }\n    };\n    const blobToDataUri = blob => {\n      return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.onloadend = () => {\n          resolve(reader.result);\n        };\n        reader.onerror = () => {\n          var _a;\n          reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n        };\n        reader.readAsDataURL(blob);\n      });\n    };\n\n    let count$1 = 0;\n    const uniqueId$1 = prefix => {\n      return (prefix || 'blobid') + count$1++;\n    };\n    const processDataUri = (dataUri, base64Only, generateBlobInfo) => {\n      return parseDataUri(dataUri).bind(({data, type, base64Encoded}) => {\n        if (base64Only && !base64Encoded) {\n          return Optional.none();\n        } else {\n          const base64 = base64Encoded ? data : btoa(data);\n          return generateBlobInfo(base64, type);\n        }\n      });\n    };\n    const createBlobInfo$1 = (blobCache, blob, base64) => {\n      const blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n      blobCache.add(blobInfo);\n      return blobInfo;\n    };\n    const dataUriToBlobInfo = (blobCache, dataUri, base64Only = false) => {\n      return processDataUri(dataUri, base64Only, (base64, type) => Optional.from(blobCache.getByData(base64, type)).orThunk(() => buildBlob(type, base64).map(blob => createBlobInfo$1(blobCache, blob, base64))));\n    };\n    const imageToBlobInfo = (blobCache, imageSrc) => {\n      const invalidDataUri = () => Promise.reject('Invalid data URI');\n      if (startsWith(imageSrc, 'blob:')) {\n        const blobInfo = blobCache.getByUri(imageSrc);\n        if (isNonNullable(blobInfo)) {\n          return Promise.resolve(blobInfo);\n        } else {\n          return uriToBlob(imageSrc).then(blob => {\n            return blobToDataUri(blob).then(dataUri => {\n              return processDataUri(dataUri, false, base64 => {\n                return Optional.some(createBlobInfo$1(blobCache, blob, base64));\n              }).getOrThunk(invalidDataUri);\n            });\n          });\n        }\n      } else if (startsWith(imageSrc, 'data:')) {\n        return dataUriToBlobInfo(blobCache, imageSrc).fold(invalidDataUri, blobInfo => Promise.resolve(blobInfo));\n      } else {\n        return Promise.reject('Unknown image data format');\n      }\n    };\n\n    const isBogusImage = img => isNonNullable(img.attr('data-mce-bogus'));\n    const isInternalImageSource = img => img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n    const registerBase64ImageFilter = (parser, settings) => {\n      const {blob_cache: blobCache} = settings;\n      if (blobCache) {\n        const processImage = img => {\n          const inputSrc = img.attr('src');\n          if (isInternalImageSource(img) || isBogusImage(img) || isNullable(inputSrc)) {\n            return;\n          }\n          dataUriToBlobInfo(blobCache, inputSrc, true).each(blobInfo => {\n            img.attr('src', blobInfo.blobUri());\n          });\n        };\n        parser.addAttributeFilter('src', nodes => each$e(nodes, processImage));\n      }\n    };\n    const isMimeType = (mime, type) => startsWith(mime, `${ type }/`);\n    const createSafeEmbed = (mime, src, width, height, sandboxIframes) => {\n      let name;\n      if (isUndefined(mime)) {\n        name = 'iframe';\n      } else if (isMimeType(mime, 'image')) {\n        name = 'img';\n      } else if (isMimeType(mime, 'video')) {\n        name = 'video';\n      } else if (isMimeType(mime, 'audio')) {\n        name = 'audio';\n      } else {\n        name = 'iframe';\n      }\n      const embed = new AstNode(name, 1);\n      embed.attr(name === 'audio' ? { src } : {\n        src,\n        width,\n        height\n      });\n      if (name === 'audio' || name === 'video') {\n        embed.attr('controls', '');\n      }\n      if (name === 'iframe' && sandboxIframes) {\n        embed.attr('sandbox', '');\n      }\n      return embed;\n    };\n    const register$4 = (parser, settings) => {\n      const schema = parser.schema;\n      if (settings.remove_trailing_brs) {\n        addNodeFilter(settings, parser, schema);\n      }\n      parser.addAttributeFilter('href', nodes => {\n        let i = nodes.length;\n        const appendRel = rel => {\n          const parts = rel.split(' ').filter(p => p.length > 0);\n          return parts.concat(['noopener']).sort().join(' ');\n        };\n        const addNoOpener = rel => {\n          const newRel = rel ? Tools.trim(rel) : '';\n          if (!/\\b(noopener)\\b/g.test(newRel)) {\n            return appendRel(newRel);\n          } else {\n            return newRel;\n          }\n        };\n        if (!settings.allow_unsafe_link_target) {\n          while (i--) {\n            const node = nodes[i];\n            if (node.name === 'a' && node.attr('target') === '_blank') {\n              node.attr('rel', addNoOpener(node.attr('rel')));\n            }\n          }\n        }\n      });\n      if (!settings.allow_html_in_named_anchor) {\n        parser.addAttributeFilter('id,name', nodes => {\n          let i = nodes.length, sibling, prevSibling, parent, node;\n          while (i--) {\n            node = nodes[i];\n            if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n              parent = node.parent;\n              sibling = node.lastChild;\n              while (sibling && parent) {\n                prevSibling = sibling.prev;\n                parent.insert(sibling, node);\n                sibling = prevSibling;\n              }\n            }\n          }\n        });\n      }\n      if (settings.fix_list_elements) {\n        parser.addNodeFilter('ul,ol', nodes => {\n          let i = nodes.length, node, parentNode;\n          while (i--) {\n            node = nodes[i];\n            parentNode = node.parent;\n            if (parentNode && (parentNode.name === 'ul' || parentNode.name === 'ol')) {\n              if (node.prev && node.prev.name === 'li') {\n                node.prev.append(node);\n              } else {\n                const li = new AstNode('li', 1);\n                li.attr('style', 'list-style-type: none');\n                node.wrap(li);\n              }\n            }\n          }\n        });\n      }\n      const validClasses = schema.getValidClasses();\n      if (settings.validate && validClasses) {\n        parser.addAttributeFilter('class', nodes => {\n          var _a;\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            const clazz = (_a = node.attr('class')) !== null && _a !== void 0 ? _a : '';\n            const classList = Tools.explode(clazz, ' ');\n            let classValue = '';\n            for (let ci = 0; ci < classList.length; ci++) {\n              const className = classList[ci];\n              let valid = false;\n              let validClassesMap = validClasses['*'];\n              if (validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              validClassesMap = validClasses[node.name];\n              if (!valid && validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              if (valid) {\n                if (classValue) {\n                  classValue += ' ';\n                }\n                classValue += className;\n              }\n            }\n            if (!classValue.length) {\n              classValue = null;\n            }\n            node.attr('class', classValue);\n          }\n        });\n      }\n      registerBase64ImageFilter(parser, settings);\n      if (settings.convert_unsafe_embeds) {\n        parser.addNodeFilter('object,embed', nodes => each$e(nodes, node => {\n          node.replace(createSafeEmbed(node.attr('type'), node.name === 'object' ? node.attr('data') : node.attr('src'), node.attr('width'), node.attr('height'), settings.sandbox_iframes));\n        }));\n      }\n      if (settings.sandbox_iframes) {\n        parser.addNodeFilter('iframe', nodes => each$e(nodes, node => node.attr('sandbox', '')));\n      }\n    };\n\n    const {entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor} = Object;\n    let {freeze, seal, create: create$7} = Object;\n    let {apply, construct} = typeof Reflect !== 'undefined' && Reflect;\n    if (!apply) {\n      apply = function apply(fun, thisValue, args) {\n        return fun.apply(thisValue, args);\n      };\n    }\n    if (!freeze) {\n      freeze = function freeze(x) {\n        return x;\n      };\n    }\n    if (!seal) {\n      seal = function seal(x) {\n        return x;\n      };\n    }\n    if (!construct) {\n      construct = function construct(Func, args) {\n        return new Func(...args);\n      };\n    }\n    const arrayForEach = unapply(Array.prototype.forEach);\n    const arrayPop = unapply(Array.prototype.pop);\n    const arrayPush = unapply(Array.prototype.push);\n    const stringToLowerCase = unapply(String.prototype.toLowerCase);\n    const stringToString = unapply(String.prototype.toString);\n    const stringMatch = unapply(String.prototype.match);\n    const stringReplace = unapply(String.prototype.replace);\n    const stringIndexOf = unapply(String.prototype.indexOf);\n    const stringTrim = unapply(String.prototype.trim);\n    const regExpTest = unapply(RegExp.prototype.test);\n    const typeErrorCreate = unconstruct(TypeError);\n    function unapply(func) {\n      return function (thisArg) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        return apply(func, thisArg, args);\n      };\n    }\n    function unconstruct(func) {\n      return function () {\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n        return construct(func, args);\n      };\n    }\n    function addToSet(set, array, transformCaseFunc) {\n      var _transformCaseFunc;\n      transformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;\n      if (setPrototypeOf) {\n        setPrototypeOf(set, null);\n      }\n      let l = array.length;\n      while (l--) {\n        let element = array[l];\n        if (typeof element === 'string') {\n          const lcElement = transformCaseFunc(element);\n          if (lcElement !== element) {\n            if (!isFrozen(array)) {\n              array[l] = lcElement;\n            }\n            element = lcElement;\n          }\n        }\n        set[element] = true;\n      }\n      return set;\n    }\n    function clone(object) {\n      const newObject = create$7(null);\n      for (const [property, value] of entries(object)) {\n        newObject[property] = value;\n      }\n      return newObject;\n    }\n    function lookupGetter(object, prop) {\n      while (object !== null) {\n        const desc = getOwnPropertyDescriptor(object, prop);\n        if (desc) {\n          if (desc.get) {\n            return unapply(desc.get);\n          }\n          if (typeof desc.value === 'function') {\n            return unapply(desc.value);\n          }\n        }\n        object = getPrototypeOf(object);\n      }\n      function fallbackValue(element) {\n        console.warn('fallback value for', element);\n        return null;\n      }\n      return fallbackValue;\n    }\n    const html$1 = freeze([\n      'a',\n      'abbr',\n      'acronym',\n      'address',\n      'area',\n      'article',\n      'aside',\n      'audio',\n      'b',\n      'bdi',\n      'bdo',\n      'big',\n      'blink',\n      'blockquote',\n      'body',\n      'br',\n      'button',\n      'canvas',\n      'caption',\n      'center',\n      'cite',\n      'code',\n      'col',\n      'colgroup',\n      'content',\n      'data',\n      'datalist',\n      'dd',\n      'decorator',\n      'del',\n      'details',\n      'dfn',\n      'dialog',\n      'dir',\n      'div',\n      'dl',\n      'dt',\n      'element',\n      'em',\n      'fieldset',\n      'figcaption',\n      'figure',\n      'font',\n      'footer',\n      'form',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'head',\n      'header',\n      'hgroup',\n      'hr',\n      'html',\n      'i',\n      'img',\n      'input',\n      'ins',\n      'kbd',\n      'label',\n      'legend',\n      'li',\n      'main',\n      'map',\n      'mark',\n      'marquee',\n      'menu',\n      'menuitem',\n      'meter',\n      'nav',\n      'nobr',\n      'ol',\n      'optgroup',\n      'option',\n      'output',\n      'p',\n      'picture',\n      'pre',\n      'progress',\n      'q',\n      'rp',\n      'rt',\n      'ruby',\n      's',\n      'samp',\n      'section',\n      'select',\n      'shadow',\n      'small',\n      'source',\n      'spacer',\n      'span',\n      'strike',\n      'strong',\n      'style',\n      'sub',\n      'summary',\n      'sup',\n      'table',\n      'tbody',\n      'td',\n      'template',\n      'textarea',\n      'tfoot',\n      'th',\n      'thead',\n      'time',\n      'tr',\n      'track',\n      'tt',\n      'u',\n      'ul',\n      'var',\n      'video',\n      'wbr'\n    ]);\n    const svg$1 = freeze([\n      'svg',\n      'a',\n      'altglyph',\n      'altglyphdef',\n      'altglyphitem',\n      'animatecolor',\n      'animatemotion',\n      'animatetransform',\n      'circle',\n      'clippath',\n      'defs',\n      'desc',\n      'ellipse',\n      'filter',\n      'font',\n      'g',\n      'glyph',\n      'glyphref',\n      'hkern',\n      'image',\n      'line',\n      'lineargradient',\n      'marker',\n      'mask',\n      'metadata',\n      'mpath',\n      'path',\n      'pattern',\n      'polygon',\n      'polyline',\n      'radialgradient',\n      'rect',\n      'stop',\n      'style',\n      'switch',\n      'symbol',\n      'text',\n      'textpath',\n      'title',\n      'tref',\n      'tspan',\n      'view',\n      'vkern'\n    ]);\n    const svgFilters = freeze([\n      'feBlend',\n      'feColorMatrix',\n      'feComponentTransfer',\n      'feComposite',\n      'feConvolveMatrix',\n      'feDiffuseLighting',\n      'feDisplacementMap',\n      'feDistantLight',\n      'feDropShadow',\n      'feFlood',\n      'feFuncA',\n      'feFuncB',\n      'feFuncG',\n      'feFuncR',\n      'feGaussianBlur',\n      'feImage',\n      'feMerge',\n      'feMergeNode',\n      'feMorphology',\n      'feOffset',\n      'fePointLight',\n      'feSpecularLighting',\n      'feSpotLight',\n      'feTile',\n      'feTurbulence'\n    ]);\n    const svgDisallowed = freeze([\n      'animate',\n      'color-profile',\n      'cursor',\n      'discard',\n      'font-face',\n      'font-face-format',\n      'font-face-name',\n      'font-face-src',\n      'font-face-uri',\n      'foreignobject',\n      'hatch',\n      'hatchpath',\n      'mesh',\n      'meshgradient',\n      'meshpatch',\n      'meshrow',\n      'missing-glyph',\n      'script',\n      'set',\n      'solidcolor',\n      'unknown',\n      'use'\n    ]);\n    const mathMl$1 = freeze([\n      'math',\n      'menclose',\n      'merror',\n      'mfenced',\n      'mfrac',\n      'mglyph',\n      'mi',\n      'mlabeledtr',\n      'mmultiscripts',\n      'mn',\n      'mo',\n      'mover',\n      'mpadded',\n      'mphantom',\n      'mroot',\n      'mrow',\n      'ms',\n      'mspace',\n      'msqrt',\n      'mstyle',\n      'msub',\n      'msup',\n      'msubsup',\n      'mtable',\n      'mtd',\n      'mtext',\n      'mtr',\n      'munder',\n      'munderover',\n      'mprescripts'\n    ]);\n    const mathMlDisallowed = freeze([\n      'maction',\n      'maligngroup',\n      'malignmark',\n      'mlongdiv',\n      'mscarries',\n      'mscarry',\n      'msgroup',\n      'mstack',\n      'msline',\n      'msrow',\n      'semantics',\n      'annotation',\n      'annotation-xml',\n      'mprescripts',\n      'none'\n    ]);\n    const text = freeze(['#text']);\n    const html = freeze([\n      'accept',\n      'action',\n      'align',\n      'alt',\n      'autocapitalize',\n      'autocomplete',\n      'autopictureinpicture',\n      'autoplay',\n      'background',\n      'bgcolor',\n      'border',\n      'capture',\n      'cellpadding',\n      'cellspacing',\n      'checked',\n      'cite',\n      'class',\n      'clear',\n      'color',\n      'cols',\n      'colspan',\n      'controls',\n      'controlslist',\n      'coords',\n      'crossorigin',\n      'datetime',\n      'decoding',\n      'default',\n      'dir',\n      'disabled',\n      'disablepictureinpicture',\n      'disableremoteplayback',\n      'download',\n      'draggable',\n      'enctype',\n      'enterkeyhint',\n      'face',\n      'for',\n      'headers',\n      'height',\n      'hidden',\n      'high',\n      'href',\n      'hreflang',\n      'id',\n      'inputmode',\n      'integrity',\n      'ismap',\n      'kind',\n      'label',\n      'lang',\n      'list',\n      'loading',\n      'loop',\n      'low',\n      'max',\n      'maxlength',\n      'media',\n      'method',\n      'min',\n      'minlength',\n      'multiple',\n      'muted',\n      'name',\n      'nonce',\n      'noshade',\n      'novalidate',\n      'nowrap',\n      'open',\n      'optimum',\n      'pattern',\n      'placeholder',\n      'playsinline',\n      'poster',\n      'preload',\n      'pubdate',\n      'radiogroup',\n      'readonly',\n      'rel',\n      'required',\n      'rev',\n      'reversed',\n      'role',\n      'rows',\n      'rowspan',\n      'spellcheck',\n      'scope',\n      'selected',\n      'shape',\n      'size',\n      'sizes',\n      'span',\n      'srclang',\n      'start',\n      'src',\n      'srcset',\n      'step',\n      'style',\n      'summary',\n      'tabindex',\n      'title',\n      'translate',\n      'type',\n      'usemap',\n      'valign',\n      'value',\n      'width',\n      'xmlns',\n      'slot'\n    ]);\n    const svg = freeze([\n      'accent-height',\n      'accumulate',\n      'additive',\n      'alignment-baseline',\n      'ascent',\n      'attributename',\n      'attributetype',\n      'azimuth',\n      'basefrequency',\n      'baseline-shift',\n      'begin',\n      'bias',\n      'by',\n      'class',\n      'clip',\n      'clippathunits',\n      'clip-path',\n      'clip-rule',\n      'color',\n      'color-interpolation',\n      'color-interpolation-filters',\n      'color-profile',\n      'color-rendering',\n      'cx',\n      'cy',\n      'd',\n      'dx',\n      'dy',\n      'diffuseconstant',\n      'direction',\n      'display',\n      'divisor',\n      'dur',\n      'edgemode',\n      'elevation',\n      'end',\n      'fill',\n      'fill-opacity',\n      'fill-rule',\n      'filter',\n      'filterunits',\n      'flood-color',\n      'flood-opacity',\n      'font-family',\n      'font-size',\n      'font-size-adjust',\n      'font-stretch',\n      'font-style',\n      'font-variant',\n      'font-weight',\n      'fx',\n      'fy',\n      'g1',\n      'g2',\n      'glyph-name',\n      'glyphref',\n      'gradientunits',\n      'gradienttransform',\n      'height',\n      'href',\n      'id',\n      'image-rendering',\n      'in',\n      'in2',\n      'k',\n      'k1',\n      'k2',\n      'k3',\n      'k4',\n      'kerning',\n      'keypoints',\n      'keysplines',\n      'keytimes',\n      'lang',\n      'lengthadjust',\n      'letter-spacing',\n      'kernelmatrix',\n      'kernelunitlength',\n      'lighting-color',\n      'local',\n      'marker-end',\n      'marker-mid',\n      'marker-start',\n      'markerheight',\n      'markerunits',\n      'markerwidth',\n      'maskcontentunits',\n      'maskunits',\n      'max',\n      'mask',\n      'media',\n      'method',\n      'mode',\n      'min',\n      'name',\n      'numoctaves',\n      'offset',\n      'operator',\n      'opacity',\n      'order',\n      'orient',\n      'orientation',\n      'origin',\n      'overflow',\n      'paint-order',\n      'path',\n      'pathlength',\n      'patterncontentunits',\n      'patterntransform',\n      'patternunits',\n      'points',\n      'preservealpha',\n      'preserveaspectratio',\n      'primitiveunits',\n      'r',\n      'rx',\n      'ry',\n      'radius',\n      'refx',\n      'refy',\n      'repeatcount',\n      'repeatdur',\n      'restart',\n      'result',\n      'rotate',\n      'scale',\n      'seed',\n      'shape-rendering',\n      'specularconstant',\n      'specularexponent',\n      'spreadmethod',\n      'startoffset',\n      'stddeviation',\n      'stitchtiles',\n      'stop-color',\n      'stop-opacity',\n      'stroke-dasharray',\n      'stroke-dashoffset',\n      'stroke-linecap',\n      'stroke-linejoin',\n      'stroke-miterlimit',\n      'stroke-opacity',\n      'stroke',\n      'stroke-width',\n      'style',\n      'surfacescale',\n      'systemlanguage',\n      'tabindex',\n      'targetx',\n      'targety',\n      'transform',\n      'transform-origin',\n      'text-anchor',\n      'text-decoration',\n      'text-rendering',\n      'textlength',\n      'type',\n      'u1',\n      'u2',\n      'unicode',\n      'values',\n      'viewbox',\n      'visibility',\n      'version',\n      'vert-adv-y',\n      'vert-origin-x',\n      'vert-origin-y',\n      'width',\n      'word-spacing',\n      'wrap',\n      'writing-mode',\n      'xchannelselector',\n      'ychannelselector',\n      'x',\n      'x1',\n      'x2',\n      'xmlns',\n      'y',\n      'y1',\n      'y2',\n      'z',\n      'zoomandpan'\n    ]);\n    const mathMl = freeze([\n      'accent',\n      'accentunder',\n      'align',\n      'bevelled',\n      'close',\n      'columnsalign',\n      'columnlines',\n      'columnspan',\n      'denomalign',\n      'depth',\n      'dir',\n      'display',\n      'displaystyle',\n      'encoding',\n      'fence',\n      'frame',\n      'height',\n      'href',\n      'id',\n      'largeop',\n      'length',\n      'linethickness',\n      'lspace',\n      'lquote',\n      'mathbackground',\n      'mathcolor',\n      'mathsize',\n      'mathvariant',\n      'maxsize',\n      'minsize',\n      'movablelimits',\n      'notation',\n      'numalign',\n      'open',\n      'rowalign',\n      'rowlines',\n      'rowspacing',\n      'rowspan',\n      'rspace',\n      'rquote',\n      'scriptlevel',\n      'scriptminsize',\n      'scriptsizemultiplier',\n      'selection',\n      'separator',\n      'separators',\n      'stretchy',\n      'subscriptshift',\n      'supscriptshift',\n      'symmetric',\n      'voffset',\n      'width',\n      'xmlns'\n    ]);\n    const xml = freeze([\n      'xlink:href',\n      'xml:id',\n      'xlink:title',\n      'xml:space',\n      'xmlns:xlink'\n    ]);\n    const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm);\n    const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n    const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n    const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/);\n    const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\n    const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\n    const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n    const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\n    const DOCTYPE_NAME = seal(/^html$/i);\n    var EXPRESSIONS = Object.freeze({\n      __proto__: null,\n      MUSTACHE_EXPR: MUSTACHE_EXPR,\n      ERB_EXPR: ERB_EXPR,\n      TMPLIT_EXPR: TMPLIT_EXPR,\n      DATA_ATTR: DATA_ATTR,\n      ARIA_ATTR: ARIA_ATTR,\n      IS_ALLOWED_URI: IS_ALLOWED_URI,\n      IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n      ATTR_WHITESPACE: ATTR_WHITESPACE,\n      DOCTYPE_NAME: DOCTYPE_NAME\n    });\n    const getGlobal = () => typeof window === 'undefined' ? null : window;\n    const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n      if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n        return null;\n      }\n      let suffix = null;\n      const ATTR_NAME = 'data-tt-policy-suffix';\n      if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n        suffix = purifyHostElement.getAttribute(ATTR_NAME);\n      }\n      const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n      try {\n        return trustedTypes.createPolicy(policyName, {\n          createHTML(html) {\n            return html;\n          },\n          createScriptURL(scriptUrl) {\n            return scriptUrl;\n          }\n        });\n      } catch (_) {\n        console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n        return null;\n      }\n    };\n    function createDOMPurify() {\n      let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n      const DOMPurify = root => createDOMPurify(root);\n      DOMPurify.version = '3.0.5';\n      DOMPurify.removed = [];\n      if (!window || !window.document || window.document.nodeType !== 9) {\n        DOMPurify.isSupported = false;\n        return DOMPurify;\n      }\n      const originalDocument = window.document;\n      const currentScript = originalDocument.currentScript;\n      let {document} = window;\n      const {DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes} = window;\n      const ElementPrototype = Element.prototype;\n      const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n      const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n      const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n      const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n      if (typeof HTMLTemplateElement === 'function') {\n        const template = document.createElement('template');\n        if (template.content && template.content.ownerDocument) {\n          document = template.content.ownerDocument;\n        }\n      }\n      let trustedTypesPolicy;\n      let emptyHTML = '';\n      const {implementation, createNodeIterator, createDocumentFragment, getElementsByTagName} = document;\n      const {importNode} = originalDocument;\n      let hooks = {};\n      DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n      const {MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE} = EXPRESSIONS;\n      let {IS_ALLOWED_URI: IS_ALLOWED_URI$1} = EXPRESSIONS;\n      let ALLOWED_TAGS = null;\n      const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n        ...html$1,\n        ...svg$1,\n        ...svgFilters,\n        ...mathMl$1,\n        ...text\n      ]);\n      let ALLOWED_ATTR = null;\n      const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n        ...html,\n        ...svg,\n        ...mathMl,\n        ...xml\n      ]);\n      let CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n        tagNameCheck: {\n          writable: true,\n          configurable: false,\n          enumerable: true,\n          value: null\n        },\n        attributeNameCheck: {\n          writable: true,\n          configurable: false,\n          enumerable: true,\n          value: null\n        },\n        allowCustomizedBuiltInElements: {\n          writable: true,\n          configurable: false,\n          enumerable: true,\n          value: false\n        }\n      }));\n      let FORBID_TAGS = null;\n      let FORBID_ATTR = null;\n      let ALLOW_ARIA_ATTR = true;\n      let ALLOW_DATA_ATTR = true;\n      let ALLOW_UNKNOWN_PROTOCOLS = false;\n      let ALLOW_SELF_CLOSE_IN_ATTR = true;\n      let SAFE_FOR_TEMPLATES = false;\n      let WHOLE_DOCUMENT = false;\n      let SET_CONFIG = false;\n      let FORCE_BODY = false;\n      let RETURN_DOM = false;\n      let RETURN_DOM_FRAGMENT = false;\n      let RETURN_TRUSTED_TYPE = false;\n      let SANITIZE_DOM = true;\n      let SANITIZE_NAMED_PROPS = false;\n      const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n      let KEEP_CONTENT = true;\n      let IN_PLACE = false;\n      let USE_PROFILES = {};\n      let FORBID_CONTENTS = null;\n      const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n        'annotation-xml',\n        'audio',\n        'colgroup',\n        'desc',\n        'foreignobject',\n        'head',\n        'iframe',\n        'math',\n        'mi',\n        'mn',\n        'mo',\n        'ms',\n        'mtext',\n        'noembed',\n        'noframes',\n        'noscript',\n        'plaintext',\n        'script',\n        'style',\n        'svg',\n        'template',\n        'thead',\n        'title',\n        'video',\n        'xmp'\n      ]);\n      let DATA_URI_TAGS = null;\n      const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n        'audio',\n        'video',\n        'img',\n        'source',\n        'image',\n        'track'\n      ]);\n      let URI_SAFE_ATTRIBUTES = null;\n      const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n        'alt',\n        'class',\n        'for',\n        'id',\n        'label',\n        'name',\n        'pattern',\n        'placeholder',\n        'role',\n        'summary',\n        'title',\n        'value',\n        'style',\n        'xmlns'\n      ]);\n      const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n      const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n      const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n      let NAMESPACE = HTML_NAMESPACE;\n      let IS_EMPTY_INPUT = false;\n      let ALLOWED_NAMESPACES = null;\n      const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [\n        MATHML_NAMESPACE,\n        SVG_NAMESPACE,\n        HTML_NAMESPACE\n      ], stringToString);\n      let PARSER_MEDIA_TYPE;\n      const SUPPORTED_PARSER_MEDIA_TYPES = [\n        'application/xhtml+xml',\n        'text/html'\n      ];\n      const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n      let transformCaseFunc;\n      let CONFIG = null;\n      const formElement = document.createElement('form');\n      const isRegexOrFunction = function isRegexOrFunction(testValue) {\n        return testValue instanceof RegExp || testValue instanceof Function;\n      };\n      const _parseConfig = function _parseConfig(cfg) {\n        if (CONFIG && CONFIG === cfg) {\n          return;\n        }\n        if (!cfg || typeof cfg !== 'object') {\n          cfg = {};\n        }\n        cfg = clone(cfg);\n        PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n        transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n        ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n        ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n        ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n        URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n        DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n        FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n        FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n        FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n        USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n        ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n        ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n        ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n        ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;\n        SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n        WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n        RETURN_DOM = cfg.RETURN_DOM || false;\n        RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n        RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n        FORCE_BODY = cfg.FORCE_BODY || false;\n        SANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n        SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;\n        KEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n        IN_PLACE = cfg.IN_PLACE || false;\n        IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n        NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n        CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n        if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n        }\n        if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n          CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n        }\n        if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n        }\n        if (SAFE_FOR_TEMPLATES) {\n          ALLOW_DATA_ATTR = false;\n        }\n        if (RETURN_DOM_FRAGMENT) {\n          RETURN_DOM = true;\n        }\n        if (USE_PROFILES) {\n          ALLOWED_TAGS = addToSet({}, [...text]);\n          ALLOWED_ATTR = [];\n          if (USE_PROFILES.html === true) {\n            addToSet(ALLOWED_TAGS, html$1);\n            addToSet(ALLOWED_ATTR, html);\n          }\n          if (USE_PROFILES.svg === true) {\n            addToSet(ALLOWED_TAGS, svg$1);\n            addToSet(ALLOWED_ATTR, svg);\n            addToSet(ALLOWED_ATTR, xml);\n          }\n          if (USE_PROFILES.svgFilters === true) {\n            addToSet(ALLOWED_TAGS, svgFilters);\n            addToSet(ALLOWED_ATTR, svg);\n            addToSet(ALLOWED_ATTR, xml);\n          }\n          if (USE_PROFILES.mathMl === true) {\n            addToSet(ALLOWED_TAGS, mathMl$1);\n            addToSet(ALLOWED_ATTR, mathMl);\n            addToSet(ALLOWED_ATTR, xml);\n          }\n        }\n        if (cfg.ADD_TAGS) {\n          if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n            ALLOWED_TAGS = clone(ALLOWED_TAGS);\n          }\n          addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n        }\n        if (cfg.ADD_ATTR) {\n          if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n            ALLOWED_ATTR = clone(ALLOWED_ATTR);\n          }\n          addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n        }\n        if (cfg.ADD_URI_SAFE_ATTR) {\n          addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n        }\n        if (cfg.FORBID_CONTENTS) {\n          if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n            FORBID_CONTENTS = clone(FORBID_CONTENTS);\n          }\n          addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n        }\n        if (KEEP_CONTENT) {\n          ALLOWED_TAGS['#text'] = true;\n        }\n        if (WHOLE_DOCUMENT) {\n          addToSet(ALLOWED_TAGS, [\n            'html',\n            'head',\n            'body'\n          ]);\n        }\n        if (ALLOWED_TAGS.table) {\n          addToSet(ALLOWED_TAGS, ['tbody']);\n          delete FORBID_TAGS.tbody;\n        }\n        if (cfg.TRUSTED_TYPES_POLICY) {\n          if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n            throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n          }\n          if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n            throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n          }\n          trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n          emptyHTML = trustedTypesPolicy.createHTML('');\n        } else {\n          if (trustedTypesPolicy === undefined) {\n            trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n          }\n          if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n            emptyHTML = trustedTypesPolicy.createHTML('');\n          }\n        }\n        if (freeze) {\n          freeze(cfg);\n        }\n        CONFIG = cfg;\n      };\n      const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n        'mi',\n        'mo',\n        'mn',\n        'ms',\n        'mtext'\n      ]);\n      const HTML_INTEGRATION_POINTS = addToSet({}, [\n        'foreignobject',\n        'desc',\n        'title',\n        'annotation-xml'\n      ]);\n      const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n        'title',\n        'style',\n        'font',\n        'a',\n        'script'\n      ]);\n      const ALL_SVG_TAGS = addToSet({}, svg$1);\n      addToSet(ALL_SVG_TAGS, svgFilters);\n      addToSet(ALL_SVG_TAGS, svgDisallowed);\n      const ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n      addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n      const _checkValidNamespace = function _checkValidNamespace(element) {\n        let parent = getParentNode(element);\n        if (!parent || !parent.tagName) {\n          parent = {\n            namespaceURI: NAMESPACE,\n            tagName: 'template'\n          };\n        }\n        const tagName = stringToLowerCase(element.tagName);\n        const parentTagName = stringToLowerCase(parent.tagName);\n        if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n          return false;\n        }\n        if (element.namespaceURI === SVG_NAMESPACE) {\n          if (parent.namespaceURI === HTML_NAMESPACE) {\n            return tagName === 'svg';\n          }\n          if (parent.namespaceURI === MATHML_NAMESPACE) {\n            return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n          }\n          return Boolean(ALL_SVG_TAGS[tagName]);\n        }\n        if (element.namespaceURI === MATHML_NAMESPACE) {\n          if (parent.namespaceURI === HTML_NAMESPACE) {\n            return tagName === 'math';\n          }\n          if (parent.namespaceURI === SVG_NAMESPACE) {\n            return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n          }\n          return Boolean(ALL_MATHML_TAGS[tagName]);\n        }\n        if (element.namespaceURI === HTML_NAMESPACE) {\n          if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n            return false;\n          }\n          if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n            return false;\n          }\n          return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n        }\n        if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n          return true;\n        }\n        return false;\n      };\n      const _forceRemove = function _forceRemove(node) {\n        arrayPush(DOMPurify.removed, { element: node });\n        try {\n          node.parentNode.removeChild(node);\n        } catch (_) {\n          node.remove();\n        }\n      };\n      const _removeAttribute = function _removeAttribute(name, node) {\n        try {\n          arrayPush(DOMPurify.removed, {\n            attribute: node.getAttributeNode(name),\n            from: node\n          });\n        } catch (_) {\n          arrayPush(DOMPurify.removed, {\n            attribute: null,\n            from: node\n          });\n        }\n        node.removeAttribute(name);\n        if (name === 'is' && !ALLOWED_ATTR[name]) {\n          if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n            try {\n              _forceRemove(node);\n            } catch (_) {\n            }\n          } else {\n            try {\n              node.setAttribute(name, '');\n            } catch (_) {\n            }\n          }\n        }\n      };\n      const _initDocument = function _initDocument(dirty) {\n        let doc;\n        let leadingWhitespace;\n        if (FORCE_BODY) {\n          dirty = '<remove></remove>' + dirty;\n        } else {\n          const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n          leadingWhitespace = matches && matches[0];\n        }\n        if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n          dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n        }\n        const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n        if (NAMESPACE === HTML_NAMESPACE) {\n          try {\n            doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n          } catch (_) {\n          }\n        }\n        if (!doc || !doc.documentElement) {\n          doc = implementation.createDocument(NAMESPACE, 'template', null);\n          try {\n            doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n          } catch (_) {\n          }\n        }\n        const body = doc.body || doc.documentElement;\n        if (dirty && leadingWhitespace) {\n          body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n        }\n        if (NAMESPACE === HTML_NAMESPACE) {\n          return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n        }\n        return WHOLE_DOCUMENT ? doc.documentElement : body;\n      };\n      const _createIterator = function _createIterator(root) {\n        return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n      };\n      const _isClobbered = function _isClobbered(elm) {\n        return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n      };\n      const _isNode = function _isNode(object) {\n        return typeof Node === 'object' ? object instanceof Node : object && typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n      };\n      const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n        if (!hooks[entryPoint]) {\n          return;\n        }\n        arrayForEach(hooks[entryPoint], hook => {\n          hook.call(DOMPurify, currentNode, data, CONFIG);\n        });\n      };\n      const _sanitizeElements = function _sanitizeElements(currentNode) {\n        let content;\n        _executeHook('beforeSanitizeElements', currentNode, null);\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        const tagName = transformCaseFunc(currentNode.nodeName);\n        _executeHook('uponSanitizeElement', currentNode, {\n          tagName,\n          allowedTags: ALLOWED_TAGS\n        });\n        if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n            if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))\n              return false;\n            if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName))\n              return false;\n          }\n          if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n            const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n            const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n            if (childNodes && parentNode) {\n              const childCount = childNodes.length;\n              for (let i = childCount - 1; i >= 0; --i) {\n                parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n              }\n            }\n          }\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n          _forceRemove(currentNode);\n          return true;\n        }\n        if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n          content = currentNode.textContent;\n          content = stringReplace(content, MUSTACHE_EXPR, ' ');\n          content = stringReplace(content, ERB_EXPR, ' ');\n          content = stringReplace(content, TMPLIT_EXPR, ' ');\n          if (currentNode.textContent !== content) {\n            arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n            currentNode.textContent = content;\n          }\n        }\n        _executeHook('afterSanitizeElements', currentNode, null);\n        return false;\n      };\n      const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n        if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n          return false;\n        }\n        if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName));\n        else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName));\n        else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n          if (_basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)));\n          else {\n            return false;\n          }\n        } else if (URI_SAFE_ATTRIBUTES[lcName]);\n        else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, '')));\n        else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]);\n        else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, '')));\n        else if (value) {\n          return false;\n        } else ;\n        return true;\n      };\n      const _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n        return tagName.indexOf('-') > 0;\n      };\n      const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n        let attr;\n        let value;\n        let lcName;\n        let l;\n        _executeHook('beforeSanitizeAttributes', currentNode, null);\n        const {attributes} = currentNode;\n        if (!attributes) {\n          return;\n        }\n        const hookEvent = {\n          attrName: '',\n          attrValue: '',\n          keepAttr: true,\n          allowedAttributes: ALLOWED_ATTR\n        };\n        l = attributes.length;\n        while (l--) {\n          attr = attributes[l];\n          const {name, namespaceURI} = attr;\n          value = name === 'value' ? attr.value : stringTrim(attr.value);\n          const initValue = value;\n          lcName = transformCaseFunc(name);\n          hookEvent.attrName = lcName;\n          hookEvent.attrValue = value;\n          hookEvent.keepAttr = true;\n          hookEvent.forceKeepAttr = undefined;\n          _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n          value = hookEvent.attrValue;\n          if (hookEvent.forceKeepAttr) {\n            continue;\n          }\n          if (!hookEvent.keepAttr) {\n            _removeAttribute(name, currentNode);\n            continue;\n          }\n          if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n            _removeAttribute(name, currentNode);\n            continue;\n          }\n          if (SAFE_FOR_TEMPLATES) {\n            value = stringReplace(value, MUSTACHE_EXPR, ' ');\n            value = stringReplace(value, ERB_EXPR, ' ');\n            value = stringReplace(value, TMPLIT_EXPR, ' ');\n          }\n          const lcTag = transformCaseFunc(currentNode.nodeName);\n          if (!_isValidAttribute(lcTag, lcName, value)) {\n            _removeAttribute(name, currentNode);\n            continue;\n          }\n          if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n            _removeAttribute(name, currentNode);\n            value = SANITIZE_NAMED_PROPS_PREFIX + value;\n          }\n          if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n            if (namespaceURI);\n            else {\n              switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n              case 'TrustedHTML': {\n                  value = trustedTypesPolicy.createHTML(value);\n                  break;\n                }\n              case 'TrustedScriptURL': {\n                  value = trustedTypesPolicy.createScriptURL(value);\n                  break;\n                }\n              }\n            }\n          }\n          if (value !== initValue) {\n            try {\n              if (namespaceURI) {\n                currentNode.setAttributeNS(namespaceURI, name, value);\n              } else {\n                currentNode.setAttribute(name, value);\n              }\n            } catch (_) {\n              _removeAttribute(name, currentNode);\n            }\n          }\n        }\n        _executeHook('afterSanitizeAttributes', currentNode, null);\n      };\n      const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n        let shadowNode;\n        const shadowIterator = _createIterator(fragment);\n        _executeHook('beforeSanitizeShadowDOM', fragment, null);\n        while (shadowNode = shadowIterator.nextNode()) {\n          _executeHook('uponSanitizeShadowNode', shadowNode, null);\n          if (_sanitizeElements(shadowNode)) {\n            continue;\n          }\n          if (shadowNode.content instanceof DocumentFragment) {\n            _sanitizeShadowDOM(shadowNode.content);\n          }\n          _sanitizeAttributes(shadowNode);\n        }\n        _executeHook('afterSanitizeShadowDOM', fragment, null);\n      };\n      DOMPurify.sanitize = function (dirty) {\n        let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        let body;\n        let importedNode;\n        let currentNode;\n        let returnNode;\n        IS_EMPTY_INPUT = !dirty;\n        if (IS_EMPTY_INPUT) {\n          dirty = '<!-->';\n        }\n        if (typeof dirty !== 'string' && !_isNode(dirty)) {\n          if (typeof dirty.toString === 'function') {\n            dirty = dirty.toString();\n            if (typeof dirty !== 'string') {\n              throw typeErrorCreate('dirty is not a string, aborting');\n            }\n          } else {\n            throw typeErrorCreate('toString is not a function');\n          }\n        }\n        if (!DOMPurify.isSupported) {\n          return dirty;\n        }\n        if (!SET_CONFIG) {\n          _parseConfig(cfg);\n        }\n        DOMPurify.removed = [];\n        if (typeof dirty === 'string') {\n          IN_PLACE = false;\n        }\n        if (IN_PLACE) {\n          if (dirty.nodeName) {\n            const tagName = transformCaseFunc(dirty.nodeName);\n            if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n              throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n            }\n          }\n        } else if (dirty instanceof Node) {\n          body = _initDocument('<!---->');\n          importedNode = body.ownerDocument.importNode(dirty, true);\n          if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n            body = importedNode;\n          } else if (importedNode.nodeName === 'HTML') {\n            body = importedNode;\n          } else {\n            body.appendChild(importedNode);\n          }\n        } else {\n          if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {\n            return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n          }\n          body = _initDocument(dirty);\n          if (!body) {\n            return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n          }\n        }\n        if (body && FORCE_BODY) {\n          _forceRemove(body.firstChild);\n        }\n        const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n        while (currentNode = nodeIterator.nextNode()) {\n          if (_sanitizeElements(currentNode)) {\n            continue;\n          }\n          if (currentNode.content instanceof DocumentFragment) {\n            _sanitizeShadowDOM(currentNode.content);\n          }\n          _sanitizeAttributes(currentNode);\n        }\n        if (IN_PLACE) {\n          return dirty;\n        }\n        if (RETURN_DOM) {\n          if (RETURN_DOM_FRAGMENT) {\n            returnNode = createDocumentFragment.call(body.ownerDocument);\n            while (body.firstChild) {\n              returnNode.appendChild(body.firstChild);\n            }\n          } else {\n            returnNode = body;\n          }\n          if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n            returnNode = importNode.call(originalDocument, returnNode, true);\n          }\n          return returnNode;\n        }\n        let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n        if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n          serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n        }\n        if (SAFE_FOR_TEMPLATES) {\n          serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n          serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n          serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n        }\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n      };\n      DOMPurify.setConfig = function (cfg) {\n        _parseConfig(cfg);\n        SET_CONFIG = true;\n      };\n      DOMPurify.clearConfig = function () {\n        CONFIG = null;\n        SET_CONFIG = false;\n      };\n      DOMPurify.isValidAttribute = function (tag, attr, value) {\n        if (!CONFIG) {\n          _parseConfig({});\n        }\n        const lcTag = transformCaseFunc(tag);\n        const lcName = transformCaseFunc(attr);\n        return _isValidAttribute(lcTag, lcName, value);\n      };\n      DOMPurify.addHook = function (entryPoint, hookFunction) {\n        if (typeof hookFunction !== 'function') {\n          return;\n        }\n        hooks[entryPoint] = hooks[entryPoint] || [];\n        arrayPush(hooks[entryPoint], hookFunction);\n      };\n      DOMPurify.removeHook = function (entryPoint) {\n        if (hooks[entryPoint]) {\n          return arrayPop(hooks[entryPoint]);\n        }\n      };\n      DOMPurify.removeHooks = function (entryPoint) {\n        if (hooks[entryPoint]) {\n          hooks[entryPoint] = [];\n        }\n      };\n      DOMPurify.removeAllHooks = function () {\n        hooks = {};\n      };\n      return DOMPurify;\n    }\n    var purify = createDOMPurify();\n\n    const each$4 = Tools.each, trim = Tools.trim;\n    const queryParts = [\n      'source',\n      'protocol',\n      'authority',\n      'userInfo',\n      'user',\n      'password',\n      'host',\n      'port',\n      'relative',\n      'path',\n      'directory',\n      'file',\n      'query',\n      'anchor'\n    ];\n    const DEFAULT_PORTS = {\n      ftp: 21,\n      http: 80,\n      https: 443,\n      mailto: 25\n    };\n    const safeSvgDataUrlElements = [\n      'img',\n      'video'\n    ];\n    const blockSvgDataUris = (allowSvgDataUrls, tagName) => {\n      if (isNonNullable(allowSvgDataUrls)) {\n        return !allowSvgDataUrls;\n      } else {\n        return isNonNullable(tagName) ? !contains$2(safeSvgDataUrlElements, tagName) : true;\n      }\n    };\n    const decodeUri = encodedUri => {\n      try {\n        return decodeURIComponent(encodedUri);\n      } catch (ex) {\n        return unescape(encodedUri);\n      }\n    };\n    const isInvalidUri = (settings, uri, tagName) => {\n      const decodedUri = decodeUri(uri).replace(/\\s/g, '');\n      if (settings.allow_script_urls) {\n        return false;\n      } else if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n        return true;\n      } else if (settings.allow_html_data_urls) {\n        return false;\n      } else if (/^data:image\\//i.test(decodedUri)) {\n        return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(decodedUri);\n      } else {\n        return /^data:/i.test(decodedUri);\n      }\n    };\n    class URI {\n      static parseDataUri(uri) {\n        let type;\n        const uriComponents = decodeURIComponent(uri).split(',');\n        const matches = /data:([^;]+)/.exec(uriComponents[0]);\n        if (matches) {\n          type = matches[1];\n        }\n        return {\n          type,\n          data: uriComponents[1]\n        };\n      }\n      static isDomSafe(uri, context, options = {}) {\n        if (options.allow_script_urls) {\n          return true;\n        } else {\n          const decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n          return !isInvalidUri(options, decodedUri, context);\n        }\n      }\n      static getDocumentBaseUrl(loc) {\n        var _a;\n        let baseUrl;\n        if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n          baseUrl = (_a = loc.href) !== null && _a !== void 0 ? _a : '';\n        } else {\n          baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n        }\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n          baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(baseUrl)) {\n            baseUrl += '/';\n          }\n        }\n        return baseUrl;\n      }\n      constructor(url, settings = {}) {\n        this.path = '';\n        this.directory = '';\n        url = trim(url);\n        this.settings = settings;\n        const baseUri = settings.base_uri;\n        const self = this;\n        if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n          self.source = url;\n          return;\n        }\n        const isProtocolRelative = url.indexOf('//') === 0;\n        if (url.indexOf('/') === 0 && !isProtocolRelative) {\n          url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n        }\n        if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n          const baseUrl = baseUri ? baseUri.path : new URI(document.location.href).directory;\n          if ((baseUri === null || baseUri === void 0 ? void 0 : baseUri.protocol) === '') {\n            url = '//mce_host' + self.toAbsPath(baseUrl, url);\n          } else {\n            const match = /([^#?]*)([#?]?.*)/.exec(url);\n            if (match) {\n              url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n            }\n          }\n        }\n        url = url.replace(/@@/g, '(mce_at)');\n        const urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n        if (urlMatch) {\n          each$4(queryParts, (v, i) => {\n            let part = urlMatch[i];\n            if (part) {\n              part = part.replace(/\\(mce_at\\)/g, '@@');\n            }\n            self[v] = part;\n          });\n        }\n        if (baseUri) {\n          if (!self.protocol) {\n            self.protocol = baseUri.protocol;\n          }\n          if (!self.userInfo) {\n            self.userInfo = baseUri.userInfo;\n          }\n          if (!self.port && self.host === 'mce_host') {\n            self.port = baseUri.port;\n          }\n          if (!self.host || self.host === 'mce_host') {\n            self.host = baseUri.host;\n          }\n          self.source = '';\n        }\n        if (isProtocolRelative) {\n          self.protocol = '';\n        }\n      }\n      setPath(path) {\n        const pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n        if (pathMatch) {\n          this.path = pathMatch[0];\n          this.directory = pathMatch[1];\n          this.file = pathMatch[2];\n        }\n        this.source = '';\n        this.getURI();\n      }\n      toRelative(uri) {\n        if (uri === './') {\n          return uri;\n        }\n        const relativeUri = new URI(uri, { base_uri: this });\n        if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n          return relativeUri.getURI();\n        }\n        const tu = this.getURI(), uu = relativeUri.getURI();\n        if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n          return tu;\n        }\n        let output = this.toRelPath(this.path, relativeUri.path);\n        if (relativeUri.query) {\n          output += '?' + relativeUri.query;\n        }\n        if (relativeUri.anchor) {\n          output += '#' + relativeUri.anchor;\n        }\n        return output;\n      }\n      toAbsolute(uri, noHost) {\n        const absoluteUri = new URI(uri, { base_uri: this });\n        return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n      }\n      isSameOrigin(uri) {\n        if (this.host == uri.host && this.protocol == uri.protocol) {\n          if (this.port == uri.port) {\n            return true;\n          }\n          const defaultPort = this.protocol ? DEFAULT_PORTS[this.protocol] : null;\n          if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      toRelPath(base, path) {\n        let breakPoint = 0, out = '', i, l;\n        const normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n        const items = path.split('/');\n        if (normalizedBase.length >= items.length) {\n          for (i = 0, l = normalizedBase.length; i < l; i++) {\n            if (i >= items.length || normalizedBase[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (normalizedBase.length < items.length) {\n          for (i = 0, l = items.length; i < l; i++) {\n            if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (breakPoint === 1) {\n          return path;\n        }\n        for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n          out += '../';\n        }\n        for (i = breakPoint - 1, l = items.length; i < l; i++) {\n          if (i !== breakPoint - 1) {\n            out += '/' + items[i];\n          } else {\n            out += items[i];\n          }\n        }\n        return out;\n      }\n      toAbsPath(base, path) {\n        let nb = 0;\n        const tr = /\\/$/.test(path) ? '/' : '';\n        const normalizedBase = base.split('/');\n        const normalizedPath = path.split('/');\n        const baseParts = [];\n        each$4(normalizedBase, k => {\n          if (k) {\n            baseParts.push(k);\n          }\n        });\n        const pathParts = [];\n        for (let i = normalizedPath.length - 1; i >= 0; i--) {\n          if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n            continue;\n          }\n          if (normalizedPath[i] === '..') {\n            nb++;\n            continue;\n          }\n          if (nb > 0) {\n            nb--;\n            continue;\n          }\n          pathParts.push(normalizedPath[i]);\n        }\n        const i = baseParts.length - nb;\n        let outPath;\n        if (i <= 0) {\n          outPath = reverse(pathParts).join('/');\n        } else {\n          outPath = baseParts.slice(0, i).join('/') + '/' + reverse(pathParts).join('/');\n        }\n        if (outPath.indexOf('/') !== 0) {\n          outPath = '/' + outPath;\n        }\n        if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n          outPath += tr;\n        }\n        return outPath;\n      }\n      getURI(noProtoHost = false) {\n        let s;\n        if (!this.source || noProtoHost) {\n          s = '';\n          if (!noProtoHost) {\n            if (this.protocol) {\n              s += this.protocol + '://';\n            } else {\n              s += '//';\n            }\n            if (this.userInfo) {\n              s += this.userInfo + '@';\n            }\n            if (this.host) {\n              s += this.host;\n            }\n            if (this.port) {\n              s += ':' + this.port;\n            }\n          }\n          if (this.path) {\n            s += this.path;\n          }\n          if (this.query) {\n            s += '?' + this.query;\n          }\n          if (this.anchor) {\n            s += '#' + this.anchor;\n          }\n          this.source = s;\n        }\n        return this.source;\n      }\n    }\n\n    const filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n    const internalElementAttr = 'data-mce-type';\n    let uid = 0;\n    const processNode = (node, settings, schema, scope, evt) => {\n      var _a, _b, _c, _d;\n      const validate = settings.validate;\n      const specialElements = schema.getSpecialElements();\n      if (node.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test((_a = node.nodeValue) !== null && _a !== void 0 ? _a : '')) {\n        node.nodeValue = ' ' + node.nodeValue;\n      }\n      const lcTagName = (_b = evt === null || evt === void 0 ? void 0 : evt.tagName) !== null && _b !== void 0 ? _b : node.nodeName.toLowerCase();\n      if (scope !== 'html' && schema.isValid(scope)) {\n        if (isNonNullable(evt)) {\n          evt.allowedTags[lcTagName] = true;\n        }\n        return;\n      }\n      if (node.nodeType !== ELEMENT || lcTagName === 'body') {\n        return;\n      }\n      const element = SugarElement.fromDom(node);\n      const isInternalElement = has$1(element, internalElementAttr);\n      const bogus = get$9(element, 'data-mce-bogus');\n      if (!isInternalElement && isString(bogus)) {\n        if (bogus === 'all') {\n          remove$5(element);\n        } else {\n          unwrap(element);\n        }\n        return;\n      }\n      const rule = schema.getElementRule(lcTagName);\n      if (validate && !rule) {\n        if (has$2(specialElements, lcTagName)) {\n          remove$5(element);\n        } else {\n          unwrap(element);\n        }\n        return;\n      } else {\n        if (isNonNullable(evt)) {\n          evt.allowedTags[lcTagName] = true;\n        }\n      }\n      if (validate && rule && !isInternalElement) {\n        each$e((_c = rule.attributesForced) !== null && _c !== void 0 ? _c : [], attr => {\n          set$3(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n        });\n        each$e((_d = rule.attributesDefault) !== null && _d !== void 0 ? _d : [], attr => {\n          if (!has$1(element, attr.name)) {\n            set$3(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n          }\n        });\n        if (rule.attributesRequired && !exists(rule.attributesRequired, attr => has$1(element, attr))) {\n          unwrap(element);\n          return;\n        }\n        if (rule.removeEmptyAttrs && hasNone(element)) {\n          unwrap(element);\n          return;\n        }\n        if (rule.outputName && rule.outputName !== lcTagName) {\n          mutate(element, rule.outputName);\n        }\n      }\n    };\n    const processAttr = (ele, settings, schema, scope, evt) => {\n      const tagName = ele.tagName.toLowerCase();\n      const {attrName, attrValue} = evt;\n      evt.keepAttr = shouldKeepAttribute(settings, schema, scope, tagName, attrName, attrValue);\n      if (evt.keepAttr) {\n        evt.allowedAttributes[attrName] = true;\n        if (isBooleanAttribute(attrName, schema)) {\n          evt.attrValue = attrName;\n        }\n        if (settings.allow_svg_data_urls && startsWith(attrValue, 'data:image/svg+xml')) {\n          evt.forceKeepAttr = true;\n        }\n      } else if (isRequiredAttributeOfInternalElement(ele, attrName)) {\n        evt.forceKeepAttr = true;\n      }\n    };\n    const shouldKeepAttribute = (settings, schema, scope, tagName, attrName, attrValue) => {\n      if (scope !== 'html' && !isNonHtmlElementRootName(tagName)) {\n        return true;\n      }\n      return !(attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) && (!settings.validate || schema.isValid(tagName, attrName) || startsWith(attrName, 'data-') || startsWith(attrName, 'aria-'));\n    };\n    const isRequiredAttributeOfInternalElement = (ele, attrName) => ele.hasAttribute(internalElementAttr) && (attrName === 'id' || attrName === 'class' || attrName === 'style');\n    const isBooleanAttribute = (attrName, schema) => attrName in schema.getBoolAttrs();\n    const filterAttributes = (ele, settings, schema, scope) => {\n      const {attributes} = ele;\n      for (let i = attributes.length - 1; i >= 0; i--) {\n        const attr = attributes[i];\n        const attrName = attr.name;\n        const attrValue = attr.value;\n        if (!shouldKeepAttribute(settings, schema, scope, ele.tagName.toLowerCase(), attrName, attrValue) && !isRequiredAttributeOfInternalElement(ele, attrName)) {\n          ele.removeAttribute(attrName);\n        } else if (isBooleanAttribute(attrName, schema)) {\n          ele.setAttribute(attrName, attrName);\n        }\n      }\n    };\n    const setupPurify = (settings, schema, namespaceTracker) => {\n      const purify$1 = purify();\n      purify$1.addHook('uponSanitizeElement', (ele, evt) => {\n        processNode(ele, settings, schema, namespaceTracker.track(ele), evt);\n      });\n      purify$1.addHook('uponSanitizeAttribute', (ele, evt) => {\n        processAttr(ele, settings, schema, namespaceTracker.current(), evt);\n      });\n      return purify$1;\n    };\n    const getPurifyConfig = (settings, mimeType) => {\n      const basePurifyConfig = {\n        IN_PLACE: true,\n        ALLOW_UNKNOWN_PROTOCOLS: true,\n        ALLOWED_TAGS: [\n          '#comment',\n          '#cdata-section',\n          'body'\n        ],\n        ALLOWED_ATTR: []\n      };\n      const config = { ...basePurifyConfig };\n      config.PARSER_MEDIA_TYPE = mimeType;\n      if (settings.allow_script_urls) {\n        config.ALLOWED_URI_REGEXP = /.*/;\n      } else if (settings.allow_html_data_urls) {\n        config.ALLOWED_URI_REGEXP = /^(?!(\\w+script|mhtml):)/i;\n      }\n      return config;\n    };\n    const sanitizeNamespaceElement = ele => {\n      const xlinkAttrs = [\n        'type',\n        'href',\n        'role',\n        'arcrole',\n        'title',\n        'show',\n        'actuate',\n        'label',\n        'from',\n        'to'\n      ].map(name => `xlink:${ name }`);\n      const config = {\n        IN_PLACE: true,\n        USE_PROFILES: {\n          html: true,\n          svg: true,\n          svgFilters: true\n        },\n        ALLOWED_ATTR: xlinkAttrs\n      };\n      purify().sanitize(ele, config);\n      return ele.innerHTML;\n    };\n    const getSanitizer = (settings, schema) => {\n      const namespaceTracker = createNamespaceTracker();\n      if (settings.sanitize) {\n        const purify = setupPurify(settings, schema, namespaceTracker);\n        const sanitizeHtmlElement = (body, mimeType) => {\n          purify.sanitize(body, getPurifyConfig(settings, mimeType));\n          purify.removed = [];\n          namespaceTracker.reset();\n        };\n        return {\n          sanitizeHtmlElement,\n          sanitizeNamespaceElement\n        };\n      } else {\n        const sanitizeHtmlElement = (body, _mimeType) => {\n          const nodeIterator = document.createNodeIterator(body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT);\n          let node;\n          while (node = nodeIterator.nextNode()) {\n            const currentScope = namespaceTracker.track(node);\n            processNode(node, settings, schema, currentScope);\n            if (isElement$6(node)) {\n              filterAttributes(node, settings, schema, currentScope);\n            }\n          }\n          namespaceTracker.reset();\n        };\n        const sanitizeNamespaceElement = noop;\n        return {\n          sanitizeHtmlElement,\n          sanitizeNamespaceElement\n        };\n      }\n    };\n\n    const makeMap = Tools.makeMap, extend$1 = Tools.extend;\n    const transferChildren = (parent, nativeParent, specialElements, nsSanitizer) => {\n      const parentName = parent.name;\n      const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea';\n      const childNodes = nativeParent.childNodes;\n      for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {\n        const nativeChild = childNodes[ni];\n        const child = new AstNode(nativeChild.nodeName.toLowerCase(), nativeChild.nodeType);\n        if (isElement$6(nativeChild)) {\n          const attributes = nativeChild.attributes;\n          for (let ai = 0, al = attributes.length; ai < al; ai++) {\n            const attr = attributes[ai];\n            child.attr(attr.name, attr.value);\n          }\n          if (isNonHtmlElementRootName(child.name)) {\n            nsSanitizer(nativeChild);\n            child.value = nativeChild.innerHTML;\n          }\n        } else if (isText$a(nativeChild)) {\n          child.value = nativeChild.data;\n          if (isSpecial) {\n            child.raw = true;\n          }\n        } else if (isComment(nativeChild) || isCData(nativeChild) || isPi(nativeChild)) {\n          child.value = nativeChild.data;\n        }\n        if (!isNonHtmlElementRootName(child.name)) {\n          transferChildren(child, nativeChild, specialElements, nsSanitizer);\n        }\n        parent.append(child);\n      }\n    };\n    const walkTree = (root, preprocessors, postprocessors) => {\n      const traverseOrder = [];\n      for (let node = root, lastNode = node; node; lastNode = node, node = node.walk()) {\n        const tempNode = node;\n        each$e(preprocessors, preprocess => preprocess(tempNode));\n        if (isNullable(tempNode.parent) && tempNode !== root) {\n          node = lastNode;\n        } else {\n          traverseOrder.push(tempNode);\n        }\n      }\n      for (let i = traverseOrder.length - 1; i >= 0; i--) {\n        const node = traverseOrder[i];\n        each$e(postprocessors, postprocess => postprocess(node));\n      }\n    };\n    const whitespaceCleaner = (root, schema, settings, args) => {\n      const validate = settings.validate;\n      const nonEmptyElements = schema.getNonEmptyElements();\n      const whitespaceElements = schema.getWhitespaceElements();\n      const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n      const textRootBlockElements = getTextRootBlockElements(schema);\n      const allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n      const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n      const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n      const hasWhitespaceParent = node => {\n        let tempNode = node.parent;\n        while (isNonNullable(tempNode)) {\n          if (tempNode.name in whitespaceElements) {\n            return true;\n          } else {\n            tempNode = tempNode.parent;\n          }\n        }\n        return false;\n      };\n      const isTextRootBlockEmpty = node => {\n        let tempNode = node;\n        while (isNonNullable(tempNode)) {\n          if (tempNode.name in textRootBlockElements) {\n            return isEmpty(schema, nonEmptyElements, whitespaceElements, tempNode);\n          } else {\n            tempNode = tempNode.parent;\n          }\n        }\n        return false;\n      };\n      const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node) || isNonHtmlElementRootName(node.name) && node.parent === root;\n      const isAtEdgeOfBlock = (node, start) => {\n        const neighbour = start ? node.prev : node.next;\n        if (isNonNullable(neighbour) || isNullable(node.parent)) {\n          return false;\n        }\n        return isBlock(node.parent) && (node.parent !== root || args.isRootContent === true);\n      };\n      const preprocess = node => {\n        var _a;\n        if (node.type === 3) {\n          if (!hasWhitespaceParent(node)) {\n            let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n            text = text.replace(allWhiteSpaceRegExp, ' ');\n            if (isLineBreakNode(node.prev, isBlock) || isAtEdgeOfBlock(node, true)) {\n              text = text.replace(startWhiteSpaceRegExp, '');\n            }\n            if (text.length === 0) {\n              node.remove();\n            } else {\n              node.value = text;\n            }\n          }\n        }\n      };\n      const postprocess = node => {\n        var _a;\n        if (node.type === 1) {\n          const elementRule = schema.getElementRule(node.name);\n          if (validate && elementRule) {\n            const isNodeEmpty = isEmpty(schema, nonEmptyElements, whitespaceElements, node);\n            if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n              paddEmptyNode(settings, args, isBlock, node);\n            } else if (elementRule.removeEmpty && isNodeEmpty) {\n              if (isBlock(node)) {\n                node.remove();\n              } else {\n                node.unwrap();\n              }\n            } else if (elementRule.paddEmpty && (isNodeEmpty || isPaddedWithNbsp(node))) {\n              paddEmptyNode(settings, args, isBlock, node);\n            }\n          }\n        } else if (node.type === 3) {\n          if (!hasWhitespaceParent(node)) {\n            let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n            if (node.next && isBlock(node.next) || isAtEdgeOfBlock(node, false)) {\n              text = text.replace(endWhiteSpaceRegExp, '');\n            }\n            if (text.length === 0) {\n              node.remove();\n            } else {\n              node.value = text;\n            }\n          }\n        }\n      };\n      return [\n        preprocess,\n        postprocess\n      ];\n    };\n    const getRootBlockName = (settings, args) => {\n      var _a;\n      const name = (_a = args.forced_root_block) !== null && _a !== void 0 ? _a : settings.forced_root_block;\n      if (name === false) {\n        return '';\n      } else if (name === true) {\n        return 'p';\n      } else {\n        return name;\n      }\n    };\n    const DomParser = (settings = {}, schema = Schema()) => {\n      const nodeFilterRegistry = create$8();\n      const attributeFilterRegistry = create$8();\n      const defaultedSettings = {\n        validate: true,\n        root_name: 'body',\n        sanitize: true,\n        ...settings\n      };\n      const parser = new DOMParser();\n      const sanitizer = getSanitizer(defaultedSettings, schema);\n      const parseAndSanitizeWithContext = (html, rootName, format = 'html') => {\n        const mimeType = format === 'xhtml' ? 'application/xhtml+xml' : 'text/html';\n        const isSpecialRoot = has$2(schema.getSpecialElements(), rootName.toLowerCase());\n        const content = isSpecialRoot ? `<${ rootName }>${ html }</${ rootName }>` : html;\n        const wrappedHtml = format === 'xhtml' ? `<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>${ content }</body></html>` : `<body>${ content }</body>`;\n        const body = parser.parseFromString(wrappedHtml, mimeType).body;\n        sanitizer.sanitizeHtmlElement(body, mimeType);\n        return isSpecialRoot ? body.firstChild : body;\n      };\n      const addNodeFilter = nodeFilterRegistry.addFilter;\n      const getNodeFilters = nodeFilterRegistry.getFilters;\n      const removeNodeFilter = nodeFilterRegistry.removeFilter;\n      const addAttributeFilter = attributeFilterRegistry.addFilter;\n      const getAttributeFilters = attributeFilterRegistry.getFilters;\n      const removeAttributeFilter = attributeFilterRegistry.removeFilter;\n      const findInvalidChildren = (node, invalidChildren) => {\n        if (isInvalid(schema, node)) {\n          invalidChildren.push(node);\n        }\n      };\n      const isWrappableNode = (blockElements, node) => {\n        const isInternalElement = isString(node.attr(internalElementAttr));\n        const isInlineElement = node.type === 1 && (!has$2(blockElements, node.name) && !isTransparentAstBlock(schema, node)) && !isNonHtmlElementRootName(node.name);\n        return node.type === 3 || isInlineElement && !isInternalElement;\n      };\n      const addRootBlocks = (rootNode, rootBlockName) => {\n        const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n        const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n        const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n        let node = rootNode.firstChild, rootBlockNode = null;\n        const trim = rootBlock => {\n          var _a, _b;\n          if (rootBlock) {\n            node = rootBlock.firstChild;\n            if (node && node.type === 3) {\n              node.value = (_a = node.value) === null || _a === void 0 ? void 0 : _a.replace(startWhiteSpaceRegExp, '');\n            }\n            node = rootBlock.lastChild;\n            if (node && node.type === 3) {\n              node.value = (_b = node.value) === null || _b === void 0 ? void 0 : _b.replace(endWhiteSpaceRegExp, '');\n            }\n          }\n        };\n        if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n          return;\n        }\n        while (node) {\n          const next = node.next;\n          if (isWrappableNode(blockElements, node)) {\n            if (!rootBlockNode) {\n              rootBlockNode = new AstNode(rootBlockName, 1);\n              rootBlockNode.attr(defaultedSettings.forced_root_block_attrs);\n              rootNode.insert(rootBlockNode, node);\n              rootBlockNode.append(node);\n            } else {\n              rootBlockNode.append(node);\n            }\n          } else {\n            trim(rootBlockNode);\n            rootBlockNode = null;\n          }\n          node = next;\n        }\n        trim(rootBlockNode);\n      };\n      const parse = (html, args = {}) => {\n        var _a;\n        const validate = defaultedSettings.validate;\n        const rootName = (_a = args.context) !== null && _a !== void 0 ? _a : defaultedSettings.root_name;\n        const element = parseAndSanitizeWithContext(html, rootName, args.format);\n        updateChildren(schema, element);\n        const rootNode = new AstNode(rootName, 11);\n        transferChildren(rootNode, element, schema.getSpecialElements(), sanitizer.sanitizeNamespaceElement);\n        element.innerHTML = '';\n        const [whitespacePre, whitespacePost] = whitespaceCleaner(rootNode, schema, defaultedSettings, args);\n        const invalidChildren = [];\n        const invalidFinder = validate ? node => findInvalidChildren(node, invalidChildren) : noop;\n        const matches = {\n          nodes: {},\n          attributes: {}\n        };\n        const matchFinder = node => matchNode$1(getNodeFilters(), getAttributeFilters(), node, matches);\n        walkTree(rootNode, [\n          whitespacePre,\n          matchFinder\n        ], [\n          whitespacePost,\n          invalidFinder\n        ]);\n        invalidChildren.reverse();\n        if (validate && invalidChildren.length > 0) {\n          if (args.context) {\n            const {\n              pass: topLevelChildren,\n              fail: otherChildren\n            } = partition$2(invalidChildren, child => child.parent === rootNode);\n            cleanInvalidNodes(otherChildren, schema, rootNode, matchFinder);\n            args.invalid = topLevelChildren.length > 0;\n          } else {\n            cleanInvalidNodes(invalidChildren, schema, rootNode, matchFinder);\n          }\n        }\n        const rootBlockName = getRootBlockName(defaultedSettings, args);\n        if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n          addRootBlocks(rootNode, rootBlockName);\n        }\n        if (!args.invalid) {\n          runFilters(matches, args);\n        }\n        return rootNode;\n      };\n      const exports = {\n        schema,\n        addAttributeFilter,\n        getAttributeFilters,\n        removeAttributeFilter,\n        addNodeFilter,\n        getNodeFilters,\n        removeNodeFilter,\n        parse\n      };\n      register$4(exports, defaultedSettings);\n      register$5(exports, defaultedSettings, schema);\n      return exports;\n    };\n\n    const serializeContent = content => isTreeNode(content) ? HtmlSerializer({ validate: false }).serialize(content) : content;\n    const withSerializedContent = (content, fireEvent, parserSettings) => {\n      const serializedContent = serializeContent(content);\n      const eventArgs = fireEvent(serializedContent);\n      if (eventArgs.isDefaultPrevented()) {\n        return eventArgs;\n      } else if (isTreeNode(content)) {\n        if (eventArgs.content !== serializedContent) {\n          const rootNode = DomParser({\n            validate: false,\n            forced_root_block: false,\n            ...parserSettings\n          }).parse(eventArgs.content, { context: content.name });\n          return {\n            ...eventArgs,\n            content: rootNode\n          };\n        } else {\n          return {\n            ...eventArgs,\n            content\n          };\n        }\n      } else {\n        return eventArgs;\n      }\n    };\n    const preProcessGetContent = (editor, args) => {\n      if (args.no_events) {\n        return Result.value(args);\n      } else {\n        const eventArgs = fireBeforeGetContent(editor, args);\n        if (eventArgs.isDefaultPrevented()) {\n          return Result.error(fireGetContent(editor, {\n            content: '',\n            ...eventArgs\n          }).content);\n        } else {\n          return Result.value(eventArgs);\n        }\n      }\n    };\n    const postProcessGetContent = (editor, content, args) => {\n      if (args.no_events) {\n        return content;\n      } else {\n        const processedEventArgs = withSerializedContent(content, content => fireGetContent(editor, {\n          ...args,\n          content\n        }), {\n          sanitize: shouldSanitizeXss(editor),\n          sandbox_iframes: shouldSandboxIframes(editor)\n        });\n        return processedEventArgs.content;\n      }\n    };\n    const preProcessSetContent = (editor, args) => {\n      if (args.no_events) {\n        return Result.value(args);\n      } else {\n        const processedEventArgs = withSerializedContent(args.content, content => fireBeforeSetContent(editor, {\n          ...args,\n          content\n        }), {\n          sanitize: shouldSanitizeXss(editor),\n          sandbox_iframes: shouldSandboxIframes(editor)\n        });\n        if (processedEventArgs.isDefaultPrevented()) {\n          fireSetContent(editor, processedEventArgs);\n          return Result.error(undefined);\n        } else {\n          return Result.value(processedEventArgs);\n        }\n      }\n    };\n    const postProcessSetContent = (editor, content, args) => {\n      if (!args.no_events) {\n        fireSetContent(editor, {\n          ...args,\n          content\n        });\n      }\n    };\n\n    const tableModel = (element, width, rows) => ({\n      element,\n      width,\n      rows\n    });\n    const tableRow = (element, cells) => ({\n      element,\n      cells\n    });\n    const cellPosition = (x, y) => ({\n      x,\n      y\n    });\n    const getSpan = (td, key) => {\n      return getOpt(td, key).bind(toInt).getOr(1);\n    };\n    const fillout = (table, x, y, tr, td) => {\n      const rowspan = getSpan(td, 'rowspan');\n      const colspan = getSpan(td, 'colspan');\n      const rows = table.rows;\n      for (let y2 = y; y2 < y + rowspan; y2++) {\n        if (!rows[y2]) {\n          rows[y2] = tableRow(deep$1(tr), []);\n        }\n        for (let x2 = x; x2 < x + colspan; x2++) {\n          const cells = rows[y2].cells;\n          cells[x2] = y2 === y && x2 === x ? td : shallow$1(td);\n        }\n      }\n    };\n    const cellExists = (table, x, y) => {\n      const rows = table.rows;\n      const cells = rows[y] ? rows[y].cells : [];\n      return !!cells[x];\n    };\n    const skipCellsX = (table, x, y) => {\n      while (cellExists(table, x, y)) {\n        x++;\n      }\n      return x;\n    };\n    const getWidth = rows => {\n      return foldl(rows, (acc, row) => {\n        return row.cells.length > acc ? row.cells.length : acc;\n      }, 0);\n    };\n    const findElementPos = (table, element) => {\n      const rows = table.rows;\n      for (let y = 0; y < rows.length; y++) {\n        const cells = rows[y].cells;\n        for (let x = 0; x < cells.length; x++) {\n          if (eq(cells[x], element)) {\n            return Optional.some(cellPosition(x, y));\n          }\n        }\n      }\n      return Optional.none();\n    };\n    const extractRows = (table, sx, sy, ex, ey) => {\n      const newRows = [];\n      const rows = table.rows;\n      for (let y = sy; y <= ey; y++) {\n        const cells = rows[y].cells;\n        const slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n        newRows.push(tableRow(rows[y].element, slice));\n      }\n      return newRows;\n    };\n    const subTable = (table, startPos, endPos) => {\n      const sx = startPos.x, sy = startPos.y;\n      const ex = endPos.x, ey = endPos.y;\n      const newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n      return tableModel(table.element, getWidth(newRows), newRows);\n    };\n    const createDomTable = (table, rows) => {\n      const tableElement = shallow$1(table.element);\n      const tableBody = SugarElement.fromTag('tbody');\n      append(tableBody, rows);\n      append$1(tableElement, tableBody);\n      return tableElement;\n    };\n    const modelRowsToDomRows = table => {\n      return map$3(table.rows, row => {\n        const cells = map$3(row.cells, cell => {\n          const td = deep$1(cell);\n          remove$a(td, 'colspan');\n          remove$a(td, 'rowspan');\n          return td;\n        });\n        const tr = shallow$1(row.element);\n        append(tr, cells);\n        return tr;\n      });\n    };\n    const fromDom = tableElm => {\n      const table = tableModel(shallow$1(tableElm), 0, []);\n      each$e(descendants(tableElm, 'tr'), (tr, y) => {\n        each$e(descendants(tr, 'td,th'), (td, x) => {\n          fillout(table, skipCellsX(table, x, y), y, tr, td);\n        });\n      });\n      return tableModel(table.element, getWidth(table.rows), table.rows);\n    };\n    const toDom = table => {\n      return createDomTable(table, modelRowsToDomRows(table));\n    };\n    const subsection = (table, startElement, endElement) => {\n      return findElementPos(table, startElement).bind(startPos => {\n        return findElementPos(table, endElement).map(endPos => {\n          return subTable(table, startPos, endPos);\n        });\n      });\n    };\n\n    const findParentListContainer = parents => find$2(parents, elm => name(elm) === 'ul' || name(elm) === 'ol');\n    const getFullySelectedListWrappers = (parents, rng) => find$2(parents, elm => name(elm) === 'li' && hasAllContentsSelected(elm, rng)).fold(constant([]), _li => findParentListContainer(parents).map(listCont => {\n      const listElm = SugarElement.fromTag(name(listCont));\n      const listStyles = filter$4(getAllRaw(listCont), (_style, name) => startsWith(name, 'list-style'));\n      setAll(listElm, listStyles);\n      return [\n        SugarElement.fromTag('li'),\n        listElm\n      ];\n    }).getOr([]));\n    const wrap = (innerElm, elms) => {\n      const wrapped = foldl(elms, (acc, elm) => {\n        append$1(elm, acc);\n        return elm;\n      }, innerElm);\n      return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n    };\n    const directListWrappers = commonAnchorContainer => {\n      if (isListItem$1(commonAnchorContainer)) {\n        return parent(commonAnchorContainer).filter(isList).fold(constant([]), listElm => [\n          commonAnchorContainer,\n          listElm\n        ]);\n      } else {\n        return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n      }\n    };\n    const getWrapElements = (rootNode, rng, schema) => {\n      const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n      const parents = parentsAndSelf(commonAnchorContainer, rootNode);\n      const wrapElements = filter$5(parents, el => schema.isWrapper(name(el)));\n      const listWrappers = getFullySelectedListWrappers(parents, rng);\n      const allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n      return map$3(allWrappers, shallow$1);\n    };\n    const emptyFragment = () => fromElements([]);\n    const getFragmentFromRange = (rootNode, rng, schema) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng, schema));\n    const getParentTable = (rootElm, cell) => ancestor$3(cell, 'table', curry(eq, rootElm));\n    const getTableFragment = (rootNode, selectedTableCells) => getParentTable(rootNode, selectedTableCells[0]).bind(tableElm => {\n      const firstCell = selectedTableCells[0];\n      const lastCell = selectedTableCells[selectedTableCells.length - 1];\n      const fullTableModel = fromDom(tableElm);\n      return subsection(fullTableModel, firstCell, lastCell).map(sectionedTableModel => fromElements([toDom(sectionedTableModel)]));\n    }).getOrThunk(emptyFragment);\n    const getSelectionFragment = (rootNode, ranges, schema) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0], schema);\n    const read$3 = (rootNode, ranges, schema) => {\n      const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n      return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges, schema);\n    };\n\n    const isCollapsibleWhitespace = (text, index) => index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n    const getInnerText = bin => {\n      return trim$2(bin.innerText);\n    };\n    const getContextNodeName = parentBlockOpt => parentBlockOpt.map(block => block.nodeName).getOr('div').toLowerCase();\n    const getTextContent = editor => Optional.from(editor.selection.getRng()).map(rng => {\n      var _a;\n      const parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n      const body = editor.getBody();\n      const contextNodeName = getContextNodeName(parentBlockOpt);\n      const rangeContentClone = SugarElement.fromDom(rng.cloneContents());\n      cleanupBogusElements(rangeContentClone);\n      cleanupInputNames(rangeContentClone);\n      const bin = editor.dom.add(body, contextNodeName, {\n        'data-mce-bogus': 'all',\n        'style': 'overflow: hidden; opacity: 0;'\n      }, rangeContentClone.dom);\n      const text = getInnerText(bin);\n      const nonRenderedText = trim$2((_a = bin.textContent) !== null && _a !== void 0 ? _a : '');\n      editor.dom.remove(bin);\n      if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n        const parentBlock = parentBlockOpt.getOr(body);\n        const parentBlockText = getInnerText(parentBlock);\n        const textIndex = parentBlockText.indexOf(text);\n        if (textIndex === -1) {\n          return text;\n        } else {\n          const hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n          const hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n          return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n        }\n      } else {\n        return text;\n      }\n    }).getOr('');\n    const getSerializedContent = (editor, args) => {\n      const rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n      const sel = editor.selection.getSel();\n      const ranges = processRanges(editor, getRanges$1(sel));\n      const fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges, editor.schema).dom : rng.cloneContents();\n      if (fragment) {\n        tmpElm.appendChild(fragment);\n      }\n      return editor.selection.serializer.serialize(tmpElm, args);\n    };\n    const extractSelectedContent = (editor, args) => {\n      if (args.format === 'text') {\n        return getTextContent(editor);\n      } else {\n        const content = getSerializedContent(editor, args);\n        if (args.format === 'tree') {\n          return content;\n        } else {\n          return editor.selection.isCollapsed() ? '' : content;\n        }\n      }\n    };\n    const setupArgs$3 = (args, format) => ({\n      ...args,\n      format,\n      get: true,\n      selection: true,\n      getInner: true\n    });\n    const getSelectedContentInternal = (editor, format, args = {}) => {\n      const defaultedArgs = setupArgs$3(args, format);\n      return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n        const content = extractSelectedContent(editor, updatedArgs);\n        return postProcessGetContent(editor, content, updatedArgs);\n      });\n    };\n\n    const KEEP = 0, INSERT = 1, DELETE = 2;\n    const diff = (left, right) => {\n      const size = left.length + right.length + 2;\n      const vDown = new Array(size);\n      const vUp = new Array(size);\n      const snake = (start, end, diag) => {\n        return {\n          start,\n          end,\n          diag\n        };\n      };\n      const buildScript = (start1, end1, start2, end2, script) => {\n        const middle = getMiddleSnake(start1, end1, start2, end2);\n        if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n          let i = start1;\n          let j = start2;\n          while (i < end1 || j < end2) {\n            if (i < end1 && j < end2 && left[i] === right[j]) {\n              script.push([\n                KEEP,\n                left[i]\n              ]);\n              ++i;\n              ++j;\n            } else {\n              if (end1 - start1 > end2 - start2) {\n                script.push([\n                  DELETE,\n                  left[i]\n                ]);\n                ++i;\n              } else {\n                script.push([\n                  INSERT,\n                  right[j]\n                ]);\n                ++j;\n              }\n            }\n          }\n        } else {\n          buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n          for (let i2 = middle.start; i2 < middle.end; ++i2) {\n            script.push([\n              KEEP,\n              left[i2]\n            ]);\n          }\n          buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n        }\n      };\n      const buildSnake = (start, diag, end1, end2) => {\n        let end = start;\n        while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n          ++end;\n        }\n        return snake(start, end, diag);\n      };\n      const getMiddleSnake = (start1, end1, start2, end2) => {\n        const m = end1 - start1;\n        const n = end2 - start2;\n        if (m === 0 || n === 0) {\n          return null;\n        }\n        const delta = m - n;\n        const sum = n + m;\n        const offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n        vDown[1 + offset] = start1;\n        vUp[1 + offset] = end1 + 1;\n        let d, k, i, x, y;\n        for (d = 0; d <= offset; ++d) {\n          for (k = -d; k <= d; k += 2) {\n            i = k + offset;\n            if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n              vDown[i] = vDown[i + 1];\n            } else {\n              vDown[i] = vDown[i - 1] + 1;\n            }\n            x = vDown[i];\n            y = x - start1 + start2 - k;\n            while (x < end1 && y < end2 && left[x] === right[y]) {\n              vDown[i] = ++x;\n              ++y;\n            }\n            if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n              if (vUp[i - delta] <= vDown[i]) {\n                return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n          for (k = delta - d; k <= delta + d; k += 2) {\n            i = k + offset - delta;\n            if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n              vUp[i] = vUp[i + 1] - 1;\n            } else {\n              vUp[i] = vUp[i - 1];\n            }\n            x = vUp[i] - 1;\n            y = x - start1 + start2 - k;\n            while (x >= start1 && y >= start2 && left[x] === right[y]) {\n              vUp[i] = x--;\n              y--;\n            }\n            if (delta % 2 === 0 && -d <= k && k <= d) {\n              if (vUp[i] <= vDown[i + delta]) {\n                return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n        }\n        return null;\n      };\n      const script = [];\n      buildScript(0, left.length, 0, right.length, script);\n      return script;\n    };\n\n    const getOuterHtml = elm => {\n      if (isElement$6(elm)) {\n        return elm.outerHTML;\n      } else if (isText$a(elm)) {\n        return Entities.encodeRaw(elm.data, false);\n      } else if (isComment(elm)) {\n        return '<!--' + elm.data + '-->';\n      }\n      return '';\n    };\n    const createFragment = html => {\n      let node;\n      const container = document.createElement('div');\n      const frag = document.createDocumentFragment();\n      if (html) {\n        container.innerHTML = html;\n      }\n      while (node = container.firstChild) {\n        frag.appendChild(node);\n      }\n      return frag;\n    };\n    const insertAt = (elm, html, index) => {\n      const fragment = createFragment(html);\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        const target = elm.childNodes[index];\n        elm.insertBefore(fragment, target);\n      } else {\n        elm.appendChild(fragment);\n      }\n    };\n    const removeAt = (elm, index) => {\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        const target = elm.childNodes[index];\n        elm.removeChild(target);\n      }\n    };\n    const applyDiff = (diff, elm) => {\n      let index = 0;\n      each$e(diff, action => {\n        if (action[0] === KEEP) {\n          index++;\n        } else if (action[0] === INSERT) {\n          insertAt(elm, action[1], index);\n          index++;\n        } else if (action[0] === DELETE) {\n          removeAt(elm, index);\n        }\n      });\n    };\n    const read$2 = (elm, trimZwsp) => filter$5(map$3(from(elm.childNodes), trimZwsp ? compose(trim$2, getOuterHtml) : getOuterHtml), item => {\n      return item.length > 0;\n    });\n    const write = (fragments, elm) => {\n      const currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n      applyDiff(diff(currentFragments, fragments), elm);\n      return elm;\n    };\n\n    const lazyTempDocument = cached(() => document.implementation.createHTMLDocument('undo'));\n    const hasIframes = body => body.querySelector('iframe') !== null;\n    const createFragmentedLevel = fragments => {\n      return {\n        type: 'fragmented',\n        fragments,\n        content: '',\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    const createCompleteLevel = content => {\n      return {\n        type: 'complete',\n        fragments: null,\n        content,\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    const createFromEditor = editor => {\n      const tempAttrs = editor.serializer.getTempAttrs();\n      const body = trim$1(editor.getBody(), tempAttrs);\n      return hasIframes(body) ? createFragmentedLevel(read$2(body, true)) : createCompleteLevel(trim$2(body.innerHTML));\n    };\n    const applyToEditor = (editor, level, before) => {\n      const bookmark = before ? level.beforeBookmark : level.bookmark;\n      if (level.type === 'fragmented') {\n        write(level.fragments, editor.getBody());\n      } else {\n        editor.setContent(level.content, {\n          format: 'raw',\n          no_selection: isNonNullable(bookmark) && isPathBookmark(bookmark) ? !bookmark.isFakeCaret : true\n        });\n      }\n      if (bookmark) {\n        editor.selection.moveToBookmark(bookmark);\n        editor.selection.scrollIntoView();\n      }\n    };\n    const getLevelContent = level => {\n      return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n    };\n    const getCleanLevelContent = level => {\n      const elm = SugarElement.fromTag('body', lazyTempDocument());\n      set$1(elm, getLevelContent(level));\n      each$e(descendants(elm, '*[data-mce-bogus]'), unwrap);\n      return get$6(elm);\n    };\n    const hasEqualContent = (level1, level2) => getLevelContent(level1) === getLevelContent(level2);\n    const hasEqualCleanedContent = (level1, level2) => getCleanLevelContent(level1) === getCleanLevelContent(level2);\n    const isEq$1 = (level1, level2) => {\n      if (!level1 || !level2) {\n        return false;\n      } else if (hasEqualContent(level1, level2)) {\n        return true;\n      } else {\n        return hasEqualCleanedContent(level1, level2);\n      }\n    };\n\n    const isUnlocked = locks => locks.get() === 0;\n\n    const setTyping = (undoManager, typing, locks) => {\n      if (isUnlocked(locks)) {\n        undoManager.typing = typing;\n      }\n    };\n    const endTyping = (undoManager, locks) => {\n      if (undoManager.typing) {\n        setTyping(undoManager, false, locks);\n        undoManager.add();\n      }\n    };\n    const endTypingLevelIgnoreLocks = undoManager => {\n      if (undoManager.typing) {\n        undoManager.typing = false;\n        undoManager.add();\n      }\n    };\n\n    const beforeChange$1 = (editor, locks, beforeBookmark) => {\n      if (isUnlocked(locks)) {\n        beforeBookmark.set(getUndoBookmark(editor.selection));\n      }\n    };\n    const addUndoLevel$1 = (editor, undoManager, index, locks, beforeBookmark, level, event) => {\n      const currentLevel = createFromEditor(editor);\n      const newLevel = Tools.extend(level || {}, currentLevel);\n      if (!isUnlocked(locks) || editor.removed) {\n        return null;\n      }\n      const lastLevel = undoManager.data[index.get()];\n      if (editor.dispatch('BeforeAddUndo', {\n          level: newLevel,\n          lastLevel,\n          originalEvent: event\n        }).isDefaultPrevented()) {\n        return null;\n      }\n      if (lastLevel && isEq$1(lastLevel, newLevel)) {\n        return null;\n      }\n      if (undoManager.data[index.get()]) {\n        beforeBookmark.get().each(bm => {\n          undoManager.data[index.get()].beforeBookmark = bm;\n        });\n      }\n      const customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n      if (customUndoRedoLevels) {\n        if (undoManager.data.length > customUndoRedoLevels) {\n          for (let i = 0; i < undoManager.data.length - 1; i++) {\n            undoManager.data[i] = undoManager.data[i + 1];\n          }\n          undoManager.data.length--;\n          index.set(undoManager.data.length);\n        }\n      }\n      newLevel.bookmark = getUndoBookmark(editor.selection);\n      if (index.get() < undoManager.data.length - 1) {\n        undoManager.data.length = index.get() + 1;\n      }\n      undoManager.data.push(newLevel);\n      index.set(undoManager.data.length - 1);\n      const args = {\n        level: newLevel,\n        lastLevel,\n        originalEvent: event\n      };\n      if (index.get() > 0) {\n        editor.setDirty(true);\n        editor.dispatch('AddUndo', args);\n        editor.dispatch('change', args);\n      } else {\n        editor.dispatch('AddUndo', args);\n      }\n      return newLevel;\n    };\n    const clear$1 = (editor, undoManager, index) => {\n      undoManager.data = [];\n      index.set(0);\n      undoManager.typing = false;\n      editor.dispatch('ClearUndos');\n    };\n    const extra$1 = (editor, undoManager, index, callback1, callback2) => {\n      if (undoManager.transact(callback1)) {\n        const bookmark = undoManager.data[index.get()].bookmark;\n        const lastLevel = undoManager.data[index.get() - 1];\n        applyToEditor(editor, lastLevel, true);\n        if (undoManager.transact(callback2)) {\n          undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n        }\n      }\n    };\n    const redo$1 = (editor, index, data) => {\n      let level;\n      if (index.get() < data.length - 1) {\n        index.set(index.get() + 1);\n        level = data[index.get()];\n        applyToEditor(editor, level, false);\n        editor.setDirty(true);\n        editor.dispatch('Redo', { level });\n      }\n      return level;\n    };\n    const undo$1 = (editor, undoManager, locks, index) => {\n      let level;\n      if (undoManager.typing) {\n        undoManager.add();\n        undoManager.typing = false;\n        setTyping(undoManager, false, locks);\n      }\n      if (index.get() > 0) {\n        index.set(index.get() - 1);\n        level = undoManager.data[index.get()];\n        applyToEditor(editor, level, true);\n        editor.setDirty(true);\n        editor.dispatch('Undo', { level });\n      }\n      return level;\n    };\n    const reset$1 = undoManager => {\n      undoManager.clear();\n      undoManager.add();\n    };\n    const hasUndo$1 = (editor, undoManager, index) => index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n    const hasRedo$1 = (undoManager, index) => index.get() < undoManager.data.length - 1 && !undoManager.typing;\n    const transact$1 = (undoManager, locks, callback) => {\n      endTyping(undoManager, locks);\n      undoManager.beforeChange();\n      undoManager.ignore(callback);\n      return undoManager.add();\n    };\n    const ignore$1 = (locks, callback) => {\n      try {\n        locks.set(locks.get() + 1);\n        callback();\n      } finally {\n        locks.set(locks.get() - 1);\n      }\n    };\n\n    const addVisualInternal = (editor, elm) => {\n      const dom = editor.dom;\n      const scope = isNonNullable(elm) ? elm : editor.getBody();\n      each$e(dom.select('table,a', scope), matchedElm => {\n        switch (matchedElm.nodeName) {\n        case 'TABLE':\n          const cls = getVisualAidsTableClass(editor);\n          const value = dom.getAttrib(matchedElm, 'border');\n          if ((!value || value === '0') && editor.hasVisual) {\n            dom.addClass(matchedElm, cls);\n          } else {\n            dom.removeClass(matchedElm, cls);\n          }\n          break;\n        case 'A':\n          if (!dom.getAttrib(matchedElm, 'href')) {\n            const value = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n            const cls = getVisualAidsAnchorClass(editor);\n            if (value && editor.hasVisual) {\n              dom.addClass(matchedElm, cls);\n            } else {\n              dom.removeClass(matchedElm, cls);\n            }\n          }\n          break;\n        }\n      });\n      editor.dispatch('VisualAid', {\n        element: elm,\n        hasVisual: editor.hasVisual\n      });\n    };\n\n    const makePlainAdaptor = editor => ({\n      init: { bindEvents: noop },\n      undoManager: {\n        beforeChange: (locks, beforeBookmark) => beforeChange$1(editor, locks, beforeBookmark),\n        add: (undoManager, index, locks, beforeBookmark, level, event) => addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event),\n        undo: (undoManager, locks, index) => undo$1(editor, undoManager, locks, index),\n        redo: (index, data) => redo$1(editor, index, data),\n        clear: (undoManager, index) => clear$1(editor, undoManager, index),\n        reset: undoManager => reset$1(undoManager),\n        hasUndo: (undoManager, index) => hasUndo$1(editor, undoManager, index),\n        hasRedo: (undoManager, index) => hasRedo$1(undoManager, index),\n        transact: (undoManager, locks, callback) => transact$1(undoManager, locks, callback),\n        ignore: (locks, callback) => ignore$1(locks, callback),\n        extra: (undoManager, index, callback1, callback2) => extra$1(editor, undoManager, index, callback1, callback2)\n      },\n      formatter: {\n        match: (name, vars, node, similar) => match$2(editor, name, vars, node, similar),\n        matchAll: (names, vars) => matchAll(editor, names, vars),\n        matchNode: (node, name, vars, similar) => matchNode(editor, node, name, vars, similar),\n        canApply: name => canApply(editor, name),\n        closest: names => closest(editor, names),\n        apply: (name, vars, node) => applyFormat$1(editor, name, vars, node),\n        remove: (name, vars, node, similar) => removeFormat$1(editor, name, vars, node, similar),\n        toggle: (name, vars, node) => toggle(editor, name, vars, node),\n        formatChanged: (registeredFormatListeners, formats, callback, similar, vars) => formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars)\n      },\n      editor: {\n        getContent: args => getContentInternal(editor, args),\n        setContent: (content, args) => setContentInternal(editor, content, args),\n        insertContent: (value, details) => insertHtmlAtCaret(editor, value, details),\n        addVisual: elm => addVisualInternal(editor, elm)\n      },\n      selection: { getContent: (format, args) => getSelectedContentInternal(editor, format, args) },\n      autocompleter: {\n        addDecoration: range => create$9(editor, range),\n        removeDecoration: () => remove$2(editor, SugarElement.fromDom(editor.getBody()))\n      },\n      raw: { getModel: () => Optional.none() }\n    });\n    const makeRtcAdaptor = rtcEditor => {\n      const defaultVars = vars => isObject(vars) ? vars : {};\n      const {init, undoManager, formatter, editor, selection, autocompleter, raw} = rtcEditor;\n      return {\n        init: { bindEvents: init.bindEvents },\n        undoManager: {\n          beforeChange: undoManager.beforeChange,\n          add: undoManager.add,\n          undo: undoManager.undo,\n          redo: undoManager.redo,\n          clear: undoManager.clear,\n          reset: undoManager.reset,\n          hasUndo: undoManager.hasUndo,\n          hasRedo: undoManager.hasRedo,\n          transact: (_undoManager, _locks, fn) => undoManager.transact(fn),\n          ignore: (_locks, callback) => undoManager.ignore(callback),\n          extra: (_undoManager, _index, callback1, callback2) => undoManager.extra(callback1, callback2)\n        },\n        formatter: {\n          match: (name, vars, _node, similar) => formatter.match(name, defaultVars(vars), similar),\n          matchAll: formatter.matchAll,\n          matchNode: formatter.matchNode,\n          canApply: name => formatter.canApply(name),\n          closest: names => formatter.closest(names),\n          apply: (name, vars, _node) => formatter.apply(name, defaultVars(vars)),\n          remove: (name, vars, _node, _similar) => formatter.remove(name, defaultVars(vars)),\n          toggle: (name, vars, _node) => formatter.toggle(name, defaultVars(vars)),\n          formatChanged: (_rfl, formats, callback, similar, vars) => formatter.formatChanged(formats, callback, similar, vars)\n        },\n        editor: {\n          getContent: args => editor.getContent(args),\n          setContent: (content, args) => {\n            return {\n              content: editor.setContent(content, args),\n              html: ''\n            };\n          },\n          insertContent: (content, _details) => {\n            editor.insertContent(content);\n            return '';\n          },\n          addVisual: editor.addVisual\n        },\n        selection: { getContent: (_format, args) => selection.getContent(args) },\n        autocompleter: {\n          addDecoration: autocompleter.addDecoration,\n          removeDecoration: autocompleter.removeDecoration\n        },\n        raw: { getModel: () => Optional.some(raw.getRawModel()) }\n      };\n    };\n    const makeNoopAdaptor = () => {\n      const nul = constant(null);\n      const empty = constant('');\n      return {\n        init: { bindEvents: noop },\n        undoManager: {\n          beforeChange: noop,\n          add: nul,\n          undo: nul,\n          redo: nul,\n          clear: noop,\n          reset: noop,\n          hasUndo: never,\n          hasRedo: never,\n          transact: nul,\n          ignore: noop,\n          extra: noop\n        },\n        formatter: {\n          match: never,\n          matchAll: constant([]),\n          matchNode: constant(undefined),\n          canApply: never,\n          closest: empty,\n          apply: noop,\n          remove: noop,\n          toggle: noop,\n          formatChanged: constant({ unbind: noop })\n        },\n        editor: {\n          getContent: empty,\n          setContent: constant({\n            content: '',\n            html: ''\n          }),\n          insertContent: constant(''),\n          addVisual: noop\n        },\n        selection: { getContent: empty },\n        autocompleter: {\n          addDecoration: noop,\n          removeDecoration: noop\n        },\n        raw: { getModel: constant(Optional.none()) }\n      };\n    };\n    const isRtc = editor => has$2(editor.plugins, 'rtc');\n    const getRtcSetup = editor => get$a(editor.plugins, 'rtc').bind(rtcPlugin => Optional.from(rtcPlugin.setup));\n    const setup$t = editor => {\n      const editorCast = editor;\n      return getRtcSetup(editor).fold(() => {\n        editorCast.rtcInstance = makePlainAdaptor(editor);\n        return Optional.none();\n      }, setup => {\n        editorCast.rtcInstance = makeNoopAdaptor();\n        return Optional.some(() => setup().then(rtcEditor => {\n          editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n          return rtcEditor.rtc.isRemote;\n        }));\n      });\n    };\n    const getRtcInstanceWithFallback = editor => editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n    const getRtcInstanceWithError = editor => {\n      const rtcInstance = editor.rtcInstance;\n      if (!rtcInstance) {\n        throw new Error('Failed to get RTC instance not yet initialized.');\n      } else {\n        return rtcInstance;\n      }\n    };\n    const beforeChange = (editor, locks, beforeBookmark) => {\n      getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n    };\n    const addUndoLevel = (editor, undoManager, index, locks, beforeBookmark, level, event) => getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n    const undo = (editor, undoManager, locks, index) => getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n    const redo = (editor, index, data) => getRtcInstanceWithError(editor).undoManager.redo(index, data);\n    const clear = (editor, undoManager, index) => {\n      getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n    };\n    const reset = (editor, undoManager) => {\n      getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n    };\n    const hasUndo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n    const hasRedo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n    const transact = (editor, undoManager, locks, callback) => getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n    const ignore = (editor, locks, callback) => {\n      getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n    };\n    const extra = (editor, undoManager, index, callback1, callback2) => {\n      getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n    };\n    const matchFormat = (editor, name, vars, node, similar) => getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n    const matchAllFormats = (editor, names, vars) => getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n    const matchNodeFormat = (editor, node, name, vars, similar) => getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n    const canApplyFormat = (editor, name) => getRtcInstanceWithError(editor).formatter.canApply(name);\n    const closestFormat = (editor, names) => getRtcInstanceWithError(editor).formatter.closest(names);\n    const applyFormat = (editor, name, vars, node) => {\n      getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n    };\n    const removeFormat = (editor, name, vars, node, similar) => {\n      getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n    };\n    const toggleFormat = (editor, name, vars, node) => {\n      getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n    };\n    const formatChanged = (editor, registeredFormatListeners, formats, callback, similar, vars) => getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n    const getContent$2 = (editor, args) => getRtcInstanceWithFallback(editor).editor.getContent(args);\n    const setContent$2 = (editor, content, args) => getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n    const insertContent$1 = (editor, value, details) => getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n    const getSelectedContent = (editor, format, args) => getRtcInstanceWithError(editor).selection.getContent(format, args);\n    const addVisual$1 = (editor, elm) => getRtcInstanceWithError(editor).editor.addVisual(elm);\n    const bindEvents = editor => getRtcInstanceWithError(editor).init.bindEvents();\n    const addAutocompleterDecoration = (editor, range) => getRtcInstanceWithError(editor).autocompleter.addDecoration(range);\n    const removeAutocompleterDecoration = editor => getRtcInstanceWithError(editor).autocompleter.removeDecoration();\n\n    const getContent$1 = (editor, args = {}) => {\n      const format = args.format ? args.format : 'html';\n      return getSelectedContent(editor, format, args);\n    };\n\n    const removeEmpty = text => {\n      if (text.dom.length === 0) {\n        remove$5(text);\n        return Optional.none();\n      } else {\n        return Optional.some(text);\n      }\n    };\n    const walkPastBookmark = (node, start) => node.filter(elm => BookmarkManager.isBookmarkNode(elm.dom)).bind(start ? nextSibling : prevSibling);\n    const merge$1 = (outer, inner, rng, start, schema) => {\n      const outerElm = outer.dom;\n      const innerElm = inner.dom;\n      const oldLength = start ? outerElm.length : innerElm.length;\n      if (start) {\n        mergeTextNodes(outerElm, innerElm, schema, false, !start);\n        rng.setStart(innerElm, oldLength);\n      } else {\n        mergeTextNodes(innerElm, outerElm, schema, false, !start);\n        rng.setEnd(innerElm, oldLength);\n      }\n    };\n    const normalizeTextIfRequired = (inner, start, schema) => {\n      parent(inner).each(root => {\n        const text = inner.dom;\n        if (start && needsToBeNbspLeft(root, CaretPosition(text, 0), schema)) {\n          normalizeWhitespaceAfter(text, 0, schema);\n        } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length), schema)) {\n          normalizeWhitespaceBefore(text, text.length, schema);\n        }\n      });\n    };\n    const mergeAndNormalizeText = (outerNode, innerNode, rng, start, schema) => {\n      outerNode.bind(outer => {\n        const normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n        normalizer(outer.dom, start ? outer.dom.length : 0, schema);\n        return innerNode.filter(isText$b).map(inner => merge$1(outer, inner, rng, start, schema));\n      }).orThunk(() => {\n        const innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$b);\n        return innerTextNode.map(inner => normalizeTextIfRequired(inner, start, schema));\n      });\n    };\n    const rngSetContent = (rng, fragment, schema) => {\n      const firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n      const lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n      rng.deleteContents();\n      rng.insertNode(fragment);\n      const prevText = firstChild.bind(prevSibling).filter(isText$b).bind(removeEmpty);\n      const nextText = lastChild.bind(nextSibling).filter(isText$b).bind(removeEmpty);\n      mergeAndNormalizeText(prevText, firstChild, rng, true, schema);\n      mergeAndNormalizeText(nextText, lastChild, rng, false, schema);\n      rng.collapse(false);\n    };\n    const setupArgs$2 = (args, content) => ({\n      format: 'html',\n      ...args,\n      set: true,\n      selection: true,\n      content\n    });\n    const cleanContent = (editor, args) => {\n      if (args.format !== 'raw') {\n        const rng = editor.selection.getRng();\n        const contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n        const contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n        const node = editor.parser.parse(args.content, {\n          forced_root_block: false,\n          ...contextArgs,\n          ...args\n        });\n        return HtmlSerializer({ validate: false }, editor.schema).serialize(node);\n      } else {\n        return args.content;\n      }\n    };\n    const setContent$1 = (editor, content, args = {}) => {\n      const defaultedArgs = setupArgs$2(args, content);\n      preProcessSetContent(editor, defaultedArgs).each(updatedArgs => {\n        const cleanedContent = cleanContent(editor, updatedArgs);\n        const rng = editor.selection.getRng();\n        rngSetContent(rng, rng.createContextualFragment(cleanedContent), editor.schema);\n        editor.selection.setRng(rng);\n        scrollRangeIntoView(editor, rng);\n        postProcessSetContent(editor, cleanedContent, updatedArgs);\n      });\n    };\n\n    const deleteFromCallbackMap = (callbackMap, selector, callback) => {\n      if (has$2(callbackMap, selector)) {\n        const newCallbacks = filter$5(callbackMap[selector], cb => cb !== callback);\n        if (newCallbacks.length === 0) {\n          delete callbackMap[selector];\n        } else {\n          callbackMap[selector] = newCallbacks;\n        }\n      }\n    };\n    var SelectorChanged = (dom, editor) => {\n      let selectorChangedData;\n      let currentSelectors;\n      const findMatchingNode = (selector, nodes) => find$2(nodes, node => dom.is(node, selector));\n      const getParents = elem => dom.getParents(elem, undefined, dom.getRoot());\n      const setup = () => {\n        selectorChangedData = {};\n        currentSelectors = {};\n        editor.on('NodeChange', e => {\n          const node = e.element;\n          const parents = getParents(node);\n          const matchedSelectors = {};\n          each$d(selectorChangedData, (callbacks, selector) => {\n            findMatchingNode(selector, parents).each(node => {\n              if (!currentSelectors[selector]) {\n                each$e(callbacks, callback => {\n                  callback(true, {\n                    node,\n                    selector,\n                    parents\n                  });\n                });\n                currentSelectors[selector] = callbacks;\n              }\n              matchedSelectors[selector] = callbacks;\n            });\n          });\n          each$d(currentSelectors, (callbacks, selector) => {\n            if (!matchedSelectors[selector]) {\n              delete currentSelectors[selector];\n              each$e(callbacks, callback => {\n                callback(false, {\n                  node,\n                  selector,\n                  parents\n                });\n              });\n            }\n          });\n        });\n      };\n      return {\n        selectorChangedWithUnbind: (selector, callback) => {\n          if (!selectorChangedData) {\n            setup();\n          }\n          if (!selectorChangedData[selector]) {\n            selectorChangedData[selector] = [];\n          }\n          selectorChangedData[selector].push(callback);\n          findMatchingNode(selector, getParents(editor.selection.getStart())).each(() => {\n            currentSelectors[selector] = selectorChangedData[selector];\n          });\n          return {\n            unbind: () => {\n              deleteFromCallbackMap(selectorChangedData, selector, callback);\n              deleteFromCallbackMap(currentSelectors, selector, callback);\n            }\n          };\n        }\n      };\n    };\n\n    const isAttachedToDom = node => {\n      return !!(node && node.ownerDocument) && contains(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n    };\n    const isValidRange = rng => {\n      if (!rng) {\n        return false;\n      } else {\n        return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n      }\n    };\n    const EditorSelection = (dom, win, serializer, editor) => {\n      let selectedRange;\n      let explicitRange;\n      const {selectorChangedWithUnbind} = SelectorChanged(dom, editor);\n      const setCursorLocation = (node, offset) => {\n        const rng = dom.createRng();\n        if (isNonNullable(node) && isNonNullable(offset)) {\n          rng.setStart(node, offset);\n          rng.setEnd(node, offset);\n          setRng(rng);\n          collapse(false);\n        } else {\n          moveEndPoint(dom, rng, editor.getBody(), true);\n          setRng(rng);\n        }\n      };\n      const getContent = args => getContent$1(editor, args);\n      const setContent = (content, args) => setContent$1(editor, content, args);\n      const getStart$1 = real => getStart(editor.getBody(), getRng$1(), real);\n      const getEnd = real => getEnd$1(editor.getBody(), getRng$1(), real);\n      const getBookmark = (type, normalized) => bookmarkManager.getBookmark(type, normalized);\n      const moveToBookmark = bookmark => bookmarkManager.moveToBookmark(bookmark);\n      const select$1 = (node, content) => {\n        select(dom, node, content).each(setRng);\n        return node;\n      };\n      const isCollapsed = () => {\n        const rng = getRng$1(), sel = getSel();\n        if (!rng || rng.item) {\n          return false;\n        }\n        if (rng.compareEndPoints) {\n          return rng.compareEndPoints('StartToEnd', rng) === 0;\n        }\n        return !sel || rng.collapsed;\n      };\n      const isEditable = () => {\n        const rng = getRng$1();\n        const fakeSelectedElements = editor.getBody().querySelectorAll('[data-mce-selected=\"1\"]');\n        if (fakeSelectedElements.length > 0) {\n          return forall(fakeSelectedElements, el => dom.isEditable(el.parentElement));\n        } else {\n          return isEditableRange(dom, rng);\n        }\n      };\n      const collapse = toStart => {\n        const rng = getRng$1();\n        rng.collapse(!!toStart);\n        setRng(rng);\n      };\n      const getSel = () => win.getSelection ? win.getSelection() : win.document.selection;\n      const getRng$1 = () => {\n        let rng;\n        const tryCompareBoundaryPoints = (how, sourceRange, destinationRange) => {\n          try {\n            return sourceRange.compareBoundaryPoints(how, destinationRange);\n          } catch (ex) {\n            return -1;\n          }\n        };\n        const doc = win.document;\n        if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n          const bookmark = getRng(editor);\n          if (bookmark.isSome()) {\n            return bookmark.map(r => processRanges(editor, [r])[0]).getOr(doc.createRange());\n          }\n        }\n        try {\n          const selection = getSel();\n          if (selection && !isRestrictedNode(selection.anchorNode)) {\n            if (selection.rangeCount > 0) {\n              rng = selection.getRangeAt(0);\n            } else {\n              rng = doc.createRange();\n            }\n            rng = processRanges(editor, [rng])[0];\n          }\n        } catch (ex) {\n        }\n        if (!rng) {\n          rng = doc.createRange();\n        }\n        if (isDocument$1(rng.startContainer) && rng.collapsed) {\n          const elm = dom.getRoot();\n          rng.setStart(elm, 0);\n          rng.setEnd(elm, 0);\n        }\n        if (selectedRange && explicitRange) {\n          if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n            rng = explicitRange;\n          } else {\n            selectedRange = null;\n            explicitRange = null;\n          }\n        }\n        return rng;\n      };\n      const setRng = (rng, forward) => {\n        if (!isValidRange(rng)) {\n          return;\n        }\n        const sel = getSel();\n        const evt = editor.dispatch('SetSelectionRange', {\n          range: rng,\n          forward\n        });\n        rng = evt.range;\n        if (sel) {\n          explicitRange = rng;\n          try {\n            sel.removeAllRanges();\n            sel.addRange(rng);\n          } catch (ex) {\n          }\n          if (forward === false && sel.extend) {\n            sel.collapse(rng.endContainer, rng.endOffset);\n            sel.extend(rng.startContainer, rng.startOffset);\n          }\n          selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n        }\n        if (!rng.collapsed && rng.startContainer === rng.endContainer && (sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent)) {\n          if (rng.endOffset - rng.startOffset < 2) {\n            if (rng.startContainer.hasChildNodes()) {\n              const node = rng.startContainer.childNodes[rng.startOffset];\n              if (node && node.nodeName === 'IMG') {\n                sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n                if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n                  sel.setBaseAndExtent(node, 0, node, 1);\n                }\n              }\n            }\n          }\n        }\n        editor.dispatch('AfterSetSelectionRange', {\n          range: rng,\n          forward\n        });\n      };\n      const setNode = elm => {\n        setContent(dom.getOuterHTML(elm));\n        return elm;\n      };\n      const getNode$1 = () => getNode(editor.getBody(), getRng$1());\n      const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n      const isForward = () => {\n        const sel = getSel();\n        const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n        const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n        if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n          return true;\n        }\n        const anchorRange = dom.createRng();\n        const focusRange = dom.createRng();\n        try {\n          anchorRange.setStart(anchorNode, sel.anchorOffset);\n          anchorRange.collapse(true);\n          focusRange.setStart(focusNode, sel.focusOffset);\n          focusRange.collapse(true);\n        } catch (e) {\n          return true;\n        }\n        return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n      };\n      const normalize = () => {\n        const rng = getRng$1();\n        const sel = getSel();\n        if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n          const normRng = normalize$2(dom, rng);\n          normRng.each(normRng => {\n            setRng(normRng, isForward());\n          });\n          return normRng.getOr(rng);\n        }\n        return rng;\n      };\n      const selectorChanged = (selector, callback) => {\n        selectorChangedWithUnbind(selector, callback);\n        return exports;\n      };\n      const getScrollContainer = () => {\n        let scrollContainer;\n        let node = dom.getRoot();\n        while (node && node.nodeName !== 'BODY') {\n          if (node.scrollHeight > node.clientHeight) {\n            scrollContainer = node;\n            break;\n          }\n          node = node.parentNode;\n        }\n        return scrollContainer;\n      };\n      const scrollIntoView = (elm, alignToTop) => {\n        if (isNonNullable(elm)) {\n          scrollElementIntoView(editor, elm, alignToTop);\n        } else {\n          scrollRangeIntoView(editor, getRng$1(), alignToTop);\n        }\n      };\n      const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n      const getBoundingClientRect = () => {\n        const rng = getRng$1();\n        return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n      };\n      const destroy = () => {\n        win = selectedRange = explicitRange = null;\n        controlSelection.destroy();\n      };\n      const expand = (options = { type: 'word' }) => setRng(RangeUtils(dom).expand(getRng$1(), options));\n      const exports = {\n        dom,\n        win,\n        serializer,\n        editor,\n        expand,\n        collapse,\n        setCursorLocation,\n        getContent,\n        setContent,\n        getBookmark,\n        moveToBookmark,\n        select: select$1,\n        isCollapsed,\n        isEditable,\n        isForward,\n        setNode,\n        getNode: getNode$1,\n        getSel,\n        setRng,\n        getRng: getRng$1,\n        getStart: getStart$1,\n        getEnd,\n        getSelectedBlocks: getSelectedBlocks$1,\n        normalize,\n        selectorChanged,\n        selectorChangedWithUnbind,\n        getScrollContainer,\n        scrollIntoView,\n        placeCaretAt,\n        getBoundingClientRect,\n        destroy\n      };\n      const bookmarkManager = BookmarkManager(exports);\n      const controlSelection = ControlSelection(exports, editor);\n      exports.bookmarkManager = bookmarkManager;\n      exports.controlSelection = controlSelection;\n      return exports;\n    };\n\n    const register$3 = (htmlParser, settings, dom) => {\n      htmlParser.addAttributeFilter('data-mce-tabindex', (nodes, name) => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          node.attr('tabindex', node.attr('data-mce-tabindex'));\n          node.attr(name, null);\n        }\n      });\n      htmlParser.addAttributeFilter('src,href,style', (nodes, name) => {\n        const internalName = 'data-mce-' + name;\n        const urlConverter = settings.url_converter;\n        const urlConverterScope = settings.url_converter_scope;\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          let value = node.attr(internalName);\n          if (value !== undefined) {\n            node.attr(name, value.length > 0 ? value : null);\n            node.attr(internalName, null);\n          } else {\n            value = node.attr(name);\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n            } else if (urlConverter) {\n              value = urlConverter.call(urlConverterScope, value, name, node.name);\n            }\n            node.attr(name, value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('class', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          let value = node.attr('class');\n          if (value) {\n            value = value.replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n            node.attr('class', value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', (nodes, name, args) => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n            const hasChildren = Optional.from(node.firstChild).exists(firstChild => {\n              var _a;\n              return !isZwsp$1((_a = firstChild.value) !== null && _a !== void 0 ? _a : '');\n            });\n            if (hasChildren) {\n              node.unwrap();\n            } else {\n              node.remove();\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('noscript', nodes => {\n        var _a;\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i].firstChild;\n          if (node) {\n            node.value = Entities.decode((_a = node.value) !== null && _a !== void 0 ? _a : '');\n          }\n        }\n      });\n      htmlParser.addNodeFilter('script,style', (nodes, name) => {\n        var _a;\n        const trim = value => {\n          return value.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, '').replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n        };\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          const firstChild = node.firstChild;\n          const value = (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.value) !== null && _a !== void 0 ? _a : '';\n          if (name === 'script') {\n            const type = node.attr('type');\n            if (type) {\n              node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n            }\n            if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n              firstChild.value = '// <![CDATA[\\n' + trim(value) + '\\n// ]]>';\n            }\n          } else {\n            if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n              firstChild.value = '<!--\\n' + trim(value) + '\\n-->';\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('#comment', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          const value = node.value;\n          if (settings.preserve_cdata && (value === null || value === void 0 ? void 0 : value.indexOf('[CDATA[')) === 0) {\n            node.name = '#cdata';\n            node.type = 4;\n            node.value = dom.decode(value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n          } else if ((value === null || value === void 0 ? void 0 : value.indexOf('mce:protected ')) === 0) {\n            node.name = '#text';\n            node.type = 3;\n            node.raw = true;\n            node.value = unescape(value).substr(14);\n          }\n        }\n      });\n      htmlParser.addNodeFilter('xml:namespace,input', (nodes, name) => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (node.type === 7) {\n            node.remove();\n          } else if (node.type === 1) {\n            if (name === 'input' && !node.attr('type')) {\n              node.attr('type', 'text');\n            }\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', nodes => {\n        each$e(nodes, node => {\n          if (node.attr('data-mce-type') === 'format-caret') {\n            if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n              node.remove();\n            } else {\n              node.unwrap();\n            }\n          }\n        });\n      });\n      htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,data-mce-block,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', (nodes, name) => {\n        let i = nodes.length;\n        while (i--) {\n          nodes[i].attr(name, null);\n        }\n      });\n      if (settings.remove_trailing_brs) {\n        addNodeFilter(settings, htmlParser, htmlParser.schema);\n      }\n    };\n    const trimTrailingBr = rootNode => {\n      const isBr = node => {\n        return (node === null || node === void 0 ? void 0 : node.name) === 'br';\n      };\n      const brNode1 = rootNode.lastChild;\n      if (isBr(brNode1)) {\n        const brNode2 = brNode1.prev;\n        if (isBr(brNode2)) {\n          brNode1.remove();\n          brNode2.remove();\n        }\n      }\n    };\n\n    const preProcess$1 = (editor, node, args) => {\n      let oldDoc;\n      const dom = editor.dom;\n      let clonedNode = node.cloneNode(true);\n      const impl = document.implementation;\n      if (impl.createHTMLDocument) {\n        const doc = impl.createHTMLDocument('');\n        Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], node => {\n          doc.body.appendChild(doc.importNode(node, true));\n        });\n        if (clonedNode.nodeName !== 'BODY') {\n          clonedNode = doc.body.firstChild;\n        } else {\n          clonedNode = doc.body;\n        }\n        oldDoc = dom.doc;\n        dom.doc = doc;\n      }\n      firePreProcess(editor, {\n        ...args,\n        node: clonedNode\n      });\n      if (oldDoc) {\n        dom.doc = oldDoc;\n      }\n      return clonedNode;\n    };\n    const shouldFireEvent = (editor, args) => {\n      return isNonNullable(editor) && editor.hasEventListeners('PreProcess') && !args.no_events;\n    };\n    const process$1 = (editor, node, args) => {\n      return shouldFireEvent(editor, args) ? preProcess$1(editor, node, args) : node;\n    };\n\n    const addTempAttr = (htmlParser, tempAttrs, name) => {\n      if (Tools.inArray(tempAttrs, name) === -1) {\n        htmlParser.addAttributeFilter(name, (nodes, name) => {\n          let i = nodes.length;\n          while (i--) {\n            nodes[i].attr(name, null);\n          }\n        });\n        tempAttrs.push(name);\n      }\n    };\n    const postProcess = (editor, args, content) => {\n      if (!args.no_events && editor) {\n        const outArgs = firePostProcess(editor, {\n          ...args,\n          content\n        });\n        return outArgs.content;\n      } else {\n        return content;\n      }\n    };\n    const getHtmlFromNode = (dom, node, args) => {\n      const html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n      return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n    };\n    const parseHtml = (htmlParser, html, args) => {\n      const parserArgs = args.selection ? {\n        forced_root_block: false,\n        ...args\n      } : args;\n      const rootNode = htmlParser.parse(html, parserArgs);\n      trimTrailingBr(rootNode);\n      return rootNode;\n    };\n    const serializeNode = (settings, schema, node) => {\n      const htmlSerializer = HtmlSerializer(settings, schema);\n      return htmlSerializer.serialize(node);\n    };\n    const toHtml = (editor, settings, schema, rootNode, args) => {\n      const content = serializeNode(settings, schema, rootNode);\n      return postProcess(editor, args, content);\n    };\n    const DomSerializerImpl = (settings, editor) => {\n      const tempAttrs = ['data-mce-selected'];\n      const defaultedSettings = {\n        entity_encoding: 'named',\n        remove_trailing_brs: true,\n        pad_empty_with_br: false,\n        ...settings\n      };\n      const dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n      const schema = editor && editor.schema ? editor.schema : Schema(defaultedSettings);\n      const htmlParser = DomParser(defaultedSettings, schema);\n      register$3(htmlParser, defaultedSettings, dom);\n      const serialize = (node, parserArgs = {}) => {\n        const args = {\n          format: 'html',\n          ...parserArgs\n        };\n        const targetNode = process$1(editor, node, args);\n        const html = getHtmlFromNode(dom, targetNode, args);\n        const rootNode = parseHtml(htmlParser, html, args);\n        return args.format === 'tree' ? rootNode : toHtml(editor, defaultedSettings, schema, rootNode, args);\n      };\n      return {\n        schema,\n        addNodeFilter: htmlParser.addNodeFilter,\n        addAttributeFilter: htmlParser.addAttributeFilter,\n        serialize: serialize,\n        addRules: schema.addValidElements,\n        setRules: schema.setValidElements,\n        addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n        getTempAttrs: constant(tempAttrs),\n        getNodeFilters: htmlParser.getNodeFilters,\n        getAttributeFilters: htmlParser.getAttributeFilters,\n        removeNodeFilter: htmlParser.removeNodeFilter,\n        removeAttributeFilter: htmlParser.removeAttributeFilter\n      };\n    };\n\n    const DomSerializer = (settings, editor) => {\n      const domSerializer = DomSerializerImpl(settings, editor);\n      return {\n        schema: domSerializer.schema,\n        addNodeFilter: domSerializer.addNodeFilter,\n        addAttributeFilter: domSerializer.addAttributeFilter,\n        serialize: domSerializer.serialize,\n        addRules: domSerializer.addRules,\n        setRules: domSerializer.setRules,\n        addTempAttr: domSerializer.addTempAttr,\n        getTempAttrs: domSerializer.getTempAttrs,\n        getNodeFilters: domSerializer.getNodeFilters,\n        getAttributeFilters: domSerializer.getAttributeFilters,\n        removeNodeFilter: domSerializer.removeNodeFilter,\n        removeAttributeFilter: domSerializer.removeAttributeFilter\n      };\n    };\n\n    const defaultFormat$1 = 'html';\n    const setupArgs$1 = (args, format) => ({\n      ...args,\n      format,\n      get: true,\n      getInner: true\n    });\n    const getContent = (editor, args = {}) => {\n      const format = args.format ? args.format : defaultFormat$1;\n      const defaultedArgs = setupArgs$1(args, format);\n      return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n        const content = getContent$2(editor, updatedArgs);\n        return postProcessGetContent(editor, content, updatedArgs);\n      });\n    };\n\n    const defaultFormat = 'html';\n    const setupArgs = (args, content) => ({\n      format: defaultFormat,\n      ...args,\n      set: true,\n      content\n    });\n    const setContent = (editor, content, args = {}) => {\n      const defaultedArgs = setupArgs(args, content);\n      return preProcessSetContent(editor, defaultedArgs).map(updatedArgs => {\n        const result = setContent$2(editor, updatedArgs.content, updatedArgs);\n        postProcessSetContent(editor, result.html, updatedArgs);\n        return result.content;\n      }).getOr(content);\n    };\n\n    const removedOptions = ('autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,' + 'boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,' + 'force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,' + 'non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,' + 'tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists').split(',');\n    const deprecatedOptions = 'template_cdate_classes,template_mdate_classes,template_selected_content_classes,template_preview_replace_values,template_replace_values,templates,template_cdate_format,template_mdate_format'.split(',');\n    const removedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor'.split(',');\n    const deprecatedPlugins = [\n      {\n        name: 'template',\n        replacedWith: 'Advanced Template'\n      },\n      { name: 'rtc' }\n    ];\n    const getMatchingOptions = (options, searchingFor) => {\n      const settingNames = filter$5(searchingFor, setting => has$2(options, setting));\n      return sort(settingNames);\n    };\n    const getRemovedOptions = options => {\n      const settingNames = getMatchingOptions(options, removedOptions);\n      const forcedRootBlock = options.forced_root_block;\n      if (forcedRootBlock === false || forcedRootBlock === '') {\n        settingNames.push('forced_root_block (false only)');\n      }\n      return sort(settingNames);\n    };\n    const getDeprecatedOptions = options => getMatchingOptions(options, deprecatedOptions);\n    const getMatchingPlugins = (options, searchingFor) => {\n      const plugins = Tools.makeMap(options.plugins, ' ');\n      const hasPlugin = plugin => has$2(plugins, plugin);\n      const pluginNames = filter$5(searchingFor, hasPlugin);\n      return sort(pluginNames);\n    };\n    const getRemovedPlugins = options => getMatchingPlugins(options, removedPlugins);\n    const getDeprecatedPlugins = options => getMatchingPlugins(options, deprecatedPlugins.map(entry => entry.name));\n    const logRemovedWarnings = (rawOptions, normalizedOptions) => {\n      const removedOptions = getRemovedOptions(rawOptions);\n      const removedPlugins = getRemovedPlugins(normalizedOptions);\n      const hasRemovedPlugins = removedPlugins.length > 0;\n      const hasRemovedOptions = removedOptions.length > 0;\n      const isLegacyMobileTheme = normalizedOptions.theme === 'mobile';\n      if (hasRemovedPlugins || hasRemovedOptions || isLegacyMobileTheme) {\n        const listJoiner = '\\n- ';\n        const themesMessage = isLegacyMobileTheme ? `\\n\\nThemes:${ listJoiner }mobile` : '';\n        const pluginsMessage = hasRemovedPlugins ? `\\n\\nPlugins:${ listJoiner }${ removedPlugins.join(listJoiner) }` : '';\n        const optionsMessage = hasRemovedOptions ? `\\n\\nOptions:${ listJoiner }${ removedOptions.join(listJoiner) }` : '';\n        console.warn('The following deprecated features are currently enabled and have been removed in TinyMCE 6.0. These features will no longer work and should be removed from the TinyMCE configuration. ' + 'See https://www.tiny.cloud/docs/tinymce/6/migration-from-5x/ for more information.' + themesMessage + pluginsMessage + optionsMessage);\n      }\n    };\n    const getPluginDescription = name => find$2(deprecatedPlugins, entry => entry.name === name).fold(() => name, entry => {\n      if (entry.replacedWith) {\n        return `${ name }, replaced by ${ entry.replacedWith }`;\n      } else {\n        return name;\n      }\n    });\n    const logDeprecatedWarnings = (rawOptions, normalizedOptions) => {\n      const deprecatedOptions = getDeprecatedOptions(rawOptions);\n      const deprecatedPlugins = getDeprecatedPlugins(normalizedOptions);\n      const hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n      const hasDeprecatedOptions = deprecatedOptions.length > 0;\n      if (hasDeprecatedPlugins || hasDeprecatedOptions) {\n        const listJoiner = '\\n- ';\n        const pluginsMessage = hasDeprecatedPlugins ? `\\n\\nPlugins:${ listJoiner }${ deprecatedPlugins.map(getPluginDescription).join(listJoiner) }` : '';\n        const optionsMessage = hasDeprecatedOptions ? `\\n\\nOptions:${ listJoiner }${ deprecatedOptions.join(listJoiner) }` : '';\n        console.warn('The following deprecated features are currently enabled but will be removed soon.' + pluginsMessage + optionsMessage);\n      }\n    };\n    const logWarnings = (rawOptions, normalizedOptions) => {\n      logRemovedWarnings(rawOptions, normalizedOptions);\n      logDeprecatedWarnings(rawOptions, normalizedOptions);\n    };\n\n    const DOM$8 = DOMUtils.DOM;\n    const restoreOriginalStyles = editor => {\n      DOM$8.setStyle(editor.id, 'display', editor.orgDisplay);\n    };\n    const safeDestroy = x => Optional.from(x).each(x => x.destroy());\n    const clearDomReferences = editor => {\n      const ed = editor;\n      ed.contentAreaContainer = ed.formElement = ed.container = ed.editorContainer = null;\n      ed.bodyElement = ed.contentDocument = ed.contentWindow = null;\n      ed.iframeElement = ed.targetElm = null;\n      const selection = editor.selection;\n      if (selection) {\n        const dom = selection.dom;\n        ed.selection = selection.win = selection.dom = dom.doc = null;\n      }\n    };\n    const restoreForm = editor => {\n      const form = editor.formElement;\n      if (form) {\n        if (form._mceOldSubmit) {\n          form.submit = form._mceOldSubmit;\n          delete form._mceOldSubmit;\n        }\n        DOM$8.unbind(form, 'submit reset', editor.formEventDelegate);\n      }\n    };\n    const remove$1 = editor => {\n      if (!editor.removed) {\n        const {_selectionOverrides, editorUpload} = editor;\n        const body = editor.getBody();\n        const element = editor.getElement();\n        if (body) {\n          editor.save({ is_removing: true });\n        }\n        editor.removed = true;\n        editor.unbindAllNativeEvents();\n        if (editor.hasHiddenInput && isNonNullable(element === null || element === void 0 ? void 0 : element.nextSibling)) {\n          DOM$8.remove(element.nextSibling);\n        }\n        fireRemove(editor);\n        editor.editorManager.remove(editor);\n        if (!editor.inline && body) {\n          restoreOriginalStyles(editor);\n        }\n        fireDetach(editor);\n        DOM$8.remove(editor.getContainer());\n        safeDestroy(_selectionOverrides);\n        safeDestroy(editorUpload);\n        editor.destroy();\n      }\n    };\n    const destroy = (editor, automatic) => {\n      const {selection, dom} = editor;\n      if (editor.destroyed) {\n        return;\n      }\n      if (!automatic && !editor.removed) {\n        editor.remove();\n        return;\n      }\n      if (!automatic) {\n        editor.editorManager.off('beforeunload', editor._beforeUnload);\n        if (editor.theme && editor.theme.destroy) {\n          editor.theme.destroy();\n        }\n        safeDestroy(selection);\n        safeDestroy(dom);\n      }\n      restoreForm(editor);\n      clearDomReferences(editor);\n      editor.destroyed = true;\n    };\n\n    const CreateIconManager = () => {\n      const lookup = {};\n      const add = (id, iconPack) => {\n        lookup[id] = iconPack;\n      };\n      const get = id => {\n        if (lookup[id]) {\n          return lookup[id];\n        } else {\n          return { icons: {} };\n        }\n      };\n      const has = id => has$2(lookup, id);\n      return {\n        add,\n        get,\n        has\n      };\n    };\n    const IconManager = CreateIconManager();\n\n    const ModelManager = AddOnManager.ModelManager;\n\n    const getProp = (propName, elm) => {\n      const rawElm = elm.dom;\n      return rawElm[propName];\n    };\n    const getComputedSizeProp = (propName, elm) => parseInt(get$7(elm, propName), 10);\n    const getClientWidth = curry(getProp, 'clientWidth');\n    const getClientHeight = curry(getProp, 'clientHeight');\n    const getMarginTop = curry(getComputedSizeProp, 'margin-top');\n    const getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n    const getBoundingClientRect = elm => elm.dom.getBoundingClientRect();\n    const isInsideElementContentArea = (bodyElm, clientX, clientY) => {\n      const clientWidth = getClientWidth(bodyElm);\n      const clientHeight = getClientHeight(bodyElm);\n      return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n    };\n    const transpose = (inline, elm, clientX, clientY) => {\n      const clientRect = getBoundingClientRect(elm);\n      const deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n      const deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n      const x = clientX - deltaX;\n      const y = clientY - deltaY;\n      return {\n        x,\n        y\n      };\n    };\n    const isXYInContentArea = (editor, clientX, clientY) => {\n      const bodyElm = SugarElement.fromDom(editor.getBody());\n      const targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n      const transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n      return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n    };\n    const fromDomSafe = node => Optional.from(node).map(SugarElement.fromDom);\n    const isEditorAttachedToDom = editor => {\n      const rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n      return fromDomSafe(rawContainer).map(inBody).getOr(false);\n    };\n\n    var NotificationManagerImpl = () => {\n      const unimplemented = () => {\n        throw new Error('Theme did not provide a NotificationManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        close: unimplemented,\n        getArgs: unimplemented\n      };\n    };\n\n    const NotificationManager = editor => {\n      const notifications = [];\n      const getImplementation = () => {\n        const theme = editor.theme;\n        return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n      };\n      const getTopNotification = () => {\n        return Optional.from(notifications[0]);\n      };\n      const isEqual = (a, b) => {\n        return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n      };\n      const reposition = () => {\n        each$e(notifications, notification => {\n          notification.reposition();\n        });\n      };\n      const addNotification = notification => {\n        notifications.push(notification);\n      };\n      const closeNotification = notification => {\n        findIndex$2(notifications, otherNotification => {\n          return otherNotification === notification;\n        }).each(index => {\n          notifications.splice(index, 1);\n        });\n      };\n      const open = (spec, fireEvent = true) => {\n        if (editor.removed || !isEditorAttachedToDom(editor)) {\n          return {};\n        }\n        if (fireEvent) {\n          editor.dispatch('BeforeOpenNotification', { notification: spec });\n        }\n        return find$2(notifications, notification => {\n          return isEqual(getImplementation().getArgs(notification), spec);\n        }).getOrThunk(() => {\n          editor.editorManager.setActive(editor);\n          const notification = getImplementation().open(spec, () => {\n            closeNotification(notification);\n            reposition();\n            if (hasEditorOrUiFocus(editor)) {\n              getTopNotification().fold(() => editor.focus(), top => focus$1(SugarElement.fromDom(top.getEl())));\n            }\n          });\n          addNotification(notification);\n          reposition();\n          editor.dispatch('OpenNotification', { notification: { ...notification } });\n          return notification;\n        });\n      };\n      const close = () => {\n        getTopNotification().each(notification => {\n          getImplementation().close(notification);\n          closeNotification(notification);\n          reposition();\n        });\n      };\n      const getNotifications = constant(notifications);\n      const registerEvents = editor => {\n        editor.on('SkinLoaded', () => {\n          const serviceMessage = getServiceMessage(editor);\n          if (serviceMessage) {\n            open({\n              text: serviceMessage,\n              type: 'warning',\n              timeout: 0\n            }, false);\n          }\n          reposition();\n        });\n        editor.on('show ResizeEditor ResizeWindow NodeChange', () => {\n          requestAnimationFrame(reposition);\n        });\n        editor.on('remove', () => {\n          each$e(notifications.slice(), notification => {\n            getImplementation().close(notification);\n          });\n        });\n      };\n      registerEvents(editor);\n      return {\n        open,\n        close,\n        getNotifications\n      };\n    };\n\n    const PluginManager = AddOnManager.PluginManager;\n\n    const ThemeManager = AddOnManager.ThemeManager;\n\n    var WindowManagerImpl = () => {\n      const unimplemented = () => {\n        throw new Error('Theme did not provide a WindowManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        openUrl: unimplemented,\n        alert: unimplemented,\n        confirm: unimplemented,\n        close: unimplemented\n      };\n    };\n\n    const WindowManager = editor => {\n      let dialogs = [];\n      const getImplementation = () => {\n        const theme = editor.theme;\n        return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n      };\n      const funcBind = (scope, f) => {\n        return (...args) => {\n          return f ? f.apply(scope, args) : undefined;\n        };\n      };\n      const fireOpenEvent = dialog => {\n        editor.dispatch('OpenWindow', { dialog });\n      };\n      const fireCloseEvent = dialog => {\n        editor.dispatch('CloseWindow', { dialog });\n      };\n      const addDialog = dialog => {\n        dialogs.push(dialog);\n        fireOpenEvent(dialog);\n      };\n      const closeDialog = dialog => {\n        fireCloseEvent(dialog);\n        dialogs = filter$5(dialogs, otherDialog => {\n          return otherDialog !== dialog;\n        });\n        if (dialogs.length === 0) {\n          editor.focus();\n        }\n      };\n      const getTopDialog = () => {\n        return Optional.from(dialogs[dialogs.length - 1]);\n      };\n      const storeSelectionAndOpenDialog = openDialog => {\n        editor.editorManager.setActive(editor);\n        store(editor);\n        editor.ui.show();\n        const dialog = openDialog();\n        addDialog(dialog);\n        return dialog;\n      };\n      const open = (args, params) => {\n        return storeSelectionAndOpenDialog(() => getImplementation().open(args, params, closeDialog));\n      };\n      const openUrl = args => {\n        return storeSelectionAndOpenDialog(() => getImplementation().openUrl(args, closeDialog));\n      };\n      const alert = (message, callback, scope) => {\n        const windowManagerImpl = getImplementation();\n        windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n      };\n      const confirm = (message, callback, scope) => {\n        const windowManagerImpl = getImplementation();\n        windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n      };\n      const close = () => {\n        getTopDialog().each(dialog => {\n          getImplementation().close(dialog);\n          closeDialog(dialog);\n        });\n      };\n      editor.on('remove', () => {\n        each$e(dialogs, dialog => {\n          getImplementation().close(dialog);\n        });\n      });\n      return {\n        open,\n        openUrl,\n        alert,\n        confirm,\n        close\n      };\n    };\n\n    const displayNotification = (editor, message) => {\n      editor.notificationManager.open({\n        type: 'error',\n        text: message\n      });\n    };\n    const displayError = (editor, message) => {\n      if (editor._skinLoaded) {\n        displayNotification(editor, message);\n      } else {\n        editor.on('SkinLoaded', () => {\n          displayNotification(editor, message);\n        });\n      }\n    };\n    const uploadError = (editor, message) => {\n      displayError(editor, I18n.translate([\n        'Failed to upload image: {0}',\n        message\n      ]));\n    };\n    const logError = (editor, errorType, msg) => {\n      fireError(editor, errorType, { message: msg });\n      console.error(msg);\n    };\n    const createLoadError = (type, url, name) => name ? `Failed to load ${ type }: ${ name } from url ${ url }` : `Failed to load ${ type } url: ${ url }`;\n    const pluginLoadError = (editor, url, name) => {\n      logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n    };\n    const iconsLoadError = (editor, url, name) => {\n      logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n    };\n    const languageLoadError = (editor, url, name) => {\n      logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n    };\n    const themeLoadError = (editor, url, name) => {\n      logError(editor, 'ThemeLoadError', createLoadError('theme', url, name));\n    };\n    const modelLoadError = (editor, url, name) => {\n      logError(editor, 'ModelLoadError', createLoadError('model', url, name));\n    };\n    const pluginInitError = (editor, name, err) => {\n      const message = I18n.translate([\n        'Failed to initialize plugin: {0}',\n        name\n      ]);\n      fireError(editor, 'PluginLoadError', { message });\n      initError(message, err);\n      displayError(editor, message);\n    };\n    const initError = (message, ...x) => {\n      const console = window.console;\n      if (console) {\n        if (console.error) {\n          console.error(message, ...x);\n        } else {\n          console.log(message, ...x);\n        }\n      }\n    };\n\n    const isContentCssSkinName = url => /^[a-z0-9\\-]+$/i.test(url);\n    const toContentSkinResourceName = url => 'content/' + url + '/content.css';\n    const isBundledCssSkinName = url => tinymce.Resource.has(toContentSkinResourceName(url));\n    const getContentCssUrls = editor => {\n      return transformToUrls(editor, getContentCss(editor));\n    };\n    const getFontCssUrls = editor => {\n      return transformToUrls(editor, getFontCss(editor));\n    };\n    const transformToUrls = (editor, cssLinks) => {\n      const skinUrl = editor.editorManager.baseURL + '/skins/content';\n      const suffix = editor.editorManager.suffix;\n      const contentCssFile = `content${ suffix }.css`;\n      return map$3(cssLinks, url => {\n        if (isBundledCssSkinName(url)) {\n          return url;\n        } else if (isContentCssSkinName(url) && !editor.inline) {\n          return `${ skinUrl }/${ url }/${ contentCssFile }`;\n        } else {\n          return editor.documentBaseURI.toAbsolute(url);\n        }\n      });\n    };\n    const appendContentCssFromSettings = editor => {\n      editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n    };\n\n    const getAllImages = elm => {\n      return elm ? from(elm.getElementsByTagName('img')) : [];\n    };\n    const ImageScanner = (uploadStatus, blobCache) => {\n      const cachedPromises = {};\n      const findAll = (elm, predicate = always) => {\n        const images = filter$5(getAllImages(elm), img => {\n          const src = img.src;\n          if (img.hasAttribute('data-mce-bogus')) {\n            return false;\n          }\n          if (img.hasAttribute('data-mce-placeholder')) {\n            return false;\n          }\n          if (!src || src === Env.transparentSrc) {\n            return false;\n          }\n          if (startsWith(src, 'blob:')) {\n            return !uploadStatus.isUploaded(src) && predicate(img);\n          }\n          if (startsWith(src, 'data:')) {\n            return predicate(img);\n          }\n          return false;\n        });\n        const promises = map$3(images, img => {\n          const imageSrc = img.src;\n          if (has$2(cachedPromises, imageSrc)) {\n            return cachedPromises[imageSrc].then(imageInfo => {\n              if (isString(imageInfo)) {\n                return imageInfo;\n              } else {\n                return {\n                  image: img,\n                  blobInfo: imageInfo.blobInfo\n                };\n              }\n            });\n          } else {\n            const newPromise = imageToBlobInfo(blobCache, imageSrc).then(blobInfo => {\n              delete cachedPromises[imageSrc];\n              return {\n                image: img,\n                blobInfo\n              };\n            }).catch(error => {\n              delete cachedPromises[imageSrc];\n              return error;\n            });\n            cachedPromises[imageSrc] = newPromise;\n            return newPromise;\n          }\n        });\n        return Promise.all(promises);\n      };\n      return { findAll };\n    };\n\n    const UploadStatus = () => {\n      const PENDING = 1, UPLOADED = 2;\n      let blobUriStatuses = {};\n      const createStatus = (status, resultUri) => {\n        return {\n          status,\n          resultUri\n        };\n      };\n      const hasBlobUri = blobUri => {\n        return blobUri in blobUriStatuses;\n      };\n      const getResultUri = blobUri => {\n        const result = blobUriStatuses[blobUri];\n        return result ? result.resultUri : null;\n      };\n      const isPending = blobUri => {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n      };\n      const isUploaded = blobUri => {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n      };\n      const markPending = blobUri => {\n        blobUriStatuses[blobUri] = createStatus(PENDING, null);\n      };\n      const markUploaded = (blobUri, resultUri) => {\n        blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n      };\n      const removeFailed = blobUri => {\n        delete blobUriStatuses[blobUri];\n      };\n      const destroy = () => {\n        blobUriStatuses = {};\n      };\n      return {\n        hasBlobUri,\n        getResultUri,\n        isPending,\n        isUploaded,\n        markPending,\n        markUploaded,\n        removeFailed,\n        destroy\n      };\n    };\n\n    let count = 0;\n    const seed = () => {\n      const rnd = () => {\n        return Math.round(Math.random() * 4294967295).toString(36);\n      };\n      const now = new Date().getTime();\n      return 's' + now.toString(36) + rnd() + rnd() + rnd();\n    };\n    const uuid = prefix => {\n      return prefix + count++ + seed();\n    };\n\n    const BlobCache = () => {\n      let cache = [];\n      const mimeToExt = mime => {\n        const mimes = {\n          'image/jpeg': 'jpg',\n          'image/jpg': 'jpg',\n          'image/gif': 'gif',\n          'image/png': 'png',\n          'image/apng': 'apng',\n          'image/avif': 'avif',\n          'image/svg+xml': 'svg',\n          'image/webp': 'webp',\n          'image/bmp': 'bmp',\n          'image/tiff': 'tiff'\n        };\n        return mimes[mime.toLowerCase()] || 'dat';\n      };\n      const create = (o, blob, base64, name, filename) => {\n        if (isString(o)) {\n          const id = o;\n          return toBlobInfo({\n            id,\n            name,\n            filename,\n            blob: blob,\n            base64: base64\n          });\n        } else if (isObject(o)) {\n          return toBlobInfo(o);\n        } else {\n          throw new Error('Unknown input type');\n        }\n      };\n      const toBlobInfo = o => {\n        if (!o.blob || !o.base64) {\n          throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n        }\n        const id = o.id || uuid('blobid');\n        const name = o.name || id;\n        const blob = o.blob;\n        return {\n          id: constant(id),\n          name: constant(name),\n          filename: constant(o.filename || name + '.' + mimeToExt(blob.type)),\n          blob: constant(blob),\n          base64: constant(o.base64),\n          blobUri: constant(o.blobUri || URL.createObjectURL(blob)),\n          uri: constant(o.uri)\n        };\n      };\n      const add = blobInfo => {\n        if (!get(blobInfo.id())) {\n          cache.push(blobInfo);\n        }\n      };\n      const findFirst = predicate => find$2(cache, predicate).getOrUndefined();\n      const get = id => findFirst(cachedBlobInfo => cachedBlobInfo.id() === id);\n      const getByUri = blobUri => findFirst(blobInfo => blobInfo.blobUri() === blobUri);\n      const getByData = (base64, type) => findFirst(blobInfo => blobInfo.base64() === base64 && blobInfo.blob().type === type);\n      const removeByUri = blobUri => {\n        cache = filter$5(cache, blobInfo => {\n          if (blobInfo.blobUri() === blobUri) {\n            URL.revokeObjectURL(blobInfo.blobUri());\n            return false;\n          }\n          return true;\n        });\n      };\n      const destroy = () => {\n        each$e(cache, cachedBlobInfo => {\n          URL.revokeObjectURL(cachedBlobInfo.blobUri());\n        });\n        cache = [];\n      };\n      return {\n        create,\n        add,\n        get,\n        getByUri,\n        getByData,\n        findFirst,\n        removeByUri,\n        destroy\n      };\n    };\n\n    const Uploader = (uploadStatus, settings) => {\n      const pendingPromises = {};\n      const pathJoin = (path1, path2) => {\n        if (path1) {\n          return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n        }\n        return path2;\n      };\n      const defaultHandler = (blobInfo, progress) => new Promise((success, failure) => {\n        const xhr = new XMLHttpRequest();\n        xhr.open('POST', settings.url);\n        xhr.withCredentials = settings.credentials;\n        xhr.upload.onprogress = e => {\n          progress(e.loaded / e.total * 100);\n        };\n        xhr.onerror = () => {\n          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n        };\n        xhr.onload = () => {\n          if (xhr.status < 200 || xhr.status >= 300) {\n            failure('HTTP Error: ' + xhr.status);\n            return;\n          }\n          const json = JSON.parse(xhr.responseText);\n          if (!json || !isString(json.location)) {\n            failure('Invalid JSON: ' + xhr.responseText);\n            return;\n          }\n          success(pathJoin(settings.basePath, json.location));\n        };\n        const formData = new FormData();\n        formData.append('file', blobInfo.blob(), blobInfo.filename());\n        xhr.send(formData);\n      });\n      const uploadHandler = isFunction(settings.handler) ? settings.handler : defaultHandler;\n      const noUpload = () => new Promise(resolve => {\n        resolve([]);\n      });\n      const handlerSuccess = (blobInfo, url) => ({\n        url,\n        blobInfo,\n        status: true\n      });\n      const handlerFailure = (blobInfo, error) => ({\n        url: '',\n        blobInfo,\n        status: false,\n        error\n      });\n      const resolvePending = (blobUri, result) => {\n        Tools.each(pendingPromises[blobUri], resolve => {\n          resolve(result);\n        });\n        delete pendingPromises[blobUri];\n      };\n      const uploadBlobInfo = (blobInfo, handler, openNotification) => {\n        uploadStatus.markPending(blobInfo.blobUri());\n        return new Promise(resolve => {\n          let notification;\n          let progress;\n          try {\n            const closeNotification = () => {\n              if (notification) {\n                notification.close();\n                progress = noop;\n              }\n            };\n            const success = url => {\n              closeNotification();\n              uploadStatus.markUploaded(blobInfo.blobUri(), url);\n              resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n              resolve(handlerSuccess(blobInfo, url));\n            };\n            const failure = error => {\n              closeNotification();\n              uploadStatus.removeFailed(blobInfo.blobUri());\n              resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n              resolve(handlerFailure(blobInfo, error));\n            };\n            progress = percent => {\n              if (percent < 0 || percent > 100) {\n                return;\n              }\n              Optional.from(notification).orThunk(() => Optional.from(openNotification).map(apply$1)).each(n => {\n                notification = n;\n                n.progressBar.value(percent);\n              });\n            };\n            handler(blobInfo, progress).then(success, err => {\n              failure(isString(err) ? { message: err } : err);\n            });\n          } catch (ex) {\n            resolve(handlerFailure(blobInfo, ex));\n          }\n        });\n      };\n      const isDefaultHandler = handler => handler === defaultHandler;\n      const pendingUploadBlobInfo = blobInfo => {\n        const blobUri = blobInfo.blobUri();\n        return new Promise(resolve => {\n          pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n          pendingPromises[blobUri].push(resolve);\n        });\n      };\n      const uploadBlobs = (blobInfos, openNotification) => {\n        blobInfos = Tools.grep(blobInfos, blobInfo => !uploadStatus.isUploaded(blobInfo.blobUri()));\n        return Promise.all(Tools.map(blobInfos, blobInfo => uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, uploadHandler, openNotification)));\n      };\n      const upload = (blobInfos, openNotification) => !settings.url && isDefaultHandler(uploadHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n      return { upload };\n    };\n\n    const openNotification = editor => () => editor.notificationManager.open({\n      text: editor.translate('Image uploading...'),\n      type: 'info',\n      timeout: -1,\n      progressBar: true\n    });\n    const createUploader = (editor, uploadStatus) => Uploader(uploadStatus, {\n      url: getImageUploadUrl(editor),\n      basePath: getImageUploadBasePath(editor),\n      credentials: getImagesUploadCredentials(editor),\n      handler: getImagesUploadHandler(editor)\n    });\n    const ImageUploader = editor => {\n      const uploadStatus = UploadStatus();\n      const uploader = createUploader(editor, uploadStatus);\n      return { upload: (blobInfos, showNotification = true) => uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined) };\n    };\n\n    const isEmptyForPadding = (editor, element) => editor.dom.isEmpty(element.dom) && isNonNullable(editor.schema.getTextBlockElements()[name(element)]);\n    const addPaddingToEmpty = editor => element => {\n      if (isEmptyForPadding(editor, element)) {\n        append$1(element, SugarElement.fromHtml('<br data-mce-bogus=\"1\" />'));\n      }\n    };\n    const EditorUpload = editor => {\n      const blobCache = BlobCache();\n      let uploader, imageScanner;\n      const uploadStatus = UploadStatus();\n      const urlFilters = [];\n      const aliveGuard = callback => {\n        return result => {\n          if (editor.selection) {\n            return callback(result);\n          }\n          return [];\n        };\n      };\n      const cacheInvalidator = url => url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n      const replaceString = (content, search, replace) => {\n        let index = 0;\n        do {\n          index = content.indexOf(search, index);\n          if (index !== -1) {\n            content = content.substring(0, index) + replace + content.substr(index + search.length);\n            index += replace.length - search.length + 1;\n          }\n        } while (index !== -1);\n        return content;\n      };\n      const replaceImageUrl = (content, targetUrl, replacementUrl) => {\n        const replacementString = `src=\"${ replacementUrl }\"${ replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : '' }`;\n        content = replaceString(content, `src=\"${ targetUrl }\"`, replacementString);\n        content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n        return content;\n      };\n      const replaceUrlInUndoStack = (targetUrl, replacementUrl) => {\n        each$e(editor.undoManager.data, level => {\n          if (level.type === 'fragmented') {\n            level.fragments = map$3(level.fragments, fragment => replaceImageUrl(fragment, targetUrl, replacementUrl));\n          } else {\n            level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n          }\n        });\n      };\n      const replaceImageUriInView = (image, resultUri) => {\n        const src = editor.convertURL(resultUri, 'src');\n        replaceUrlInUndoStack(image.src, resultUri);\n        setAll$1(SugarElement.fromDom(image), {\n          'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n          'data-mce-src': src\n        });\n      };\n      const uploadImages = () => {\n        if (!uploader) {\n          uploader = createUploader(editor, uploadStatus);\n        }\n        return scanForImages().then(aliveGuard(imageInfos => {\n          const blobInfos = map$3(imageInfos, imageInfo => imageInfo.blobInfo);\n          return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(result => {\n            const imagesToRemove = [];\n            let shouldDispatchChange = false;\n            const filteredResult = map$3(result, (uploadInfo, index) => {\n              const {blobInfo, image} = imageInfos[index];\n              let removed = false;\n              if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n                if (uploadInfo.url && !contains$1(image.src, uploadInfo.url)) {\n                  shouldDispatchChange = true;\n                }\n                blobCache.removeByUri(image.src);\n                if (isRtc(editor)) ; else {\n                  replaceImageUriInView(image, uploadInfo.url);\n                }\n              } else if (uploadInfo.error) {\n                if (uploadInfo.error.remove) {\n                  replaceUrlInUndoStack(image.src, Env.transparentSrc);\n                  imagesToRemove.push(image);\n                  removed = true;\n                }\n                uploadError(editor, uploadInfo.error.message);\n              }\n              return {\n                element: image,\n                status: uploadInfo.status,\n                uploadUri: uploadInfo.url,\n                blobInfo,\n                removed\n              };\n            });\n            if (imagesToRemove.length > 0 && !isRtc(editor)) {\n              editor.undoManager.transact(() => {\n                each$e(fromDom$1(imagesToRemove), sugarElement => {\n                  const parentOpt = parent(sugarElement);\n                  remove$5(sugarElement);\n                  parentOpt.each(addPaddingToEmpty(editor));\n                  blobCache.removeByUri(sugarElement.dom.src);\n                });\n              });\n            } else if (shouldDispatchChange) {\n              editor.undoManager.dispatchChange();\n            }\n            return filteredResult;\n          }));\n        }));\n      };\n      const uploadImagesAuto = () => isAutomaticUploadsEnabled(editor) ? uploadImages() : Promise.resolve([]);\n      const isValidDataUriImage = imgElm => forall(urlFilters, filter => filter(imgElm));\n      const addFilter = filter => {\n        urlFilters.push(filter);\n      };\n      const scanForImages = () => {\n        if (!imageScanner) {\n          imageScanner = ImageScanner(uploadStatus, blobCache);\n        }\n        return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(result => {\n          const filteredResult = filter$5(result, resultItem => {\n            if (isString(resultItem)) {\n              displayError(editor, resultItem);\n              return false;\n            } else if (resultItem.uriType === 'blob') {\n              return false;\n            } else {\n              return true;\n            }\n          });\n          if (isRtc(editor)) ; else {\n            each$e(filteredResult, resultItem => {\n              replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n              resultItem.image.src = resultItem.blobInfo.blobUri();\n              resultItem.image.removeAttribute('data-mce-src');\n            });\n          }\n          return filteredResult;\n        }));\n      };\n      const destroy = () => {\n        blobCache.destroy();\n        uploadStatus.destroy();\n        imageScanner = uploader = null;\n      };\n      const replaceBlobUris = content => {\n        return content.replace(/src=\"(blob:[^\"]+)\"/g, (match, blobUri) => {\n          const resultUri = uploadStatus.getResultUri(blobUri);\n          if (resultUri) {\n            return 'src=\"' + resultUri + '\"';\n          }\n          let blobInfo = blobCache.getByUri(blobUri);\n          if (!blobInfo) {\n            blobInfo = foldl(editor.editorManager.get(), (result, editor) => {\n              return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n            }, undefined);\n          }\n          if (blobInfo) {\n            const blob = blobInfo.blob();\n            return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n          }\n          return match;\n        });\n      };\n      editor.on('SetContent', () => {\n        if (isAutomaticUploadsEnabled(editor)) {\n          uploadImagesAuto();\n        } else {\n          scanForImages();\n        }\n      });\n      editor.on('RawSaveContent', e => {\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('GetContent', e => {\n        if (e.source_view || e.format === 'raw' || e.format === 'tree') {\n          return;\n        }\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('PostRender', () => {\n        editor.parser.addNodeFilter('img', images => {\n          each$e(images, img => {\n            const src = img.attr('src');\n            if (!src || blobCache.getByUri(src)) {\n              return;\n            }\n            const resultUri = uploadStatus.getResultUri(src);\n            if (resultUri) {\n              img.attr('src', resultUri);\n            }\n          });\n        });\n      });\n      return {\n        blobCache,\n        addFilter,\n        uploadImages,\n        uploadImagesAuto,\n        scanForImages,\n        destroy\n      };\n    };\n\n    const get$1 = editor => {\n      const dom = editor.dom;\n      const schemaType = editor.schema.type;\n      const formats = {\n        valigntop: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'top' }\n          }],\n        valignmiddle: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'middle' }\n          }],\n        valignbottom: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'bottom' }\n          }],\n        alignleft: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-left',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'left' },\n            inherit: false,\n            preview: false\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: { float: 'left' },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginLeft: '0px',\n              marginRight: 'auto'\n            },\n            onformat: table => {\n              dom.setStyle(table, 'float', null);\n            },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: '.mce-preview-object,[data-ephox-embed-iri]',\n            ceFalseOverride: true,\n            styles: { float: 'left' }\n          }\n        ],\n        aligncenter: [\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'center' },\n            inherit: false,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-center',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: {\n              display: 'block',\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: '.mce-preview-object',\n            ceFalseOverride: true,\n            styles: {\n              display: 'table',\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          },\n          {\n            selector: '[data-ephox-embed-iri]',\n            ceFalseOverride: true,\n            styles: {\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          }\n        ],\n        alignright: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-right',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'right' },\n            inherit: false,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'img,audio,video',\n            collapsed: false,\n            styles: { float: 'right' },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginRight: '0px',\n              marginLeft: 'auto'\n            },\n            onformat: table => {\n              dom.setStyle(table, 'float', null);\n            },\n            preview: 'font-family font-size'\n          },\n          {\n            selector: '.mce-preview-object,[data-ephox-embed-iri]',\n            ceFalseOverride: true,\n            styles: { float: 'right' },\n            preview: false\n          }\n        ],\n        alignjustify: [{\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n            styles: { textAlign: 'justify' },\n            inherit: false,\n            preview: 'font-family font-size'\n          }],\n        bold: [\n          {\n            inline: 'strong',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 'span',\n            styles: { fontWeight: 'bold' }\n          },\n          {\n            inline: 'b',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        italic: [\n          {\n            inline: 'em',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          },\n          {\n            inline: 'span',\n            styles: { fontStyle: 'italic' }\n          },\n          {\n            inline: 'i',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        underline: [\n          {\n            inline: 'span',\n            styles: { textDecoration: 'underline' },\n            exact: true\n          },\n          {\n            inline: 'u',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          }\n        ],\n        strikethrough: (() => {\n          const span = {\n            inline: 'span',\n            styles: { textDecoration: 'line-through' },\n            exact: true\n          };\n          const strike = {\n            inline: 'strike',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          };\n          const s = {\n            inline: 's',\n            remove: 'all',\n            preserve_attributes: [\n              'class',\n              'style'\n            ]\n          };\n          return schemaType !== 'html4' ? [\n            s,\n            span,\n            strike\n          ] : [\n            span,\n            s,\n            strike\n          ];\n        })(),\n        forecolor: {\n          inline: 'span',\n          styles: { color: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        hilitecolor: {\n          inline: 'span',\n          styles: { backgroundColor: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        fontname: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontFamily: '%value' },\n          clear_child_styles: true\n        },\n        fontsize: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontSize: '%value' },\n          clear_child_styles: true\n        },\n        lineheight: {\n          selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div',\n          styles: { lineHeight: '%value' }\n        },\n        fontsize_class: {\n          inline: 'span',\n          attributes: { class: '%value' }\n        },\n        blockquote: {\n          block: 'blockquote',\n          wrapper: true,\n          remove: 'all'\n        },\n        subscript: { inline: 'sub' },\n        superscript: { inline: 'sup' },\n        code: { inline: 'code' },\n        link: {\n          inline: 'a',\n          selector: 'a',\n          remove: 'all',\n          split: true,\n          deep: true,\n          onmatch: (node, _fmt, _itemName) => {\n            return isElement$6(node) && node.hasAttribute('href');\n          },\n          onformat: (elm, _fmt, vars) => {\n            Tools.each(vars, (value, key) => {\n              dom.setAttrib(elm, key, value);\n            });\n          }\n        },\n        lang: {\n          inline: 'span',\n          clear_child_styles: true,\n          remove_similar: true,\n          attributes: {\n            'lang': '%value',\n            'data-mce-lang': vars => {\n              var _a;\n              return (_a = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a !== void 0 ? _a : null;\n            }\n          }\n        },\n        removeformat: [\n          {\n            selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small',\n            remove: 'all',\n            split: true,\n            expand: false,\n            block_expand: true,\n            deep: true\n          },\n          {\n            selector: 'span',\n            attributes: [\n              'style',\n              'class'\n            ],\n            remove: 'empty',\n            split: true,\n            expand: false,\n            deep: true\n          },\n          {\n            selector: '*',\n            attributes: [\n              'style',\n              'class'\n            ],\n            split: false,\n            expand: false,\n            deep: true\n          }\n        ]\n      };\n      Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd samp'.split(/\\s/), name => {\n        formats[name] = {\n          block: name,\n          remove: 'all'\n        };\n      });\n      return formats;\n    };\n\n    const genericBase = {\n      remove_similar: true,\n      inherit: false\n    };\n    const cellBase = {\n      selector: 'td,th',\n      ...genericBase\n    };\n    const cellFormats = {\n      tablecellbackgroundcolor: {\n        styles: { backgroundColor: '%value' },\n        ...cellBase\n      },\n      tablecellverticalalign: {\n        styles: { 'vertical-align': '%value' },\n        ...cellBase\n      },\n      tablecellbordercolor: {\n        styles: { borderColor: '%value' },\n        ...cellBase\n      },\n      tablecellclass: {\n        classes: ['%value'],\n        ...cellBase\n      },\n      tableclass: {\n        selector: 'table',\n        classes: ['%value'],\n        ...genericBase\n      },\n      tablecellborderstyle: {\n        styles: { borderStyle: '%value' },\n        ...cellBase\n      },\n      tablecellborderwidth: {\n        styles: { borderWidth: '%value' },\n        ...cellBase\n      }\n    };\n    const get = constant(cellFormats);\n\n    const FormatRegistry = editor => {\n      const formats = {};\n      const get$2 = name => isNonNullable(name) ? formats[name] : formats;\n      const has = name => has$2(formats, name);\n      const register = (name, format) => {\n        if (name) {\n          if (!isString(name)) {\n            each$d(name, (format, name) => {\n              register(name, format);\n            });\n          } else {\n            if (!isArray$1(format)) {\n              format = [format];\n            }\n            each$e(format, format => {\n              if (isUndefined(format.deep)) {\n                format.deep = !isSelectorFormat(format);\n              }\n              if (isUndefined(format.split)) {\n                format.split = !isSelectorFormat(format) || isInlineFormat(format);\n              }\n              if (isUndefined(format.remove) && isSelectorFormat(format) && !isInlineFormat(format)) {\n                format.remove = 'none';\n              }\n              if (isSelectorFormat(format) && isInlineFormat(format)) {\n                format.mixed = true;\n                format.block_expand = true;\n              }\n              if (isString(format.classes)) {\n                format.classes = format.classes.split(/\\s+/);\n              }\n            });\n            formats[name] = format;\n          }\n        }\n      };\n      const unregister = name => {\n        if (name && formats[name]) {\n          delete formats[name];\n        }\n        return formats;\n      };\n      register(get$1(editor));\n      register(get());\n      register(getFormats(editor));\n      return {\n        get: get$2,\n        has,\n        register,\n        unregister\n      };\n    };\n\n    const each$3 = Tools.each;\n    const dom = DOMUtils.DOM;\n    const isPreviewItem = item => isNonNullable(item) && isObject(item);\n    const parsedSelectorToHtml = (ancestry, editor) => {\n      const schema = editor && editor.schema || Schema({});\n      const decorate = (elm, item) => {\n        if (item.classes.length > 0) {\n          dom.addClass(elm, item.classes.join(' '));\n        }\n        dom.setAttribs(elm, item.attrs);\n      };\n      const createElement = sItem => {\n        const item = isString(sItem) ? {\n          name: sItem,\n          classes: [],\n          attrs: {}\n        } : sItem;\n        const elm = dom.create(item.name);\n        decorate(elm, item);\n        return elm;\n      };\n      const getRequiredParent = (elm, candidate) => {\n        const elmRule = schema.getElementRule(elm.nodeName.toLowerCase());\n        const parentsRequired = elmRule === null || elmRule === void 0 ? void 0 : elmRule.parentsRequired;\n        if (parentsRequired && parentsRequired.length) {\n          return candidate && contains$2(parentsRequired, candidate) ? candidate : parentsRequired[0];\n        } else {\n          return false;\n        }\n      };\n      const wrapInHtml = (elm, ancestors, siblings) => {\n        let parentCandidate;\n        const ancestor = ancestors[0];\n        const ancestorName = isPreviewItem(ancestor) ? ancestor.name : undefined;\n        const parentRequired = getRequiredParent(elm, ancestorName);\n        if (parentRequired) {\n          if (ancestorName === parentRequired) {\n            parentCandidate = ancestor;\n            ancestors = ancestors.slice(1);\n          } else {\n            parentCandidate = parentRequired;\n          }\n        } else if (ancestor) {\n          parentCandidate = ancestor;\n          ancestors = ancestors.slice(1);\n        } else if (!siblings) {\n          return elm;\n        }\n        const parent = parentCandidate ? createElement(parentCandidate) : dom.create('div');\n        parent.appendChild(elm);\n        if (siblings) {\n          Tools.each(siblings, sibling => {\n            const siblingElm = createElement(sibling);\n            parent.insertBefore(siblingElm, elm);\n          });\n        }\n        const parentSiblings = isPreviewItem(parentCandidate) ? parentCandidate.siblings : undefined;\n        return wrapInHtml(parent, ancestors, parentSiblings);\n      };\n      const fragment = dom.create('div');\n      if (ancestry.length > 0) {\n        const item = ancestry[0];\n        const elm = createElement(item);\n        const siblings = isPreviewItem(item) ? item.siblings : undefined;\n        fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), siblings));\n      }\n      return fragment;\n    };\n    const parseSelectorItem = item => {\n      item = Tools.trim(item);\n      let tagName = 'div';\n      const obj = {\n        name: tagName,\n        classes: [],\n        attrs: {},\n        selector: item\n      };\n      if (item !== '*') {\n        tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, ($0, $1, $2, $3, $4) => {\n          switch ($1) {\n          case '#':\n            obj.attrs.id = $2;\n            break;\n          case '.':\n            obj.classes.push($2);\n            break;\n          case ':':\n            if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n              obj.attrs[$2] = $2;\n            }\n            break;\n          }\n          if ($3 === '[') {\n            const m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n            if (m) {\n              obj.attrs[m[1]] = m[2];\n            }\n          }\n          return '';\n        });\n      }\n      obj.name = tagName || 'div';\n      return obj;\n    };\n    const parseSelector = selector => {\n      if (!isString(selector)) {\n        return [];\n      }\n      selector = selector.split(/\\s*,\\s*/)[0];\n      selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n      return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), item => {\n        const siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n        const obj = siblings.pop();\n        if (siblings.length) {\n          obj.siblings = siblings;\n        }\n        return obj;\n      }).reverse();\n    };\n    const getCssText = (editor, format) => {\n      let previewCss = '';\n      let previewStyles = getPreviewStyles(editor);\n      if (previewStyles === '') {\n        return '';\n      }\n      const removeVars = val => {\n        return isString(val) ? val.replace(/%(\\w+)/g, '') : '';\n      };\n      const getComputedStyle = (name, elm) => {\n        return dom.getStyle(elm !== null && elm !== void 0 ? elm : editor.getBody(), name, true);\n      };\n      if (isString(format)) {\n        const formats = editor.formatter.get(format);\n        if (!formats) {\n          return '';\n        }\n        format = formats[0];\n      }\n      if ('preview' in format) {\n        const preview = format.preview;\n        if (preview === false) {\n          return '';\n        } else {\n          previewStyles = preview || previewStyles;\n        }\n      }\n      let name = format.block || format.inline || 'span';\n      let previewFrag;\n      const items = parseSelector(format.selector);\n      if (items.length > 0) {\n        if (!items[0].name) {\n          items[0].name = name;\n        }\n        name = format.selector;\n        previewFrag = parsedSelectorToHtml(items, editor);\n      } else {\n        previewFrag = parsedSelectorToHtml([name], editor);\n      }\n      const previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n      each$3(format.styles, (value, name) => {\n        const newValue = removeVars(value);\n        if (newValue) {\n          dom.setStyle(previewElm, name, newValue);\n        }\n      });\n      each$3(format.attributes, (value, name) => {\n        const newValue = removeVars(value);\n        if (newValue) {\n          dom.setAttrib(previewElm, name, newValue);\n        }\n      });\n      each$3(format.classes, value => {\n        const newValue = removeVars(value);\n        if (!dom.hasClass(previewElm, newValue)) {\n          dom.addClass(previewElm, newValue);\n        }\n      });\n      editor.dispatch('PreviewFormats');\n      dom.setStyles(previewFrag, {\n        position: 'absolute',\n        left: -65535\n      });\n      editor.getBody().appendChild(previewFrag);\n      const rawParentFontSize = getComputedStyle('fontSize');\n      const parentFontSize = /px$/.test(rawParentFontSize) ? parseInt(rawParentFontSize, 10) : 0;\n      each$3(previewStyles.split(' '), name => {\n        let value = getComputedStyle(name, previewElm);\n        if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n          value = getComputedStyle(name);\n          if (rgbaToHexString(value).toLowerCase() === '#ffffff') {\n            return;\n          }\n        }\n        if (name === 'color') {\n          if (rgbaToHexString(value).toLowerCase() === '#000000') {\n            return;\n          }\n        }\n        if (name === 'font-size') {\n          if (/em|%$/.test(value)) {\n            if (parentFontSize === 0) {\n              return;\n            }\n            const numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n            value = numValue * parentFontSize + 'px';\n          }\n        }\n        if (name === 'border' && value) {\n          previewCss += 'padding:0 2px;';\n        }\n        previewCss += name + ':' + value + ';';\n      });\n      editor.dispatch('AfterPreviewFormats');\n      dom.remove(previewFrag);\n      return previewCss;\n    };\n\n    const setup$s = editor => {\n      editor.addShortcut('meta+b', '', 'Bold');\n      editor.addShortcut('meta+i', '', 'Italic');\n      editor.addShortcut('meta+u', '', 'Underline');\n      for (let i = 1; i <= 6; i++) {\n        editor.addShortcut('access+' + i, '', [\n          'FormatBlock',\n          false,\n          'h' + i\n        ]);\n      }\n      editor.addShortcut('access+7', '', [\n        'FormatBlock',\n        false,\n        'p'\n      ]);\n      editor.addShortcut('access+8', '', [\n        'FormatBlock',\n        false,\n        'div'\n      ]);\n      editor.addShortcut('access+9', '', [\n        'FormatBlock',\n        false,\n        'address'\n      ]);\n    };\n\n    const Formatter = editor => {\n      const formats = FormatRegistry(editor);\n      const formatChangeState = Cell({});\n      setup$s(editor);\n      setup$v(editor);\n      if (!isRtc(editor)) {\n        setup$u(formatChangeState, editor);\n      }\n      return {\n        get: formats.get,\n        has: formats.has,\n        register: formats.register,\n        unregister: formats.unregister,\n        apply: (name, vars, node) => {\n          applyFormat(editor, name, vars, node);\n        },\n        remove: (name, vars, node, similar) => {\n          removeFormat(editor, name, vars, node, similar);\n        },\n        toggle: (name, vars, node) => {\n          toggleFormat(editor, name, vars, node);\n        },\n        match: (name, vars, node, similar) => matchFormat(editor, name, vars, node, similar),\n        closest: names => closestFormat(editor, names),\n        matchAll: (names, vars) => matchAllFormats(editor, names, vars),\n        matchNode: (node, name, vars, similar) => matchNodeFormat(editor, node, name, vars, similar),\n        canApply: name => canApplyFormat(editor, name),\n        formatChanged: (formats, callback, similar, vars) => formatChanged(editor, formatChangeState, formats, callback, similar, vars),\n        getCssText: curry(getCssText, editor)\n      };\n    };\n\n    const shouldIgnoreCommand = cmd => {\n      switch (cmd.toLowerCase()) {\n      case 'undo':\n      case 'redo':\n      case 'mcefocus':\n        return true;\n      default:\n        return false;\n      }\n    };\n    const registerEvents = (editor, undoManager, locks) => {\n      const isFirstTypedCharacter = Cell(false);\n      const addNonTypingUndoLevel = e => {\n        setTyping(undoManager, false, locks);\n        undoManager.add({}, e);\n      };\n      editor.on('init', () => {\n        undoManager.add();\n      });\n      editor.on('BeforeExecCommand', e => {\n        const cmd = e.command;\n        if (!shouldIgnoreCommand(cmd)) {\n          endTyping(undoManager, locks);\n          undoManager.beforeChange();\n        }\n      });\n      editor.on('ExecCommand', e => {\n        const cmd = e.command;\n        if (!shouldIgnoreCommand(cmd)) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('ObjectResizeStart cut', () => {\n        undoManager.beforeChange();\n      });\n      editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n      editor.on('dragend', addNonTypingUndoLevel);\n      editor.on('keyup', e => {\n        const keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        const isMeta = Env.os.isMacOS() && e.key === 'Meta';\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey || isMeta) {\n          addNonTypingUndoLevel();\n          editor.nodeChanged();\n        }\n        if (keyCode === 46 || keyCode === 8) {\n          editor.nodeChanged();\n        }\n        if (isFirstTypedCharacter.get() && undoManager.typing && !isEq$1(createFromEditor(editor), undoManager.data[0])) {\n          if (!editor.isDirty()) {\n            editor.setDirty(true);\n          }\n          editor.dispatch('TypingUndo');\n          isFirstTypedCharacter.set(false);\n          editor.nodeChanged();\n        }\n      });\n      editor.on('keydown', e => {\n        const keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n          if (undoManager.typing) {\n            addNonTypingUndoLevel(e);\n          }\n          return;\n        }\n        const modKey = e.ctrlKey && !e.altKey || e.metaKey;\n        if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n          undoManager.beforeChange();\n          setTyping(undoManager, true, locks);\n          undoManager.add({}, e);\n          isFirstTypedCharacter.set(true);\n          return;\n        }\n        const hasOnlyMetaOrCtrlModifier = Env.os.isMacOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n        if (hasOnlyMetaOrCtrlModifier) {\n          undoManager.beforeChange();\n        }\n      });\n      editor.on('mousedown', e => {\n        if (undoManager.typing) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      const isInsertReplacementText = event => event.inputType === 'insertReplacementText';\n      const isInsertTextDataNull = event => event.inputType === 'insertText' && event.data === null;\n      const isInsertFromPasteOrDrop = event => event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n      editor.on('input', e => {\n        if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('AddUndo Undo Redo ClearUndos', e => {\n        if (!e.isDefaultPrevented()) {\n          editor.nodeChanged();\n        }\n      });\n    };\n    const addKeyboardShortcuts = editor => {\n      editor.addShortcut('meta+z', '', 'Undo');\n      editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n    };\n\n    const UndoManager = editor => {\n      const beforeBookmark = value$2();\n      const locks = Cell(0);\n      const index = Cell(0);\n      const undoManager = {\n        data: [],\n        typing: false,\n        beforeChange: () => {\n          beforeChange(editor, locks, beforeBookmark);\n        },\n        add: (level, event) => {\n          return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n        },\n        dispatchChange: () => {\n          editor.setDirty(true);\n          const level = createFromEditor(editor);\n          level.bookmark = getUndoBookmark(editor.selection);\n          editor.dispatch('change', {\n            level,\n            lastLevel: get$b(undoManager.data, index.get()).getOrUndefined()\n          });\n        },\n        undo: () => {\n          return undo(editor, undoManager, locks, index);\n        },\n        redo: () => {\n          return redo(editor, index, undoManager.data);\n        },\n        clear: () => {\n          clear(editor, undoManager, index);\n        },\n        reset: () => {\n          reset(editor, undoManager);\n        },\n        hasUndo: () => {\n          return hasUndo(editor, undoManager, index);\n        },\n        hasRedo: () => {\n          return hasRedo(editor, undoManager, index);\n        },\n        transact: callback => {\n          return transact(editor, undoManager, locks, callback);\n        },\n        ignore: callback => {\n          ignore(editor, locks, callback);\n        },\n        extra: (callback1, callback2) => {\n          extra(editor, undoManager, index, callback1, callback2);\n        }\n      };\n      if (!isRtc(editor)) {\n        registerEvents(editor, undoManager, locks);\n      }\n      addKeyboardShortcuts(editor);\n      return undoManager;\n    };\n\n    const nonTypingKeycodes = [\n      9,\n      27,\n      VK.HOME,\n      VK.END,\n      19,\n      20,\n      44,\n      144,\n      145,\n      33,\n      34,\n      45,\n      16,\n      17,\n      18,\n      91,\n      92,\n      93,\n      VK.DOWN,\n      VK.UP,\n      VK.LEFT,\n      VK.RIGHT\n    ].concat(Env.browser.isFirefox() ? [224] : []);\n    const placeholderAttr = 'data-mce-placeholder';\n    const isKeyboardEvent = e => e.type === 'keydown' || e.type === 'keyup';\n    const isDeleteEvent = e => {\n      const keyCode = e.keyCode;\n      return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n    };\n    const isNonTypingKeyboardEvent = e => {\n      if (isKeyboardEvent(e)) {\n        const keyCode = e.keyCode;\n        return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$2(nonTypingKeycodes, keyCode));\n      } else {\n        return false;\n      }\n    };\n    const isTypingKeyboardEvent = e => isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n    const isVisuallyEmpty = (dom, rootElm, forcedRootBlock) => {\n      if (isEmpty$2(SugarElement.fromDom(rootElm), false)) {\n        const firstElement = rootElm.firstElementChild;\n        if (!firstElement) {\n          return true;\n        } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n          return false;\n        } else {\n          return forcedRootBlock === firstElement.nodeName.toLowerCase();\n        }\n      } else {\n        return false;\n      }\n    };\n    const setup$r = editor => {\n      var _a;\n      const dom = editor.dom;\n      const rootBlock = getForcedRootBlock(editor);\n      const placeholder = (_a = getPlaceholder(editor)) !== null && _a !== void 0 ? _a : '';\n      const updatePlaceholder = (e, initial) => {\n        if (isNonTypingKeyboardEvent(e)) {\n          return;\n        }\n        const body = editor.getBody();\n        const showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n        const isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n        if (isPlaceholderShown !== showPlaceholder || initial) {\n          dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n          dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n          firePlaceholderToggle(editor, showPlaceholder);\n          editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n          editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n        }\n      };\n      if (isNotEmpty(placeholder)) {\n        editor.on('init', e => {\n          updatePlaceholder(e, true);\n          editor.on('change SetContent ExecCommand', updatePlaceholder);\n          editor.on('paste', e => Delay.setEditorTimeout(editor, () => updatePlaceholder(e)));\n        });\n      }\n    };\n\n    const blockPosition = (block, position) => ({\n      block,\n      position\n    });\n    const blockBoundary = (from, to) => ({\n      from,\n      to\n    });\n    const getBlockPosition = (rootNode, pos) => {\n      const rootElm = SugarElement.fromDom(rootNode);\n      const containerElm = SugarElement.fromDom(pos.container());\n      return getParentBlock$2(rootElm, containerElm).map(block => blockPosition(block, pos));\n    };\n    const isDifferentBlocks = blockBoundary => !eq(blockBoundary.from.block, blockBoundary.to.block);\n    const getClosestHost = (root, scope) => {\n      const isRoot = node => eq(node, root);\n      const isHost = node => isTableCell$2(node) || isContentEditableTrue$3(node.dom);\n      return closest$4(scope, isHost, isRoot).filter(isElement$7).getOr(root);\n    };\n    const hasSameHost = (rootNode, blockBoundary) => {\n      const root = SugarElement.fromDom(rootNode);\n      return eq(getClosestHost(root, blockBoundary.from.block), getClosestHost(root, blockBoundary.to.block));\n    };\n    const isEditable$1 = blockBoundary => isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n    const hasValidBlocks = blockBoundary => {\n      const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom);\n      return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);\n    };\n    const skipLastBr = (rootNode, forward, blockPosition) => {\n      if (isBr$6(blockPosition.position.getNode()) && !isEmpty$2(blockPosition.block)) {\n        return positionIn(false, blockPosition.block.dom).bind(lastPositionInBlock => {\n          if (lastPositionInBlock.isEqual(blockPosition.position)) {\n            return fromPosition(forward, rootNode, lastPositionInBlock).bind(to => getBlockPosition(rootNode, to));\n          } else {\n            return Optional.some(blockPosition);\n          }\n        }).getOr(blockPosition);\n      } else {\n        return blockPosition;\n      }\n    };\n    const readFromRange = (rootNode, forward, rng) => {\n      const fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n      const toBlockPos = fromBlockPos.bind(blockPos => fromPosition(forward, rootNode, blockPos.position).bind(to => getBlockPosition(rootNode, to).map(blockPos => skipLastBr(rootNode, forward, blockPos))));\n      return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(blockBoundary => isDifferentBlocks(blockBoundary) && hasSameHost(rootNode, blockBoundary) && isEditable$1(blockBoundary) && hasValidBlocks(blockBoundary));\n    };\n    const read$1 = (rootNode, forward, rng) => rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n\n    const getChildrenUntilBlockBoundary = (block, schema) => {\n      const children = children$1(block);\n      return findIndex$2(children, el => schema.isBlock(name(el))).fold(constant(children), index => children.slice(0, index));\n    };\n    const extractChildren = (block, schema) => {\n      const children = getChildrenUntilBlockBoundary(block, schema);\n      each$e(children, remove$5);\n      return children;\n    };\n    const removeEmptyRoot = (rootNode, block) => {\n      const parents = parentsAndSelf(block, rootNode);\n      return find$2(parents.reverse(), element => isEmpty$2(element)).each(remove$5);\n    };\n    const isEmptyBefore = el => filter$5(prevSiblings(el), el => !isEmpty$2(el)).length === 0;\n    const nestedBlockMerge = (rootNode, fromBlock, toBlock, schema, insertionPoint) => {\n      if (isEmpty$2(toBlock)) {\n        fillWithPaddingBr(toBlock);\n        return firstPositionIn(toBlock.dom);\n      }\n      if (isEmptyBefore(insertionPoint) && isEmpty$2(fromBlock)) {\n        before$3(insertionPoint, SugarElement.fromTag('br'));\n      }\n      const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n      each$e(extractChildren(fromBlock, schema), child => {\n        before$3(insertionPoint, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    const isInline = (schema, node) => schema.isInline(name(node));\n    const sidelongBlockMerge = (rootNode, fromBlock, toBlock, schema) => {\n      if (isEmpty$2(toBlock)) {\n        if (isEmpty$2(fromBlock)) {\n          const getInlineToBlockDescendants = el => {\n            const helper = (node, elements) => firstChild(node).fold(() => elements, child => isInline(schema, child) ? helper(child, elements.concat(shallow$1(child))) : elements);\n            return helper(el, []);\n          };\n          const newFromBlockDescendants = foldr(getInlineToBlockDescendants(toBlock), (element, descendant) => {\n            wrap$2(element, descendant);\n            return descendant;\n          }, createPaddingBr());\n          empty(fromBlock);\n          append$1(fromBlock, newFromBlockDescendants);\n        }\n        remove$5(toBlock);\n        return firstPositionIn(fromBlock.dom);\n      }\n      const position = lastPositionIn(toBlock.dom);\n      each$e(extractChildren(fromBlock, schema), child => {\n        append$1(toBlock, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    const findInsertionPoint = (toBlock, block) => {\n      const parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n      return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n    };\n    const getInsertionPoint = (fromBlock, toBlock) => contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n    const trimBr = (first, block) => {\n      positionIn(first, block.dom).bind(position => Optional.from(position.getNode())).map(SugarElement.fromDom).filter(isBr$5).each(remove$5);\n    };\n    const mergeBlockInto = (rootNode, fromBlock, toBlock, schema) => {\n      trimBr(true, fromBlock);\n      trimBr(false, toBlock);\n      return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock, schema), curry(nestedBlockMerge, rootNode, fromBlock, toBlock, schema));\n    };\n    const mergeBlocks = (rootNode, forward, block1, block2, schema) => forward ? mergeBlockInto(rootNode, block2, block1, schema) : mergeBlockInto(rootNode, block1, block2, schema);\n\n    const backspaceDelete$9 = (editor, forward) => {\n      const rootNode = SugarElement.fromDom(editor.getBody());\n      const position = read$1(rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {\n        mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block, editor.schema).each(pos => {\n          editor.selection.setRng(pos.toRange());\n        });\n      });\n      return position;\n    };\n\n    const deleteRangeMergeBlocks = (rootNode, selection, schema) => {\n      const rng = selection.getRng();\n      return lift2(getParentBlock$2(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$2(rootNode, SugarElement.fromDom(rng.endContainer)), (block1, block2) => {\n        if (!eq(block1, block2)) {\n          return Optional.some(() => {\n            rng.deleteContents();\n            mergeBlocks(rootNode, true, block1, block2, schema).each(pos => {\n              selection.setRng(pos.toRange());\n            });\n          });\n        } else {\n          return Optional.none();\n        }\n      }).getOr(Optional.none());\n    };\n    const isRawNodeInTable = (root, rawNode) => {\n      const node = SugarElement.fromDom(rawNode);\n      const isRoot = curry(eq, root);\n      return ancestor$4(node, isTableCell$2, isRoot).isSome();\n    };\n    const isSelectionInTable = (root, rng) => isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n    const isEverythingSelected = (root, rng) => {\n      const noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n      const noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n      return !isSelectionInTable(root, rng) && noPrevious && noNext;\n    };\n    const emptyEditor = editor => {\n      return Optional.some(() => {\n        editor.setContent('');\n        editor.selection.setCursorLocation();\n      });\n    };\n    const deleteRange$2 = editor => {\n      const rootNode = SugarElement.fromDom(editor.getBody());\n      const rng = editor.selection.getRng();\n      return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection, editor.schema);\n    };\n    const backspaceDelete$8 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$2(editor);\n\n    const showCaret = (direction, editor, node, before, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n    const getNodeRange = node => {\n      const rng = node.ownerDocument.createRange();\n      rng.selectNode(node);\n      return rng;\n    };\n    const selectNode = (editor, node) => {\n      const e = editor.dispatch('BeforeObjectSelected', { target: node });\n      if (e.isDefaultPrevented()) {\n        return Optional.none();\n      }\n      return Optional.some(getNodeRange(node));\n    };\n    const renderCaretAtRange = (editor, range, scrollIntoView) => {\n      const normalizedRange = normalizeRange(1, editor.getBody(), range);\n      const caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n      const caretPositionNode = caretPosition.getNode();\n      if (isInlineFakeCaretTarget(caretPositionNode)) {\n        return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n      }\n      const caretPositionBeforeNode = caretPosition.getNode(true);\n      if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n        return showCaret(1, editor, caretPositionBeforeNode, false, false);\n      }\n      const ceRoot = getContentEditableRoot$1(editor.dom.getRoot(), caretPosition.getNode());\n      if (isInlineFakeCaretTarget(ceRoot)) {\n        return showCaret(1, editor, ceRoot, false, scrollIntoView);\n      }\n      return Optional.none();\n    };\n    const renderRangeCaret = (editor, range, scrollIntoView) => range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n\n    const isBeforeBoundary = pos => isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n    const isAfterBoundary = pos => isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n    const trimEmptyTextNode = (dom, node) => {\n      if (isText$a(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    const deleteContentAndShowCaret = (editor, range, node, direction, forward, peekCaretPosition) => {\n      showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(caretRange => {\n        if (range.collapsed) {\n          const deleteRange = range.cloneRange();\n          if (forward) {\n            deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n          } else {\n            deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n          }\n          deleteRange.deleteContents();\n        } else {\n          range.deleteContents();\n        }\n        editor.selection.setRng(caretRange);\n      });\n      trimEmptyTextNode(editor.dom, node);\n    };\n    const deleteBoundaryText = (editor, forward) => {\n      const range = editor.selection.getRng();\n      if (!isText$a(range.commonAncestorContainer)) {\n        return Optional.none();\n      }\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const caretWalker = CaretWalker(editor.getBody());\n      const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n      const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n      const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      const nextCaretPosition = getNextPosFn(caretPosition);\n      const normalizedNextCaretPosition = nextCaretPosition ? normalizePosition(forward, nextCaretPosition) : nextCaretPosition;\n      if (!normalizedNextCaretPosition || !isMoveInsideSameBlock(caretPosition, normalizedNextCaretPosition)) {\n        return Optional.none();\n      } else if (isBeforeFn(normalizedNextCaretPosition)) {\n        return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, normalizedNextCaretPosition));\n      }\n      const peekCaretPosition = getNextPosFn(normalizedNextCaretPosition);\n      if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(normalizedNextCaretPosition, peekCaretPosition)) {\n          return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition));\n        }\n      }\n      return Optional.none();\n    };\n    const backspaceDelete$7 = (editor, forward) => deleteBoundaryText(editor, forward);\n\n    const getEdgeCefPosition = (editor, atStart) => {\n      const root = editor.getBody();\n      return atStart ? firstPositionIn(root).filter(isBeforeContentEditableFalse) : lastPositionIn(root).filter(isAfterContentEditableFalse);\n    };\n    const isCefAtEdgeSelected = editor => {\n      const rng = editor.selection.getRng();\n      return !rng.collapsed && (getEdgeCefPosition(editor, true).exists(pos => pos.isEqual(CaretPosition.fromRangeStart(rng))) || getEdgeCefPosition(editor, false).exists(pos => pos.isEqual(CaretPosition.fromRangeEnd(rng))));\n    };\n\n    const isCompoundElement = node => isNonNullable(node) && (isTableCell$2(SugarElement.fromDom(node)) || isListItem$1(SugarElement.fromDom(node)));\n    const DeleteAction = Adt.generate([\n      { remove: ['element'] },\n      { moveToElement: ['element'] },\n      { moveToPosition: ['position'] }\n    ]);\n    const isAtContentEditableBlockCaret = (forward, from) => {\n      const elm = from.getNode(!forward);\n      const caretLocation = forward ? 'after' : 'before';\n      return isElement$6(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n    };\n    const isDeleteFromCefDifferentBlocks = (root, forward, from, to, schema) => {\n      const inSameBlock = elm => schema.isInline(elm.nodeName.toLowerCase()) && !isInSameBlock(from, to, root);\n      return getRelativeCefElm(!forward, from).fold(() => getRelativeCefElm(forward, to).fold(never, inSameBlock), inSameBlock);\n    };\n    const deleteEmptyBlockOrMoveToCef = (root, forward, from, to) => {\n      const toCefElm = to.getNode(!forward);\n      return getParentBlock$2(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(blockElm => isEmpty$2(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n    };\n    const findCefPosition = (root, forward, from, schema) => fromPosition(forward, root, from).bind(to => {\n      if (isCompoundElement(to.getNode())) {\n        return Optional.none();\n      } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to, schema)) {\n        return Optional.none();\n      } else if (forward && isContentEditableFalse$b(to.getNode())) {\n        return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n      } else if (!forward && isContentEditableFalse$b(to.getNode(true))) {\n        return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n      } else if (forward && isAfterContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.moveToPosition(to));\n      } else if (!forward && isBeforeContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.moveToPosition(to));\n      } else {\n        return Optional.none();\n      }\n    });\n    const getContentEditableBlockAction = (forward, elm) => {\n      if (isNullable(elm)) {\n        return Optional.none();\n      } else if (forward && isContentEditableFalse$b(elm.nextSibling)) {\n        return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n      } else if (!forward && isContentEditableFalse$b(elm.previousSibling)) {\n        return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n      } else {\n        return Optional.none();\n      }\n    };\n    const skipMoveToActionFromInlineCefToContent = (root, from, deleteAction) => deleteAction.fold(elm => Optional.some(DeleteAction.remove(elm)), elm => Optional.some(DeleteAction.moveToElement(elm)), to => {\n      if (isInSameBlock(from, to, root)) {\n        return Optional.none();\n      } else {\n        return Optional.some(DeleteAction.moveToPosition(to));\n      }\n    });\n    const getContentEditableAction = (root, forward, from, schema) => {\n      if (isAtContentEditableBlockCaret(forward, from)) {\n        return getContentEditableBlockAction(forward, from.getNode(!forward)).orThunk(() => findCefPosition(root, forward, from, schema));\n      } else {\n        return findCefPosition(root, forward, from, schema).bind(deleteAction => skipMoveToActionFromInlineCefToContent(root, from, deleteAction));\n      }\n    };\n    const read = (root, forward, rng, schema) => {\n      const normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n      const from = CaretPosition.fromRangeStart(normalizedRange);\n      const rootElement = SugarElement.fromDom(root);\n      if (!forward && isAfterContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.remove(from.getNode(true)));\n      } else if (forward && isBeforeContentEditableFalse(from)) {\n        return Optional.some(DeleteAction.remove(from.getNode()));\n      } else if (!forward && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from, schema)) {\n        return findPreviousBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n      } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from, schema)) {\n        return findNextBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n      } else {\n        return getContentEditableAction(root, forward, from, schema);\n      }\n    };\n\n    const deleteElement$1 = (editor, forward) => element => {\n      editor._selectionOverrides.hideFakeCaret();\n      deleteElement$2(editor, forward, SugarElement.fromDom(element));\n      return true;\n    };\n    const moveToElement = (editor, forward) => element => {\n      const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n      editor.selection.setRng(pos.toRange());\n      return true;\n    };\n    const moveToPosition = editor => pos => {\n      editor.selection.setRng(pos.toRange());\n      return true;\n    };\n    const getAncestorCe = (editor, node) => Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n    const backspaceDeleteCaret = (editor, forward) => {\n      const selectedNode = editor.selection.getNode();\n      return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$b).fold(() => read(editor.getBody(), forward, editor.selection.getRng(), editor.schema).map(deleteAction => () => deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor))), () => Optional.some(noop));\n    };\n    const deleteOffscreenSelection = rootElement => {\n      each$e(descendants(rootElement, '.mce-offscreen-selection'), remove$5);\n    };\n    const backspaceDeleteRange = (editor, forward) => {\n      const selectedNode = editor.selection.getNode();\n      if (isContentEditableFalse$b(selectedNode) && !isTableCell$3(selectedNode)) {\n        const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\n        return hasCefAncestor.fold(() => Optional.some(() => {\n          deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n          deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n          paddEmptyBody(editor);\n        }), () => Optional.some(noop));\n      }\n      if (isCefAtEdgeSelected(editor)) {\n        return Optional.some(() => {\n          deleteRangeContents(editor, editor.selection.getRng(), SugarElement.fromDom(editor.getBody()));\n        });\n      }\n      return Optional.none();\n    };\n    const paddEmptyElement = editor => {\n      const dom = editor.dom, selection = editor.selection;\n      const ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n      if (isContentEditableTrue$3(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n        const br = dom.create('br', { 'data-mce-bogus': '1' });\n        dom.setHTML(ceRoot, '');\n        ceRoot.appendChild(br);\n        selection.setRng(CaretPosition.before(br).toRange());\n      }\n      return true;\n    };\n    const backspaceDelete$6 = (editor, forward) => {\n      if (editor.selection.isCollapsed()) {\n        return backspaceDeleteCaret(editor, forward);\n      } else {\n        return backspaceDeleteRange(editor, forward);\n      }\n    };\n\n    const deleteCaret$2 = (editor, forward) => {\n      const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return fromPosition(forward, editor.getBody(), fromPos).filter(pos => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind(pos => getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)).map(elm => () => editor.selection.select(elm));\n    };\n    const backspaceDelete$5 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n\n    const isText$2 = isText$a;\n    const startsWithCaretContainer = node => isText$2(node) && node.data[0] === ZWSP$1;\n    const endsWithCaretContainer = node => isText$2(node) && node.data[node.data.length - 1] === ZWSP$1;\n    const createZwsp = node => {\n      var _a;\n      const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n      return doc.createTextNode(ZWSP$1);\n    };\n    const insertBefore$1 = node => {\n      var _a;\n      if (isText$2(node.previousSibling)) {\n        if (endsWithCaretContainer(node.previousSibling)) {\n          return node.previousSibling;\n        } else {\n          node.previousSibling.appendData(ZWSP$1);\n          return node.previousSibling;\n        }\n      } else if (isText$2(node)) {\n        if (startsWithCaretContainer(node)) {\n          return node;\n        } else {\n          node.insertData(0, ZWSP$1);\n          return node;\n        }\n      } else {\n        const newNode = createZwsp(node);\n        (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node);\n        return newNode;\n      }\n    };\n    const insertAfter$1 = node => {\n      var _a, _b;\n      if (isText$2(node.nextSibling)) {\n        if (startsWithCaretContainer(node.nextSibling)) {\n          return node.nextSibling;\n        } else {\n          node.nextSibling.insertData(0, ZWSP$1);\n          return node.nextSibling;\n        }\n      } else if (isText$2(node)) {\n        if (endsWithCaretContainer(node)) {\n          return node;\n        } else {\n          node.appendData(ZWSP$1);\n          return node;\n        }\n      } else {\n        const newNode = createZwsp(node);\n        if (node.nextSibling) {\n          (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node.nextSibling);\n        } else {\n          (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.appendChild(newNode);\n        }\n        return newNode;\n      }\n    };\n    const insertInline = (before, node) => before ? insertBefore$1(node) : insertAfter$1(node);\n    const insertInlineBefore = curry(insertInline, true);\n    const insertInlineAfter = curry(insertInline, false);\n\n    const insertInlinePos = (pos, before) => {\n      if (isText$a(pos.container())) {\n        return insertInline(before, pos.container());\n      } else {\n        return insertInline(before, pos.getNode());\n      }\n    };\n    const isPosCaretContainer = (pos, caret) => {\n      const caretNode = caret.get();\n      return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n    };\n    const renderCaret = (caret, location) => location.fold(element => {\n      remove$3(caret.get());\n      const text = insertInlineBefore(element);\n      caret.set(text);\n      return Optional.some(CaretPosition(text, text.length - 1));\n    }, element => firstPositionIn(element).map(pos => {\n      if (!isPosCaretContainer(pos, caret)) {\n        remove$3(caret.get());\n        const text = insertInlinePos(pos, true);\n        caret.set(text);\n        return CaretPosition(text, 1);\n      } else {\n        const node = caret.get();\n        return CaretPosition(node, 1);\n      }\n    }), element => lastPositionIn(element).map(pos => {\n      if (!isPosCaretContainer(pos, caret)) {\n        remove$3(caret.get());\n        const text = insertInlinePos(pos, false);\n        caret.set(text);\n        return CaretPosition(text, text.length - 1);\n      } else {\n        const node = caret.get();\n        return CaretPosition(node, node.length - 1);\n      }\n    }), element => {\n      remove$3(caret.get());\n      const text = insertInlineAfter(element);\n      caret.set(text);\n      return Optional.some(CaretPosition(text, 1));\n    });\n\n    const evaluateUntil = (fns, args) => {\n      for (let i = 0; i < fns.length; i++) {\n        const result = fns[i].apply(null, args);\n        if (result.isSome()) {\n          return result;\n        }\n      }\n      return Optional.none();\n    };\n\n    const Location = Adt.generate([\n      { before: ['element'] },\n      { start: ['element'] },\n      { end: ['element'] },\n      { after: ['element'] }\n    ]);\n    const rescope$1 = (rootNode, node) => {\n      const parentBlock = getParentBlock$3(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    const before = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeForwards(pos);\n      const scope = rescope$1(rootNode, nPos.container());\n      return findRootInline(isInlineTarget, scope, nPos).fold(() => nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.before(inline)), Optional.none);\n    };\n    const isNotInsideFormatCaretContainer = (rootNode, elm) => getParentCaretContainer(rootNode, elm) === null;\n    const findInsideRootInline = (isInlineTarget, rootNode, pos) => findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n    const start$1 = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeBackwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n        const prevPos = prevPosition(inline, nPos);\n        return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n      });\n    };\n    const end = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeForwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n        const nextPos = nextPosition(inline, nPos);\n        return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n      });\n    };\n    const after = (isInlineTarget, rootNode, pos) => {\n      const nPos = normalizeBackwards(pos);\n      const scope = rescope$1(rootNode, nPos.container());\n      return findRootInline(isInlineTarget, scope, nPos).fold(() => prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.after(inline)), Optional.none);\n    };\n    const isValidLocation = location => !isRtl(getElement(location));\n    const readLocation = (isInlineTarget, rootNode, pos) => {\n      const location = evaluateUntil([\n        before,\n        start$1,\n        end,\n        after\n      ], [\n        isInlineTarget,\n        rootNode,\n        pos\n      ]);\n      return location.filter(isValidLocation);\n    };\n    const getElement = location => location.fold(identity, identity, identity, identity);\n    const getName = location => location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n    const outside = location => location.fold(Location.before, Location.before, Location.after, Location.after);\n    const inside = location => location.fold(Location.start, Location.start, Location.end, Location.end);\n    const isEq = (location1, location2) => getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n    const betweenInlines = (forward, isInlineTarget, rootNode, from, to, location) => lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), (fromInline, toInline) => {\n      if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n        return Location.after(forward ? fromInline : toInline);\n      } else {\n        return location;\n      }\n    }).getOr(location);\n    const skipNoMovement = (fromLocation, toLocation) => fromLocation.fold(always, fromLocation => !isEq(fromLocation, toLocation));\n    const findLocationTraverse = (forward, isInlineTarget, rootNode, fromLocation, pos) => {\n      const from = normalizePosition(forward, pos);\n      const to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n      const location = to.fold(() => fromLocation.map(outside), to => readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)));\n      return location.filter(isValidLocation);\n    };\n    const findLocationSimple = (forward, location) => {\n      if (forward) {\n        return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n      } else {\n        return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n      }\n    };\n    const findLocation$1 = (forward, isInlineTarget, rootNode, pos) => {\n      const from = normalizePosition(forward, pos);\n      const fromLocation = readLocation(isInlineTarget, rootNode, from);\n      return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(() => findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos));\n    };\n\n    const hasSelectionModifyApi = editor => {\n      return isFunction(editor.selection.getSel().modify);\n    };\n    const moveRel = (forward, selection, pos) => {\n      const delta = forward ? 1 : -1;\n      selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n      selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n      return true;\n    };\n    const moveByWord = (forward, editor) => {\n      const rng = editor.selection.getRng();\n      const pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n      if (!hasSelectionModifyApi(editor)) {\n        return false;\n      } else if (forward && isBeforeInline(pos)) {\n        return moveRel(true, editor.selection, pos);\n      } else if (!forward && isAfterInline(pos)) {\n        return moveRel(false, editor.selection, pos);\n      } else {\n        return false;\n      }\n    };\n\n    var BreakType;\n    (function (BreakType) {\n      BreakType[BreakType['Br'] = 0] = 'Br';\n      BreakType[BreakType['Block'] = 1] = 'Block';\n      BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n      BreakType[BreakType['Eol'] = 3] = 'Eol';\n    }(BreakType || (BreakType = {})));\n    const flip = (direction, positions) => direction === HDirection.Backwards ? reverse(positions) : positions;\n    const walk$1 = (direction, caretWalker, pos) => direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n    const getBreakType = (scope, direction, currentPos, nextPos) => {\n      if (isBr$6(nextPos.getNode(direction === HDirection.Forwards))) {\n        return BreakType.Br;\n      } else if (isInSameBlock(currentPos, nextPos) === false) {\n        return BreakType.Block;\n      } else {\n        return BreakType.Wrap;\n      }\n    };\n    const getPositionsUntil = (predicate, direction, scope, start) => {\n      const caretWalker = CaretWalker(scope);\n      let currentPos = start;\n      const positions = [];\n      while (currentPos) {\n        const nextPos = walk$1(direction, caretWalker, currentPos);\n        if (!nextPos) {\n          break;\n        }\n        if (isBr$6(nextPos.getNode(false))) {\n          if (direction === HDirection.Forwards) {\n            return {\n              positions: flip(direction, positions).concat([nextPos]),\n              breakType: BreakType.Br,\n              breakAt: Optional.some(nextPos)\n            };\n          } else {\n            return {\n              positions: flip(direction, positions),\n              breakType: BreakType.Br,\n              breakAt: Optional.some(nextPos)\n            };\n          }\n        }\n        if (!nextPos.isVisible()) {\n          currentPos = nextPos;\n          continue;\n        }\n        if (predicate(currentPos, nextPos)) {\n          const breakType = getBreakType(scope, direction, currentPos, nextPos);\n          return {\n            positions: flip(direction, positions),\n            breakType,\n            breakAt: Optional.some(nextPos)\n          };\n        }\n        positions.push(nextPos);\n        currentPos = nextPos;\n      }\n      return {\n        positions: flip(direction, positions),\n        breakType: BreakType.Eol,\n        breakAt: Optional.none()\n      };\n    };\n    const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start) => getPositionsUntilBreak(scope, start).breakAt.map(pos => {\n      const positions = getPositionsUntilBreak(scope, pos).positions;\n      return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n    }).getOr([]);\n    const findClosestHorizontalPositionFromPoint = (positions, x) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), lastPos => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n      const lastDist = Math.abs(x - lastRect.left);\n      const newDist = Math.abs(x - newRect.left);\n      return newDist <= lastDist ? newPos : lastPos;\n    }).or(acc)), Optional.none());\n    const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind(targetRect => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n    const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n    const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n    const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n    const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n    const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n    const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n    const getFirstLinePositions = scope => firstPositionIn(scope).map(pos => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n    const getLastLinePositions = scope => lastPositionIn(scope).map(pos => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n    const getClosestPositionAbove = (scope, pos) => findClosestHorizontalPosition(getPositionsAbove(scope, pos), pos);\n    const getClosestPositionBelow = (scope, pos) => findClosestHorizontalPosition(getPositionsBelow(scope, pos), pos);\n\n    const isContentEditableFalse$4 = isContentEditableFalse$b;\n    const distanceToRectLeft$1 = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n    const distanceToRectRight$1 = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n    const isNodeClientRect = rect => hasNonNullableKey(rect, 'node');\n    const findClosestClientRect = (clientRects, clientX) => reduce(clientRects, (oldClientRect, clientRect) => {\n      const oldDistance = Math.min(distanceToRectLeft$1(oldClientRect, clientX), distanceToRectRight$1(oldClientRect, clientX));\n      const newDistance = Math.min(distanceToRectLeft$1(clientRect, clientX), distanceToRectRight$1(clientRect, clientX));\n      if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$4(clientRect.node)) {\n        return clientRect;\n      }\n      if (newDistance < oldDistance) {\n        return clientRect;\n      }\n      return oldClientRect;\n    });\n\n    const getNodeClientRects = node => {\n      const toArrayWithNode = clientRects => {\n        return map$3(clientRects, rect => {\n          const clientRect = clone$1(rect);\n          clientRect.node = node;\n          return clientRect;\n        });\n      };\n      if (isElement$6(node)) {\n        return toArrayWithNode(node.getClientRects());\n      } else if (isText$a(node)) {\n        const rng = node.ownerDocument.createRange();\n        rng.setStart(node, 0);\n        rng.setEnd(node, node.data.length);\n        return toArrayWithNode(rng.getClientRects());\n      } else {\n        return [];\n      }\n    };\n    const getClientRects = nodes => bind$3(nodes, getNodeClientRects);\n\n    var VDirection;\n    (function (VDirection) {\n      VDirection[VDirection['Up'] = -1] = 'Up';\n      VDirection[VDirection['Down'] = 1] = 'Down';\n    }(VDirection || (VDirection = {})));\n    const findUntil = (direction, root, predicateFn, node) => {\n      let currentNode = node;\n      while (currentNode = findNode(currentNode, direction, isEditableCaretCandidate$1, root)) {\n        if (predicateFn(currentNode)) {\n          return;\n        }\n      }\n    };\n    const walkUntil = (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) => {\n      let line = 0;\n      const result = [];\n      const add = node => {\n        let clientRects = getClientRects([node]);\n        if (direction === -1) {\n          clientRects = clientRects.reverse();\n        }\n        for (let i = 0; i < clientRects.length; i++) {\n          const clientRect = clientRects[i];\n          if (isBeflowFn(clientRect, targetClientRect)) {\n            continue;\n          }\n          if (result.length > 0 && isAboveFn(clientRect, last$2(result))) {\n            line++;\n          }\n          clientRect.line = line;\n          if (predicateFn(clientRect)) {\n            return true;\n          }\n          result.push(clientRect);\n        }\n        return false;\n      };\n      const targetClientRect = last$2(caretPosition.getClientRects());\n      if (!targetClientRect) {\n        return result;\n      }\n      const node = caretPosition.getNode();\n      if (node) {\n        add(node);\n        findUntil(direction, root, add, node);\n      }\n      return result;\n    };\n    const aboveLineNumber = (lineNumber, clientRect) => clientRect.line > lineNumber;\n    const isLineNumber = (lineNumber, clientRect) => clientRect.line === lineNumber;\n    const upUntil = curry(walkUntil, VDirection.Up, isAbove$1, isBelow$1);\n    const downUntil = curry(walkUntil, VDirection.Down, isBelow$1, isAbove$1);\n    const getLastClientRect = caretPosition => {\n      return last$2(caretPosition.getClientRects());\n    };\n    const positionsUntil = (direction, root, predicateFn, node) => {\n      const caretWalker = CaretWalker(root);\n      let walkFn;\n      let isBelowFn;\n      let isAboveFn;\n      let caretPosition;\n      const result = [];\n      let line = 0;\n      if (direction === 1) {\n        walkFn = caretWalker.next;\n        isBelowFn = isBelow$1;\n        isAboveFn = isAbove$1;\n        caretPosition = CaretPosition.after(node);\n      } else {\n        walkFn = caretWalker.prev;\n        isBelowFn = isAbove$1;\n        isAboveFn = isBelow$1;\n        caretPosition = CaretPosition.before(node);\n      }\n      const targetClientRect = getLastClientRect(caretPosition);\n      do {\n        if (!caretPosition.isVisible()) {\n          continue;\n        }\n        const rect = getLastClientRect(caretPosition);\n        if (isAboveFn(rect, targetClientRect)) {\n          continue;\n        }\n        if (result.length > 0 && isBelowFn(rect, last$2(result))) {\n          line++;\n        }\n        const clientRect = clone$1(rect);\n        clientRect.position = caretPosition;\n        clientRect.line = line;\n        if (predicateFn(clientRect)) {\n          return result;\n        }\n        result.push(clientRect);\n      } while (caretPosition = walkFn(caretPosition));\n      return result;\n    };\n    const isAboveLine = lineNumber => clientRect => aboveLineNumber(lineNumber, clientRect);\n    const isLine = lineNumber => clientRect => isLineNumber(lineNumber, clientRect);\n\n    const moveToRange = (editor, rng) => {\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, editor.selection.getRng());\n    };\n    const renderRangeCaretOpt = (editor, range, scrollIntoView) => Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n    const moveHorizontally = (editor, direction, range, isBefore, isAfter, isElement) => {\n      const forwards = direction === HDirection.Forwards;\n      const caretWalker = CaretWalker(editor.getBody());\n      const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n      const isBeforeFn = forwards ? isBefore : isAfter;\n      if (!range.collapsed) {\n        const node = getSelectedNode(range);\n        if (isElement(node)) {\n          return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n        } else if (isCefAtEdgeSelected(editor)) {\n          const newRange = range.cloneRange();\n          newRange.collapse(direction === HDirection.Backwards);\n          return Optional.from(newRange);\n        }\n      }\n      const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      if (isBeforeFn(caretPosition)) {\n        return selectNode(editor, caretPosition.getNode(!forwards));\n      }\n      let nextCaretPosition = getNextPosFn(caretPosition);\n      const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n      if (!nextCaretPosition) {\n        return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n      } else {\n        nextCaretPosition = normalizePosition(forwards, nextCaretPosition);\n      }\n      if (isBeforeFn(nextCaretPosition)) {\n        return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n      }\n      const peekCaretPosition = getNextPosFn(nextCaretPosition);\n      if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n          return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n        }\n      }\n      if (rangeIsInContainerBlock) {\n        return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n      }\n      return Optional.none();\n    };\n    const moveVertically = (editor, direction, range, isBefore, isAfter, isElement) => {\n      const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      const caretClientRect = last$2(caretPosition.getClientRects());\n      const forwards = direction === VDirection.Down;\n      const root = editor.getBody();\n      if (!caretClientRect) {\n        return Optional.none();\n      }\n      if (isCefAtEdgeSelected(editor)) {\n        const caretPosition = forwards ? CaretPosition.fromRangeEnd(range) : CaretPosition.fromRangeStart(range);\n        const getClosestFn = !forwards ? getClosestPositionAbove : getClosestPositionBelow;\n        return getClosestFn(root, caretPosition).orThunk(() => Optional.from(caretPosition)).map(pos => pos.toRange());\n      }\n      const walkerFn = forwards ? downUntil : upUntil;\n      const linePositions = walkerFn(root, isAboveLine(1), caretPosition);\n      const nextLinePositions = filter$5(linePositions, isLine(1));\n      const clientX = caretClientRect.left;\n      const nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n      if (nextLineRect && isElement(nextLineRect.node)) {\n        const dist1 = Math.abs(clientX - nextLineRect.left);\n        const dist2 = Math.abs(clientX - nextLineRect.right);\n        return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n      }\n      let currentNode;\n      if (isBefore(caretPosition)) {\n        currentNode = caretPosition.getNode();\n      } else if (isAfter(caretPosition)) {\n        currentNode = caretPosition.getNode(true);\n      } else {\n        currentNode = getSelectedNode(range);\n      }\n      if (currentNode) {\n        const caretPositions = positionsUntil(direction, root, isAboveLine(1), currentNode);\n        let closestNextLineRect = findClosestClientRect(filter$5(caretPositions, isLine(1)), clientX);\n        if (closestNextLineRect) {\n          return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n        }\n        closestNextLineRect = last$2(filter$5(caretPositions, isLine(0)));\n        if (closestNextLineRect) {\n          return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n        }\n      }\n      if (nextLinePositions.length === 0) {\n        return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(pos => renderRangeCaret(editor, pos.toRange(), false));\n      }\n      return Optional.none();\n    };\n    const getLineEndPoint = (editor, forward) => {\n      const rng = editor.selection.getRng();\n      const from = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n      const host = getEditingHost(from.container(), editor.getBody());\n      if (forward) {\n        const lineInfo = getPositionsUntilNextLine(host, from);\n        return last$3(lineInfo.positions);\n      } else {\n        const lineInfo = getPositionsUntilPreviousLine(host, from);\n        return head(lineInfo.positions);\n      }\n    };\n    const moveToLineEndPoint$3 = (editor, forward, isElementPosition) => getLineEndPoint(editor, forward).filter(isElementPosition).exists(pos => {\n      editor.selection.setRng(pos.toRange());\n      return true;\n    });\n\n    const setCaretPosition = (editor, pos) => {\n      const rng = editor.dom.createRng();\n      rng.setStart(pos.container(), pos.offset());\n      rng.setEnd(pos.container(), pos.offset());\n      editor.selection.setRng(rng);\n    };\n    const setSelected = (state, elm) => {\n      if (state) {\n        elm.setAttribute('data-mce-selected', 'inline-boundary');\n      } else {\n        elm.removeAttribute('data-mce-selected');\n      }\n    };\n    const renderCaretLocation = (editor, caret, location) => renderCaret(caret, location).map(pos => {\n      setCaretPosition(editor, pos);\n      return location;\n    });\n    const getPositionFromRange = (range, root, forward) => {\n      const start = CaretPosition.fromRangeStart(range);\n      if (range.collapsed) {\n        return start;\n      } else {\n        const end = CaretPosition.fromRangeEnd(range);\n        return forward ? prevPosition(root, end).getOr(end) : nextPosition(root, start).getOr(start);\n      }\n    };\n    const findLocation = (editor, caret, forward) => {\n      const rootNode = editor.getBody();\n      const from = getPositionFromRange(editor.selection.getRng(), rootNode, forward);\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      const location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n      return location.bind(location => renderCaretLocation(editor, caret, location));\n    };\n    const toggleInlines = (isInlineTarget, dom, elms) => {\n      const inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), e => e.dom);\n      const selectedInlines = filter$5(inlineBoundaries, isInlineTarget);\n      const targetInlines = filter$5(elms, isInlineTarget);\n      each$e(difference(selectedInlines, targetInlines), curry(setSelected, false));\n      each$e(difference(targetInlines, selectedInlines), curry(setSelected, true));\n    };\n    const safeRemoveCaretContainer = (editor, caret) => {\n      const caretValue = caret.get();\n      if (editor.selection.isCollapsed() && !editor.composing && caretValue) {\n        const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        if (CaretPosition.isTextPosition(pos) && !isAtZwsp(pos)) {\n          setCaretPosition(editor, removeAndReposition(caretValue, pos));\n          caret.set(null);\n        }\n      }\n    };\n    const renderInsideInlineCaret = (isInlineTarget, editor, caret, elms) => {\n      if (editor.selection.isCollapsed()) {\n        const inlines = filter$5(elms, isInlineTarget);\n        each$e(inlines, _inline => {\n          const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n          readLocation(isInlineTarget, editor.getBody(), pos).bind(location => renderCaretLocation(editor, caret, location));\n        });\n      }\n    };\n    const move$3 = (editor, caret, forward) => isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n    const moveWord = (forward, editor, _caret) => isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n    const setupSelectedState = editor => {\n      const caret = Cell(null);\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      editor.on('NodeChange', e => {\n        if (isInlineBoundariesEnabled(editor)) {\n          toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n          safeRemoveCaretContainer(editor, caret);\n          renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n        }\n      });\n      return caret;\n    };\n    const moveNextWord = curry(moveWord, true);\n    const movePrevWord = curry(moveWord, false);\n    const moveToLineEndPoint$2 = (editor, forward, caret) => {\n      if (isInlineBoundariesEnabled(editor)) {\n        const linePoint = getLineEndPoint(editor, forward).getOrThunk(() => {\n          const rng = editor.selection.getRng();\n          return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n        });\n        return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(loc => {\n          const outsideLoc = outside(loc);\n          return renderCaret(caret, outsideLoc).exists(pos => {\n            setCaretPosition(editor, pos);\n            return true;\n          });\n        });\n      } else {\n        return false;\n      }\n    };\n\n    const rangeFromPositions = (from, to) => {\n      const range = document.createRange();\n      range.setStart(from.container(), from.offset());\n      range.setEnd(to.container(), to.offset());\n      return range;\n    };\n    const hasOnlyTwoOrLessPositionsLeft = elm => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n      const normalizedFirstPos = normalizePosition(true, firstPos);\n      const normalizedLastPos = normalizePosition(false, lastPos);\n      return nextPosition(elm, normalizedFirstPos).forall(pos => pos.isEqual(normalizedLastPos));\n    }).getOr(true);\n    const setCaretLocation = (editor, caret) => location => renderCaret(caret, location).map(pos => () => setCaretPosition(editor, pos));\n    const deleteFromTo = (editor, caret, from, to) => {\n      const rootNode = editor.getBody();\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      editor.undoManager.ignore(() => {\n        editor.selection.setRng(rangeFromPositions(from, to));\n        execNativeDeleteCommand(editor);\n        readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).bind(setCaretLocation(editor, caret)).each(call);\n      });\n      editor.nodeChanged();\n    };\n    const rescope = (rootNode, node) => {\n      const parentBlock = getParentBlock$3(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    const backspaceDeleteCollapsed = (editor, caret, forward, from) => {\n      const rootNode = rescope(editor.getBody(), from.container());\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      const fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n      const location = fromLocation.bind(location => {\n        if (forward) {\n          return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none);\n        } else {\n          return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location))));\n        }\n      });\n      return location.map(setCaretLocation(editor, caret)).getOrThunk(() => {\n        const toPosition = navigate(forward, rootNode, from);\n        const toLocation = toPosition.bind(pos => readLocation(isInlineTarget$1, rootNode, pos));\n        return lift2(fromLocation, toLocation, () => findRootInline(isInlineTarget$1, rootNode, from).bind(elm => {\n          if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n            return Optional.some(() => {\n              deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n            });\n          } else {\n            return Optional.none();\n          }\n        })).getOrThunk(() => toLocation.bind(() => toPosition.map(to => {\n          return () => {\n            if (forward) {\n              deleteFromTo(editor, caret, from, to);\n            } else {\n              deleteFromTo(editor, caret, to, from);\n            }\n          };\n        })));\n      });\n    };\n    const backspaceDelete$4 = (editor, caret, forward) => {\n      if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n        const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return backspaceDeleteCollapsed(editor, caret, forward, from);\n      }\n      return Optional.none();\n    };\n\n    const hasMultipleChildren = elm => childNodesCount(elm) > 1;\n    const getParentsUntil = (editor, pred) => {\n      const rootElm = SugarElement.fromDom(editor.getBody());\n      const startElm = SugarElement.fromDom(editor.selection.getStart());\n      const parents = parentsAndSelf(startElm, rootElm);\n      return findIndex$2(parents, pred).fold(constant(parents), index => parents.slice(0, index));\n    };\n    const hasOnlyOneChild = elm => childNodesCount(elm) === 1;\n    const getParentInlinesUntilMultichildInline = editor => getParentsUntil(editor, elm => editor.schema.isBlock(name(elm)) || hasMultipleChildren(elm));\n    const getParentInlines = editor => getParentsUntil(editor, el => editor.schema.isBlock(name(el)));\n    const getFormatNodes = (editor, parentInlines) => {\n      const isFormatElement$1 = curry(isFormatElement, editor);\n      return bind$3(parentInlines, elm => isFormatElement$1(elm) ? [elm.dom] : []);\n    };\n    const getFormatNodesAtStart = editor => {\n      const parentInlines = getParentInlines(editor);\n      return getFormatNodes(editor, parentInlines);\n    };\n    const deleteLastPosition = (forward, editor, target, parentInlines) => {\n      const formatNodes = getFormatNodes(editor, parentInlines);\n      if (formatNodes.length === 0) {\n        deleteElement$2(editor, forward, target);\n      } else {\n        const pos = replaceWithCaretFormat(target.dom, formatNodes);\n        editor.selection.setRng(pos.toRange());\n      }\n    };\n    const deleteCaret$1 = (editor, forward) => {\n      const parentInlines = filter$5(getParentInlinesUntilMultichildInline(editor), hasOnlyOneChild);\n      return last$3(parentInlines).bind(target => {\n        const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n          return Optional.some(() => deleteLastPosition(forward, editor, target, parentInlines));\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    const isBrInEmptyElement = (editor, elm) => {\n      const parentElm = elm.parentElement;\n      return isBr$6(elm) && !isNull(parentElm) && editor.dom.isEmpty(parentElm);\n    };\n    const isEmptyCaret = elm => isEmptyCaretFormatElement(SugarElement.fromDom(elm));\n    const createCaretFormatAtStart = (editor, formatNodes) => {\n      const startElm = editor.selection.getStart();\n      const pos = isBrInEmptyElement(editor, startElm) || isEmptyCaret(startElm) ? replaceWithCaretFormat(startElm, formatNodes) : createCaretFormatAtStart$1(editor.selection.getRng(), formatNodes);\n      editor.selection.setRng(pos.toRange());\n    };\n    const updateCaretFormat = (editor, updateFormats) => {\n      const missingFormats = difference(updateFormats, getFormatNodesAtStart(editor));\n      if (missingFormats.length > 0) {\n        createCaretFormatAtStart(editor, missingFormats);\n      }\n    };\n    const rangeStartsAtTextContainer = rng => isText$a(rng.startContainer);\n    const rangeStartsAtStartOfTextContainer = rng => rng.startOffset === 0 && rangeStartsAtTextContainer(rng);\n    const rangeStartParentIsFormatElement = (editor, rng) => {\n      const startParent = rng.startContainer.parentElement;\n      return !isNull(startParent) && isFormatElement(editor, SugarElement.fromDom(startParent));\n    };\n    const rangeStartAndEndHaveSameParent = rng => {\n      const startParent = rng.startContainer.parentNode;\n      const endParent = rng.endContainer.parentNode;\n      return !isNull(startParent) && !isNull(endParent) && startParent.isEqualNode(endParent);\n    };\n    const rangeEndsAtEndOfEndContainer = rng => {\n      const endContainer = rng.endContainer;\n      return rng.endOffset === (isText$a(endContainer) ? endContainer.length : endContainer.childNodes.length);\n    };\n    const rangeEndsAtEndOfStartContainer = rng => rangeStartAndEndHaveSameParent(rng) && rangeEndsAtEndOfEndContainer(rng);\n    const rangeEndsAfterEndOfStartContainer = rng => !rng.endContainer.isEqualNode(rng.commonAncestorContainer);\n    const rangeEndsAtOrAfterEndOfStartContainer = rng => rangeEndsAtEndOfStartContainer(rng) || rangeEndsAfterEndOfStartContainer(rng);\n    const requiresDeleteRangeOverride = editor => {\n      const rng = editor.selection.getRng();\n      return rangeStartsAtStartOfTextContainer(rng) && rangeStartParentIsFormatElement(editor, rng) && rangeEndsAtOrAfterEndOfStartContainer(rng);\n    };\n    const deleteRange$1 = editor => {\n      if (requiresDeleteRangeOverride(editor)) {\n        const formatNodes = getFormatNodesAtStart(editor);\n        return Optional.some(() => {\n          execNativeDeleteCommand(editor);\n          updateCaretFormat(editor, formatNodes);\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const backspaceDelete$3 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : deleteRange$1(editor);\n    const hasAncestorInlineCaret = (elm, schema) => ancestor$1(elm, node => isCaretNode(node.dom), el => schema.isBlock(name(el)));\n    const hasAncestorInlineCaretAtStart = editor => hasAncestorInlineCaret(SugarElement.fromDom(editor.selection.getStart()), editor.schema);\n    const requiresRefreshCaretOverride = editor => {\n      const rng = editor.selection.getRng();\n      return rng.collapsed && (rangeStartsAtTextContainer(rng) || editor.dom.isEmpty(rng.startContainer)) && !hasAncestorInlineCaretAtStart(editor);\n    };\n    const refreshCaret = editor => {\n      if (requiresRefreshCaretOverride(editor)) {\n        createCaretFormatAtStart(editor, []);\n      }\n      return true;\n    };\n\n    const deleteElement = (editor, forward, element) => {\n      if (isNonNullable(element)) {\n        return Optional.some(() => {\n          editor._selectionOverrides.hideFakeCaret();\n          deleteElement$2(editor, forward, SugarElement.fromDom(element));\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const deleteCaret = (editor, forward) => {\n      const isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n      if (isNearMedia(fromPos)) {\n        return deleteElement(editor, forward, fromPos.getNode(!forward));\n      } else {\n        return Optional.from(normalizePosition(forward, fromPos)).filter(pos => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).bind(pos => deleteElement(editor, forward, pos.getNode(!forward)));\n      }\n    };\n    const deleteRange = (editor, forward) => {\n      const selectedNode = editor.selection.getNode();\n      return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n    };\n    const backspaceDelete$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n\n    const isEditable = target => closest$4(target, elm => isContentEditableTrue$3(elm.dom) || isContentEditableFalse$b(elm.dom)).exists(elm => isContentEditableTrue$3(elm.dom));\n    const parseIndentValue = value => toInt(value !== null && value !== void 0 ? value : '').getOr(0);\n    const getIndentStyleName = (useMargin, element) => {\n      const indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n      const suffix = get$7(element, 'direction') === 'rtl' ? '-right' : '-left';\n      return indentStyleName + suffix;\n    };\n    const indentElement = (dom, command, useMargin, value, unit, element) => {\n      const indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n      const parsedValue = parseIndentValue(dom.getStyle(element, indentStyleName));\n      if (command === 'outdent') {\n        const styleValue = Math.max(0, parsedValue - value);\n        dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n      } else {\n        const styleValue = parsedValue + value + unit;\n        dom.setStyle(element, indentStyleName, styleValue);\n      }\n    };\n    const validateBlocks = (editor, blocks) => forall(blocks, block => {\n      const indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n      const intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n      const contentEditable = editor.dom.getContentEditable(block.dom);\n      return contentEditable !== 'false' && intentValue > 0;\n    });\n    const canOutdent = editor => {\n      const blocks = getBlocksToIndent(editor);\n      return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n    };\n    const isListComponent = el => isList(el) || isListItem$1(el);\n    const parentIsListComponent = el => parent(el).exists(isListComponent);\n    const getBlocksToIndent = editor => filter$5(fromDom$1(editor.selection.getSelectedBlocks()), el => !isListComponent(el) && !parentIsListComponent(el) && isEditable(el));\n    const handle = (editor, command) => {\n      var _a, _b;\n      const {dom} = editor;\n      const indentation = getIndentation(editor);\n      const indentUnit = (_b = (_a = /[a-z%]+$/i.exec(indentation)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 'px';\n      const indentValue = parseIndentValue(indentation);\n      const useMargin = shouldIndentUseMargin(editor);\n      each$e(getBlocksToIndent(editor), block => {\n        indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n      });\n    };\n    const indent = editor => handle(editor, 'indent');\n    const outdent = editor => handle(editor, 'outdent');\n\n    const backspaceDelete$1 = editor => {\n      if (editor.selection.isCollapsed() && canOutdent(editor)) {\n        const dom = editor.dom;\n        const rng = editor.selection.getRng();\n        const pos = CaretPosition.fromRangeStart(rng);\n        const block = dom.getParent(rng.startContainer, dom.isBlock);\n        if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos, editor.schema)) {\n          return Optional.some(() => outdent(editor));\n        }\n      }\n      return Optional.none();\n    };\n\n    const findAction = (editor, caret, forward) => findMap([\n      backspaceDelete$1,\n      backspaceDelete$6,\n      backspaceDelete$7,\n      (editor, forward) => backspaceDelete$4(editor, caret, forward),\n      backspaceDelete$9,\n      backspaceDelete$a,\n      backspaceDelete$5,\n      backspaceDelete$2,\n      backspaceDelete$8,\n      backspaceDelete$3\n    ], item => item(editor, forward)).filter(_ => editor.selection.isEditable());\n    const deleteCommand = (editor, caret) => {\n      const result = findAction(editor, caret, false);\n      result.fold(() => {\n        if (editor.selection.isEditable()) {\n          execNativeDeleteCommand(editor);\n          paddEmptyBody(editor);\n        }\n      }, call);\n    };\n    const forwardDeleteCommand = (editor, caret) => {\n      const result = findAction(editor, caret, true);\n      result.fold(() => {\n        if (editor.selection.isEditable()) {\n          execNativeForwardDeleteCommand(editor);\n        }\n      }, call);\n    };\n    const setup$q = (editor, caret) => {\n      editor.addCommand('delete', () => {\n        deleteCommand(editor, caret);\n      });\n      editor.addCommand('forwardDelete', () => {\n        forwardDeleteCommand(editor, caret);\n      });\n    };\n\n    const SIGNIFICANT_MOVE = 5;\n    const LONGPRESS_DELAY = 400;\n    const getTouch = event => {\n      if (event.touches === undefined || event.touches.length !== 1) {\n        return Optional.none();\n      }\n      return Optional.some(event.touches[0]);\n    };\n    const isFarEnough = (touch, data) => {\n      const distX = Math.abs(touch.clientX - data.x);\n      const distY = Math.abs(touch.clientY - data.y);\n      return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n    };\n    const setup$p = editor => {\n      const startData = value$2();\n      const longpressFired = Cell(false);\n      const debounceLongpress = last$1(e => {\n        editor.dispatch('longpress', {\n          ...e,\n          type: 'longpress'\n        });\n        longpressFired.set(true);\n      }, LONGPRESS_DELAY);\n      editor.on('touchstart', e => {\n        getTouch(e).each(touch => {\n          debounceLongpress.cancel();\n          const data = {\n            x: touch.clientX,\n            y: touch.clientY,\n            target: e.target\n          };\n          debounceLongpress.throttle(e);\n          longpressFired.set(false);\n          startData.set(data);\n        });\n      }, true);\n      editor.on('touchmove', e => {\n        debounceLongpress.cancel();\n        getTouch(e).each(touch => {\n          startData.on(data => {\n            if (isFarEnough(touch, data)) {\n              startData.clear();\n              longpressFired.set(false);\n              editor.dispatch('longpresscancel');\n            }\n          });\n        });\n      }, true);\n      editor.on('touchend touchcancel', e => {\n        debounceLongpress.cancel();\n        if (e.type === 'touchcancel') {\n          return;\n        }\n        startData.get().filter(data => data.target.isEqualNode(e.target)).each(() => {\n          if (longpressFired.get()) {\n            e.preventDefault();\n          } else {\n            editor.dispatch('tap', {\n              ...e,\n              type: 'tap'\n            });\n          }\n        });\n      }, true);\n    };\n\n    const isBlockElement = (blockElements, node) => has$2(blockElements, node.nodeName);\n    const isValidTarget = (schema, node) => {\n      if (isText$a(node)) {\n        return true;\n      } else if (isElement$6(node)) {\n        return !isBlockElement(schema.getBlockElements(), node) && !isBookmarkNode$1(node) && !isTransparentBlock(schema, node) && !isNonHtmlElementRoot(node);\n      } else {\n        return false;\n      }\n    };\n    const hasBlockParent = (blockElements, root, node) => {\n      return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), elm => {\n        return isBlockElement(blockElements, elm.dom);\n      });\n    };\n    const shouldRemoveTextNode = (blockElements, node) => {\n      if (isText$a(node)) {\n        if (node.data.length === 0) {\n          return true;\n        } else if (/^\\s+$/.test(node.data)) {\n          return !node.nextSibling || isBlockElement(blockElements, node.nextSibling) || isNonHtmlElementRoot(node.nextSibling);\n        }\n      }\n      return false;\n    };\n    const createRootBlock = editor => editor.dom.create(getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n    const addRootBlocks = editor => {\n      const dom = editor.dom, selection = editor.selection;\n      const schema = editor.schema;\n      const blockElements = schema.getBlockElements();\n      const startNode = selection.getStart();\n      const rootNode = editor.getBody();\n      let rootBlockNode;\n      let tempNode;\n      let wrapped = false;\n      const forcedRootBlock = getForcedRootBlock(editor);\n      if (!startNode || !isElement$6(startNode)) {\n        return;\n      }\n      const rootNodeName = rootNode.nodeName.toLowerCase();\n      if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, startNode)) {\n        return;\n      }\n      const rng = selection.getRng();\n      const {startContainer, startOffset, endContainer, endOffset} = rng;\n      const restoreSelection = hasFocus(editor);\n      let node = rootNode.firstChild;\n      while (node) {\n        if (isElement$6(node)) {\n          updateElement(schema, node);\n        }\n        if (isValidTarget(schema, node)) {\n          if (shouldRemoveTextNode(blockElements, node)) {\n            tempNode = node;\n            node = node.nextSibling;\n            dom.remove(tempNode);\n            continue;\n          }\n          if (!rootBlockNode) {\n            rootBlockNode = createRootBlock(editor);\n            rootNode.insertBefore(rootBlockNode, node);\n            wrapped = true;\n          }\n          tempNode = node;\n          node = node.nextSibling;\n          rootBlockNode.appendChild(tempNode);\n        } else {\n          rootBlockNode = null;\n          node = node.nextSibling;\n        }\n      }\n      if (wrapped && restoreSelection) {\n        rng.setStart(startContainer, startOffset);\n        rng.setEnd(endContainer, endOffset);\n        selection.setRng(rng);\n        editor.nodeChanged();\n      }\n    };\n    const insertEmptyLine = (editor, root, insertBlock) => {\n      const block = SugarElement.fromDom(createRootBlock(editor));\n      const br = createPaddingBr();\n      append$1(block, br);\n      insertBlock(root, block);\n      const rng = document.createRange();\n      rng.setStartBefore(br.dom);\n      rng.setEndBefore(br.dom);\n      return rng;\n    };\n    const setup$o = editor => {\n      editor.on('NodeChange', curry(addRootBlocks, editor));\n    };\n\n    const hasClass = checkClassName => node => (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n    const replaceMatchWithSpan = (editor, content, cls) => {\n      return function (match) {\n        const args = arguments, index = args[args.length - 2];\n        const prevChar = index > 0 ? content.charAt(index - 1) : '';\n        if (prevChar === '\"') {\n          return match;\n        }\n        if (prevChar === '>') {\n          const findStartTagIndex = content.lastIndexOf('<', index);\n          if (findStartTagIndex !== -1) {\n            const tagHtml = content.substring(findStartTagIndex, index);\n            if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n              return match;\n            }\n          }\n        }\n        return '<span class=\"' + cls + '\" data-mce-content=\"' + editor.dom.encode(args[0]) + '\">' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '</span>';\n      };\n    };\n    const convertRegExpsToNonEditable = (editor, nonEditableRegExps, e) => {\n      let i = nonEditableRegExps.length, content = e.content;\n      if (e.format === 'raw') {\n        return;\n      }\n      while (i--) {\n        content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));\n      }\n      e.content = content;\n    };\n    const setup$n = editor => {\n      const contentEditableAttrName = 'contenteditable';\n      const editClass = ' ' + Tools.trim(getEditableClass(editor)) + ' ';\n      const nonEditClass = ' ' + Tools.trim(getNonEditableClass(editor)) + ' ';\n      const hasEditClass = hasClass(editClass);\n      const hasNonEditClass = hasClass(nonEditClass);\n      const nonEditableRegExps = getNonEditableRegExps(editor);\n      if (nonEditableRegExps.length > 0) {\n        editor.on('BeforeSetContent', e => {\n          convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n        });\n      }\n      editor.parser.addAttributeFilter('class', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (hasEditClass(node)) {\n            node.attr(contentEditableAttrName, 'true');\n          } else if (hasNonEditClass(node)) {\n            node.attr(contentEditableAttrName, 'false');\n          }\n        }\n      });\n      editor.serializer.addAttributeFilter(contentEditableAttrName, nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          if (!hasEditClass(node) && !hasNonEditClass(node)) {\n            continue;\n          }\n          if (nonEditableRegExps.length > 0 && node.attr('data-mce-content')) {\n            node.name = '#text';\n            node.type = 3;\n            node.raw = true;\n            node.value = node.attr('data-mce-content');\n          } else {\n            node.attr(contentEditableAttrName, null);\n          }\n        }\n      });\n    };\n\n    const findBlockCaretContainer = editor => descendant$1(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(elm => elm.dom).getOrNull();\n    const showBlockCaretContainer = (editor, blockCaretContainer) => {\n      if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n        showCaretContainerBlock(blockCaretContainer);\n        editor.selection.setRng(editor.selection.getRng());\n        editor.selection.scrollIntoView(blockCaretContainer);\n      }\n    };\n    const handleBlockContainer = (editor, e) => {\n      const blockCaretContainer = findBlockCaretContainer(editor);\n      if (!blockCaretContainer) {\n        return;\n      }\n      if (e.type === 'compositionstart') {\n        e.preventDefault();\n        e.stopPropagation();\n        showBlockCaretContainer(editor, blockCaretContainer);\n        return;\n      }\n      if (hasContent(blockCaretContainer)) {\n        showBlockCaretContainer(editor, blockCaretContainer);\n        editor.undoManager.add();\n      }\n    };\n    const setup$m = editor => {\n      editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n    };\n\n    const isContentEditableFalse$3 = isContentEditableFalse$b;\n    const moveToCeFalseHorizontally = (direction, editor, range) => moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$3);\n    const moveToCeFalseVertically = (direction, editor, range) => {\n      const isBefore = caretPosition => isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n      const isAfter = caretPosition => isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n      return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$3);\n    };\n    const createTextBlock = editor => {\n      const textBlock = editor.dom.create(getForcedRootBlock(editor));\n      textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\n      return textBlock;\n    };\n    const exitPreBlock = (editor, direction, range) => {\n      const caretWalker = CaretWalker(editor.getBody());\n      const getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n      if (range.collapsed) {\n        const pre = editor.dom.getParent(range.startContainer, 'PRE');\n        if (!pre) {\n          return;\n        }\n        const caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n        if (!caretPos) {\n          const newBlock = SugarElement.fromDom(createTextBlock(editor));\n          if (direction === 1) {\n            after$4(SugarElement.fromDom(pre), newBlock);\n          } else {\n            before$3(SugarElement.fromDom(pre), newBlock);\n          }\n          editor.selection.select(newBlock.dom, true);\n          editor.selection.collapse();\n        }\n      }\n    };\n    const getHorizontalRange = (editor, forward) => {\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const range = editor.selection.getRng();\n      return moveToCeFalseHorizontally(direction, editor, range).orThunk(() => {\n        exitPreBlock(editor, direction, range);\n        return Optional.none();\n      });\n    };\n    const getVerticalRange = (editor, down) => {\n      const direction = down ? 1 : -1;\n      const range = editor.selection.getRng();\n      return moveToCeFalseVertically(direction, editor, range).orThunk(() => {\n        exitPreBlock(editor, direction, range);\n        return Optional.none();\n      });\n    };\n    const flipDirection = (selection, forward) => {\n      const elm = forward ? selection.getEnd(true) : selection.getStart(true);\n      return isRtl(elm) ? !forward : forward;\n    };\n    const moveH$2 = (editor, forward) => getHorizontalRange(editor, flipDirection(editor.selection, forward)).exists(newRange => {\n      moveToRange(editor, newRange);\n      return true;\n    });\n    const moveV$4 = (editor, down) => getVerticalRange(editor, down).exists(newRange => {\n      moveToRange(editor, newRange);\n      return true;\n    });\n    const moveToLineEndPoint$1 = (editor, forward) => {\n      const isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n      return moveToLineEndPoint$3(editor, forward, isCefPosition);\n    };\n    const selectToEndPoint = (editor, forward) => getEdgeCefPosition(editor, !forward).map(pos => {\n      const rng = pos.toRange();\n      const curRng = editor.selection.getRng();\n      if (forward) {\n        rng.setStart(curRng.startContainer, curRng.startOffset);\n      } else {\n        rng.setEnd(curRng.endContainer, curRng.endOffset);\n      }\n      return rng;\n    }).exists(rng => {\n      moveToRange(editor, rng);\n      return true;\n    });\n\n    const isTarget = node => contains$2(['figcaption'], name(node));\n    const getClosestTargetBlock = (pos, root, schema) => {\n      const isRoot = curry(eq, root);\n      return closest$4(SugarElement.fromDom(pos.container()), el => schema.isBlock(name(el)), isRoot).filter(isTarget);\n    };\n    const isAtFirstOrLastLine = (root, forward, pos) => forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n    const moveCaretToNewEmptyLine = (editor, forward) => {\n      const root = SugarElement.fromDom(editor.getBody());\n      const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return getClosestTargetBlock(pos, root, editor.schema).exists(() => {\n        if (isAtFirstOrLastLine(root, forward, pos)) {\n          const insertFn = forward ? append$1 : prepend;\n          const rng = insertEmptyLine(editor, root, insertFn);\n          editor.selection.setRng(rng);\n          return true;\n        } else {\n          return false;\n        }\n      });\n    };\n    const moveV$3 = (editor, forward) => {\n      if (editor.selection.isCollapsed()) {\n        return moveCaretToNewEmptyLine(editor, forward);\n      } else {\n        return false;\n      }\n    };\n\n    const moveUp = (editor, details, summary) => {\n      const rng = editor.selection.getRng();\n      const pos = CaretPosition.fromRangeStart(rng);\n      const root = editor.getBody();\n      if (root.firstChild === details && isAtFirstLine(summary, pos)) {\n        editor.execCommand('InsertNewBlockBefore');\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const moveDown = (editor, details) => {\n      const rng = editor.selection.getRng();\n      const pos = CaretPosition.fromRangeStart(rng);\n      const root = editor.getBody();\n      if (root.lastChild === details && isAtLastLine(details, pos)) {\n        editor.execCommand('InsertNewBlockAfter');\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const move$2 = (editor, forward) => {\n      if (forward) {\n        return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'details')).map(details => moveDown(editor, details)).getOr(false);\n      } else {\n        return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'summary')).bind(summary => Optional.from(editor.dom.getParent(summary, 'details')).map(details => moveUp(editor, details, summary))).getOr(false);\n      }\n    };\n    const moveV$2 = (editor, forward) => move$2(editor, forward);\n\n    const baseKeyPattern = {\n      shiftKey: false,\n      altKey: false,\n      ctrlKey: false,\n      metaKey: false,\n      keyCode: 0\n    };\n    const defaultPatterns = patterns => map$3(patterns, pattern => ({\n      ...baseKeyPattern,\n      ...pattern\n    }));\n    const defaultDelayedPatterns = patterns => map$3(patterns, pattern => ({\n      ...baseKeyPattern,\n      ...pattern\n    }));\n    const matchesEvent = (pattern, evt) => evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n    const match$1 = (patterns, evt) => bind$3(defaultPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n    const matchDelayed = (patterns, evt) => bind$3(defaultDelayedPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n    const action = (f, ...x) => () => f.apply(null, x);\n    const execute = (patterns, evt) => find$2(match$1(patterns, evt), pattern => pattern.action());\n    const executeWithDelayedAction = (patterns, evt) => findMap(matchDelayed(patterns, evt), pattern => pattern.action());\n\n    const moveH$1 = (editor, forward) => {\n      const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      const range = editor.selection.getRng();\n      return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    const moveV$1 = (editor, down) => {\n      const direction = down ? 1 : -1;\n      const range = editor.selection.getRng();\n      return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n        moveToRange(editor, newRange);\n        return true;\n      });\n    };\n    const moveToLineEndPoint = (editor, forward) => {\n      const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n      return moveToLineEndPoint$3(editor, forward, isNearMedia);\n    };\n\n    const adt = Adt.generate([\n      { none: ['current'] },\n      { first: ['current'] },\n      {\n        middle: [\n          'current',\n          'target'\n        ]\n      },\n      { last: ['current'] }\n    ]);\n    const none = current => adt.none(current);\n    const CellLocation = {\n      ...adt,\n      none\n    };\n\n    const firstLayer = (scope, selector) => {\n      return filterFirstLayer(scope, selector, always);\n    };\n    const filterFirstLayer = (scope, selector, predicate) => {\n      return bind$3(children$1(scope), x => {\n        if (is$1(x, selector)) {\n          return predicate(x) ? [x] : [];\n        } else {\n          return filterFirstLayer(x, selector, predicate);\n        }\n      });\n    };\n\n    const lookup$1 = (tags, element, isRoot = never) => {\n      if (isRoot(element)) {\n        return Optional.none();\n      }\n      if (contains$2(tags, name(element))) {\n        return Optional.some(element);\n      }\n      const isRootOrUpperTable = elm => is$1(elm, 'table') || isRoot(elm);\n      return ancestor$3(element, tags.join(','), isRootOrUpperTable);\n    };\n    const cell = (element, isRoot) => lookup$1([\n      'td',\n      'th'\n    ], element, isRoot);\n    const cells = ancestor => firstLayer(ancestor, 'th,td');\n    const table = (element, isRoot) => closest$3(element, 'table', isRoot);\n\n    const walk = (all, current, index, direction, isEligible = always) => {\n      const forwards = direction === 1;\n      if (!forwards && index <= 0) {\n        return CellLocation.first(all[0]);\n      } else if (forwards && index >= all.length - 1) {\n        return CellLocation.last(all[all.length - 1]);\n      } else {\n        const newIndex = index + direction;\n        const elem = all[newIndex];\n        return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all, current, newIndex, direction, isEligible);\n      }\n    };\n    const detect = (current, isRoot) => {\n      return table(current, isRoot).bind(table => {\n        const all = cells(table);\n        const index = findIndex$2(all, x => eq(current, x));\n        return index.map(index => ({\n          index,\n          all\n        }));\n      });\n    };\n    const next = (current, isEligible, isRoot) => {\n      const detection = detect(current, isRoot);\n      return detection.fold(() => {\n        return CellLocation.none(current);\n      }, info => {\n        return walk(info.all, current, info.index, 1, isEligible);\n      });\n    };\n    const prev = (current, isEligible, isRoot) => {\n      const detection = detect(current, isRoot);\n      return detection.fold(() => {\n        return CellLocation.none();\n      }, info => {\n        return walk(info.all, current, info.index, -1, isEligible);\n      });\n    };\n\n    const deflate = (rect, delta) => ({\n      left: rect.left - delta,\n      top: rect.top - delta,\n      right: rect.right + delta * 2,\n      bottom: rect.bottom + delta * 2,\n      width: rect.width + delta,\n      height: rect.height + delta\n    });\n    const getCorners = (getYAxisValue, tds) => bind$3(tds, td => {\n      const rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n      return [\n        {\n          x: rect.left,\n          y: getYAxisValue(rect),\n          cell: td\n        },\n        {\n          x: rect.right,\n          y: getYAxisValue(rect),\n          cell: td\n        }\n      ];\n    });\n    const findClosestCorner = (corners, x, y) => foldl(corners, (acc, newCorner) => acc.fold(() => Optional.some(newCorner), oldCorner => {\n      const oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n      const newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n      return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n    }), Optional.none());\n    const getClosestCell = (getYAxisValue, isTargetCorner, table, x, y) => {\n      const cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(e => e.dom);\n      const corners = filter$5(getCorners(getYAxisValue, cells), corner => isTargetCorner(corner, y));\n      return findClosestCorner(corners, x, y).map(corner => corner.cell);\n    };\n    const getBottomValue = rect => rect.bottom;\n    const getTopValue = rect => rect.top;\n    const isAbove = (corner, y) => corner.y < y;\n    const isBelow = (corner, y) => corner.y > y;\n    const getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n    const getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n    const findClosestPositionInAboveCell = (table, pos) => head(pos.getClientRects()).bind(rect => getClosestCellAbove(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getLastLinePositions(cell), pos));\n    const findClosestPositionInBelowCell = (table, pos) => last$3(pos.getClientRects()).bind(rect => getClosestCellBelow(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getFirstLinePositions(cell), pos));\n\n    const hasNextBreak = (getPositionsUntil, scope, lineInfo) => lineInfo.breakAt.exists(breakPos => getPositionsUntil(scope, breakPos).breakAt.isSome());\n    const startsWithWrapBreak = lineInfo => lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n    const startsWithBrBreak = lineInfo => lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n    const isAtTableCellLine = (getPositionsUntil, scope, pos) => {\n      const lineInfo = getPositionsUntil(scope, pos);\n      if (startsWithWrapBreak(lineInfo) || !isBr$6(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n        return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n      } else {\n        return lineInfo.breakAt.isNone();\n      }\n    };\n    const isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n    const isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n    const isCaretAtStartOrEndOfTable = (forward, rng, table) => {\n      const caretPos = CaretPosition.fromRangeStart(rng);\n      return positionIn(!forward, table).exists(pos => pos.isEqual(caretPos));\n    };\n    const navigateHorizontally = (editor, forward, table, _td) => {\n      const rng = editor.selection.getRng();\n      const direction = forward ? 1 : -1;\n      if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n        showCaret(direction, editor, table, !forward, false).each(newRng => {\n          moveToRange(editor, newRng);\n        });\n        return true;\n      }\n      return false;\n    };\n    const getClosestAbovePosition = (root, table, start) => findClosestPositionInAboveCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left))).getOr(CaretPosition.before(table));\n    const getClosestBelowPosition = (root, table, start) => findClosestPositionInBelowCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left))).getOr(CaretPosition.after(table));\n    const getTable = (previous, pos) => {\n      const node = pos.getNode(previous);\n      return isTable$2(node) ? Optional.some(node) : Optional.none();\n    };\n    const renderBlock = (down, editor, table) => {\n      editor.undoManager.transact(() => {\n        const insertFn = down ? after$4 : before$3;\n        const rng = insertEmptyLine(editor, SugarElement.fromDom(table), insertFn);\n        moveToRange(editor, rng);\n      });\n    };\n    const moveCaret = (editor, down, pos) => {\n      const table = down ? getTable(true, pos) : getTable(false, pos);\n      const last = down === false;\n      table.fold(() => moveToRange(editor, pos.toRange()), table => positionIn(last, editor.getBody()).filter(lastPos => lastPos.isEqual(pos)).fold(() => moveToRange(editor, pos.toRange()), _ => renderBlock(down, editor, table)));\n    };\n    const navigateVertically = (editor, down, table, td) => {\n      const rng = editor.selection.getRng();\n      const pos = CaretPosition.fromRangeStart(rng);\n      const root = editor.getBody();\n      if (!down && isAtFirstTableCellLine(td, pos)) {\n        const newPos = getClosestAbovePosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else if (down && isAtLastTableCellLine(td, pos)) {\n        const newPos = getClosestBelowPosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const move$1 = (editor, forward, mover) => Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(td => Optional.from(editor.dom.getParent(td, 'table')).map(table => mover(editor, forward, table, td))).getOr(false);\n    const moveH = (editor, forward) => move$1(editor, forward, navigateHorizontally);\n    const moveV = (editor, forward) => move$1(editor, forward, navigateVertically);\n    const getCellFirstCursorPosition = cell => {\n      const selection = SimSelection.exact(cell, 0, cell, 0);\n      return toNative(selection);\n    };\n    const tabGo = (editor, isRoot, cell) => {\n      return cell.fold(Optional.none, Optional.none, (_current, next) => {\n        return first(next).map(cell => {\n          return getCellFirstCursorPosition(cell);\n        });\n      }, current => {\n        editor.execCommand('mceTableInsertRowAfter');\n        return tabForward(editor, isRoot, current);\n      });\n    };\n    const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isEditable$2));\n    const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isEditable$2));\n    const handleTab = (editor, forward) => {\n      const rootElements = [\n        'table',\n        'li',\n        'dl'\n      ];\n      const body = SugarElement.fromDom(editor.getBody());\n      const isRoot = element => {\n        const name$1 = name(element);\n        return eq(element, body) || contains$2(rootElements, name$1);\n      };\n      const rng = editor.selection.getRng();\n      const container = SugarElement.fromDom(!forward ? rng.startContainer : rng.endContainer);\n      return cell(container, isRoot).map(cell => {\n        table(cell, isRoot).each(table => {\n          editor.model.table.clearSelectedCells(table.dom);\n        });\n        editor.selection.collapse(!forward);\n        const navigation = !forward ? tabBackward : tabForward;\n        const rng = navigation(editor, isRoot, cell);\n        rng.each(range => {\n          editor.selection.setRng(range);\n        });\n        return true;\n      }).getOr(false);\n    };\n\n    const executeKeydownOverride$4 = (editor, caret, evt) => {\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      execute([\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH$2, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH$2, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$4, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$4, editor, true)\n        },\n        ...isMac ? [\n          {\n            keyCode: VK.UP,\n            action: action(selectToEndPoint, editor, false),\n            metaKey: true,\n            shiftKey: true\n          },\n          {\n            keyCode: VK.DOWN,\n            action: action(selectToEndPoint, editor, true),\n            metaKey: true,\n            shiftKey: true\n          }\n        ] : [],\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV, editor, true)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$2, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$2, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(moveH$1, editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(moveH$1, editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$1, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$1, editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: action(move$3, editor, caret, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: action(move$3, editor, caret, false)\n        },\n        {\n          keyCode: VK.RIGHT,\n          ctrlKey: !isMac,\n          altKey: isMac,\n          action: action(moveNextWord, editor, caret)\n        },\n        {\n          keyCode: VK.LEFT,\n          ctrlKey: !isMac,\n          altKey: isMac,\n          action: action(movePrevWord, editor, caret)\n        },\n        {\n          keyCode: VK.UP,\n          action: action(moveV$3, editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: action(moveV$3, editor, true)\n        }\n      ], evt).each(_ => {\n        evt.preventDefault();\n      });\n    };\n    const setup$l = (editor, caret) => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$4(editor, caret, evt);\n        }\n      });\n    };\n\n    const point = (container, offset) => ({\n      container,\n      offset\n    });\n\n    const DOM$7 = DOMUtils.DOM;\n    const alwaysNext = startNode => node => startNode === node ? -1 : 0;\n    const isBoundary = dom => node => dom.isBlock(node) || contains$2([\n      'BR',\n      'IMG',\n      'HR',\n      'INPUT'\n    ], node.nodeName) || dom.getContentEditable(node) === 'false';\n    const textBefore = (node, offset, rootNode) => {\n      if (isText$a(node) && offset >= 0) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, prev.container.data.length));\n      }\n    };\n    const textAfter = (node, offset, rootNode) => {\n      if (isText$a(node) && offset >= node.length) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, 0));\n      }\n    };\n    const scanLeft = (node, offset, rootNode) => {\n      if (!isText$a(node)) {\n        return Optional.none();\n      }\n      const text = node.data;\n      if (offset >= 0 && offset <= text.length) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(prev => {\n          const prevText = prev.container.data;\n          return scanLeft(prev.container, offset + prevText.length, rootNode);\n        });\n      }\n    };\n    const scanRight = (node, offset, rootNode) => {\n      if (!isText$a(node)) {\n        return Optional.none();\n      }\n      const text = node.data;\n      if (offset <= text.length) {\n        return Optional.some(point(node, offset));\n      } else {\n        const textSeeker = TextSeeker(DOM$7);\n        return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(next => scanRight(next.container, offset - text.length, rootNode));\n      }\n    };\n    const repeatLeft = (dom, node, offset, process, rootNode) => {\n      const search = TextSeeker(dom, isBoundary(dom));\n      return Optional.from(search.backwards(node, offset, process, rootNode));\n    };\n\n    const isValidTextRange = rng => rng.collapsed && isText$a(rng.startContainer);\n    const getText = rng => trim$2(rng.toString().replace(/\\u00A0/g, ' '));\n    const isWhitespace = chr => chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n\n    const stripTrigger = (text, trigger) => text.substring(trigger.length);\n    const findTrigger = (text, index, trigger) => {\n      let i;\n      const firstChar = trigger.charAt(0);\n      for (i = index - 1; i >= 0; i--) {\n        const char = text.charAt(i);\n        if (isWhitespace(char)) {\n          return Optional.none();\n        }\n        if (firstChar === char && contains$1(text, trigger, i, index)) {\n          break;\n        }\n      }\n      return Optional.some(i);\n    };\n    const findStart = (dom, initRange, trigger, minChars = 0) => {\n      if (!isValidTextRange(initRange)) {\n        return Optional.none();\n      }\n      const buffer = {\n        text: '',\n        offset: 0\n      };\n      const findTriggerIndex = (element, offset, text) => {\n        buffer.text = text + buffer.text;\n        buffer.offset += offset;\n        return findTrigger(buffer.text, buffer.offset, trigger).getOr(offset);\n      };\n      const root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n      return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerIndex, root).bind(spot => {\n        const range = initRange.cloneRange();\n        range.setStart(spot.container, spot.offset);\n        range.setEnd(initRange.endContainer, initRange.endOffset);\n        if (range.collapsed) {\n          return Optional.none();\n        }\n        const text = getText(range);\n        const triggerIndex = text.lastIndexOf(trigger);\n        if (triggerIndex !== 0 || stripTrigger(text, trigger).length < minChars) {\n          return Optional.none();\n        } else {\n          return Optional.some({\n            text: stripTrigger(text, trigger),\n            range,\n            trigger\n          });\n        }\n      });\n    };\n    const getContext = (dom, initRange, trigger, minChars = 0) => detect$1(SugarElement.fromDom(initRange.startContainer)).fold(() => findStart(dom, initRange, trigger, minChars), elm => {\n      const range = dom.createRng();\n      range.selectNode(elm.dom);\n      const text = getText(range);\n      return Optional.some({\n        range,\n        text: stripTrigger(text, trigger),\n        trigger\n      });\n    });\n\n    const isText$1 = node => node.nodeType === TEXT;\n    const isElement = node => node.nodeType === ELEMENT;\n    const toLast = node => {\n      if (isText$1(node)) {\n        return point(node, node.data.length);\n      } else {\n        const children = node.childNodes;\n        return children.length > 0 ? toLast(children[children.length - 1]) : point(node, children.length);\n      }\n    };\n    const toLeaf = (node, offset) => {\n      const children = node.childNodes;\n      if (children.length > 0 && offset < children.length) {\n        return toLeaf(children[offset], 0);\n      } else if (children.length > 0 && isElement(node) && children.length === offset) {\n        return toLast(children[children.length - 1]);\n      } else {\n        return point(node, offset);\n      }\n    };\n\n    const isPreviousCharContent = (dom, leaf) => {\n      var _a;\n      const root = (_a = dom.getParent(leaf.container, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      return repeatLeft(dom, leaf.container, leaf.offset, (_element, offset) => offset === 0 ? -1 : offset, root).filter(spot => {\n        const char = spot.container.data.charAt(spot.offset - 1);\n        return !isWhitespace(char);\n      }).isSome();\n    };\n    const isStartOfWord = dom => rng => {\n      const leaf = toLeaf(rng.startContainer, rng.startOffset);\n      return !isPreviousCharContent(dom, leaf);\n    };\n    const getTriggerContext = (dom, initRange, database) => findMap(database.triggers, trigger => getContext(dom, initRange, trigger));\n    const lookup = (editor, getDatabase) => {\n      const database = getDatabase();\n      const rng = editor.selection.getRng();\n      return getTriggerContext(editor.dom, rng, database).bind(context => lookupWithContext(editor, getDatabase, context));\n    };\n    const lookupWithContext = (editor, getDatabase, context, fetchOptions = {}) => {\n      var _a;\n      const database = getDatabase();\n      const rng = editor.selection.getRng();\n      const startText = (_a = rng.startContainer.nodeValue) !== null && _a !== void 0 ? _a : '';\n      const autocompleters = filter$5(database.lookupByTrigger(context.trigger), autocompleter => context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(() => isStartOfWord(editor.dom))(context.range, startText, context.text));\n      if (autocompleters.length === 0) {\n        return Optional.none();\n      }\n      const lookupData = Promise.all(map$3(autocompleters, ac => {\n        const fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n        return fetchResult.then(results => ({\n          matchText: context.text,\n          items: results,\n          columns: ac.columns,\n          onAction: ac.onAction,\n          highlightOn: ac.highlightOn\n        }));\n      }));\n      return Optional.some({\n        lookupData,\n        context\n      });\n    };\n\n    var SimpleResultType;\n    (function (SimpleResultType) {\n      SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n      SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n    }(SimpleResultType || (SimpleResultType = {})));\n    const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n    const partition = results => {\n      const values = [];\n      const errors = [];\n      each$e(results, obj => {\n        fold$1(obj, err => errors.push(err), val => values.push(val));\n      });\n      return {\n        values,\n        errors\n      };\n    };\n    const mapError = (res, f) => {\n      if (res.stype === SimpleResultType.Error) {\n        return {\n          stype: SimpleResultType.Error,\n          serror: f(res.serror)\n        };\n      } else {\n        return res;\n      }\n    };\n    const map = (res, f) => {\n      if (res.stype === SimpleResultType.Value) {\n        return {\n          stype: SimpleResultType.Value,\n          svalue: f(res.svalue)\n        };\n      } else {\n        return res;\n      }\n    };\n    const bind$1 = (res, f) => {\n      if (res.stype === SimpleResultType.Value) {\n        return f(res.svalue);\n      } else {\n        return res;\n      }\n    };\n    const bindError = (res, f) => {\n      if (res.stype === SimpleResultType.Error) {\n        return f(res.serror);\n      } else {\n        return res;\n      }\n    };\n    const svalue = v => ({\n      stype: SimpleResultType.Value,\n      svalue: v\n    });\n    const serror = e => ({\n      stype: SimpleResultType.Error,\n      serror: e\n    });\n    const toResult = res => fold$1(res, Result.error, Result.value);\n    const fromResult = res => res.fold(serror, svalue);\n    const SimpleResult = {\n      fromResult,\n      toResult,\n      svalue,\n      partition,\n      serror,\n      bind: bind$1,\n      bindError,\n      map,\n      mapError,\n      fold: fold$1\n    };\n\n    const formatObj = input => {\n      return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n    };\n    const formatErrors = errors => {\n      const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n          path: [],\n          getErrorInfo: constant('... (only showing first ten failures)')\n        }]) : errors;\n      return map$3(es, e => {\n        return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n      });\n    };\n\n    const nu = (path, getErrorInfo) => {\n      return SimpleResult.serror([{\n          path,\n          getErrorInfo\n        }]);\n    };\n    const missingRequired = (path, key, obj) => nu(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n    const missingKey = (path, key) => nu(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n    const missingBranch = (path, branches, branch) => nu(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n    const custom = (path, err) => nu(path, constant(err));\n\n    const chooseFrom = (path, input, branches, ch) => {\n      const fields = get$a(branches, ch);\n      return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n    };\n    const choose$1 = (key, branches) => {\n      const extract = (path, input) => {\n        const choice = get$a(input, key);\n        return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n      };\n      const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n      return {\n        extract,\n        toString\n      };\n    };\n\n    const shallow = (old, nu) => {\n      return nu;\n    };\n    const deep = (old, nu) => {\n      const bothObjects = isPlainObject(old) && isPlainObject(nu);\n      return bothObjects ? deepMerge(old, nu) : nu;\n    };\n    const baseMerge = merger => {\n      return (...objects) => {\n        if (objects.length === 0) {\n          throw new Error(`Can't merge zero objects`);\n        }\n        const ret = {};\n        for (let j = 0; j < objects.length; j++) {\n          const curObject = objects[j];\n          for (const key in curObject) {\n            if (has$2(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    const deepMerge = baseMerge(deep);\n    const merge = baseMerge(shallow);\n\n    const required = () => ({\n      tag: 'required',\n      process: {}\n    });\n    const defaultedThunk = fallbackThunk => ({\n      tag: 'defaultedThunk',\n      process: fallbackThunk\n    });\n    const defaulted$1 = fallback => defaultedThunk(constant(fallback));\n    const asOption = () => ({\n      tag: 'option',\n      process: {}\n    });\n\n    const mergeValues = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n    const mergeErrors = errors => compose(SimpleResult.serror, flatten)(errors);\n    const consolidateObj = (objects, base) => {\n      const partition = SimpleResult.partition(objects);\n      return partition.errors.length > 0 ? mergeErrors(partition.errors) : mergeValues(partition.values, base);\n    };\n    const consolidateArr = objects => {\n      const partitions = SimpleResult.partition(objects);\n      return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : SimpleResult.svalue(partitions.values);\n    };\n    const ResultCombine = {\n      consolidateObj,\n      consolidateArr\n    };\n\n    const field$1 = (key, newKey, presence, prop) => ({\n      tag: 'field',\n      key,\n      newKey,\n      presence,\n      prop\n    });\n    const customField$1 = (newKey, instantiator) => ({\n      tag: 'custom',\n      newKey,\n      instantiator\n    });\n    const fold = (value, ifField, ifCustom) => {\n      switch (value.tag) {\n      case 'field':\n        return ifField(value.key, value.newKey, value.presence, value.prop);\n      case 'custom':\n        return ifCustom(value.newKey, value.instantiator);\n      }\n    };\n\n    const value = validator => {\n      const extract = (path, val) => {\n        return SimpleResult.bindError(validator(val), err => custom(path, err));\n      };\n      const toString = constant('val');\n      return {\n        extract,\n        toString\n      };\n    };\n    const anyValue$1 = value(SimpleResult.svalue);\n\n    const requiredAccess = (path, obj, key, bundle) => get$a(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n    const fallbackAccess = (obj, key, fallback, bundle) => {\n      const v = get$a(obj, key).getOrThunk(() => fallback(obj));\n      return bundle(v);\n    };\n    const optionAccess = (obj, key, bundle) => bundle(get$a(obj, key));\n    const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n      const opt = get$a(obj, key).map(val => val === true ? fallback(obj) : val);\n      return bundle(opt);\n    };\n    const extractField = (field, path, obj, key, prop) => {\n      const bundle = av => prop.extract(path.concat([key]), av);\n      const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n        const result = prop.extract(path.concat([key]), ov);\n        return SimpleResult.map(result, Optional.some);\n      });\n      switch (field.tag) {\n      case 'required':\n        return requiredAccess(path, obj, key, bundle);\n      case 'defaultedThunk':\n        return fallbackAccess(obj, key, field.process, bundle);\n      case 'option':\n        return optionAccess(obj, key, bundleAsOption);\n      case 'defaultedOptionThunk':\n        return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n      case 'mergeWithThunk': {\n          return fallbackAccess(obj, key, constant({}), v => {\n            const result = deepMerge(field.process(obj), v);\n            return bundle(result);\n          });\n        }\n      }\n    };\n    const extractFields = (path, obj, fields) => {\n      const success = {};\n      const errors = [];\n      for (const field of fields) {\n        fold(field, (key, newKey, presence, prop) => {\n          const result = extractField(presence, path, obj, key, prop);\n          SimpleResult.fold(result, err => {\n            errors.push(...err);\n          }, res => {\n            success[newKey] = res;\n          });\n        }, (newKey, instantiator) => {\n          success[newKey] = instantiator(obj);\n        });\n      }\n      return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n    };\n    const objOf = values => {\n      const extract = (path, o) => extractFields(path, o, values);\n      const toString = () => {\n        const fieldStrings = map$3(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n        return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n      };\n      return {\n        extract,\n        toString\n      };\n    };\n    const arrOf = prop => {\n      const extract = (path, array) => {\n        const results = map$3(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n        return ResultCombine.consolidateArr(results);\n      };\n      const toString = () => 'array(' + prop.toString() + ')';\n      return {\n        extract,\n        toString\n      };\n    };\n\n    const valueOf = validator => value(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n    const extractValue = (label, prop, obj) => {\n      const res = prop.extract([label], obj);\n      return SimpleResult.mapError(res, errs => ({\n        input: obj,\n        errors: errs\n      }));\n    };\n    const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n    const formatError = errInfo => {\n      return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n    };\n    const choose = (key, branches) => choose$1(key, map$2(branches, objOf));\n\n    const anyValue = constant(anyValue$1);\n    const typedValue = (validator, expectedType) => value(a => {\n      const actualType = typeof a;\n      return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n    });\n    const number = typedValue(isNumber, 'number');\n    const string = typedValue(isString, 'string');\n    const boolean = typedValue(isBoolean, 'boolean');\n    const functionProcessor = typedValue(isFunction, 'function');\n\n    const field = field$1;\n    const customField = customField$1;\n    const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n    const requiredOf = (key, schema) => field(key, key, required(), schema);\n    const requiredString = key => requiredOf(key, string);\n    const requiredFunction = key => requiredOf(key, functionProcessor);\n    const requiredArrayOf = (key, schema) => field(key, key, required(), arrOf(schema));\n    const optionOf = (key, schema) => field(key, key, asOption(), schema);\n    const optionString = key => optionOf(key, string);\n    const optionFunction = key => optionOf(key, functionProcessor);\n    const defaulted = (key, fallback) => field(key, key, defaulted$1(fallback), anyValue());\n    const defaultedOf = (key, fallback, schema) => field(key, key, defaulted$1(fallback), schema);\n    const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n    const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n    const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n    const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n    const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n    const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n\n    const type = requiredString('type');\n    const fetch$1 = requiredFunction('fetch');\n    const onAction = requiredFunction('onAction');\n    const onSetup = defaultedFunction('onSetup', () => noop);\n    const optionalText = optionString('text');\n    const optionalIcon = optionString('icon');\n    const optionalTooltip = optionString('tooltip');\n    const optionalLabel = optionString('label');\n    const active = defaultedBoolean('active', false);\n    const enabled = defaultedBoolean('enabled', true);\n    const primary = defaultedBoolean('primary', false);\n    const defaultedColumns = num => defaulted('columns', num);\n    const defaultedType = type => defaultedString('type', type);\n\n    const autocompleterSchema = objOf([\n      type,\n      requiredString('trigger'),\n      defaultedNumber('minChars', 1),\n      defaultedColumns(1),\n      defaultedNumber('maxResults', 10),\n      optionFunction('matches'),\n      fetch$1,\n      onAction,\n      defaultedArrayOf('highlightOn', [], string)\n    ]);\n    const createAutocompleter = spec => asRaw('Autocompleter', autocompleterSchema, {\n      trigger: spec.ch,\n      ...spec\n    });\n\n    const baseToolbarButtonFields = [\n      enabled,\n      optionalTooltip,\n      optionalIcon,\n      optionalText,\n      onSetup\n    ];\n\n    const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n\n    const contextBarFields = [\n      defaultedFunction('predicate', never),\n      defaultedStringEnum('scope', 'node', [\n        'node',\n        'editor'\n      ]),\n      defaultedStringEnum('position', 'selection', [\n        'node',\n        'selection',\n        'line'\n      ])\n    ];\n\n    const contextButtonFields = baseToolbarButtonFields.concat([\n      defaultedType('contextformbutton'),\n      primary,\n      onAction,\n      customField('original', identity)\n    ]);\n    const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n      defaultedType('contextformbutton'),\n      primary,\n      onAction,\n      customField('original', identity)\n    ]);\n    const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n    const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n    const toggleOrNormal = choose('type', {\n      contextformbutton: contextButtonFields,\n      contextformtogglebutton: contextToggleButtonFields\n    });\n    objOf([\n      defaultedType('contextform'),\n      defaultedFunction('initValue', constant('')),\n      optionalLabel,\n      requiredArrayOf('commands', toggleOrNormal),\n      optionOf('launch', choose('type', {\n        contextformbutton: launchButtonFields,\n        contextformtogglebutton: launchToggleButtonFields\n      }))\n    ].concat(contextBarFields));\n\n    const register$2 = editor => {\n      const popups = editor.ui.registry.getAll().popups;\n      const dataset = map$2(popups, popup => createAutocompleter(popup).fold(err => {\n        throw new Error(formatError(err));\n      }, identity));\n      const triggers = stringArray(mapToArray(dataset, v => v.trigger));\n      const datasetValues = values(dataset);\n      const lookupByTrigger = trigger => filter$5(datasetValues, dv => dv.trigger === trigger);\n      return {\n        dataset,\n        triggers,\n        lookupByTrigger\n      };\n    };\n\n    const setupEditorInput = (editor, api) => {\n      const update = last$1(api.load, 50);\n      editor.on('keypress compositionend', e => {\n        if (e.which === 27) {\n          return;\n        }\n        update.throttle();\n      });\n      editor.on('keydown', e => {\n        const keyCode = e.which;\n        if (keyCode === 8) {\n          update.throttle();\n        } else if (keyCode === 27) {\n          api.cancelIfNecessary();\n        }\n      });\n      editor.on('remove', update.cancel);\n    };\n    const setup$k = editor => {\n      const activeAutocompleter = value$2();\n      const uiActive = Cell(false);\n      const isActive = activeAutocompleter.isSet;\n      const cancelIfNecessary = () => {\n        if (isActive()) {\n          removeAutocompleterDecoration(editor);\n          fireAutocompleterEnd(editor);\n          uiActive.set(false);\n          activeAutocompleter.clear();\n        }\n      };\n      const commenceIfNecessary = context => {\n        if (!isActive()) {\n          addAutocompleterDecoration(editor, context.range);\n          activeAutocompleter.set({\n            trigger: context.trigger,\n            matchLength: context.text.length\n          });\n        }\n      };\n      const getAutocompleters = cached(() => register$2(editor));\n      const doLookup = fetchOptions => activeAutocompleter.get().map(ac => getContext(editor.dom, editor.selection.getRng(), ac.trigger).bind(newContext => lookupWithContext(editor, getAutocompleters, newContext, fetchOptions))).getOrThunk(() => lookup(editor, getAutocompleters));\n      const load = fetchOptions => {\n        doLookup(fetchOptions).fold(cancelIfNecessary, lookupInfo => {\n          commenceIfNecessary(lookupInfo.context);\n          lookupInfo.lookupData.then(lookupData => {\n            activeAutocompleter.get().map(ac => {\n              const context = lookupInfo.context;\n              if (ac.trigger === context.trigger) {\n                if (context.text.length - ac.matchLength >= 10) {\n                  cancelIfNecessary();\n                } else {\n                  activeAutocompleter.set({\n                    ...ac,\n                    matchLength: context.text.length\n                  });\n                  if (uiActive.get()) {\n                    fireAutocompleterUpdate(editor, { lookupData });\n                  } else {\n                    uiActive.set(true);\n                    fireAutocompleterStart(editor, { lookupData });\n                  }\n                }\n              }\n            });\n          });\n        });\n      };\n      editor.addCommand('mceAutocompleterReload', (_ui, value) => {\n        const fetchOptions = isObject(value) ? value.fetchOptions : {};\n        load(fetchOptions);\n      });\n      editor.addCommand('mceAutocompleterClose', cancelIfNecessary);\n      setupEditorInput(editor, {\n        cancelIfNecessary,\n        load\n      });\n    };\n\n    const browser$1 = detect$2().browser;\n    const isSafari = browser$1.isSafari();\n    const emptyNodeContents = node => fillWithPaddingBr(SugarElement.fromDom(node));\n    const isEntireNodeSelected = (rng, node) => {\n      var _a;\n      return rng.startOffset === 0 && rng.endOffset === ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length);\n    };\n    const getParentDetailsElementAtPos = (dom, pos) => Optional.from(dom.getParent(pos.container(), 'details'));\n    const isInDetailsElement = (dom, pos) => getParentDetailsElementAtPos(dom, pos).isSome();\n    const getDetailsElements = (dom, rng) => {\n      const startDetails = Optional.from(dom.getParent(rng.startContainer, 'details'));\n      const endDetails = Optional.from(dom.getParent(rng.endContainer, 'details'));\n      if (startDetails.isSome() || endDetails.isSome()) {\n        const startSummary = startDetails.bind(details => Optional.from(dom.select('summary', details)[0]));\n        return Optional.some({\n          startSummary,\n          startDetails,\n          endDetails\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const isCaretInTheBeginningOf = (caretPos, element) => firstPositionIn(element).exists(pos => pos.isEqual(caretPos));\n    const isCaretInTheEndOf = (caretPos, element) => {\n      return lastPositionIn(element).exists(pos => {\n        if (isBr$6(pos.getNode())) {\n          return prevPosition(element, pos).exists(pos2 => pos2.isEqual(caretPos)) || pos.isEqual(caretPos);\n        } else {\n          return pos.isEqual(caretPos);\n        }\n      });\n    };\n    const isCaretAtStartOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheBeginningOf(caretPos, summary));\n    const isCaretAtEndOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheEndOf(caretPos, summary));\n    const isCaretInFirstPositionInBody = (caretPos, detailsElements) => detailsElements.startDetails.exists(details => prevPosition(details, caretPos).forall(pos => detailsElements.startSummary.exists(summary => !summary.contains(caretPos.container()) && summary.contains(pos.container()))));\n    const isCaretInLastPositionInBody = (root, caretPos, detailsElements) => detailsElements.startDetails.exists(details => nextPosition(root, caretPos).forall(pos => !details.contains(pos.container())));\n    const setCaretToPosition = (editor, position) => {\n      const node = position.getNode();\n      if (!isUndefined(node)) {\n        editor.selection.setCursorLocation(node, position.offset());\n      }\n    };\n    const moveCaretToDetailsPos = (editor, pos, forward) => {\n      const details = editor.dom.getParent(pos.container(), 'details');\n      if (details && !details.open) {\n        const summary = editor.dom.select('summary', details)[0];\n        if (summary) {\n          const newPos = forward ? firstPositionIn(summary) : lastPositionIn(summary);\n          newPos.each(pos => setCaretToPosition(editor, pos));\n        }\n      } else {\n        setCaretToPosition(editor, pos);\n      }\n    };\n    const isPartialDelete = (rng, detailsElements) => {\n      const containsStart = element => element.contains(rng.startContainer);\n      const containsEnd = element => element.contains(rng.endContainer);\n      const startInSummary = detailsElements.startSummary.exists(containsStart);\n      const endInSummary = detailsElements.startSummary.exists(containsEnd);\n      const isPartiallySelectedDetailsElements = detailsElements.startDetails.forall(startDetails => detailsElements.endDetails.forall(endDetails => startDetails !== endDetails));\n      const isInPartiallySelectedSummary = (startInSummary || endInSummary) && !(startInSummary && endInSummary);\n      return isInPartiallySelectedSummary || isPartiallySelectedDetailsElements;\n    };\n    const shouldPreventDeleteIntoDetails = (editor, forward, granularity) => {\n      const {dom, selection} = editor;\n      const root = editor.getBody();\n      if (granularity === 'character') {\n        const caretPos = CaretPosition.fromRangeStart(selection.getRng());\n        const parentBlock = dom.getParent(caretPos.container(), dom.isBlock);\n        const parentDetailsAtCaret = getParentDetailsElementAtPos(dom, caretPos);\n        const inEmptyParentBlock = parentBlock && dom.isEmpty(parentBlock);\n        const isFirstBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.previousSibling);\n        const isLastBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.nextSibling);\n        if (inEmptyParentBlock) {\n          const firstOrLast = forward ? isLastBlock : isFirstBlock;\n          if (firstOrLast) {\n            const isBeforeAfterDetails = navigate(!forward, root, caretPos).exists(pos => {\n              return isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, getParentDetailsElementAtPos(dom, pos));\n            });\n            if (isBeforeAfterDetails) {\n              return true;\n            }\n          }\n        }\n        return navigate(forward, root, caretPos).fold(never, pos => {\n          const parentDetailsAtNewPos = getParentDetailsElementAtPos(dom, pos);\n          if (isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, parentDetailsAtNewPos)) {\n            if (!forward) {\n              moveCaretToDetailsPos(editor, pos, false);\n            }\n            if (parentBlock && inEmptyParentBlock) {\n              if (forward && isFirstBlock) {\n                return true;\n              } else if (!forward && isLastBlock) {\n                return true;\n              }\n              moveCaretToDetailsPos(editor, pos, forward);\n              editor.dom.remove(parentBlock);\n            }\n            return true;\n          } else {\n            return false;\n          }\n        });\n      } else {\n        return false;\n      }\n    };\n    const shouldPreventDeleteSummaryAction = (editor, detailElements, forward, granularity) => {\n      const selection = editor.selection;\n      const rng = selection.getRng();\n      const caretPos = CaretPosition.fromRangeStart(rng);\n      const root = editor.getBody();\n      if (granularity === 'selection') {\n        return isPartialDelete(rng, detailElements);\n      } else if (forward) {\n        return isCaretAtEndOfSummary(caretPos, detailElements) || isCaretInLastPositionInBody(root, caretPos, detailElements);\n      } else {\n        return isCaretAtStartOfSummary(caretPos, detailElements) || isCaretInFirstPositionInBody(caretPos, detailElements);\n      }\n    };\n    const shouldPreventDeleteAction = (editor, forward, granularity) => getDetailsElements(editor.dom, editor.selection.getRng()).fold(() => shouldPreventDeleteIntoDetails(editor, forward, granularity), detailsElements => shouldPreventDeleteSummaryAction(editor, detailsElements, forward, granularity) || shouldPreventDeleteIntoDetails(editor, forward, granularity));\n    const handleDeleteActionSafari = (editor, forward, granularity) => {\n      const selection = editor.selection;\n      const node = selection.getNode();\n      const rng = selection.getRng();\n      const caretPos = CaretPosition.fromRangeStart(rng);\n      if (isSummary$1(node)) {\n        if (granularity === 'selection' && isEntireNodeSelected(rng, node) || willDeleteLastPositionInElement(forward, caretPos, node)) {\n          emptyNodeContents(node);\n        } else {\n          editor.undoManager.transact(() => {\n            const sel = selection.getSel();\n            let {anchorNode, anchorOffset, focusNode, focusOffset} = sel !== null && sel !== void 0 ? sel : {};\n            const applySelection = () => {\n              if (isNonNullable(anchorNode) && isNonNullable(anchorOffset) && isNonNullable(focusNode) && isNonNullable(focusOffset)) {\n                sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);\n              }\n            };\n            const updateSelection = () => {\n              anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n              anchorOffset = sel === null || sel === void 0 ? void 0 : sel.anchorOffset;\n              focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n              focusOffset = sel === null || sel === void 0 ? void 0 : sel.focusOffset;\n            };\n            const appendAllChildNodes = (from, to) => {\n              each$e(from.childNodes, child => {\n                if (isNode(child)) {\n                  to.appendChild(child);\n                }\n              });\n            };\n            const container = editor.dom.create('span', { 'data-mce-bogus': '1' });\n            appendAllChildNodes(node, container);\n            node.appendChild(container);\n            applySelection();\n            if (granularity === 'word' || granularity === 'line') {\n              sel === null || sel === void 0 ? void 0 : sel.modify('extend', forward ? 'right' : 'left', granularity);\n            }\n            if (!selection.isCollapsed() && isEntireNodeSelected(selection.getRng(), container)) {\n              emptyNodeContents(node);\n            } else {\n              editor.execCommand(forward ? 'ForwardDelete' : 'Delete');\n              updateSelection();\n              appendAllChildNodes(container, node);\n              applySelection();\n            }\n            editor.dom.remove(container);\n          });\n        }\n        return true;\n      } else {\n        return false;\n      }\n    };\n    const backspaceDelete = (editor, forward, granularity) => shouldPreventDeleteAction(editor, forward, granularity) || isSafari && handleDeleteActionSafari(editor, forward, granularity) ? Optional.some(noop) : Optional.none();\n\n    const createAndFireInputEvent = eventType => (editor, inputType, specifics = {}) => {\n      const target = editor.getBody();\n      const overrides = {\n        bubbles: true,\n        composed: true,\n        data: null,\n        isComposing: false,\n        detail: 0,\n        view: null,\n        target,\n        currentTarget: target,\n        eventPhase: Event.AT_TARGET,\n        originalTarget: target,\n        explicitOriginalTarget: target,\n        isTrusted: false,\n        srcElement: target,\n        cancelable: false,\n        preventDefault: noop,\n        inputType\n      };\n      const input = clone$3(new InputEvent(eventType));\n      return editor.dispatch(eventType, {\n        ...input,\n        ...overrides,\n        ...specifics\n      });\n    };\n    const fireInputEvent = createAndFireInputEvent('input');\n    const fireBeforeInputEvent = createAndFireInputEvent('beforeinput');\n\n    const platform$2 = detect$2();\n    const os = platform$2.os;\n    const isMacOSOriOS = os.isMacOS() || os.isiOS();\n    const browser = platform$2.browser;\n    const isFirefox = browser.isFirefox();\n    const executeKeydownOverride$3 = (editor, caret, evt) => {\n      const inputType = evt.keyCode === VK.BACKSPACE ? 'deleteContentBackward' : 'deleteContentForward';\n      const isCollapsed = editor.selection.isCollapsed();\n      const unmodifiedGranularity = isCollapsed ? 'character' : 'selection';\n      const getModifiedGranularity = isWord => {\n        if (isCollapsed) {\n          return isWord ? 'word' : 'line';\n        } else {\n          return 'selection';\n        }\n      };\n      executeWithDelayedAction([\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$1, editor)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$6, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$6, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$7, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$7, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$4, editor, caret, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$4, editor, caret, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$a, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$a, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete, editor, false, unmodifiedGranularity)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete, editor, true, unmodifiedGranularity)\n        },\n        ...isMacOSOriOS ? [\n          {\n            keyCode: VK.BACKSPACE,\n            altKey: true,\n            action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n          },\n          {\n            keyCode: VK.DELETE,\n            altKey: true,\n            action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n          },\n          {\n            keyCode: VK.BACKSPACE,\n            metaKey: true,\n            action: action(backspaceDelete, editor, false, getModifiedGranularity(false))\n          }\n        ] : [\n          {\n            keyCode: VK.BACKSPACE,\n            ctrlKey: true,\n            action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n          },\n          {\n            keyCode: VK.DELETE,\n            ctrlKey: true,\n            action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n          }\n        ],\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$5, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$5, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$2, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$2, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$8, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$8, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$9, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$9, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: action(backspaceDelete$3, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: action(backspaceDelete$3, editor, true)\n        }\n      ], evt).filter(_ => editor.selection.isEditable()).each(applyAction => {\n        evt.preventDefault();\n        const beforeInput = fireBeforeInputEvent(editor, inputType);\n        if (!beforeInput.isDefaultPrevented()) {\n          applyAction();\n          fireInputEvent(editor, inputType);\n        }\n      });\n    };\n    const executeKeyupOverride = (editor, evt, isBackspaceKeydown) => execute([\n      {\n        keyCode: VK.BACKSPACE,\n        action: action(paddEmptyElement, editor)\n      },\n      {\n        keyCode: VK.DELETE,\n        action: action(paddEmptyElement, editor)\n      },\n      ...isMacOSOriOS ? [\n        {\n          keyCode: VK.BACKSPACE,\n          altKey: true,\n          action: action(refreshCaret, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          altKey: true,\n          action: action(refreshCaret, editor)\n        },\n        ...isBackspaceKeydown ? [{\n            keyCode: isFirefox ? 224 : 91,\n            action: action(refreshCaret, editor)\n          }] : []\n      ] : [\n        {\n          keyCode: VK.BACKSPACE,\n          ctrlKey: true,\n          action: action(refreshCaret, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          ctrlKey: true,\n          action: action(refreshCaret, editor)\n        }\n      ]\n    ], evt);\n    const setup$j = (editor, caret) => {\n      let isBackspaceKeydown = false;\n      editor.on('keydown', evt => {\n        isBackspaceKeydown = evt.keyCode === VK.BACKSPACE;\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$3(editor, caret, evt);\n        }\n      });\n      editor.on('keyup', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeyupOverride(editor, evt, isBackspaceKeydown);\n        }\n        isBackspaceKeydown = false;\n      });\n    };\n\n    const firstNonWhiteSpaceNodeSibling = node => {\n      while (node) {\n        if (isElement$6(node) || isText$a(node) && node.data && /[\\r\\n\\s]/.test(node.data)) {\n          return node;\n        }\n        node = node.nextSibling;\n      }\n      return null;\n    };\n    const moveToCaretPosition = (editor, root) => {\n      const dom = editor.dom;\n      const moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n      if (!root) {\n        return;\n      }\n      if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n        const firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n        if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n          root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n        }\n      }\n      const rng = dom.createRng();\n      root.normalize();\n      if (root.hasChildNodes()) {\n        const walker = new DomTreeWalker(root, root);\n        let lastNode = root;\n        let node;\n        while (node = walker.current()) {\n          if (isText$a(node)) {\n            rng.setStart(node, 0);\n            rng.setEnd(node, 0);\n            break;\n          }\n          if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n            rng.setStartBefore(node);\n            rng.setEndBefore(node);\n            break;\n          }\n          lastNode = node;\n          node = walker.next();\n        }\n        if (!node) {\n          rng.setStart(lastNode, 0);\n          rng.setEnd(lastNode, 0);\n        }\n      } else {\n        if (isBr$6(root)) {\n          if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n            rng.setStartBefore(root);\n            rng.setEndBefore(root);\n          } else {\n            rng.setStartAfter(root);\n            rng.setEndAfter(root);\n          }\n        } else {\n          rng.setStart(root, 0);\n          rng.setEnd(root, 0);\n        }\n      }\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n    };\n    const getEditableRoot = (dom, node) => {\n      const root = dom.getRoot();\n      let editableRoot;\n      let parent = node;\n      while (parent !== root && parent && dom.getContentEditable(parent) !== 'false') {\n        if (dom.getContentEditable(parent) === 'true') {\n          editableRoot = parent;\n          break;\n        }\n        parent = parent.parentNode;\n      }\n      return parent !== root ? editableRoot : root;\n    };\n    const getParentBlock$1 = editor => {\n      return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n    };\n    const getParentBlockName = editor => {\n      return getParentBlock$1(editor).fold(constant(''), parentBlock => {\n        return parentBlock.nodeName.toUpperCase();\n      });\n    };\n    const isListItemParentBlock = editor => {\n      return getParentBlock$1(editor).filter(elm => {\n        return isListItem$1(SugarElement.fromDom(elm));\n      }).isSome();\n    };\n    const emptyBlock = elm => {\n      elm.innerHTML = '<br data-mce-bogus=\"1\">';\n    };\n    const applyAttributes = (editor, node, forcedRootBlockAttrs) => {\n      const dom = editor.dom;\n      Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(attrStyles => {\n        const currentStyles = getAllRaw(SugarElement.fromDom(node));\n        const newStyles = {\n          ...currentStyles,\n          ...attrStyles\n        };\n        dom.setStyles(node, newStyles);\n      });\n      const attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(attrClasses => attrClasses.split(/\\s+/));\n      const currentClassesOpt = Optional.from(node.className).map(currentClasses => filter$5(currentClasses.split(/\\s+/), clazz => clazz !== ''));\n      lift2(attrClassesOpt, currentClassesOpt, (attrClasses, currentClasses) => {\n        const filteredClasses = filter$5(currentClasses, clazz => !contains$2(attrClasses, clazz));\n        const newClasses = [\n          ...attrClasses,\n          ...filteredClasses\n        ];\n        dom.setAttrib(node, 'class', newClasses.join(' '));\n      });\n      const appliedAttrs = [\n        'style',\n        'class'\n      ];\n      const remainingAttrs = filter$4(forcedRootBlockAttrs, (_, attrs) => !contains$2(appliedAttrs, attrs));\n      dom.setAttribs(node, remainingAttrs);\n    };\n    const setForcedBlockAttrs = (editor, node) => {\n      const forcedRootBlockName = getForcedRootBlock(editor);\n      if (forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n        const forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n        applyAttributes(editor, node, forcedRootBlockAttrs);\n      }\n    };\n    const createNewBlock = (editor, container, parentBlock, editableRoot, keepStyles = true, name, styles) => {\n      const dom = editor.dom;\n      const schema = editor.schema;\n      const newBlockName = getForcedRootBlock(editor);\n      const parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n      let node = container;\n      const textInlineElements = schema.getTextInlineElements();\n      let block;\n      if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n        block = dom.create(name || newBlockName, styles || {});\n      } else {\n        block = parentBlock.cloneNode(false);\n      }\n      let caretNode = block;\n      if (!keepStyles) {\n        dom.setAttrib(block, 'style', null);\n        dom.setAttrib(block, 'class', null);\n      } else {\n        do {\n          if (textInlineElements[node.nodeName]) {\n            if (isCaretNode(node) || isBookmarkNode$1(node)) {\n              continue;\n            }\n            const clonedNode = node.cloneNode(false);\n            dom.setAttrib(clonedNode, 'id', '');\n            if (block.hasChildNodes()) {\n              clonedNode.appendChild(block.firstChild);\n              block.appendChild(clonedNode);\n            } else {\n              caretNode = clonedNode;\n              block.appendChild(clonedNode);\n            }\n          }\n        } while ((node = node.parentNode) && node !== editableRoot);\n      }\n      setForcedBlockAttrs(editor, block);\n      emptyBlock(caretNode);\n      return block;\n    };\n\n    const getDetailsRoot = (editor, element) => editor.dom.getParent(element, isDetails);\n    const isAtDetailsEdge = (root, element, isTextBlock) => {\n      let node = element;\n      while (node && node !== root && isNull(node.nextSibling)) {\n        const parent = node.parentElement;\n        if (!parent || !isTextBlock(parent)) {\n          return isDetails(parent);\n        }\n        node = parent;\n      }\n      return false;\n    };\n    const isLastEmptyBlockInDetails = (editor, shiftKey, element) => !shiftKey && element.nodeName.toLowerCase() === getForcedRootBlock(editor) && editor.dom.isEmpty(element) && isAtDetailsEdge(editor.getBody(), element, el => has$2(editor.schema.getTextBlockElements(), el.nodeName.toLowerCase()));\n    const insertNewLine = (editor, createNewBlock, parentBlock) => {\n      var _a, _b, _c;\n      const newBlock = createNewBlock(getForcedRootBlock(editor));\n      const root = getDetailsRoot(editor, parentBlock);\n      if (!root) {\n        return;\n      }\n      editor.dom.insertAfter(newBlock, root);\n      moveToCaretPosition(editor, newBlock);\n      if (((_c = (_b = (_a = parentBlock.parentElement) === null || _a === void 0 ? void 0 : _a.childNodes) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 1) {\n        editor.dom.remove(parentBlock);\n      }\n    };\n\n    const hasFirstChild = (elm, name) => {\n      return elm.firstChild && elm.firstChild.nodeName === name;\n    };\n    const isFirstChild = elm => {\n      var _a;\n      return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n    };\n    const hasParent = (elm, parentName) => {\n      const parentNode = elm === null || elm === void 0 ? void 0 : elm.parentNode;\n      return isNonNullable(parentNode) && parentNode.nodeName === parentName;\n    };\n    const isListBlock = elm => {\n      return isNonNullable(elm) && /^(OL|UL|LI)$/.test(elm.nodeName);\n    };\n    const isListItem = elm => {\n      return isNonNullable(elm) && /^(LI|DT|DD)$/.test(elm.nodeName);\n    };\n    const isNestedList = elm => {\n      return isListBlock(elm) && isListBlock(elm.parentNode);\n    };\n    const getContainerBlock = containerBlock => {\n      const containerBlockParent = containerBlock.parentNode;\n      return isListItem(containerBlockParent) ? containerBlockParent : containerBlock;\n    };\n    const isFirstOrLastLi = (containerBlock, parentBlock, first) => {\n      let node = containerBlock[first ? 'firstChild' : 'lastChild'];\n      while (node) {\n        if (isElement$6(node)) {\n          break;\n        }\n        node = node[first ? 'nextSibling' : 'previousSibling'];\n      }\n      return node === parentBlock;\n    };\n    const getStyles = elm => foldl(mapToArray(getAllRaw(SugarElement.fromDom(elm)), (style, styleName) => `${ styleName }: ${ style };`), (acc, s) => acc + s, '');\n    const insert$4 = (editor, createNewBlock, containerBlock, parentBlock, newBlockName) => {\n      const dom = editor.dom;\n      const rng = editor.selection.getRng();\n      const containerParent = containerBlock.parentNode;\n      if (containerBlock === editor.getBody() || !containerParent) {\n        return;\n      }\n      if (isNestedList(containerBlock)) {\n        newBlockName = 'LI';\n      }\n      const parentBlockStyles = isListItem(parentBlock) ? getStyles(parentBlock) : undefined;\n      let newBlock = isListItem(parentBlock) && parentBlockStyles ? createNewBlock(newBlockName, { style: getStyles(parentBlock) }) : createNewBlock(newBlockName);\n      if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        if (hasParent(containerBlock, 'LI')) {\n          const containerBlockParent = getContainerBlock(containerBlock);\n          dom.insertAfter(newBlock, containerBlockParent);\n          if (isFirstChild(containerBlock)) {\n            dom.remove(containerBlockParent);\n          } else {\n            dom.remove(containerBlock);\n          }\n        } else {\n          dom.replace(newBlock, containerBlock);\n        }\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n        if (hasParent(containerBlock, 'LI')) {\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n          newBlock.appendChild(dom.doc.createTextNode(' '));\n          newBlock.appendChild(containerBlock);\n        } else {\n          containerParent.insertBefore(newBlock, containerBlock);\n        }\n        dom.remove(parentBlock);\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n        dom.remove(parentBlock);\n      } else {\n        containerBlock = getContainerBlock(containerBlock);\n        const tmpRng = rng.cloneRange();\n        tmpRng.setStartAfter(parentBlock);\n        tmpRng.setEndAfter(containerBlock);\n        const fragment = tmpRng.extractContents();\n        if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n          const previousChildren = filter$5(map$3(newBlock.children, SugarElement.fromDom), not(isTag('br')));\n          newBlock = fragment.firstChild;\n          dom.insertAfter(fragment, containerBlock);\n          each$e(previousChildren, child => prepend(SugarElement.fromDom(newBlock), child));\n          if (parentBlockStyles) {\n            newBlock.setAttribute('style', parentBlockStyles);\n          }\n        } else {\n          dom.insertAfter(fragment, containerBlock);\n          dom.insertAfter(newBlock, containerBlock);\n        }\n        dom.remove(parentBlock);\n      }\n      moveToCaretPosition(editor, newBlock);\n    };\n\n    const trimZwsp = fragment => {\n      each$e(descendants$1(SugarElement.fromDom(fragment), isText$b), text => {\n        const rawNode = text.dom;\n        rawNode.nodeValue = trim$2(rawNode.data);\n      });\n    };\n    const isWithinNonEditableList = (editor, node) => {\n      const parentList = editor.dom.getParent(node, 'ol,ul,dl');\n      return parentList !== null && editor.dom.getContentEditableParent(parentList) === 'false';\n    };\n    const isEmptyAnchor = (dom, elm) => {\n      return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n    };\n    const containerAndSiblingName = (container, nodeName) => {\n      return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n    };\n    const canSplitBlock = (dom, node) => {\n      return isNonNullable(node) && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.isEditable(node.parentNode) && dom.getContentEditable(node) !== 'false';\n    };\n    const trimInlineElementsOnLeftSideOfBlock = (dom, nonEmptyElementsMap, block) => {\n      var _a;\n      const firstChilds = [];\n      if (!block) {\n        return;\n      }\n      let currentNode = block;\n      while (currentNode = currentNode.firstChild) {\n        if (dom.isBlock(currentNode)) {\n          return;\n        }\n        if (isElement$6(currentNode) && !nonEmptyElementsMap[currentNode.nodeName.toLowerCase()]) {\n          firstChilds.push(currentNode);\n        }\n      }\n      let i = firstChilds.length;\n      while (i--) {\n        currentNode = firstChilds[i];\n        if (!currentNode.hasChildNodes() || currentNode.firstChild === currentNode.lastChild && ((_a = currentNode.firstChild) === null || _a === void 0 ? void 0 : _a.nodeValue) === '') {\n          dom.remove(currentNode);\n        } else {\n          if (isEmptyAnchor(dom, currentNode)) {\n            dom.remove(currentNode);\n          }\n        }\n      }\n    };\n    const normalizeZwspOffset = (start, container, offset) => {\n      if (!isText$a(container)) {\n        return offset;\n      } else if (start) {\n        return offset === 1 && container.data.charAt(offset - 1) === ZWSP$1 ? 0 : offset;\n      } else {\n        return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP$1 ? container.data.length : offset;\n      }\n    };\n    const includeZwspInRange = rng => {\n      const newRng = rng.cloneRange();\n      newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n      newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n      return newRng;\n    };\n    const trimLeadingLineBreaks = node => {\n      let currentNode = node;\n      do {\n        if (isText$a(currentNode)) {\n          currentNode.data = currentNode.data.replace(/^[\\r\\n]+/, '');\n        }\n        currentNode = currentNode.firstChild;\n      } while (currentNode);\n    };\n    const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n      var _a, _b;\n      const dom = editor.dom;\n      const editableRoot = (_a = getEditableRoot(dom, container)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      let parentBlock = dom.getParent(container, dom.isBlock);\n      if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n        parentBlock = parentBlock || editableRoot;\n        if (!parentBlock.hasChildNodes()) {\n          const newBlock = dom.create(newBlockName);\n          setForcedBlockAttrs(editor, newBlock);\n          parentBlock.appendChild(newBlock);\n          rng.setStart(newBlock, 0);\n          rng.setEnd(newBlock, 0);\n          return newBlock;\n        }\n        let node = container;\n        while (node && node.parentNode !== parentBlock) {\n          node = node.parentNode;\n        }\n        let startNode;\n        while (node && !dom.isBlock(node)) {\n          startNode = node;\n          node = node.previousSibling;\n        }\n        const startNodeName = (_b = startNode === null || startNode === void 0 ? void 0 : startNode.parentElement) === null || _b === void 0 ? void 0 : _b.nodeName;\n        if (startNode && startNodeName && editor.schema.isValidChild(startNodeName, newBlockName.toLowerCase())) {\n          const startNodeParent = startNode.parentNode;\n          const newBlock = dom.create(newBlockName);\n          setForcedBlockAttrs(editor, newBlock);\n          startNodeParent.insertBefore(newBlock, startNode);\n          node = startNode;\n          while (node && !dom.isBlock(node)) {\n            const next = node.nextSibling;\n            newBlock.appendChild(node);\n            node = next;\n          }\n          rng.setStart(container, offset);\n          rng.setEnd(container, offset);\n        }\n      }\n      return container;\n    };\n    const addBrToBlockIfNeeded = (dom, block) => {\n      block.normalize();\n      const lastChild = block.lastChild;\n      if (!lastChild || isElement$6(lastChild) && /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n        dom.add(block, 'br');\n      }\n    };\n    const shouldEndContainer = (editor, container) => {\n      const optionValue = shouldEndContainerOnEmptyBlock(editor);\n      if (isNullable(container)) {\n        return false;\n      } else if (isString(optionValue)) {\n        return contains$2(Tools.explode(optionValue), container.nodeName.toLowerCase());\n      } else {\n        return optionValue;\n      }\n    };\n    const insert$3 = (editor, evt) => {\n      let container;\n      let offset;\n      let parentBlockName;\n      let containerBlock;\n      let isAfterLastNodeInContainer = false;\n      const dom = editor.dom;\n      const schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n      const rng = editor.selection.getRng();\n      const newBlockName = getForcedRootBlock(editor);\n      const start = SugarElement.fromDom(rng.startContainer);\n      const child = child$1(start, rng.startOffset);\n      const isCef = child.exists(element => isHTMLElement$1(element) && !isEditable$2(element));\n      const collapsedAndCef = rng.collapsed && isCef;\n      const createNewBlock$1 = (name, styles) => {\n        return createNewBlock(editor, container, parentBlock, editableRoot, shouldKeepStyles(editor), name, styles);\n      };\n      const isCaretAtStartOrEndOfBlock = start => {\n        const normalizedOffset = normalizeZwspOffset(start, container, offset);\n        if (isText$a(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.data.length)) {\n          return false;\n        }\n        if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n          return true;\n        }\n        if (start && isElement$6(container) && container === parentBlock.firstChild) {\n          return true;\n        }\n        if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n          return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n        }\n        const walker = new DomTreeWalker(container, parentBlock);\n        if (isText$a(container)) {\n          if (start && normalizedOffset === 0) {\n            walker.prev();\n          } else if (!start && normalizedOffset === container.data.length) {\n            walker.next();\n          }\n        }\n        let node;\n        while (node = walker.current()) {\n          if (isElement$6(node)) {\n            if (!node.getAttribute('data-mce-bogus')) {\n              const name = node.nodeName.toLowerCase();\n              if (nonEmptyElementsMap[name] && name !== 'br') {\n                return false;\n              }\n            }\n          } else if (isText$a(node) && !isWhitespaceText(node.data)) {\n            return false;\n          }\n          if (start) {\n            walker.prev();\n          } else {\n            walker.next();\n          }\n        }\n        return true;\n      };\n      const insertNewBlockAfter = () => {\n        let block;\n        if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n          block = createNewBlock$1(newBlockName);\n        } else {\n          block = createNewBlock$1();\n        }\n        if (shouldEndContainer(editor, containerBlock) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock, undefined, { includeZwsp: true })) {\n          block = dom.split(containerBlock, parentBlock);\n        } else {\n          dom.insertAfter(block, parentBlock);\n        }\n        moveToCaretPosition(editor, block);\n        return block;\n      };\n      normalize$2(dom, rng).each(normRng => {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      const shiftKey = !!(evt && evt.shiftKey);\n      const ctrlKey = !!(evt && evt.ctrlKey);\n      if (isElement$6(container) && container.hasChildNodes() && !collapsedAndCef) {\n        isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && isText$a(container)) {\n          offset = container.data.length;\n        } else {\n          offset = 0;\n        }\n      }\n      const editableRoot = getEditableRoot(dom, container);\n      if (!editableRoot || isWithinNonEditableList(editor, container)) {\n        return;\n      }\n      if (!shiftKey) {\n        container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n      }\n      let parentBlock = dom.getParent(container, dom.isBlock) || dom.getRoot();\n      containerBlock = isNonNullable(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.parentNode) ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n      const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      if (containerBlockName === 'LI' && !ctrlKey) {\n        const liBlock = containerBlock;\n        parentBlock = liBlock;\n        containerBlock = liBlock.parentNode;\n        parentBlockName = containerBlockName;\n      }\n      if (isElement$6(containerBlock) && isLastEmptyBlockInDetails(editor, shiftKey, parentBlock)) {\n        return insertNewLine(editor, createNewBlock$1, parentBlock);\n      }\n      if (/^(LI|DT|DD)$/.test(parentBlockName) && isElement$6(containerBlock)) {\n        if (dom.isEmpty(parentBlock)) {\n          insert$4(editor, createNewBlock$1, containerBlock, parentBlock, newBlockName);\n          return;\n        }\n      }\n      if (!collapsedAndCef && (parentBlock === editor.getBody() || !canSplitBlock(dom, parentBlock))) {\n        return;\n      }\n      const parentBlockParent = parentBlock.parentNode;\n      let newBlock;\n      if (collapsedAndCef) {\n        newBlock = createNewBlock$1(newBlockName);\n        child.fold(() => {\n          append$1(start, SugarElement.fromDom(newBlock));\n        }, child => {\n          before$3(child, SugarElement.fromDom(newBlock));\n        });\n        editor.selection.setCursorLocation(newBlock, 0);\n      } else if (isCaretContainerBlock$1(parentBlock)) {\n        newBlock = showCaretContainerBlock(parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        setForcedBlockAttrs(editor, newBlock);\n        moveToCaretPosition(editor, newBlock);\n      } else if (isCaretAtStartOrEndOfBlock(false)) {\n        newBlock = insertNewBlockAfter();\n      } else if (isCaretAtStartOrEndOfBlock(true) && parentBlockParent) {\n        newBlock = parentBlockParent.insertBefore(createNewBlock$1(), parentBlock);\n        const isNearChildren = hasChildNodes(SugarElement.fromDom(rng.startContainer)) && rng.collapsed;\n        moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') || isNearChildren ? newBlock : parentBlock);\n      } else {\n        const tmpRng = includeZwspInRange(rng).cloneRange();\n        tmpRng.setEndAfter(parentBlock);\n        const fragment = tmpRng.extractContents();\n        trimZwsp(fragment);\n        trimLeadingLineBreaks(fragment);\n        newBlock = fragment.firstChild;\n        dom.insertAfter(fragment, parentBlock);\n        trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n        addBrToBlockIfNeeded(dom, parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        newBlock.normalize();\n        if (dom.isEmpty(newBlock)) {\n          dom.remove(newBlock);\n          insertNewBlockAfter();\n        } else {\n          setForcedBlockAttrs(editor, newBlock);\n          moveToCaretPosition(editor, newBlock);\n        }\n      }\n      dom.setAttrib(newBlock, 'id', '');\n      editor.dispatch('NewBlock', { newBlock });\n    };\n    const fakeEventName$1 = 'insertParagraph';\n    const blockbreak = {\n      insert: insert$3,\n      fakeEventName: fakeEventName$1\n    };\n\n    const hasRightSideContent = (schema, container, parentBlock) => {\n      const walker = new DomTreeWalker(container, parentBlock);\n      let node;\n      const nonEmptyElementsMap = schema.getNonEmptyElements();\n      while (node = walker.next()) {\n        if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || isText$a(node) && node.length > 0) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const moveSelectionToBr = (editor, brElm, extraBr) => {\n      const rng = editor.dom.createRng();\n      if (!extraBr) {\n        rng.setStartAfter(brElm);\n        rng.setEndAfter(brElm);\n      } else {\n        rng.setStartBefore(brElm);\n        rng.setEndBefore(brElm);\n      }\n      editor.selection.setRng(rng);\n      scrollRangeIntoView(editor, rng);\n    };\n    const insertBrAtCaret = (editor, evt) => {\n      const selection = editor.selection;\n      const dom = editor.dom;\n      const rng = selection.getRng();\n      let brElm;\n      let extraBr = false;\n      normalize$2(dom, rng).each(normRng => {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      let offset = rng.startOffset;\n      let container = rng.startContainer;\n      if (isElement$6(container) && container.hasChildNodes()) {\n        const isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && isText$a(container)) {\n          offset = container.data.length;\n        } else {\n          offset = 0;\n        }\n      }\n      let parentBlock = dom.getParent(container, dom.isBlock);\n      const containerBlock = parentBlock && parentBlock.parentNode ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      const isControlKey = !!(evt && evt.ctrlKey);\n      if (containerBlockName === 'LI' && !isControlKey) {\n        parentBlock = containerBlock;\n      }\n      if (isText$a(container) && offset >= container.data.length) {\n        if (!hasRightSideContent(editor.schema, container, parentBlock || dom.getRoot())) {\n          brElm = dom.create('br');\n          rng.insertNode(brElm);\n          rng.setStartAfter(brElm);\n          rng.setEndAfter(brElm);\n          extraBr = true;\n        }\n      }\n      brElm = dom.create('br');\n      rangeInsertNode(dom, rng, brElm);\n      moveSelectionToBr(editor, brElm, extraBr);\n      editor.undoManager.add();\n    };\n    const insertBrBefore = (editor, inline) => {\n      const br = SugarElement.fromTag('br');\n      before$3(SugarElement.fromDom(inline), br);\n      editor.undoManager.add();\n    };\n    const insertBrAfter = (editor, inline) => {\n      if (!hasBrAfter(editor.getBody(), inline)) {\n        after$4(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n      }\n      const br = SugarElement.fromTag('br');\n      after$4(SugarElement.fromDom(inline), br);\n      moveSelectionToBr(editor, br.dom, false);\n      editor.undoManager.add();\n    };\n    const isBeforeBr = pos => {\n      return isBr$6(pos.getNode());\n    };\n    const hasBrAfter = (rootNode, startNode) => {\n      if (isBeforeBr(CaretPosition.after(startNode))) {\n        return true;\n      } else {\n        return nextPosition(rootNode, CaretPosition.after(startNode)).map(pos => {\n          return isBr$6(pos.getNode());\n        }).getOr(false);\n      }\n    };\n    const isAnchorLink = elm => {\n      return elm && elm.nodeName === 'A' && 'href' in elm;\n    };\n    const isInsideAnchor = location => {\n      return location.fold(never, isAnchorLink, isAnchorLink, never);\n    };\n    const readInlineAnchorLocation = editor => {\n      const isInlineTarget$1 = curry(isInlineTarget, editor);\n      const position = CaretPosition.fromRangeStart(editor.selection.getRng());\n      return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n    };\n    const insertBrOutsideAnchor = (editor, location) => {\n      location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n    };\n    const insert$2 = (editor, evt) => {\n      const anchorLocation = readInlineAnchorLocation(editor);\n      if (anchorLocation.isSome()) {\n        anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n      } else {\n        insertBrAtCaret(editor, evt);\n      }\n    };\n    const fakeEventName = 'insertLineBreak';\n    const linebreak = {\n      insert: insert$2,\n      fakeEventName\n    };\n\n    const matchesSelector = (editor, selector) => {\n      return getParentBlock$1(editor).filter(parentBlock => {\n        return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n      }).isSome();\n    };\n    const shouldInsertBr = editor => {\n      return matchesSelector(editor, getBrNewLineSelector(editor));\n    };\n    const shouldBlockNewLine$1 = editor => {\n      return matchesSelector(editor, getNoNewLineSelector(editor));\n    };\n\n    const newLineAction = Adt.generate([\n      { br: [] },\n      { block: [] },\n      { none: [] }\n    ]);\n    const shouldBlockNewLine = (editor, _shiftKey) => {\n      return shouldBlockNewLine$1(editor);\n    };\n    const inListBlock = requiredState => {\n      return (editor, _shiftKey) => {\n        return isListItemParentBlock(editor) === requiredState;\n      };\n    };\n    const inBlock = (blockName, requiredState) => (editor, _shiftKey) => {\n      const state = getParentBlockName(editor) === blockName.toUpperCase();\n      return state === requiredState;\n    };\n    const inCefBlock = editor => {\n      const editableRoot = getEditableRoot(editor.dom, editor.selection.getStart());\n      return isNullable(editableRoot);\n    };\n    const inPreBlock = requiredState => inBlock('pre', requiredState);\n    const inSummaryBlock = () => inBlock('summary', true);\n    const shouldPutBrInPre = requiredState => {\n      return (editor, _shiftKey) => {\n        return shouldPutBrInPre$1(editor) === requiredState;\n      };\n    };\n    const inBrContext = (editor, _shiftKey) => {\n      return shouldInsertBr(editor);\n    };\n    const hasShiftKey = (_editor, shiftKey) => {\n      return shiftKey;\n    };\n    const canInsertIntoEditableRoot = editor => {\n      const forcedRootBlock = getForcedRootBlock(editor);\n      const rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n      return isNonNullable(rootEditable) && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock);\n    };\n    const isInRootWithEmptyOrCEF = editor => {\n      const rng = editor.selection.getRng();\n      const start = SugarElement.fromDom(rng.startContainer);\n      const child = child$1(start, rng.startOffset);\n      const isCefOpt = child.map(element => isHTMLElement$1(element) && !isEditable$2(element));\n      return rng.collapsed && isCefOpt.getOr(true);\n    };\n    const match = (predicates, action) => {\n      return (editor, shiftKey) => {\n        const isMatch = foldl(predicates, (res, p) => {\n          return res && p(editor, shiftKey);\n        }, true);\n        return isMatch ? Optional.some(action) : Optional.none();\n      };\n    };\n    const getAction = (editor, evt) => {\n      return evaluateUntil([\n        match([shouldBlockNewLine], newLineAction.none()),\n        match([\n          inPreBlock(true),\n          inCefBlock\n        ], newLineAction.none()),\n        match([inSummaryBlock()], newLineAction.br()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(false),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(false)\n        ], newLineAction.block()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(true),\n          hasShiftKey\n        ], newLineAction.block()),\n        match([\n          inPreBlock(true),\n          shouldPutBrInPre(true)\n        ], newLineAction.br()),\n        match([\n          inListBlock(true),\n          hasShiftKey\n        ], newLineAction.br()),\n        match([inListBlock(true)], newLineAction.block()),\n        match([inBrContext], newLineAction.br()),\n        match([hasShiftKey], newLineAction.br()),\n        match([canInsertIntoEditableRoot], newLineAction.block()),\n        match([isInRootWithEmptyOrCEF], newLineAction.block())\n      ], [\n        editor,\n        !!(evt && evt.shiftKey)\n      ]).getOr(newLineAction.none());\n    };\n\n    const insertBreak = (breakType, editor, evt) => {\n      if (!editor.selection.isCollapsed()) {\n        execEditorDeleteCommand(editor);\n      }\n      if (isNonNullable(evt)) {\n        const event = fireBeforeInputEvent(editor, breakType.fakeEventName);\n        if (event.isDefaultPrevented()) {\n          return;\n        }\n      }\n      breakType.insert(editor, evt);\n      if (isNonNullable(evt)) {\n        fireInputEvent(editor, breakType.fakeEventName);\n      }\n    };\n    const insert$1 = (editor, evt) => {\n      const br = () => insertBreak(linebreak, editor, evt);\n      const block = () => insertBreak(blockbreak, editor, evt);\n      const logicalAction = getAction(editor, evt);\n      switch (getNewlineBehavior(editor)) {\n      case 'linebreak':\n        logicalAction.fold(br, br, noop);\n        break;\n      case 'block':\n        logicalAction.fold(block, block, noop);\n        break;\n      case 'invert':\n        logicalAction.fold(block, br, noop);\n        break;\n      default:\n        logicalAction.fold(br, block, noop);\n        break;\n      }\n    };\n\n    const platform$1 = detect$2();\n    const isIOSSafari = platform$1.os.isiOS() && platform$1.browser.isSafari();\n    const handleEnterKeyEvent = (editor, event) => {\n      if (event.isDefaultPrevented()) {\n        return;\n      }\n      event.preventDefault();\n      endTypingLevelIgnoreLocks(editor.undoManager);\n      editor.undoManager.transact(() => {\n        insert$1(editor, event);\n      });\n    };\n    const isCaretAfterKoreanCharacter = rng => {\n      if (!rng.collapsed) {\n        return false;\n      }\n      const startContainer = rng.startContainer;\n      if (isText$a(startContainer)) {\n        const koreanCharRegex = /^[\\uAC00-\\uD7AF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uD7B0-\\uD7FF]$/;\n        const char = startContainer.data.charAt(rng.startOffset - 1);\n        return koreanCharRegex.test(char);\n      } else {\n        return false;\n      }\n    };\n    const setup$i = editor => {\n      let iOSSafariKeydownBookmark = Optional.none();\n      const iOSSafariKeydownOverride = editor => {\n        iOSSafariKeydownBookmark = Optional.some(editor.selection.getBookmark());\n        editor.undoManager.add();\n      };\n      const iOSSafariKeyupOverride = (editor, event) => {\n        editor.undoManager.undo();\n        iOSSafariKeydownBookmark.fold(noop, b => editor.selection.moveToBookmark(b));\n        handleEnterKeyEvent(editor, event);\n        iOSSafariKeydownBookmark = Optional.none();\n      };\n      editor.on('keydown', event => {\n        if (event.keyCode === VK.ENTER) {\n          if (isIOSSafari && isCaretAfterKoreanCharacter(editor.selection.getRng())) {\n            iOSSafariKeydownOverride(editor);\n          } else {\n            handleEnterKeyEvent(editor, event);\n          }\n        }\n      });\n      editor.on('keyup', event => {\n        if (event.keyCode === VK.ENTER) {\n          iOSSafariKeydownBookmark.each(() => iOSSafariKeyupOverride(editor, event));\n        }\n      });\n    };\n\n    const executeKeydownOverride$2 = (editor, caret, evt) => {\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      execute([\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint$1, editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint$1, editor, false)\n        },\n        ...!isMac ? [\n          {\n            keyCode: VK.HOME,\n            action: action(selectToEndPoint, editor, false),\n            ctrlKey: true,\n            shiftKey: true\n          },\n          {\n            keyCode: VK.END,\n            action: action(selectToEndPoint, editor, true),\n            ctrlKey: true,\n            shiftKey: true\n          }\n        ] : [],\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint, editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint, editor, false)\n        },\n        {\n          keyCode: VK.END,\n          action: action(moveToLineEndPoint$2, editor, true, caret)\n        },\n        {\n          keyCode: VK.HOME,\n          action: action(moveToLineEndPoint$2, editor, false, caret)\n        }\n      ], evt).each(_ => {\n        evt.preventDefault();\n      });\n    };\n    const setup$h = (editor, caret) => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$2(editor, caret, evt);\n        }\n      });\n    };\n\n    const setup$g = editor => {\n      editor.on('input', e => {\n        if (!e.isComposing) {\n          normalizeNbspsInEditor(editor);\n        }\n      });\n    };\n\n    const platform = detect$2();\n    const executeKeyupAction = (editor, caret, evt) => {\n      execute([\n        {\n          keyCode: VK.PAGE_UP,\n          action: action(moveToLineEndPoint$2, editor, false, caret)\n        },\n        {\n          keyCode: VK.PAGE_DOWN,\n          action: action(moveToLineEndPoint$2, editor, true, caret)\n        }\n      ], evt);\n    };\n    const stopImmediatePropagation = e => e.stopImmediatePropagation();\n    const isPageUpDown = evt => evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n    const setNodeChangeBlocker = (blocked, editor, block) => {\n      if (block && !blocked.get()) {\n        editor.on('NodeChange', stopImmediatePropagation, true);\n      } else if (!block && blocked.get()) {\n        editor.off('NodeChange', stopImmediatePropagation);\n      }\n      blocked.set(block);\n    };\n    const setup$f = (editor, caret) => {\n      if (platform.os.isMacOS()) {\n        return;\n      }\n      const blocked = Cell(false);\n      editor.on('keydown', evt => {\n        if (isPageUpDown(evt)) {\n          setNodeChangeBlocker(blocked, editor, true);\n        }\n      });\n      editor.on('keyup', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeyupAction(editor, caret, evt);\n        }\n        if (isPageUpDown(evt) && blocked.get()) {\n          setNodeChangeBlocker(blocked, editor, false);\n          editor.nodeChanged();\n        }\n      });\n    };\n\n    const setup$e = editor => {\n      editor.on('beforeinput', e => {\n        if (!editor.selection.isEditable() || exists(e.getTargetRanges(), rng => !isEditableRange(editor.dom, rng))) {\n          e.preventDefault();\n        }\n      });\n    };\n\n    const insertTextAtPosition = (text, pos) => {\n      const container = pos.container();\n      const offset = pos.offset();\n      if (isText$a(container)) {\n        container.insertData(offset, text);\n        return Optional.some(CaretPosition(container, offset + text.length));\n      } else {\n        return getElementFromPosition(pos).map(elm => {\n          const textNode = SugarElement.fromText(text);\n          if (pos.isAtEnd()) {\n            after$4(elm, textNode);\n          } else {\n            before$3(elm, textNode);\n          }\n          return CaretPosition(textNode.dom, text.length);\n        });\n      }\n    };\n    const insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n    const insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n    const insertSpaceOrNbspAtPosition = (root, pos, schema) => needsToHaveNbsp(root, pos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n    const locationToCaretPosition = root => location => location.fold(element => prevPosition(root.dom, CaretPosition.before(element)), element => firstPositionIn(element), element => lastPositionIn(element), element => nextPosition(root.dom, CaretPosition.after(element)));\n    const insertInlineBoundarySpaceOrNbsp = (root, pos, schema) => checkPos => needsToHaveNbsp(root, checkPos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n    const setSelection = editor => pos => {\n      editor.selection.setRng(pos.toRange());\n      editor.nodeChanged();\n    };\n    const isInsideSummary = (domUtils, node) => domUtils.isEditable(domUtils.getParent(node, 'summary'));\n    const insertSpaceOrNbspAtSelection = editor => {\n      const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n      const root = SugarElement.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        const isInlineTarget$1 = curry(isInlineTarget, editor);\n        const caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n        return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).map(checkPos => () => insertInlineBoundarySpaceOrNbsp(root, pos, editor.schema)(checkPos).each(setSelection(editor)));\n      } else {\n        return Optional.none();\n      }\n    };\n    const insertSpaceInSummaryAtSelectionOnFirefox = editor => {\n      const insertSpaceThunk = () => {\n        const root = SugarElement.fromDom(editor.getBody());\n        if (!editor.selection.isCollapsed()) {\n          editor.getDoc().execCommand('Delete');\n        }\n        const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n        insertSpaceOrNbspAtPosition(root, pos, editor.schema).each(setSelection(editor));\n      };\n      return someIf(Env.browser.isFirefox() && editor.selection.isEditable() && isInsideSummary(editor.dom, editor.selection.getRng().startContainer), insertSpaceThunk);\n    };\n\n    const executeKeydownOverride$1 = (editor, evt) => {\n      executeWithDelayedAction([\n        {\n          keyCode: VK.SPACEBAR,\n          action: action(insertSpaceOrNbspAtSelection, editor)\n        },\n        {\n          keyCode: VK.SPACEBAR,\n          action: action(insertSpaceInSummaryAtSelectionOnFirefox, editor)\n        }\n      ], evt).each(applyAction => {\n        evt.preventDefault();\n        const event = fireBeforeInputEvent(editor, 'insertText', { data: ' ' });\n        if (!event.isDefaultPrevented()) {\n          applyAction();\n          fireInputEvent(editor, 'insertText', { data: ' ' });\n        }\n      });\n    };\n    const setup$d = editor => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride$1(editor, evt);\n        }\n      });\n    };\n\n    const tableTabNavigation = editor => {\n      if (hasTableTabNavigation(editor)) {\n        return [\n          {\n            keyCode: VK.TAB,\n            action: action(handleTab, editor, true)\n          },\n          {\n            keyCode: VK.TAB,\n            shiftKey: true,\n            action: action(handleTab, editor, false)\n          }\n        ];\n      } else {\n        return [];\n      }\n    };\n    const executeKeydownOverride = (editor, evt) => {\n      execute([...tableTabNavigation(editor)], evt).each(_ => {\n        evt.preventDefault();\n      });\n    };\n    const setup$c = editor => {\n      editor.on('keydown', evt => {\n        if (!evt.isDefaultPrevented()) {\n          executeKeydownOverride(editor, evt);\n        }\n      });\n    };\n\n    const setup$b = editor => {\n      editor.addShortcut('Meta+P', '', 'mcePrint');\n      setup$k(editor);\n      if (isRtc(editor)) {\n        return Cell(null);\n      } else {\n        const caret = setupSelectedState(editor);\n        setup$e(editor);\n        setup$m(editor);\n        setup$l(editor, caret);\n        setup$j(editor, caret);\n        setup$i(editor);\n        setup$d(editor);\n        setup$g(editor);\n        setup$c(editor);\n        setup$h(editor, caret);\n        setup$f(editor, caret);\n        return caret;\n      }\n    };\n\n    class NodeChange {\n      constructor(editor) {\n        this.lastPath = [];\n        this.editor = editor;\n        let lastRng;\n        const self = this;\n        if (!('onselectionchange' in editor.getDoc())) {\n          editor.on('NodeChange click mouseup keyup focus', e => {\n            const nativeRng = editor.selection.getRng();\n            const fakeRng = {\n              startContainer: nativeRng.startContainer,\n              startOffset: nativeRng.startOffset,\n              endContainer: nativeRng.endContainer,\n              endOffset: nativeRng.endOffset\n            };\n            if (e.type === 'nodechange' || !isEq$4(fakeRng, lastRng)) {\n              editor.dispatch('SelectionChange');\n            }\n            lastRng = fakeRng;\n          });\n        }\n        editor.on('contextmenu', () => {\n          editor.dispatch('SelectionChange');\n        });\n        editor.on('SelectionChange', () => {\n          const startElm = editor.selection.getStart(true);\n          if (!startElm) {\n            return;\n          }\n          if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n            editor.nodeChanged({ selectionChange: true });\n          }\n        });\n        editor.on('mouseup', e => {\n          if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n            if (editor.selection.getNode().nodeName === 'IMG') {\n              Delay.setEditorTimeout(editor, () => {\n                editor.nodeChanged();\n              });\n            } else {\n              editor.nodeChanged();\n            }\n          }\n        });\n      }\n      nodeChanged(args = {}) {\n        const selection = this.editor.selection;\n        let node;\n        if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n          const root = this.editor.getBody();\n          node = selection.getStart(true) || root;\n          if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n            node = root;\n          }\n          const parents = [];\n          this.editor.dom.getParent(node, node => {\n            if (node === root) {\n              return true;\n            } else {\n              parents.push(node);\n              return false;\n            }\n          });\n          this.editor.dispatch('NodeChange', {\n            ...args,\n            element: node,\n            parents\n          });\n        }\n      }\n      isSameElementPath(startElm) {\n        let i;\n        const editor = this.editor;\n        const currentPath = reverse(editor.dom.getParents(startElm, always, editor.getBody()));\n        if (currentPath.length === this.lastPath.length) {\n          for (i = currentPath.length; i >= 0; i--) {\n            if (currentPath[i] !== this.lastPath[i]) {\n              break;\n            }\n          }\n          if (i === -1) {\n            this.lastPath = currentPath;\n            return true;\n          }\n        }\n        this.lastPath = currentPath;\n        return false;\n      }\n    }\n\n    const imageId = generate$1('image');\n    const getDragImage = transfer => {\n      const dt = transfer;\n      return Optional.from(dt[imageId]);\n    };\n    const setDragImage = (transfer, imageData) => {\n      const dt = transfer;\n      dt[imageId] = imageData;\n    };\n\n    const eventId = generate$1('event');\n    const getEvent = transfer => {\n      const dt = transfer;\n      return Optional.from(dt[eventId]);\n    };\n    const mkSetEventFn = type => transfer => {\n      const dt = transfer;\n      dt[eventId] = type;\n    };\n    const setEvent = (transfer, type) => mkSetEventFn(type)(transfer);\n    const setDragstartEvent = mkSetEventFn(0);\n    const setDropEvent = mkSetEventFn(2);\n    const setDragendEvent = mkSetEventFn(1);\n    const checkEvent = expectedType => transfer => {\n      const dt = transfer;\n      return Optional.from(dt[eventId]).exists(type => type === expectedType);\n    };\n    const isInDragStartEvent = checkEvent(0);\n\n    const createEmptyFileList = () => Object.freeze({\n      length: 0,\n      item: _ => null\n    });\n\n    const modeId = generate$1('mode');\n    const getMode = transfer => {\n      const dt = transfer;\n      return Optional.from(dt[modeId]);\n    };\n    const mkSetModeFn = mode => transfer => {\n      const dt = transfer;\n      dt[modeId] = mode;\n    };\n    const setMode$1 = (transfer, mode) => mkSetModeFn(mode)(transfer);\n    const setReadWriteMode = mkSetModeFn(0);\n    const setReadOnlyMode = mkSetModeFn(2);\n    const setProtectedMode = mkSetModeFn(1);\n    const checkMode = expectedMode => transfer => {\n      const dt = transfer;\n      return Optional.from(dt[modeId]).exists(mode => mode === expectedMode);\n    };\n    const isInReadWriteMode = checkMode(0);\n    const isInProtectedMode = checkMode(1);\n\n    const normalizeItems = (dataTransfer, itemsImpl) => ({\n      ...itemsImpl,\n      get length() {\n        return itemsImpl.length;\n      },\n      add: (data, type) => {\n        if (isInReadWriteMode(dataTransfer)) {\n          if (isString(data)) {\n            if (!isUndefined(type)) {\n              return itemsImpl.add(data, type);\n            }\n          } else {\n            return itemsImpl.add(data);\n          }\n        }\n        return null;\n      },\n      remove: idx => {\n        if (isInReadWriteMode(dataTransfer)) {\n          itemsImpl.remove(idx);\n        }\n      },\n      clear: () => {\n        if (isInReadWriteMode(dataTransfer)) {\n          itemsImpl.clear();\n        }\n      }\n    });\n\n    const validDropEffects = [\n      'none',\n      'copy',\n      'link',\n      'move'\n    ];\n    const validEffectAlloweds = [\n      'none',\n      'copy',\n      'copyLink',\n      'copyMove',\n      'link',\n      'linkMove',\n      'move',\n      'all',\n      'uninitialized'\n    ];\n    const createDataTransfer = () => {\n      const dataTransferImpl = new window.DataTransfer();\n      let dropEffect = 'move';\n      let effectAllowed = 'all';\n      const dataTransfer = {\n        get dropEffect() {\n          return dropEffect;\n        },\n        set dropEffect(effect) {\n          if (contains$2(validDropEffects, effect)) {\n            dropEffect = effect;\n          }\n        },\n        get effectAllowed() {\n          return effectAllowed;\n        },\n        set effectAllowed(allowed) {\n          if (isInDragStartEvent(dataTransfer) && contains$2(validEffectAlloweds, allowed)) {\n            effectAllowed = allowed;\n          }\n        },\n        get items() {\n          return normalizeItems(dataTransfer, dataTransferImpl.items);\n        },\n        get files() {\n          if (isInProtectedMode(dataTransfer)) {\n            return createEmptyFileList();\n          } else {\n            return dataTransferImpl.files;\n          }\n        },\n        get types() {\n          return dataTransferImpl.types;\n        },\n        setDragImage: (image, x, y) => {\n          if (isInReadWriteMode(dataTransfer)) {\n            setDragImage(dataTransfer, {\n              image,\n              x,\n              y\n            });\n            dataTransferImpl.setDragImage(image, x, y);\n          }\n        },\n        getData: format => {\n          if (isInProtectedMode(dataTransfer)) {\n            return '';\n          } else {\n            return dataTransferImpl.getData(format);\n          }\n        },\n        setData: (format, data) => {\n          if (isInReadWriteMode(dataTransfer)) {\n            dataTransferImpl.setData(format, data);\n          }\n        },\n        clearData: format => {\n          if (isInReadWriteMode(dataTransfer)) {\n            dataTransferImpl.clearData(format);\n          }\n        }\n      };\n      setReadWriteMode(dataTransfer);\n      return dataTransfer;\n    };\n    const cloneDataTransfer = original => {\n      const clone = createDataTransfer();\n      const originalMode = getMode(original);\n      setReadOnlyMode(original);\n      setDragstartEvent(clone);\n      clone.dropEffect = original.dropEffect;\n      clone.effectAllowed = original.effectAllowed;\n      getDragImage(original).each(imageData => clone.setDragImage(imageData.image, imageData.x, imageData.y));\n      each$e(original.types, type => {\n        if (type !== 'Files') {\n          clone.setData(type, original.getData(type));\n        }\n      });\n      each$e(original.files, file => clone.items.add(file));\n      getEvent(original).each(type => {\n        setEvent(clone, type);\n      });\n      originalMode.each(mode => {\n        setMode$1(original, mode);\n        setMode$1(clone, mode);\n      });\n      return clone;\n    };\n\n    const getHtmlData = dataTransfer => {\n      const html = dataTransfer.getData('text/html');\n      return html === '' ? Optional.none() : Optional.some(html);\n    };\n    const setHtmlData = (dataTransfer, html) => dataTransfer.setData('text/html', html);\n\n    const internalMimeType = 'x-tinymce/html';\n    const internalHtmlMime = constant(internalMimeType);\n    const internalMark = '<!-- ' + internalMimeType + ' -->';\n    const mark = html => internalMark + html;\n    const unmark = html => html.replace(internalMark, '');\n    const isMarked = html => html.indexOf(internalMark) !== -1;\n\n    const isPlainText = text => {\n      return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n    };\n    const openContainer = (rootTag, rootAttrs) => {\n      let tag = '<' + rootTag;\n      const attrs = mapToArray(rootAttrs, (value, key) => key + '=\"' + Entities.encodeAllRaw(value) + '\"');\n      if (attrs.length) {\n        tag += ' ' + attrs.join(' ');\n      }\n      return tag + '>';\n    };\n    const toBlockElements = (text, rootTag, rootAttrs) => {\n      const blocks = text.split(/\\n\\n/);\n      const tagOpen = openContainer(rootTag, rootAttrs);\n      const tagClose = '</' + rootTag + '>';\n      const paragraphs = map$3(blocks, p => {\n        return p.split(/\\n/).join('<br />');\n      });\n      const stitch = p => {\n        return tagOpen + p + tagClose;\n      };\n      return paragraphs.length === 1 ? paragraphs[0] : map$3(paragraphs, stitch).join('');\n    };\n\n    const pasteBinDefaultContent = '%MCEPASTEBIN%';\n    const create$6 = (editor, lastRngCell) => {\n      const {dom, selection} = editor;\n      const body = editor.getBody();\n      lastRngCell.set(selection.getRng());\n      const pasteBinElm = dom.add(editor.getBody(), 'div', {\n        'id': 'mcepastebin',\n        'class': 'mce-pastebin',\n        'contentEditable': true,\n        'data-mce-bogus': 'all',\n        'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n      }, pasteBinDefaultContent);\n      if (Env.browser.isFirefox()) {\n        dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n      }\n      dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', e => {\n        e.stopPropagation();\n      });\n      pasteBinElm.focus();\n      selection.select(pasteBinElm, true);\n    };\n    const remove = (editor, lastRngCell) => {\n      const dom = editor.dom;\n      if (getEl(editor)) {\n        let pasteBinClone;\n        const lastRng = lastRngCell.get();\n        while (pasteBinClone = getEl(editor)) {\n          dom.remove(pasteBinClone);\n          dom.unbind(pasteBinClone);\n        }\n        if (lastRng) {\n          editor.selection.setRng(lastRng);\n        }\n      }\n      lastRngCell.set(null);\n    };\n    const getEl = editor => editor.dom.get('mcepastebin');\n    const isPasteBin = elm => isNonNullable(elm) && elm.id === 'mcepastebin';\n    const getHtml = editor => {\n      const dom = editor.dom;\n      const copyAndRemove = (toElm, fromElm) => {\n        toElm.appendChild(fromElm);\n        dom.remove(fromElm, true);\n      };\n      const [pasteBinElm, ...pasteBinClones] = filter$5(editor.getBody().childNodes, isPasteBin);\n      each$e(pasteBinClones, pasteBinClone => {\n        copyAndRemove(pasteBinElm, pasteBinClone);\n      });\n      const dirtyWrappers = dom.select('div[id=mcepastebin]', pasteBinElm);\n      for (let i = dirtyWrappers.length - 1; i >= 0; i--) {\n        const cleanWrapper = dom.create('div');\n        pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n        copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n      }\n      return pasteBinElm ? pasteBinElm.innerHTML : '';\n    };\n    const isDefaultPasteBinContent = content => content === pasteBinDefaultContent;\n    const PasteBin = editor => {\n      const lastRng = Cell(null);\n      return {\n        create: () => create$6(editor, lastRng),\n        remove: () => remove(editor, lastRng),\n        getEl: () => getEl(editor),\n        getHtml: () => getHtml(editor),\n        getLastRng: lastRng.get\n      };\n    };\n\n    const filter$1 = (content, items) => {\n      Tools.each(items, v => {\n        if (is$4(v, RegExp)) {\n          content = content.replace(v, '');\n        } else {\n          content = content.replace(v[0], v[1]);\n        }\n      });\n      return content;\n    };\n    const innerText = html => {\n      const schema = Schema();\n      const domParser = DomParser({}, schema);\n      let text = '';\n      const voidElements = schema.getVoidElements();\n      const ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' ');\n      const blockElements = schema.getBlockElements();\n      const walk = node => {\n        const name = node.name, currentNode = node;\n        if (name === 'br') {\n          text += '\\n';\n          return;\n        }\n        if (name === 'wbr') {\n          return;\n        }\n        if (voidElements[name]) {\n          text += ' ';\n        }\n        if (ignoreElements[name]) {\n          text += ' ';\n          return;\n        }\n        if (node.type === 3) {\n          text += node.value;\n        }\n        if (!(node.name in schema.getVoidElements())) {\n          let currentNode = node.firstChild;\n          if (currentNode) {\n            do {\n              walk(currentNode);\n            } while (currentNode = currentNode.next);\n          }\n        }\n        if (blockElements[name] && currentNode.next) {\n          text += '\\n';\n          if (name === 'p') {\n            text += '\\n';\n          }\n        }\n      };\n      html = filter$1(html, [/<!\\[[^\\]]+\\]>/g]);\n      walk(domParser.parse(html));\n      return text;\n    };\n    const trimHtml = html => {\n      const trimSpaces = (all, s1, s2) => {\n        if (!s1 && !s2) {\n          return ' ';\n        }\n        return nbsp;\n      };\n      html = filter$1(html, [\n        /^[\\s\\S]*<body[^>]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n        /<!--StartFragment-->|<!--EndFragment-->/g,\n        [\n          /( ?)<span class=\"Apple-converted-space\">\\u00a0<\\/span>( ?)/g,\n          trimSpaces\n        ],\n        /<br class=\"Apple-interchange-newline\">/g,\n        /<br>$/i\n      ]);\n      return html;\n    };\n    const createIdGenerator = prefix => {\n      let count = 0;\n      return () => {\n        return prefix + count++;\n      };\n    };\n    const getImageMimeType = ext => {\n      const lowerExt = ext.toLowerCase();\n      const mimeOverrides = {\n        jpg: 'jpeg',\n        jpe: 'jpeg',\n        jfi: 'jpeg',\n        jif: 'jpeg',\n        jfif: 'jpeg',\n        pjpeg: 'jpeg',\n        pjp: 'jpeg',\n        svg: 'svg+xml'\n      };\n      return Tools.hasOwn(mimeOverrides, lowerExt) ? 'image/' + mimeOverrides[lowerExt] : 'image/' + lowerExt;\n    };\n\n    const preProcess = (editor, html) => {\n      const parser = DomParser({\n        sanitize: shouldSanitizeXss(editor),\n        sandbox_iframes: shouldSandboxIframes(editor)\n      }, editor.schema);\n      parser.addNodeFilter('meta', nodes => {\n        Tools.each(nodes, node => {\n          node.remove();\n        });\n      });\n      const fragment = parser.parse(html, {\n        forced_root_block: false,\n        isRootContent: true\n      });\n      return HtmlSerializer({ validate: true }, editor.schema).serialize(fragment);\n    };\n    const processResult = (content, cancelled) => ({\n      content,\n      cancelled\n    });\n    const postProcessFilter = (editor, html, internal) => {\n      const tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n      const postProcessArgs = firePastePostProcess(editor, tempBody, internal);\n      return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n    };\n    const filterContent = (editor, content, internal) => {\n      const preProcessArgs = firePastePreProcess(editor, content, internal);\n      const filteredContent = preProcess(editor, preProcessArgs.content);\n      if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n        return postProcessFilter(editor, filteredContent, internal);\n      } else {\n        return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n      }\n    };\n    const process = (editor, html, internal) => {\n      return filterContent(editor, html, internal);\n    };\n\n    const pasteHtml$1 = (editor, html) => {\n      editor.insertContent(html, {\n        merge: shouldPasteMergeFormats(editor),\n        paste: true\n      });\n      return true;\n    };\n    const isAbsoluteUrl = url => /^https?:\\/\\/[\\w\\-\\/+=.,!;:&%@^~(){}?#]+$/i.test(url);\n    const isImageUrl = (editor, url) => {\n      return isAbsoluteUrl(url) && exists(getAllowedImageFileTypes(editor), type => endsWith(url.toLowerCase(), `.${ type.toLowerCase() }`));\n    };\n    const createImage = (editor, url, pasteHtmlFn) => {\n      editor.undoManager.extra(() => {\n        pasteHtmlFn(editor, url);\n      }, () => {\n        editor.insertContent('<img src=\"' + url + '\">');\n      });\n      return true;\n    };\n    const createLink = (editor, url, pasteHtmlFn) => {\n      editor.undoManager.extra(() => {\n        pasteHtmlFn(editor, url);\n      }, () => {\n        editor.execCommand('mceInsertLink', false, url);\n      });\n      return true;\n    };\n    const linkSelection = (editor, html, pasteHtmlFn) => !editor.selection.isCollapsed() && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n    const insertImage = (editor, html, pasteHtmlFn) => isImageUrl(editor, html) ? createImage(editor, html, pasteHtmlFn) : false;\n    const smartInsertContent = (editor, html) => {\n      Tools.each([\n        linkSelection,\n        insertImage,\n        pasteHtml$1\n      ], action => {\n        return !action(editor, html, pasteHtml$1);\n      });\n    };\n    const insertContent = (editor, html, pasteAsText) => {\n      if (pasteAsText || !isSmartPasteEnabled(editor)) {\n        pasteHtml$1(editor, html);\n      } else {\n        smartInsertContent(editor, html);\n      }\n    };\n\n    const uniqueId = createIdGenerator('mceclip');\n    const createPasteDataTransfer = html => {\n      const dataTransfer = createDataTransfer();\n      setHtmlData(dataTransfer, html);\n      setReadOnlyMode(dataTransfer);\n      return dataTransfer;\n    };\n    const doPaste = (editor, content, internal, pasteAsText, shouldSimulateInputEvent) => {\n      const res = process(editor, content, internal);\n      if (!res.cancelled) {\n        const content = res.content;\n        const doPasteAction = () => insertContent(editor, content, pasteAsText);\n        if (shouldSimulateInputEvent) {\n          const args = fireBeforeInputEvent(editor, 'insertFromPaste', { dataTransfer: createPasteDataTransfer(content) });\n          if (!args.isDefaultPrevented()) {\n            doPasteAction();\n            fireInputEvent(editor, 'insertFromPaste');\n          }\n        } else {\n          doPasteAction();\n        }\n      }\n    };\n    const pasteHtml = (editor, html, internalFlag, shouldSimulateInputEvent) => {\n      const internal = internalFlag ? internalFlag : isMarked(html);\n      doPaste(editor, unmark(html), internal, false, shouldSimulateInputEvent);\n    };\n    const pasteText = (editor, text, shouldSimulateInputEvent) => {\n      const encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n      const normalizedText = normalize$4(encodedText, getPasteTabSpaces(editor));\n      const html = toBlockElements(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n      doPaste(editor, html, false, true, shouldSimulateInputEvent);\n    };\n    const getDataTransferItems = dataTransfer => {\n      const items = {};\n      if (dataTransfer && dataTransfer.types) {\n        for (let i = 0; i < dataTransfer.types.length; i++) {\n          const contentType = dataTransfer.types[i];\n          try {\n            items[contentType] = dataTransfer.getData(contentType);\n          } catch (ex) {\n            items[contentType] = '';\n          }\n        }\n      }\n      return items;\n    };\n    const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n    const hasHtmlOrText = content => hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n    const extractFilename = (editor, str) => {\n      const m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n      return isNonNullable(m) ? editor.dom.encode(m[1]) : undefined;\n    };\n    const createBlobInfo = (editor, blobCache, file, base64) => {\n      const id = uniqueId();\n      const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n      const name = useFileName ? extractFilename(editor, file.name) : id;\n      const filename = useFileName ? file.name : undefined;\n      const blobInfo = blobCache.create(id, file, base64, name, filename);\n      blobCache.add(blobInfo);\n      return blobInfo;\n    };\n    const pasteImage = (editor, imageItem) => {\n      parseDataUri(imageItem.uri).each(({data, type, base64Encoded}) => {\n        const base64 = base64Encoded ? data : btoa(data);\n        const file = imageItem.file;\n        const blobCache = editor.editorUpload.blobCache;\n        const existingBlobInfo = blobCache.getByData(base64, type);\n        const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n        pasteHtml(editor, `<img src=\"${ blobInfo.blobUri() }\">`, false, true);\n      });\n    };\n    const isClipboardEvent = event => event.type === 'paste';\n    const readFilesAsDataUris = items => Promise.all(map$3(items, file => {\n      return blobToDataUri(file).then(uri => ({\n        file,\n        uri\n      }));\n    }));\n    const isImage = editor => {\n      const allowedExtensions = getAllowedImageFileTypes(editor);\n      return file => startsWith(file.type, 'image/') && exists(allowedExtensions, extension => {\n        return getImageMimeType(extension) === file.type;\n      });\n    };\n    const getImagesFromDataTransfer = (editor, dataTransfer) => {\n      const items = dataTransfer.items ? bind$3(from(dataTransfer.items), item => {\n        return item.kind === 'file' ? [item.getAsFile()] : [];\n      }) : [];\n      const files = dataTransfer.files ? from(dataTransfer.files) : [];\n      return filter$5(items.length > 0 ? items : files, isImage(editor));\n    };\n    const pasteImageData = (editor, e, rng) => {\n      const dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n      if (shouldPasteDataImages(editor) && dataTransfer) {\n        const images = getImagesFromDataTransfer(editor, dataTransfer);\n        if (images.length > 0) {\n          e.preventDefault();\n          readFilesAsDataUris(images).then(fileResults => {\n            if (rng) {\n              editor.selection.setRng(rng);\n            }\n            each$e(fileResults, result => {\n              pasteImage(editor, result);\n            });\n          });\n          return true;\n        }\n      }\n      return false;\n    };\n    const isBrokenAndroidClipboardEvent = e => {\n      var _a, _b;\n      return Env.os.isAndroid() && ((_b = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.length) === 0;\n    };\n    const isKeyboardPasteEvent = e => VK.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n    const insertClipboardContent = (editor, clipboardContent, html, plainTextMode, shouldSimulateInputEvent) => {\n      let content = trimHtml(html);\n      const isInternal = hasContentType(clipboardContent, internalHtmlMime()) || isMarked(html);\n      const isPlainTextHtml = !isInternal && isPlainText(content);\n      const isAbsoluteUrl$1 = isAbsoluteUrl(content);\n      if (isDefaultPasteBinContent(content) || !content.length || isPlainTextHtml && !isAbsoluteUrl$1) {\n        plainTextMode = true;\n      }\n      if (plainTextMode || isAbsoluteUrl$1) {\n        if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n          content = clipboardContent['text/plain'];\n        } else {\n          content = innerText(content);\n        }\n      }\n      if (isDefaultPasteBinContent(content)) {\n        return;\n      }\n      if (plainTextMode) {\n        pasteText(editor, content, shouldSimulateInputEvent);\n      } else {\n        pasteHtml(editor, content, isInternal, shouldSimulateInputEvent);\n      }\n    };\n    const registerEventHandlers = (editor, pasteBin, pasteFormat) => {\n      let keyboardPastePlainTextState;\n      const getLastRng = () => pasteBin.getLastRng() || editor.selection.getRng();\n      editor.on('keydown', e => {\n        if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n          keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n        }\n      });\n      editor.on('paste', e => {\n        if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n          return;\n        }\n        const plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n        keyboardPastePlainTextState = false;\n        const clipboardContent = getDataTransferItems(e.clipboardData);\n        if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n          return;\n        }\n        if (hasContentType(clipboardContent, 'text/html')) {\n          e.preventDefault();\n          insertClipboardContent(editor, clipboardContent, clipboardContent['text/html'], plainTextMode, true);\n        } else if (hasContentType(clipboardContent, 'text/plain') && hasContentType(clipboardContent, 'text/uri-list')) {\n          e.preventDefault();\n          insertClipboardContent(editor, clipboardContent, clipboardContent['text/plain'], plainTextMode, true);\n        } else {\n          pasteBin.create();\n          Delay.setEditorTimeout(editor, () => {\n            const html = pasteBin.getHtml();\n            pasteBin.remove();\n            insertClipboardContent(editor, clipboardContent, html, plainTextMode, false);\n          }, 0);\n        }\n      });\n    };\n    const registerDataImageFilter = editor => {\n      const isWebKitFakeUrl = src => startsWith(src, 'webkit-fake-url');\n      const isDataUri = src => startsWith(src, 'data:');\n      const isPasteInsert = args => {\n        var _a;\n        return ((_a = args.data) === null || _a === void 0 ? void 0 : _a.paste) === true;\n      };\n      editor.parser.addNodeFilter('img', (nodes, name, args) => {\n        if (!shouldPasteDataImages(editor) && isPasteInsert(args)) {\n          for (const node of nodes) {\n            const src = node.attr('src');\n            if (isString(src) && !node.attr('data-mce-object') && src !== Env.transparentSrc) {\n              if (isWebKitFakeUrl(src)) {\n                node.remove();\n              } else if (!shouldAllowHtmlDataUrls(editor) && isDataUri(src)) {\n                node.remove();\n              }\n            }\n          }\n        }\n      });\n    };\n    const registerEventsAndFilters = (editor, pasteBin, pasteFormat) => {\n      registerEventHandlers(editor, pasteBin, pasteFormat);\n      registerDataImageFilter(editor);\n    };\n\n    const togglePlainTextPaste = (editor, pasteFormat) => {\n      if (pasteFormat.get() === 'text') {\n        pasteFormat.set('html');\n        firePastePlainTextToggle(editor, false);\n      } else {\n        pasteFormat.set('text');\n        firePastePlainTextToggle(editor, true);\n      }\n      editor.focus();\n    };\n    const register$1 = (editor, pasteFormat) => {\n      editor.addCommand('mceTogglePlainTextPaste', () => {\n        togglePlainTextPaste(editor, pasteFormat);\n      });\n      editor.addCommand('mceInsertClipboardContent', (ui, value) => {\n        if (value.html) {\n          pasteHtml(editor, value.html, value.internal, false);\n        }\n        if (value.text) {\n          pasteText(editor, value.text, false);\n        }\n      });\n    };\n\n    const setHtml5Clipboard = (clipboardData, html, text) => {\n      if (clipboardData) {\n        try {\n          clipboardData.clearData();\n          clipboardData.setData('text/html', html);\n          clipboardData.setData('text/plain', text);\n          clipboardData.setData(internalHtmlMime(), html);\n          return true;\n        } catch (e) {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    };\n    const setClipboardData = (evt, data, fallback, done) => {\n      if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n        evt.preventDefault();\n        done();\n      } else {\n        fallback(data.html, done);\n      }\n    };\n    const fallback = editor => (html, done) => {\n      const {dom, selection} = editor;\n      const outer = dom.create('div', {\n        'contenteditable': 'false',\n        'data-mce-bogus': 'all'\n      });\n      const inner = dom.create('div', { contenteditable: 'true' }, html);\n      dom.setStyles(outer, {\n        position: 'fixed',\n        top: '0',\n        left: '-3000px',\n        width: '1000px',\n        overflow: 'hidden'\n      });\n      outer.appendChild(inner);\n      dom.add(editor.getBody(), outer);\n      const range = selection.getRng();\n      inner.focus();\n      const offscreenRange = dom.createRng();\n      offscreenRange.selectNodeContents(inner);\n      selection.setRng(offscreenRange);\n      Delay.setEditorTimeout(editor, () => {\n        selection.setRng(range);\n        dom.remove(outer);\n        done();\n      }, 0);\n    };\n    const getData = editor => ({\n      html: mark(editor.selection.getContent({ contextual: true })),\n      text: editor.selection.getContent({ format: 'text' })\n    });\n    const isTableSelection = editor => !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n    const hasSelectedContent = editor => !editor.selection.isCollapsed() || isTableSelection(editor);\n    const cut = editor => evt => {\n      if (!evt.isDefaultPrevented() && hasSelectedContent(editor) && editor.selection.isEditable()) {\n        setClipboardData(evt, getData(editor), fallback(editor), () => {\n          if (Env.browser.isChromium() || Env.browser.isFirefox()) {\n            const rng = editor.selection.getRng();\n            Delay.setEditorTimeout(editor, () => {\n              editor.selection.setRng(rng);\n              editor.execCommand('Delete');\n            }, 0);\n          } else {\n            editor.execCommand('Delete');\n          }\n        });\n      }\n    };\n    const copy = editor => evt => {\n      if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n        setClipboardData(evt, getData(editor), fallback(editor), noop);\n      }\n    };\n    const register = editor => {\n      editor.on('cut', cut(editor));\n      editor.on('copy', copy(editor));\n    };\n\n    const getCaretRangeFromEvent = (editor, e) => {\n      var _a, _b;\n      return RangeUtils.getCaretRangeFromPoint((_a = e.clientX) !== null && _a !== void 0 ? _a : 0, (_b = e.clientY) !== null && _b !== void 0 ? _b : 0, editor.getDoc());\n    };\n    const isPlainTextFileUrl = content => {\n      const plainTextContent = content['text/plain'];\n      return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n    };\n    const setFocusedRange = (editor, rng) => {\n      editor.focus();\n      if (rng) {\n        editor.selection.setRng(rng);\n      }\n    };\n    const hasImage = dataTransfer => exists(dataTransfer.files, file => /^image\\//.test(file.type));\n    const needsCustomInternalDrop = (dom, schema, target, dropContent) => {\n      const parentTransparent = dom.getParent(target, node => isTransparentBlock(schema, node));\n      const inSummary = !isNull(dom.getParent(target, 'summary'));\n      if (inSummary) {\n        return true;\n      } else if (parentTransparent && has$2(dropContent, 'text/html')) {\n        const fragment = new DOMParser().parseFromString(dropContent['text/html'], 'text/html').body;\n        return !isNull(fragment.querySelector(parentTransparent.nodeName.toLowerCase()));\n      } else {\n        return false;\n      }\n    };\n    const setupSummaryDeleteByDragFix = editor => {\n      editor.on('input', e => {\n        const hasNoSummary = el => isNull(el.querySelector('summary'));\n        if (e.inputType === 'deleteByDrag') {\n          const brokenDetailElements = filter$5(editor.dom.select('details'), hasNoSummary);\n          each$e(brokenDetailElements, details => {\n            if (isBr$6(details.firstChild)) {\n              details.firstChild.remove();\n            }\n            const summary = editor.dom.create('summary');\n            summary.appendChild(createPaddingBr().dom);\n            details.prepend(summary);\n          });\n        }\n      });\n    };\n    const setup$a = (editor, draggingInternallyState) => {\n      if (shouldPasteBlockDrop(editor)) {\n        editor.on('dragend dragover draggesture dragdrop drop drag', e => {\n          e.preventDefault();\n          e.stopPropagation();\n        });\n      }\n      if (!shouldPasteDataImages(editor)) {\n        editor.on('drop', e => {\n          const dataTransfer = e.dataTransfer;\n          if (dataTransfer && hasImage(dataTransfer)) {\n            e.preventDefault();\n          }\n        });\n      }\n      editor.on('drop', e => {\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        const rng = getCaretRangeFromEvent(editor, e);\n        if (isNullable(rng)) {\n          return;\n        }\n        const dropContent = getDataTransferItems(e.dataTransfer);\n        const internal = hasContentType(dropContent, internalHtmlMime());\n        if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(editor, e, rng)) {\n          return;\n        }\n        const internalContent = dropContent[internalHtmlMime()];\n        const content = internalContent || dropContent['text/html'] || dropContent['text/plain'];\n        const needsInternalDrop = needsCustomInternalDrop(editor.dom, editor.schema, rng.startContainer, dropContent);\n        const isInternalDrop = draggingInternallyState.get();\n        if (isInternalDrop && !needsInternalDrop) {\n          return;\n        }\n        if (content) {\n          e.preventDefault();\n          Delay.setEditorTimeout(editor, () => {\n            editor.undoManager.transact(() => {\n              if (internalContent || isInternalDrop && needsInternalDrop) {\n                editor.execCommand('Delete');\n              }\n              setFocusedRange(editor, rng);\n              const trimmedContent = trimHtml(content);\n              if (dropContent['text/html']) {\n                pasteHtml(editor, trimmedContent, internal, true);\n              } else {\n                pasteText(editor, trimmedContent, true);\n              }\n            });\n          });\n        }\n      });\n      editor.on('dragstart', _e => {\n        draggingInternallyState.set(true);\n      });\n      editor.on('dragover dragend', e => {\n        if (shouldPasteDataImages(editor) && !draggingInternallyState.get()) {\n          e.preventDefault();\n          setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n        }\n        if (e.type === 'dragend') {\n          draggingInternallyState.set(false);\n        }\n      });\n      setupSummaryDeleteByDragFix(editor);\n    };\n\n    const setup$9 = editor => {\n      const processEvent = f => e => {\n        f(editor, e);\n      };\n      const preProcess = getPastePreProcess(editor);\n      if (isFunction(preProcess)) {\n        editor.on('PastePreProcess', processEvent(preProcess));\n      }\n      const postProcess = getPastePostProcess(editor);\n      if (isFunction(postProcess)) {\n        editor.on('PastePostProcess', processEvent(postProcess));\n      }\n    };\n\n    const addPreProcessFilter = (editor, filterFunc) => {\n      editor.on('PastePreProcess', e => {\n        e.content = filterFunc(editor, e.content, e.internal);\n      });\n    };\n    const rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n    const rgbToHex = value => Tools.trim(value).replace(rgbRegExp, rgbaToHexString).toLowerCase();\n    const removeWebKitStyles = (editor, content, internal) => {\n      const webKitStylesOption = getPasteWebkitStyles(editor);\n      if (internal || webKitStylesOption === 'all' || !shouldPasteRemoveWebKitStyles(editor)) {\n        return content;\n      }\n      const webKitStyles = webKitStylesOption ? webKitStylesOption.split(/[, ]/) : [];\n      if (webKitStyles && webKitStylesOption !== 'none') {\n        const dom = editor.dom, node = editor.selection.getNode();\n        content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, (all, before, value, after) => {\n          const inputStyles = dom.parseStyle(dom.decode(value));\n          const outputStyles = {};\n          for (let i = 0; i < webKitStyles.length; i++) {\n            const inputValue = inputStyles[webKitStyles[i]];\n            let compareInput = inputValue;\n            let currentValue = dom.getStyle(node, webKitStyles[i], true);\n            if (/color/.test(webKitStyles[i])) {\n              compareInput = rgbToHex(compareInput);\n              currentValue = rgbToHex(currentValue);\n            }\n            if (currentValue !== compareInput) {\n              outputStyles[webKitStyles[i]] = inputValue;\n            }\n          }\n          const outputStyle = dom.serializeStyle(outputStyles, 'span');\n          if (outputStyle) {\n            return before + ' style=\"' + outputStyle + '\"' + after;\n          }\n          return before + after;\n        });\n      } else {\n        content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n      }\n      content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, (all, before, value, after) => {\n        return before + ' style=\"' + value + '\"' + after;\n      });\n      return content;\n    };\n    const setup$8 = editor => {\n      if (Env.browser.isChromium() || Env.browser.isSafari()) {\n        addPreProcessFilter(editor, removeWebKitStyles);\n      }\n    };\n\n    const setup$7 = editor => {\n      const draggingInternallyState = Cell(false);\n      const pasteFormat = Cell(isPasteAsTextEnabled(editor) ? 'text' : 'html');\n      const pasteBin = PasteBin(editor);\n      setup$8(editor);\n      register$1(editor, pasteFormat);\n      setup$9(editor);\n      editor.on('PreInit', () => {\n        register(editor);\n        setup$a(editor, draggingInternallyState);\n        registerEventsAndFilters(editor, pasteBin, pasteFormat);\n      });\n    };\n\n    const preventSummaryToggle = editor => {\n      editor.on('click', e => {\n        if (editor.dom.getParent(e.target, 'details')) {\n          e.preventDefault();\n        }\n      });\n    };\n    const filterDetails = editor => {\n      editor.parser.addNodeFilter('details', elms => {\n        const initialStateOption = getDetailsInitialState(editor);\n        each$e(elms, details => {\n          if (initialStateOption === 'expanded') {\n            details.attr('open', 'open');\n          } else if (initialStateOption === 'collapsed') {\n            details.attr('open', null);\n          }\n        });\n      });\n      editor.serializer.addNodeFilter('details', elms => {\n        const serializedStateOption = getDetailsSerializedState(editor);\n        each$e(elms, details => {\n          if (serializedStateOption === 'expanded') {\n            details.attr('open', 'open');\n          } else if (serializedStateOption === 'collapsed') {\n            details.attr('open', null);\n          }\n        });\n      });\n    };\n    const setup$6 = editor => {\n      preventSummaryToggle(editor);\n      filterDetails(editor);\n    };\n\n    const isBr = isBr$6;\n    const isText = isText$a;\n    const isContentEditableFalse$2 = elm => isContentEditableFalse$b(elm.dom);\n    const isContentEditableTrue = elm => isContentEditableTrue$3(elm.dom);\n    const isRoot = rootNode => elm => eq(SugarElement.fromDom(rootNode), elm);\n    const getClosestScope = (node, rootNode, schema) => closest$4(SugarElement.fromDom(node), elm => isContentEditableTrue(elm) || schema.isBlock(name(elm)), isRoot(rootNode)).getOr(SugarElement.fromDom(rootNode)).dom;\n    const getClosestCef = (node, rootNode) => closest$4(SugarElement.fromDom(node), isContentEditableFalse$2, isRoot(rootNode));\n    const findEdgeCaretCandidate = (startNode, scope, forward) => {\n      const walker = new DomTreeWalker(startNode, scope);\n      const next = forward ? walker.next.bind(walker) : walker.prev.bind(walker);\n      let result = startNode;\n      for (let current = forward ? startNode : next(); current && !isBr(current); current = next()) {\n        if (isCaretCandidate$3(current)) {\n          result = current;\n        }\n      }\n      return result;\n    };\n    const findClosestBlockRange = (startRng, rootNode, schema) => {\n      const startPos = CaretPosition.fromRangeStart(startRng);\n      const clickNode = startPos.getNode();\n      const scope = getClosestScope(clickNode, rootNode, schema);\n      const startNode = findEdgeCaretCandidate(clickNode, scope, false);\n      const endNode = findEdgeCaretCandidate(clickNode, scope, true);\n      const rng = document.createRange();\n      getClosestCef(startNode, scope).fold(() => {\n        if (isText(startNode)) {\n          rng.setStart(startNode, 0);\n        } else {\n          rng.setStartBefore(startNode);\n        }\n      }, cef => rng.setStartBefore(cef.dom));\n      getClosestCef(endNode, scope).fold(() => {\n        if (isText(endNode)) {\n          rng.setEnd(endNode, endNode.data.length);\n        } else {\n          rng.setEndAfter(endNode);\n        }\n      }, cef => rng.setEndAfter(cef.dom));\n      return rng;\n    };\n    const onTripleClickSelect = editor => {\n      const rng = findClosestBlockRange(editor.selection.getRng(), editor.getBody(), editor.schema);\n      editor.selection.setRng(normalize(rng));\n    };\n    const setup$5 = editor => {\n      editor.on('mousedown', e => {\n        if (e.detail >= 3) {\n          e.preventDefault();\n          onTripleClickSelect(editor);\n        }\n      });\n    };\n\n    var FakeCaretPosition;\n    (function (FakeCaretPosition) {\n      FakeCaretPosition['Before'] = 'before';\n      FakeCaretPosition['After'] = 'after';\n    }(FakeCaretPosition || (FakeCaretPosition = {})));\n    const distanceToRectLeft = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n    const distanceToRectRight = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n    const isInsideY = (clientY, clientRect) => clientY >= clientRect.top && clientY <= clientRect.bottom;\n    const collidesY = (r1, r2) => r1.top < r2.bottom && r1.bottom > r2.top;\n    const isOverlapping = (r1, r2) => {\n      const overlap = overlapY(r1, r2) / Math.min(r1.height, r2.height);\n      return collidesY(r1, r2) && overlap > 0.5;\n    };\n    const splitRectsPerAxis = (rects, y) => {\n      const intersectingRects = filter$5(rects, rect => isInsideY(y, rect));\n      return boundingClientRectFromRects(intersectingRects).fold(() => [\n        [],\n        rects\n      ], boundingRect => {\n        const {\n          pass: horizontal,\n          fail: vertical\n        } = partition$2(rects, rect => isOverlapping(rect, boundingRect));\n        return [\n          horizontal,\n          vertical\n        ];\n      });\n    };\n    const clientInfo = (rect, clientX) => {\n      return {\n        node: rect.node,\n        position: distanceToRectLeft(rect, clientX) < distanceToRectRight(rect, clientX) ? FakeCaretPosition.Before : FakeCaretPosition.After\n      };\n    };\n    const horizontalDistance = (rect, x, _y) => x > rect.left && x < rect.right ? 0 : Math.min(Math.abs(rect.left - x), Math.abs(rect.right - x));\n    const closestChildCaretCandidateNodeRect = (children, clientX, clientY) => {\n      const caretCandidateRect = rect => {\n        if (isCaretCandidate$3(rect.node)) {\n          return Optional.some(rect);\n        } else if (isElement$6(rect.node)) {\n          return closestChildCaretCandidateNodeRect(from(rect.node.childNodes), clientX, clientY);\n        } else {\n          return Optional.none();\n        }\n      };\n      const getClosestTextNode = (rects, distance) => {\n        if (rects.length >= 2) {\n          const r1 = caretCandidateRect(rects[0]).getOr(rects[0]);\n          const r2 = caretCandidateRect(rects[1]).getOr(rects[1]);\n          const deltaDistance = Math.abs(distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n          if (deltaDistance < 2) {\n            if (isText$a(r1.node)) {\n              return Optional.some(r1);\n            } else if (isText$a(r2.node)) {\n              return Optional.some(r2);\n            }\n          }\n        }\n        return Optional.none();\n      };\n      const findClosestCaretCandidateNodeRect = (rects, distance) => {\n        const sortedRects = sort(rects, (r1, r2) => distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n        return getClosestTextNode(sortedRects, distance).orThunk(() => findMap(sortedRects, caretCandidateRect));\n      };\n      const [horizontalRects, verticalRects] = splitRectsPerAxis(getClientRects(children), clientY);\n      const {\n        pass: above,\n        fail: below\n      } = partition$2(verticalRects, rect => rect.top < clientY);\n      return findClosestCaretCandidateNodeRect(horizontalRects, horizontalDistance).orThunk(() => findClosestCaretCandidateNodeRect(below, distanceToRectEdgeFromXY)).orThunk(() => findClosestCaretCandidateNodeRect(above, distanceToRectEdgeFromXY));\n    };\n    const traverseUp = (rootElm, scope, clientX, clientY) => {\n      const helper = (scope, prevScope) => {\n        const isDragGhostContainer = node => isElement$6(node) && node.classList.contains('mce-drag-container');\n        const childNodesWithoutGhost = filter$5(scope.dom.childNodes, not(isDragGhostContainer));\n        return prevScope.fold(() => closestChildCaretCandidateNodeRect(childNodesWithoutGhost, clientX, clientY), prevScope => {\n          const uncheckedChildren = filter$5(childNodesWithoutGhost, node => node !== prevScope.dom);\n          return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY);\n        }).orThunk(() => {\n          const parent = eq(scope, rootElm) ? Optional.none() : parentElement(scope);\n          return parent.bind(newScope => helper(newScope, Optional.some(scope)));\n        });\n      };\n      return helper(scope, Optional.none());\n    };\n    const closestCaretCandidateNodeRect = (root, clientX, clientY) => {\n      const rootElm = SugarElement.fromDom(root);\n      const ownerDoc = documentOrOwner(rootElm);\n      const elementAtPoint = SugarElement.fromPoint(ownerDoc, clientX, clientY).filter(elm => contains(rootElm, elm));\n      const element = elementAtPoint.getOr(rootElm);\n      return traverseUp(rootElm, element, clientX, clientY);\n    };\n    const closestFakeCaretCandidate = (root, clientX, clientY) => closestCaretCandidateNodeRect(root, clientX, clientY).filter(rect => isFakeCaretTarget(rect.node)).map(rect => clientInfo(rect, clientX));\n\n    const getAbsolutePosition = elm => {\n      var _a, _b;\n      const clientRect = elm.getBoundingClientRect();\n      const doc = elm.ownerDocument;\n      const docElem = doc.documentElement;\n      const win = doc.defaultView;\n      return {\n        top: clientRect.top + ((_a = win === null || win === void 0 ? void 0 : win.scrollY) !== null && _a !== void 0 ? _a : 0) - docElem.clientTop,\n        left: clientRect.left + ((_b = win === null || win === void 0 ? void 0 : win.scrollX) !== null && _b !== void 0 ? _b : 0) - docElem.clientLeft\n      };\n    };\n    const getBodyPosition = editor => editor.inline ? getAbsolutePosition(editor.getBody()) : {\n      left: 0,\n      top: 0\n    };\n    const getScrollPosition = editor => {\n      const body = editor.getBody();\n      return editor.inline ? {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      } : {\n        left: 0,\n        top: 0\n      };\n    };\n    const getBodyScroll = editor => {\n      const body = editor.getBody(), docElm = editor.getDoc().documentElement;\n      const inlineScroll = {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      };\n      const iframeScroll = {\n        left: body.scrollLeft || docElm.scrollLeft,\n        top: body.scrollTop || docElm.scrollTop\n      };\n      return editor.inline ? inlineScroll : iframeScroll;\n    };\n    const getMousePosition = (editor, event) => {\n      if (event.target.ownerDocument !== editor.getDoc()) {\n        const iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n        const scrollPosition = getBodyScroll(editor);\n        return {\n          left: event.pageX - iframePosition.left + scrollPosition.left,\n          top: event.pageY - iframePosition.top + scrollPosition.top\n        };\n      }\n      return {\n        left: event.pageX,\n        top: event.pageY\n      };\n    };\n    const calculatePosition = (bodyPosition, scrollPosition, mousePosition) => ({\n      pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n      pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n    });\n    const calc = (editor, event) => calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n\n    const getTargetProps = target => ({\n      target,\n      srcElement: target\n    });\n    const makeDndEventFromMouseEvent = (type, mouseEvent, target, dataTransfer) => ({\n      ...mouseEvent,\n      dataTransfer,\n      type,\n      ...getTargetProps(target)\n    });\n    const makeDndEvent = (type, target, dataTransfer) => {\n      const fail = die('Function not supported on simulated event.');\n      const event = {\n        bubbles: true,\n        cancelBubble: false,\n        cancelable: true,\n        composed: false,\n        currentTarget: null,\n        defaultPrevented: false,\n        eventPhase: 0,\n        isTrusted: true,\n        returnValue: false,\n        timeStamp: 0,\n        type,\n        composedPath: fail,\n        initEvent: fail,\n        preventDefault: noop,\n        stopImmediatePropagation: noop,\n        stopPropagation: noop,\n        AT_TARGET: window.Event.AT_TARGET,\n        BUBBLING_PHASE: window.Event.BUBBLING_PHASE,\n        CAPTURING_PHASE: window.Event.CAPTURING_PHASE,\n        NONE: window.Event.NONE,\n        altKey: false,\n        button: 0,\n        buttons: 0,\n        clientX: 0,\n        clientY: 0,\n        ctrlKey: false,\n        metaKey: false,\n        movementX: 0,\n        movementY: 0,\n        offsetX: 0,\n        offsetY: 0,\n        pageX: 0,\n        pageY: 0,\n        relatedTarget: null,\n        screenX: 0,\n        screenY: 0,\n        shiftKey: false,\n        x: 0,\n        y: 0,\n        detail: 0,\n        view: null,\n        which: 0,\n        initUIEvent: fail,\n        initMouseEvent: fail,\n        getModifierState: fail,\n        dataTransfer,\n        ...getTargetProps(target)\n      };\n      return event;\n    };\n    const makeDataTransferCopyForDragEvent = (dataTransfer, eventType) => {\n      const copy = cloneDataTransfer(dataTransfer);\n      if (eventType === 'dragstart') {\n        setDragstartEvent(copy);\n        setReadWriteMode(copy);\n      } else if (eventType === 'drop') {\n        setDropEvent(copy);\n        setReadOnlyMode(copy);\n      } else {\n        setDragendEvent(copy);\n        setProtectedMode(copy);\n      }\n      return copy;\n    };\n    const makeDragEvent = (type, target, dataTransfer, mouseEvent) => {\n      const dataTransferForDispatch = makeDataTransferCopyForDragEvent(dataTransfer, type);\n      return isUndefined(mouseEvent) ? makeDndEvent(type, target, dataTransferForDispatch) : makeDndEventFromMouseEvent(type, mouseEvent, target, dataTransferForDispatch);\n    };\n\n    const scrollPixelsPerInterval = 32;\n    const scrollIntervalValue = 100;\n    const mouseRangeToTriggerScrollInsideEditor = 8;\n    const mouseRangeToTriggerScrollOutsideEditor = 16;\n    const isContentEditableFalse$1 = isContentEditableFalse$b;\n    const isContentEditable = or(isContentEditableFalse$1, isContentEditableTrue$3);\n    const isDraggable = (dom, rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm && dom.isEditable(elm.parentElement);\n    const isValidDropTarget = (editor, targetElement, dragElement) => {\n      if (isNullable(targetElement)) {\n        return false;\n      } else if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n        return false;\n      } else {\n        return editor.dom.isEditable(targetElement);\n      }\n    };\n    const createGhost = (editor, elm, width, height) => {\n      const dom = editor.dom;\n      const clonedElm = elm.cloneNode(true);\n      dom.setStyles(clonedElm, {\n        width,\n        height\n      });\n      dom.setAttrib(clonedElm, 'data-mce-selected', null);\n      const ghostElm = dom.create('div', {\n        'class': 'mce-drag-container',\n        'data-mce-bogus': 'all',\n        'unselectable': 'on',\n        'contenteditable': 'false'\n      });\n      dom.setStyles(ghostElm, {\n        position: 'absolute',\n        opacity: 0.5,\n        overflow: 'hidden',\n        border: 0,\n        padding: 0,\n        margin: 0,\n        width,\n        height\n      });\n      dom.setStyles(clonedElm, {\n        margin: 0,\n        boxSizing: 'border-box'\n      });\n      ghostElm.appendChild(clonedElm);\n      return ghostElm;\n    };\n    const appendGhostToBody = (ghostElm, bodyElm) => {\n      if (ghostElm.parentNode !== bodyElm) {\n        bodyElm.appendChild(ghostElm);\n      }\n    };\n    const scrollEditor = (direction, amount) => win => () => {\n      const current = direction === 'left' ? win.scrollX : win.scrollY;\n      win.scroll({\n        [direction]: current + amount,\n        behavior: 'smooth'\n      });\n    };\n    const scrollLeft = scrollEditor('left', -scrollPixelsPerInterval);\n    const scrollRight = scrollEditor('left', scrollPixelsPerInterval);\n    const scrollUp = scrollEditor('top', -scrollPixelsPerInterval);\n    const scrollDown = scrollEditor('top', scrollPixelsPerInterval);\n    const moveGhost = (ghostElm, position, width, height, maxX, maxY, mouseY, mouseX, contentAreaContainer, win, state, mouseEventOriginatedFromWithinTheEditor) => {\n      let overflowX = 0, overflowY = 0;\n      ghostElm.style.left = position.pageX + 'px';\n      ghostElm.style.top = position.pageY + 'px';\n      if (position.pageX + width > maxX) {\n        overflowX = position.pageX + width - maxX;\n      }\n      if (position.pageY + height > maxY) {\n        overflowY = position.pageY + height - maxY;\n      }\n      ghostElm.style.width = width - overflowX + 'px';\n      ghostElm.style.height = height - overflowY + 'px';\n      const clientHeight = contentAreaContainer.clientHeight;\n      const clientWidth = contentAreaContainer.clientWidth;\n      const outerMouseY = mouseY + contentAreaContainer.getBoundingClientRect().top;\n      const outerMouseX = mouseX + contentAreaContainer.getBoundingClientRect().left;\n      state.on(state => {\n        state.intervalId.clear();\n        if (state.dragging && mouseEventOriginatedFromWithinTheEditor) {\n          if (mouseY + mouseRangeToTriggerScrollInsideEditor >= clientHeight) {\n            state.intervalId.set(scrollDown(win));\n          } else if (mouseY - mouseRangeToTriggerScrollInsideEditor <= 0) {\n            state.intervalId.set(scrollUp(win));\n          } else if (mouseX + mouseRangeToTriggerScrollInsideEditor >= clientWidth) {\n            state.intervalId.set(scrollRight(win));\n          } else if (mouseX - mouseRangeToTriggerScrollInsideEditor <= 0) {\n            state.intervalId.set(scrollLeft(win));\n          } else if (outerMouseY + mouseRangeToTriggerScrollOutsideEditor >= window.innerHeight) {\n            state.intervalId.set(scrollDown(window));\n          } else if (outerMouseY - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n            state.intervalId.set(scrollUp(window));\n          } else if (outerMouseX + mouseRangeToTriggerScrollOutsideEditor >= window.innerWidth) {\n            state.intervalId.set(scrollRight(window));\n          } else if (outerMouseX - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n            state.intervalId.set(scrollLeft(window));\n          }\n        }\n      });\n    };\n    const removeElement = elm => {\n      if (elm && elm.parentNode) {\n        elm.parentNode.removeChild(elm);\n      }\n    };\n    const removeElementWithPadding = (dom, elm) => {\n      const parentBlock = dom.getParent(elm.parentNode, dom.isBlock);\n      removeElement(elm);\n      if (parentBlock && parentBlock !== dom.getRoot() && dom.isEmpty(parentBlock)) {\n        fillWithPaddingBr(SugarElement.fromDom(parentBlock));\n      }\n    };\n    const isLeftMouseButtonPressed = e => e.button === 0;\n    const applyRelPos = (state, position) => ({\n      pageX: position.pageX - state.relX,\n      pageY: position.pageY + 5\n    });\n    const start = (state, editor) => e => {\n      if (isLeftMouseButtonPressed(e)) {\n        const ceElm = find$2(editor.dom.getParents(e.target), isContentEditable).getOr(null);\n        if (isNonNullable(ceElm) && isDraggable(editor.dom, editor.getBody(), ceElm)) {\n          const elmPos = editor.dom.getPos(ceElm);\n          const bodyElm = editor.getBody();\n          const docElm = editor.getDoc().documentElement;\n          state.set({\n            element: ceElm,\n            dataTransfer: createDataTransfer(),\n            dragging: false,\n            screenX: e.screenX,\n            screenY: e.screenY,\n            maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n            maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n            relX: e.pageX - elmPos.x,\n            relY: e.pageY - elmPos.y,\n            width: ceElm.offsetWidth,\n            height: ceElm.offsetHeight,\n            ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight),\n            intervalId: repeatable(scrollIntervalValue)\n          });\n        }\n      }\n    };\n    const placeCaretAt = (editor, clientX, clientY) => {\n      editor._selectionOverrides.hideFakeCaret();\n      closestFakeCaretCandidate(editor.getBody(), clientX, clientY).fold(() => editor.selection.placeCaretAt(clientX, clientY), caretInfo => {\n        const range = editor._selectionOverrides.showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n        if (range) {\n          editor.selection.setRng(range);\n        } else {\n          editor.selection.placeCaretAt(clientX, clientY);\n        }\n      });\n    };\n    const dispatchDragEvent = (editor, type, target, dataTransfer, mouseEvent) => {\n      if (type === 'dragstart') {\n        setHtmlData(dataTransfer, editor.dom.getOuterHTML(target));\n      }\n      const event = makeDragEvent(type, target, dataTransfer, mouseEvent);\n      const args = editor.dispatch(type, event);\n      return args;\n    };\n    const move = (state, editor) => {\n      const throttledPlaceCaretAt = first$1((clientX, clientY) => placeCaretAt(editor, clientX, clientY), 0);\n      editor.on('remove', throttledPlaceCaretAt.cancel);\n      const state_ = state;\n      return e => state.on(state => {\n        const movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n        if (!state.dragging && movement > 10) {\n          const args = dispatchDragEvent(editor, 'dragstart', state.element, state.dataTransfer, e);\n          if (isNonNullable(args.dataTransfer)) {\n            state.dataTransfer = args.dataTransfer;\n          }\n          if (args.isDefaultPrevented()) {\n            return;\n          }\n          state.dragging = true;\n          editor.focus();\n        }\n        if (state.dragging) {\n          const mouseEventOriginatedFromWithinTheEditor = e.currentTarget === editor.getDoc().documentElement;\n          const targetPos = applyRelPos(state, calc(editor, e));\n          appendGhostToBody(state.ghost, editor.getBody());\n          moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY, e.clientY, e.clientX, editor.getContentAreaContainer(), editor.getWin(), state_, mouseEventOriginatedFromWithinTheEditor);\n          throttledPlaceCaretAt.throttle(e.clientX, e.clientY);\n        }\n      });\n    };\n    const getRawTarget = selection => {\n      const sel = selection.getSel();\n      if (isNonNullable(sel)) {\n        const rng = sel.getRangeAt(0);\n        const startContainer = rng.startContainer;\n        return isText$a(startContainer) ? startContainer.parentNode : startContainer;\n      } else {\n        return null;\n      }\n    };\n    const drop = (state, editor) => e => {\n      state.on(state => {\n        var _a;\n        state.intervalId.clear();\n        if (state.dragging) {\n          if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n            const dropTarget = (_a = editor.getDoc().elementFromPoint(e.clientX, e.clientY)) !== null && _a !== void 0 ? _a : editor.getBody();\n            const args = dispatchDragEvent(editor, 'drop', dropTarget, state.dataTransfer, e);\n            if (!args.isDefaultPrevented()) {\n              editor.undoManager.transact(() => {\n                removeElementWithPadding(editor.dom, state.element);\n                getHtmlData(state.dataTransfer).each(content => editor.insertContent(content));\n                editor._selectionOverrides.hideFakeCaret();\n              });\n            }\n          }\n          dispatchDragEvent(editor, 'dragend', editor.getBody(), state.dataTransfer, e);\n        }\n      });\n      removeDragState(state);\n    };\n    const stopDragging = (state, editor, e) => {\n      state.on(state => {\n        state.intervalId.clear();\n        if (state.dragging) {\n          e.fold(() => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer), mouseEvent => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer, mouseEvent));\n        }\n      });\n      removeDragState(state);\n    };\n    const stop = (state, editor) => e => stopDragging(state, editor, Optional.some(e));\n    const removeDragState = state => {\n      state.on(state => {\n        state.intervalId.clear();\n        removeElement(state.ghost);\n      });\n      state.clear();\n    };\n    const bindFakeDragEvents = editor => {\n      const state = value$2();\n      const pageDom = DOMUtils.DOM;\n      const rootDocument = document;\n      const dragStartHandler = start(state, editor);\n      const dragHandler = move(state, editor);\n      const dropHandler = drop(state, editor);\n      const dragEndHandler = stop(state, editor);\n      editor.on('mousedown', dragStartHandler);\n      editor.on('mousemove', dragHandler);\n      editor.on('mouseup', dropHandler);\n      pageDom.bind(rootDocument, 'mousemove', dragHandler);\n      pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n      editor.on('remove', () => {\n        pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n        pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n      });\n      editor.on('keydown', e => {\n        if (e.keyCode === VK.ESC) {\n          stopDragging(state, editor, Optional.none());\n        }\n      });\n    };\n    const blockUnsupportedFileDrop = editor => {\n      const preventFileDrop = e => {\n        if (!e.isDefaultPrevented()) {\n          const dataTransfer = e.dataTransfer;\n          if (dataTransfer && (contains$2(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n            e.preventDefault();\n            if (e.type === 'drop') {\n              displayError(editor, 'Dropped file type is not supported');\n            }\n          }\n        }\n      };\n      const preventFileDropIfUIElement = e => {\n        if (isUIElement(editor, e.target)) {\n          preventFileDrop(e);\n        }\n      };\n      const setup = () => {\n        const pageDom = DOMUtils.DOM;\n        const dom = editor.dom;\n        const doc = document;\n        const editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n        const eventNames = [\n          'drop',\n          'dragover'\n        ];\n        each$e(eventNames, name => {\n          pageDom.bind(doc, name, preventFileDropIfUIElement);\n          dom.bind(editorRoot, name, preventFileDrop);\n        });\n        editor.on('remove', () => {\n          each$e(eventNames, name => {\n            pageDom.unbind(doc, name, preventFileDropIfUIElement);\n            dom.unbind(editorRoot, name, preventFileDrop);\n          });\n        });\n      };\n      editor.on('init', () => {\n        Delay.setEditorTimeout(editor, setup, 0);\n      });\n    };\n    const init$2 = editor => {\n      bindFakeDragEvents(editor);\n      if (shouldBlockUnsupportedDrop(editor)) {\n        blockUnsupportedFileDrop(editor);\n      }\n    };\n\n    const setup$4 = editor => {\n      const renderFocusCaret = first$1(() => {\n        if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n          const rng = editor.selection.getRng();\n          if (rng.collapsed) {\n            const caretRange = renderRangeCaret(editor, rng, false);\n            editor.selection.setRng(caretRange);\n          }\n        }\n      }, 0);\n      editor.on('focus', () => {\n        renderFocusCaret.throttle();\n      });\n      editor.on('blur', () => {\n        renderFocusCaret.cancel();\n      });\n    };\n\n    const setup$3 = editor => {\n      editor.on('init', () => {\n        editor.on('focusin', e => {\n          const target = e.target;\n          if (isMedia$2(target)) {\n            const ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n            const node = isContentEditableFalse$b(ceRoot) ? ceRoot : target;\n            if (editor.selection.getNode() !== node) {\n              selectNode(editor, node).each(rng => editor.selection.setRng(rng));\n            }\n          }\n        });\n      });\n    };\n\n    const isContentEditableFalse = isContentEditableFalse$b;\n    const getContentEditableRoot = (editor, node) => getContentEditableRoot$1(editor.getBody(), node);\n    const SelectionOverrides = editor => {\n      const selection = editor.selection, dom = editor.dom;\n      const rootNode = editor.getBody();\n      const fakeCaret = FakeCaret(editor, rootNode, dom.isBlock, () => hasFocus(editor));\n      const realSelectionId = 'sel-' + dom.uniqueId();\n      const elementSelectionAttr = 'data-mce-selected';\n      let selectedElement;\n      const isFakeSelectionElement = node => isNonNullable(node) && dom.hasClass(node, 'mce-offscreen-selection');\n      const isFakeSelectionTargetElement = node => node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode) && dom.isEditable(node.parentNode);\n      const setRange = range => {\n        if (range) {\n          selection.setRng(range);\n        }\n      };\n      const showCaret = (direction, node, before, scrollIntoView = true) => {\n        const e = editor.dispatch('ShowCaret', {\n          target: node,\n          direction,\n          before\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        if (scrollIntoView) {\n          selection.scrollIntoView(node, direction === -1);\n        }\n        return fakeCaret.show(before, node);\n      };\n      const showBlockCaretContainer = blockCaretContainer => {\n        if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n          showCaretContainerBlock(blockCaretContainer);\n          selection.scrollIntoView(blockCaretContainer);\n        }\n      };\n      const registerEvents = () => {\n        editor.on('click', e => {\n          if (!dom.isEditable(e.target)) {\n            e.preventDefault();\n            editor.focus();\n          }\n        });\n        editor.on('blur NewBlock', removeElementSelection);\n        editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n        editor.on('tap', e => {\n          const targetElm = e.target;\n          const contentEditableRoot = getContentEditableRoot(editor, targetElm);\n          if (isContentEditableFalse(contentEditableRoot)) {\n            e.preventDefault();\n            selectNode(editor, contentEditableRoot).each(setElementSelection);\n          } else if (isFakeSelectionTargetElement(targetElm)) {\n            selectNode(editor, targetElm).each(setElementSelection);\n          }\n        }, true);\n        editor.on('mousedown', e => {\n          const targetElm = e.target;\n          if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) {\n            return;\n          }\n          if (!isXYInContentArea(editor, e.clientX, e.clientY)) {\n            return;\n          }\n          removeElementSelection();\n          hideFakeCaret();\n          const closestContentEditable = getContentEditableRoot(editor, targetElm);\n          if (isContentEditableFalse(closestContentEditable)) {\n            e.preventDefault();\n            selectNode(editor, closestContentEditable).each(setElementSelection);\n          } else {\n            closestFakeCaretCandidate(rootNode, e.clientX, e.clientY).each(caretInfo => {\n              e.preventDefault();\n              const range = showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n              setRange(range);\n              if (isHTMLElement(closestContentEditable)) {\n                closestContentEditable.focus();\n              } else {\n                editor.getBody().focus();\n              }\n            });\n          }\n        });\n        editor.on('keypress', e => {\n          if (VK.modifierPressed(e)) {\n            return;\n          }\n          if (isContentEditableFalse(selection.getNode())) {\n            e.preventDefault();\n          }\n        });\n        editor.on('GetSelectionRange', e => {\n          let rng = e.range;\n          if (selectedElement) {\n            if (!selectedElement.parentNode) {\n              selectedElement = null;\n              return;\n            }\n            rng = rng.cloneRange();\n            rng.selectNode(selectedElement);\n            e.range = rng;\n          }\n        });\n        editor.on('SetSelectionRange', e => {\n          e.range = normalizeVoidElementSelection(e.range);\n          const rng = setElementSelection(e.range, e.forward);\n          if (rng) {\n            e.range = rng;\n          }\n        });\n        const isPasteBin = node => isElement$6(node) && node.id === 'mcepastebin';\n        editor.on('AfterSetSelectionRange', e => {\n          const rng = e.range;\n          const parent = rng.startContainer.parentElement;\n          if (!isRangeInCaretContainer(rng) && !isPasteBin(parent)) {\n            hideFakeCaret();\n          }\n          if (!isFakeSelectionElement(parent)) {\n            removeElementSelection();\n          }\n        });\n        init$2(editor);\n        setup$4(editor);\n        setup$3(editor);\n      };\n      const isWithinCaretContainer = node => isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n      const isRangeInCaretContainer = rng => isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n      const normalizeVoidElementSelection = rng => {\n        const voidElements = editor.schema.getVoidElements();\n        const newRng = dom.createRng();\n        const startContainer = rng.startContainer;\n        const startOffset = rng.startOffset;\n        const endContainer = rng.endContainer;\n        const endOffset = rng.endOffset;\n        if (has$2(voidElements, startContainer.nodeName.toLowerCase())) {\n          if (startOffset === 0) {\n            newRng.setStartBefore(startContainer);\n          } else {\n            newRng.setStartAfter(startContainer);\n          }\n        } else {\n          newRng.setStart(startContainer, startOffset);\n        }\n        if (has$2(voidElements, endContainer.nodeName.toLowerCase())) {\n          if (endOffset === 0) {\n            newRng.setEndBefore(endContainer);\n          } else {\n            newRng.setEndAfter(endContainer);\n          }\n        } else {\n          newRng.setEnd(endContainer, endOffset);\n        }\n        return newRng;\n      };\n      const setupOffscreenSelection = (node, targetClone) => {\n        const body = SugarElement.fromDom(editor.getBody());\n        const doc = editor.getDoc();\n        const realSelectionContainer = descendant$1(body, '#' + realSelectionId).getOrThunk(() => {\n          const newContainer = SugarElement.fromHtml('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>', doc);\n          set$3(newContainer, 'id', realSelectionId);\n          append$1(body, newContainer);\n          return newContainer;\n        });\n        const newRange = dom.createRng();\n        empty(realSelectionContainer);\n        append(realSelectionContainer, [\n          SugarElement.fromText(nbsp, doc),\n          SugarElement.fromDom(targetClone),\n          SugarElement.fromText(nbsp, doc)\n        ]);\n        newRange.setStart(realSelectionContainer.dom.firstChild, 1);\n        newRange.setEnd(realSelectionContainer.dom.lastChild, 0);\n        setAll(realSelectionContainer, { top: dom.getPos(node, editor.getBody()).y + 'px' });\n        focus$1(realSelectionContainer);\n        const sel = selection.getSel();\n        if (sel) {\n          sel.removeAllRanges();\n          sel.addRange(newRange);\n        }\n        return newRange;\n      };\n      const selectElement = elm => {\n        const targetClone = elm.cloneNode(true);\n        const e = editor.dispatch('ObjectSelected', {\n          target: elm,\n          targetClone\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        const range = setupOffscreenSelection(elm, e.targetClone);\n        const nodeElm = SugarElement.fromDom(elm);\n        each$e(descendants(SugarElement.fromDom(editor.getBody()), `*[${ elementSelectionAttr }]`), elm => {\n          if (!eq(nodeElm, elm)) {\n            remove$a(elm, elementSelectionAttr);\n          }\n        });\n        if (!dom.getAttrib(elm, elementSelectionAttr)) {\n          elm.setAttribute(elementSelectionAttr, '1');\n        }\n        selectedElement = elm;\n        hideFakeCaret();\n        return range;\n      };\n      const setElementSelection = (range, forward) => {\n        if (!range) {\n          return null;\n        }\n        if (range.collapsed) {\n          if (!isRangeInCaretContainer(range)) {\n            const dir = forward ? 1 : -1;\n            const caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n            const beforeNode = caretPosition.getNode(!forward);\n            if (isNonNullable(beforeNode)) {\n              if (isFakeCaretTarget(beforeNode)) {\n                return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n              }\n              if (isCaretContainerInline(beforeNode) && isContentEditableFalse$b(beforeNode.nextSibling)) {\n                const rng = dom.createRng();\n                rng.setStart(beforeNode, 0);\n                rng.setEnd(beforeNode, 0);\n                return rng;\n              }\n            }\n            const afterNode = caretPosition.getNode(forward);\n            if (isNonNullable(afterNode)) {\n              if (isFakeCaretTarget(afterNode)) {\n                return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n              }\n              if (isCaretContainerInline(afterNode) && isContentEditableFalse$b(afterNode.previousSibling)) {\n                const rng = dom.createRng();\n                rng.setStart(afterNode, 1);\n                rng.setEnd(afterNode, 1);\n                return rng;\n              }\n            }\n          }\n          return null;\n        }\n        let startContainer = range.startContainer;\n        let startOffset = range.startOffset;\n        const endOffset = range.endOffset;\n        if (isText$a(startContainer) && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n          startContainer = startContainer.parentNode;\n          startOffset = dom.nodeIndex(startContainer);\n          startContainer = startContainer.parentNode;\n        }\n        if (!isElement$6(startContainer)) {\n          return null;\n        }\n        if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n          const node = startContainer.childNodes[startOffset];\n          if (isFakeSelectionTargetElement(node)) {\n            return selectElement(node);\n          }\n        }\n        return null;\n      };\n      const removeElementSelection = () => {\n        if (selectedElement) {\n          selectedElement.removeAttribute(elementSelectionAttr);\n        }\n        descendant$1(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$5);\n        selectedElement = null;\n      };\n      const destroy = () => {\n        fakeCaret.destroy();\n        selectedElement = null;\n      };\n      const hideFakeCaret = () => {\n        fakeCaret.hide();\n      };\n      if (!isRtc(editor)) {\n        registerEvents();\n      }\n      return {\n        showCaret,\n        showBlockCaretContainer,\n        hideFakeCaret,\n        destroy\n      };\n    };\n\n    const getNormalizedTextOffset = (container, offset) => {\n      let normalizedOffset = offset;\n      for (let node = container.previousSibling; isText$a(node); node = node.previousSibling) {\n        normalizedOffset += node.data.length;\n      }\n      return normalizedOffset;\n    };\n    const generatePath = (dom, root, node, offset, normalized) => {\n      if (isText$a(node) && (offset < 0 || offset > node.data.length)) {\n        return [];\n      }\n      const p = normalized && isText$a(node) ? [getNormalizedTextOffset(node, offset)] : [offset];\n      let current = node;\n      while (current !== root && current.parentNode) {\n        p.push(dom.nodeIndex(current, normalized));\n        current = current.parentNode;\n      }\n      return current === root ? p.reverse() : [];\n    };\n    const generatePathRange = (dom, root, startNode, startOffset, endNode, endOffset, normalized = false) => {\n      const start = generatePath(dom, root, startNode, startOffset, normalized);\n      const end = generatePath(dom, root, endNode, endOffset, normalized);\n      return {\n        start,\n        end\n      };\n    };\n    const resolvePath = (root, path) => {\n      const nodePath = path.slice();\n      const offset = nodePath.pop();\n      if (!isNumber(offset)) {\n        return Optional.none();\n      } else {\n        const resolvedNode = foldl(nodePath, (optNode, index) => optNode.bind(node => Optional.from(node.childNodes[index])), Optional.some(root));\n        return resolvedNode.bind(node => {\n          if (isText$a(node) && (offset < 0 || offset > node.data.length)) {\n            return Optional.none();\n          } else {\n            return Optional.some({\n              node,\n              offset\n            });\n          }\n        });\n      }\n    };\n    const resolvePathRange = (root, range) => resolvePath(root, range.start).bind(({\n      node: startNode,\n      offset: startOffset\n    }) => resolvePath(root, range.end).map(({\n      node: endNode,\n      offset: endOffset\n    }) => {\n      const rng = document.createRange();\n      rng.setStart(startNode, startOffset);\n      rng.setEnd(endNode, endOffset);\n      return rng;\n    }));\n    const generatePathRangeFromRange = (dom, root, range, normalized = false) => generatePathRange(dom, root, range.startContainer, range.startOffset, range.endContainer, range.endOffset, normalized);\n\n    const cleanEmptyNodes = (dom, node, isRoot) => {\n      if (node && dom.isEmpty(node) && !isRoot(node)) {\n        const parent = node.parentNode;\n        dom.remove(node, isText$a(node.firstChild) && isWhitespaceText(node.firstChild.data));\n        cleanEmptyNodes(dom, parent, isRoot);\n      }\n    };\n    const deleteRng = (dom, rng, isRoot, clean = true) => {\n      const startParent = rng.startContainer.parentNode;\n      const endParent = rng.endContainer.parentNode;\n      rng.deleteContents();\n      if (clean && !isRoot(rng.startContainer)) {\n        if (isText$a(rng.startContainer) && rng.startContainer.data.length === 0) {\n          dom.remove(rng.startContainer);\n        }\n        if (isText$a(rng.endContainer) && rng.endContainer.data.length === 0) {\n          dom.remove(rng.endContainer);\n        }\n        cleanEmptyNodes(dom, startParent, isRoot);\n        if (startParent !== endParent) {\n          cleanEmptyNodes(dom, endParent, isRoot);\n        }\n      }\n    };\n    const getParentBlock = (editor, rng) => Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n    const resolveFromDynamicPatterns = (patternSet, block, beforeText) => {\n      const dynamicPatterns = patternSet.dynamicPatternsLookup({\n        text: beforeText,\n        block\n      });\n      return {\n        ...patternSet,\n        blockPatterns: getBlockPatterns(dynamicPatterns).concat(patternSet.blockPatterns),\n        inlinePatterns: getInlinePatterns(dynamicPatterns).concat(patternSet.inlinePatterns)\n      };\n    };\n    const getBeforeText = (dom, block, node, offset) => {\n      const rng = dom.createRng();\n      rng.setStart(block, 0);\n      rng.setEnd(node, offset);\n      return rng.toString();\n    };\n\n    const startsWithSingleSpace = s => /^\\s[^\\s]/.test(s);\n    const stripPattern = (dom, block, pattern) => {\n      const firstTextNode = textAfter(block, 0, block);\n      firstTextNode.each(spot => {\n        const node = spot.container;\n        scanRight(node, pattern.start.length, block).each(end => {\n          const rng = dom.createRng();\n          rng.setStart(node, 0);\n          rng.setEnd(end.container, end.offset);\n          deleteRng(dom, rng, e => e === block);\n        });\n        const text = SugarElement.fromDom(node);\n        const textContent = get$3(text);\n        if (startsWithSingleSpace(textContent)) {\n          set(text, textContent.slice(1));\n        }\n      });\n    };\n    const applyPattern$1 = (editor, match) => {\n      const dom = editor.dom;\n      const pattern = match.pattern;\n      const rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');\n      const isBlockFormatName = (name, formatter) => {\n        const formatSet = formatter.get(name);\n        return isArray$1(formatSet) && head(formatSet).exists(format => has$2(format, 'block'));\n      };\n      getParentBlock(editor, rng).each(block => {\n        if (pattern.type === 'block-format') {\n          if (isBlockFormatName(pattern.format, editor.formatter)) {\n            editor.undoManager.transact(() => {\n              stripPattern(editor.dom, block, pattern);\n              editor.formatter.apply(pattern.format);\n            });\n          }\n        } else if (pattern.type === 'block-command') {\n          editor.undoManager.transact(() => {\n            stripPattern(editor.dom, block, pattern);\n            editor.execCommand(pattern.cmd, false, pattern.value);\n          });\n        }\n      });\n      return true;\n    };\n    const sortPatterns$1 = patterns => sort(patterns, (a, b) => b.start.length - a.start.length);\n    const findPattern$1 = (patterns, text) => {\n      const sortedPatterns = sortPatterns$1(patterns);\n      const nuText = text.replace(nbsp, ' ');\n      return find$2(sortedPatterns, pattern => text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n    };\n    const findPatterns$1 = (editor, block, patternSet, normalizedMatches) => {\n      var _a;\n      const dom = editor.dom;\n      const forcedRootBlock = getForcedRootBlock(editor);\n      if (!dom.is(block, forcedRootBlock)) {\n        return [];\n      }\n      const blockText = (_a = block.textContent) !== null && _a !== void 0 ? _a : '';\n      return findPattern$1(patternSet.blockPatterns, blockText).map(pattern => {\n        if (Tools.trim(blockText).length === pattern.start.length) {\n          return [];\n        }\n        return [{\n            pattern,\n            range: generatePathRange(dom, dom.getRoot(), block, 0, block, 0, normalizedMatches)\n          }];\n      }).getOr([]);\n    };\n    const applyMatches$1 = (editor, matches) => {\n      if (matches.length === 0) {\n        return;\n      }\n      const bookmark = editor.selection.getBookmark();\n      each$e(matches, match => applyPattern$1(editor, match));\n      editor.selection.moveToBookmark(bookmark);\n    };\n\n    const newMarker = (dom, id) => dom.create('span', {\n      'data-mce-type': 'bookmark',\n      id\n    });\n    const rangeFromMarker = (dom, marker) => {\n      const rng = dom.createRng();\n      rng.setStartAfter(marker.start);\n      rng.setEndBefore(marker.end);\n      return rng;\n    };\n    const createMarker = (dom, markerPrefix, pathRange) => {\n      const rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');\n      const startNode = rng.startContainer;\n      const endNode = rng.endContainer;\n      const textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n      const textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n      const startParentNode = textStart.parentNode;\n      const endParentNode = textEnd.parentNode;\n      return {\n        prefix: markerPrefix,\n        end: endParentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),\n        start: startParentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)\n      };\n    };\n    const removeMarker = (dom, marker, isRoot) => {\n      cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);\n      cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);\n    };\n\n    const isReplacementPattern = pattern => pattern.start.length === 0;\n    const matchesPattern = patternContent => (element, offset) => {\n      const text = element.data;\n      const searchText = text.substring(0, offset);\n      const startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n      const startIndex = searchText.lastIndexOf(patternContent);\n      if (startIndex !== -1) {\n        return startIndex + patternContent.length;\n      } else if (startEndIndex !== -1) {\n        return startEndIndex + 1;\n      } else {\n        return -1;\n      }\n    };\n    const findPatternStartFromSpot = (dom, pattern, block, spot) => {\n      const startPattern = pattern.start;\n      const startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(startPattern), block);\n      return startSpot.bind(spot => {\n        var _a, _b;\n        const startPatternIndex = (_b = (_a = block.textContent) === null || _a === void 0 ? void 0 : _a.indexOf(startPattern)) !== null && _b !== void 0 ? _b : -1;\n        const isCompleteMatch = startPatternIndex !== -1 && spot.offset >= startPatternIndex + startPattern.length;\n        if (isCompleteMatch) {\n          const rng = dom.createRng();\n          rng.setStart(spot.container, spot.offset - startPattern.length);\n          rng.setEnd(spot.container, spot.offset);\n          return Optional.some(rng);\n        } else {\n          const offset = spot.offset - startPattern.length;\n          return scanLeft(spot.container, offset, block).map(nextSpot => {\n            const rng = dom.createRng();\n            rng.setStart(nextSpot.container, nextSpot.offset);\n            rng.setEnd(spot.container, spot.offset);\n            return rng;\n          }).filter(rng => rng.toString() === startPattern).orThunk(() => findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0)));\n        }\n      });\n    };\n    const findPatternStart = (dom, pattern, node, offset, block, requireGap = false) => {\n      if (pattern.start.length === 0 && !requireGap) {\n        const rng = dom.createRng();\n        rng.setStart(node, offset);\n        rng.setEnd(node, offset);\n        return Optional.some(rng);\n      }\n      return textBefore(node, offset, block).bind(spot => {\n        const start = findPatternStartFromSpot(dom, pattern, block, spot);\n        return start.bind(startRange => {\n          var _a;\n          if (requireGap) {\n            if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n              return Optional.none();\n            } else if (spot.offset === 0 && ((_a = startRange.endContainer.textContent) === null || _a === void 0 ? void 0 : _a.length) === startRange.endOffset) {\n              return Optional.none();\n            }\n          }\n          return Optional.some(startRange);\n        });\n      });\n    };\n    const findPattern = (editor, block, details, normalizedMatches) => {\n      const dom = editor.dom;\n      const root = dom.getRoot();\n      const pattern = details.pattern;\n      const endNode = details.position.container;\n      const endOffset = details.position.offset;\n      return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(spot => {\n        const endPathRng = generatePathRange(dom, root, spot.container, spot.offset, endNode, endOffset, normalizedMatches);\n        if (isReplacementPattern(pattern)) {\n          return Optional.some({\n            matches: [{\n                pattern,\n                startRng: endPathRng,\n                endRng: endPathRng\n              }],\n            position: spot\n          });\n        } else {\n          const resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block, normalizedMatches);\n          const results = resultsOpt.getOr({\n            matches: [],\n            position: spot\n          });\n          const pos = results.position;\n          const start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());\n          return start.map(startRng => {\n            const startPathRng = generatePathRangeFromRange(dom, root, startRng, normalizedMatches);\n            return {\n              matches: results.matches.concat([{\n                  pattern,\n                  startRng: startPathRng,\n                  endRng: endPathRng\n                }]),\n              position: point(startRng.startContainer, startRng.startOffset)\n            };\n          });\n        }\n      });\n    };\n    const findPatternsRec = (editor, patterns, node, offset, block, normalizedMatches) => {\n      const dom = editor.dom;\n      return textBefore(node, offset, dom.getRoot()).bind(endSpot => {\n        const text = getBeforeText(dom, block, node, offset);\n        for (let i = 0; i < patterns.length; i++) {\n          const pattern = patterns[i];\n          if (!endsWith(text, pattern.end)) {\n            continue;\n          }\n          const patternsWithoutCurrent = patterns.slice();\n          patternsWithoutCurrent.splice(i, 1);\n          const result = findPattern(editor, block, {\n            pattern,\n            remainingPatterns: patternsWithoutCurrent,\n            position: endSpot\n          }, normalizedMatches);\n          if (result.isNone() && offset > 0) {\n            return findPatternsRec(editor, patterns, node, offset - 1, block, normalizedMatches);\n          }\n          if (result.isSome()) {\n            return result;\n          }\n        }\n        return Optional.none();\n      });\n    };\n    const applyPattern = (editor, pattern, patternRange) => {\n      editor.selection.setRng(patternRange);\n      if (pattern.type === 'inline-format') {\n        each$e(pattern.format, format => {\n          editor.formatter.apply(format);\n        });\n      } else {\n        editor.execCommand(pattern.cmd, false, pattern.value);\n      }\n    };\n    const applyReplacementPattern = (editor, pattern, marker, isRoot) => {\n      const markerRange = rangeFromMarker(editor.dom, marker);\n      deleteRng(editor.dom, markerRange, isRoot);\n      applyPattern(editor, pattern, markerRange);\n    };\n    const applyPatternWithContent = (editor, pattern, startMarker, endMarker, isRoot) => {\n      const dom = editor.dom;\n      const markerEndRange = rangeFromMarker(dom, endMarker);\n      const markerStartRange = rangeFromMarker(dom, startMarker);\n      deleteRng(dom, markerStartRange, isRoot);\n      deleteRng(dom, markerEndRange, isRoot);\n      const patternMarker = {\n        prefix: startMarker.prefix,\n        start: startMarker.end,\n        end: endMarker.start\n      };\n      const patternRange = rangeFromMarker(dom, patternMarker);\n      applyPattern(editor, pattern, patternRange);\n    };\n    const addMarkers = (dom, matches) => {\n      const markerPrefix = generate$1('mce_textpattern');\n      const matchesWithEnds = foldr(matches, (acc, match) => {\n        const endMarker = createMarker(dom, markerPrefix + `_end${ acc.length }`, match.endRng);\n        return acc.concat([{\n            ...match,\n            endMarker\n          }]);\n      }, []);\n      return foldr(matchesWithEnds, (acc, match) => {\n        const idx = matchesWithEnds.length - acc.length - 1;\n        const startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + `_start${ idx }`, match.startRng);\n        return acc.concat([{\n            ...match,\n            startMarker\n          }]);\n      }, []);\n    };\n    const sortPatterns = patterns => sort(patterns, (a, b) => b.end.length - a.end.length);\n    const getBestMatches = (matches, matchesWithSortedPatterns) => {\n      const hasSameMatches = forall(matches, match => exists(matchesWithSortedPatterns, sortedMatch => match.pattern.start === sortedMatch.pattern.start && match.pattern.end === sortedMatch.pattern.end));\n      if (matches.length === matchesWithSortedPatterns.length) {\n        if (hasSameMatches) {\n          return matches;\n        } else {\n          return matchesWithSortedPatterns;\n        }\n      }\n      return matches.length > matchesWithSortedPatterns.length ? matches : matchesWithSortedPatterns;\n    };\n    const findPatterns = (editor, block, node, offset, patternSet, normalizedMatches) => {\n      const matches = findPatternsRec(editor, patternSet.inlinePatterns, node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n      const matchesWithSortedPatterns = findPatternsRec(editor, sortPatterns(patternSet.inlinePatterns), node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n      return getBestMatches(matches, matchesWithSortedPatterns);\n    };\n    const applyMatches = (editor, matches) => {\n      if (matches.length === 0) {\n        return;\n      }\n      const dom = editor.dom;\n      const bookmark = editor.selection.getBookmark();\n      const matchesWithMarkers = addMarkers(dom, matches);\n      each$e(matchesWithMarkers, match => {\n        const block = dom.getParent(match.startMarker.start, dom.isBlock);\n        const isRoot = node => node === block;\n        if (isReplacementPattern(match.pattern)) {\n          applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);\n        } else {\n          applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);\n        }\n        removeMarker(dom, match.endMarker, isRoot);\n        removeMarker(dom, match.startMarker, isRoot);\n      });\n      editor.selection.moveToBookmark(bookmark);\n    };\n\n    const handleEnter = (editor, patternSet) => {\n      const rng = editor.selection.getRng();\n      return getParentBlock(editor, rng).map(block => {\n        var _a;\n        const offset = Math.max(0, rng.startOffset);\n        const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, (_a = block.textContent) !== null && _a !== void 0 ? _a : '');\n        const inlineMatches = findPatterns(editor, block, rng.startContainer, offset, dynamicPatternSet, true);\n        const blockMatches = findPatterns$1(editor, block, dynamicPatternSet, true);\n        if (blockMatches.length > 0 || inlineMatches.length > 0) {\n          editor.undoManager.add();\n          editor.undoManager.extra(() => {\n            editor.execCommand('mceInsertNewLine');\n          }, () => {\n            insert$5(editor);\n            applyMatches(editor, inlineMatches);\n            applyMatches$1(editor, blockMatches);\n            const range = editor.selection.getRng();\n            const spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());\n            editor.execCommand('mceInsertNewLine');\n            spot.each(s => {\n              const node = s.container;\n              if (node.data.charAt(s.offset - 1) === zeroWidth) {\n                node.deleteData(s.offset - 1, 1);\n                cleanEmptyNodes(editor.dom, node.parentNode, e => e === editor.dom.getRoot());\n              }\n            });\n          });\n          return true;\n        }\n        return false;\n      }).getOr(false);\n    };\n    const handleInlineKey = (editor, patternSet) => {\n      const rng = editor.selection.getRng();\n      getParentBlock(editor, rng).map(block => {\n        const offset = Math.max(0, rng.startOffset - 1);\n        const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n        const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n        const inlineMatches = findPatterns(editor, block, rng.startContainer, offset, dynamicPatternSet, false);\n        if (inlineMatches.length > 0) {\n          editor.undoManager.transact(() => {\n            applyMatches(editor, inlineMatches);\n          });\n        }\n      });\n    };\n    const checkKeyEvent = (codes, event, predicate) => {\n      for (let i = 0; i < codes.length; i++) {\n        if (predicate(codes[i], event)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const checkKeyCode = (codes, event) => checkKeyEvent(codes, event, (code, event) => {\n      return code === event.keyCode && !VK.modifierPressed(event);\n    });\n    const checkCharCode = (chars, event) => checkKeyEvent(chars, event, (chr, event) => {\n      return chr.charCodeAt(0) === event.charCode;\n    });\n\n    const setup$2 = editor => {\n      const charCodes = [\n        ',',\n        '.',\n        ';',\n        ':',\n        '!',\n        '?'\n      ];\n      const keyCodes = [32];\n      const getPatternSet = () => createPatternSet(getTextPatterns(editor), getTextPatternsLookup(editor));\n      const hasDynamicPatterns = () => hasTextPatternsLookup(editor);\n      editor.on('keydown', e => {\n        if (e.keyCode === 13 && !VK.modifierPressed(e) && editor.selection.isCollapsed()) {\n          const patternSet = getPatternSet();\n          const hasPatterns = patternSet.inlinePatterns.length > 0 || patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n          if (hasPatterns && handleEnter(editor, patternSet)) {\n            e.preventDefault();\n          }\n        }\n      }, true);\n      const handleInlineTrigger = () => {\n        if (editor.selection.isCollapsed()) {\n          const patternSet = getPatternSet();\n          const hasPatterns = patternSet.inlinePatterns.length > 0 || hasDynamicPatterns();\n          if (hasPatterns) {\n            handleInlineKey(editor, patternSet);\n          }\n        }\n      };\n      editor.on('keyup', e => {\n        if (checkKeyCode(keyCodes, e)) {\n          handleInlineTrigger();\n        }\n      });\n      editor.on('keypress', e => {\n        if (checkCharCode(charCodes, e)) {\n          Delay.setEditorTimeout(editor, handleInlineTrigger);\n        }\n      });\n    };\n\n    const setup$1 = editor => {\n      setup$2(editor);\n    };\n\n    const Quirks = editor => {\n      const each = Tools.each;\n      const BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n      const browser = Env.browser;\n      const isGecko = browser.isFirefox();\n      const isWebKit = browser.isChromium() || browser.isSafari();\n      const isiOS = Env.deviceType.isiPhone() || Env.deviceType.isiPad();\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      const setEditorCommandState = (cmd, state) => {\n        try {\n          editor.getDoc().execCommand(cmd, false, String(state));\n        } catch (ex) {\n        }\n      };\n      const isDefaultPrevented = e => {\n        return e.isDefaultPrevented();\n      };\n      const emptyEditorWhenDeleting = () => {\n        const serializeRng = rng => {\n          const body = dom.create('body');\n          const contents = rng.cloneContents();\n          body.appendChild(contents);\n          return selection.serializer.serialize(body, { format: 'html' });\n        };\n        const allContentsSelected = rng => {\n          const selection = serializeRng(rng);\n          const allRng = dom.createRng();\n          allRng.selectNode(editor.getBody());\n          const allSelection = serializeRng(allRng);\n          return selection === allSelection;\n        };\n        editor.on('keydown', e => {\n          const keyCode = e.keyCode;\n          if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE) && editor.selection.isEditable()) {\n            const isCollapsed = editor.selection.isCollapsed();\n            const body = editor.getBody();\n            if (isCollapsed && !isEmpty$2(SugarElement.fromDom(body))) {\n              return;\n            }\n            if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n              return;\n            }\n            e.preventDefault();\n            editor.setContent('');\n            if (body.firstChild && dom.isBlock(body.firstChild)) {\n              editor.selection.setCursorLocation(body.firstChild, 0);\n            } else {\n              editor.selection.setCursorLocation(body, 0);\n            }\n            editor.nodeChanged();\n          }\n        });\n      };\n      const selectAll = () => {\n        editor.shortcuts.add('meta+a', null, 'SelectAll');\n      };\n      const documentElementEditingFocus = () => {\n        if (!editor.inline) {\n          dom.bind(editor.getDoc(), 'mousedown mouseup', e => {\n            let rng;\n            if (e.target === editor.getDoc().documentElement) {\n              rng = selection.getRng();\n              editor.getBody().focus();\n              if (e.type === 'mousedown') {\n                if (isCaretContainer$2(rng.startContainer)) {\n                  return;\n                }\n                selection.placeCaretAt(e.clientX, e.clientY);\n              } else {\n                selection.setRng(rng);\n              }\n            }\n          });\n        }\n      };\n      const removeHrOnBackspace = () => {\n        editor.on('keydown', e => {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (!editor.getBody().getElementsByTagName('hr').length) {\n              return;\n            }\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              const node = selection.getNode();\n              const previousSibling = node.previousSibling;\n              if (node.nodeName === 'HR') {\n                dom.remove(node);\n                e.preventDefault();\n                return;\n              }\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n                dom.remove(previousSibling);\n                e.preventDefault();\n              }\n            }\n          }\n        });\n      };\n      const focusBody = () => {\n        if (!Range.prototype.getClientRects) {\n          editor.on('mousedown', e => {\n            if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n              const body = editor.getBody();\n              body.blur();\n              Delay.setEditorTimeout(editor, () => {\n                body.focus();\n              });\n            }\n          });\n        }\n      };\n      const selectControlElements = () => {\n        const visualAidsAnchorClass = getVisualAidsAnchorClass(editor);\n        editor.on('click', e => {\n          const target = e.target;\n          if (/^(IMG|HR)$/.test(target.nodeName) && dom.isEditable(target)) {\n            e.preventDefault();\n            editor.selection.select(target);\n            editor.nodeChanged();\n          }\n          if (target.nodeName === 'A' && dom.hasClass(target, visualAidsAnchorClass) && target.childNodes.length === 0 && dom.isEditable(target.parentNode)) {\n            e.preventDefault();\n            selection.select(target);\n          }\n        });\n      };\n      const removeStylesWhenDeletingAcrossBlockElements = () => {\n        const getAttributeApplyFunction = () => {\n          const template = dom.getAttribs(selection.getStart().cloneNode(false));\n          return () => {\n            const target = selection.getStart();\n            if (target !== editor.getBody()) {\n              dom.setAttrib(target, 'style', null);\n              each(template, attr => {\n                target.setAttributeNode(attr.cloneNode(true));\n              });\n            }\n          };\n        };\n        const isSelectionAcrossElements = () => {\n          return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n        };\n        editor.on('keypress', e => {\n          let applyAttributes;\n          if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n            applyAttributes = getAttributeApplyFunction();\n            editor.getDoc().execCommand('delete', false);\n            applyAttributes();\n            e.preventDefault();\n            return false;\n          } else {\n            return true;\n          }\n        });\n        dom.bind(editor.getDoc(), 'cut', e => {\n          if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n            const applyAttributes = getAttributeApplyFunction();\n            Delay.setEditorTimeout(editor, () => {\n              applyAttributes();\n            });\n          }\n        });\n      };\n      const disableBackspaceIntoATable = () => {\n        editor.on('keydown', e => {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              const previousSibling = selection.getNode().previousSibling;\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n                e.preventDefault();\n                return false;\n              }\n            }\n          }\n          return true;\n        });\n      };\n      const removeBlockQuoteOnBackSpace = () => {\n        editor.on('keydown', e => {\n          if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n            return;\n          }\n          let rng = selection.getRng();\n          const container = rng.startContainer;\n          const offset = rng.startOffset;\n          const root = dom.getRoot();\n          let parent = container;\n          if (!rng.collapsed || offset !== 0) {\n            return;\n          }\n          while (parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n            parent = parent.parentNode;\n          }\n          if (parent.nodeName === 'BLOCKQUOTE') {\n            editor.formatter.toggle('blockquote', undefined, parent);\n            rng = dom.createRng();\n            rng.setStart(container, 0);\n            rng.setEnd(container, 0);\n            selection.setRng(rng);\n          }\n        });\n      };\n      const setGeckoEditingOptions = () => {\n        const setOpts = () => {\n          setEditorCommandState('StyleWithCSS', false);\n          setEditorCommandState('enableInlineTableEditing', false);\n          if (!getObjectResizing(editor)) {\n            setEditorCommandState('enableObjectResizing', false);\n          }\n        };\n        if (!isReadOnly$1(editor)) {\n          editor.on('BeforeExecCommand mousedown', setOpts);\n        }\n      };\n      const addBrAfterLastLinks = () => {\n        const fixLinks = () => {\n          each(dom.select('a:not([data-mce-block])'), node => {\n            var _a;\n            let parentNode = node.parentNode;\n            const root = dom.getRoot();\n            if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.lastChild) === node) {\n              while (parentNode && !dom.isBlock(parentNode)) {\n                if (((_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.lastChild) !== parentNode || parentNode === root) {\n                  return;\n                }\n                parentNode = parentNode.parentNode;\n              }\n              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n            }\n          });\n        };\n        editor.on('SetContent ExecCommand', e => {\n          if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n            fixLinks();\n          }\n        });\n      };\n      const setDefaultBlockType = () => {\n        editor.on('init', () => {\n          setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n        });\n      };\n      const isAllContentSelected = editor => {\n        const body = editor.getBody();\n        const rng = editor.selection.getRng();\n        return rng.startContainer === rng.endContainer && rng.startContainer === body && rng.startOffset === 0 && rng.endOffset === body.childNodes.length;\n      };\n      const normalizeSelection = () => {\n        editor.on('keyup focusin mouseup', e => {\n          if (!VK.modifierPressed(e) && !isAllContentSelected(editor)) {\n            selection.normalize();\n          }\n        }, true);\n      };\n      const showBrokenImageIcon = () => {\n        editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n      };\n      const restoreFocusOnKeyDown = () => {\n        if (!editor.inline) {\n          editor.on('keydown', () => {\n            if (document.activeElement === document.body) {\n              editor.getWin().focus();\n            }\n          });\n        }\n      };\n      const bodyHeight = () => {\n        if (!editor.inline) {\n          editor.contentStyles.push('body {min-height: 150px}');\n          editor.on('click', e => {\n            let rng;\n            if (e.target.nodeName === 'HTML') {\n              rng = editor.selection.getRng();\n              editor.getBody().focus();\n              editor.selection.setRng(rng);\n              editor.selection.normalize();\n              editor.nodeChanged();\n            }\n          });\n        }\n      };\n      const blockCmdArrowNavigation = () => {\n        if (isMac) {\n          editor.on('keydown', e => {\n            if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n              e.preventDefault();\n              const selection = editor.selection.getSel();\n              selection.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n            }\n          });\n        }\n      };\n      const tapLinksAndImages = () => {\n        editor.on('click', e => {\n          let elm = e.target;\n          do {\n            if (elm.tagName === 'A') {\n              e.preventDefault();\n              return;\n            }\n          } while (elm = elm.parentNode);\n        });\n        editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n      };\n      const blockFormSubmitInsideEditor = () => {\n        editor.on('init', () => {\n          editor.dom.bind(editor.getBody(), 'submit', e => {\n            e.preventDefault();\n          });\n        });\n      };\n      const removeAppleInterchangeBrs = () => {\n        parser.addNodeFilter('br', nodes => {\n          let i = nodes.length;\n          while (i--) {\n            if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n              nodes[i].remove();\n            }\n          }\n        });\n      };\n      const refreshContentEditable = noop;\n      const isHidden = () => {\n        if (!isGecko || editor.removed) {\n          return false;\n        }\n        const sel = editor.selection.getSel();\n        return !sel || !sel.rangeCount || sel.rangeCount === 0;\n      };\n      const setupRtc = () => {\n        if (isWebKit) {\n          documentElementEditingFocus();\n          selectControlElements();\n          blockFormSubmitInsideEditor();\n          selectAll();\n          if (isiOS) {\n            restoreFocusOnKeyDown();\n            bodyHeight();\n            tapLinksAndImages();\n          }\n        }\n        if (isGecko) {\n          focusBody();\n          setGeckoEditingOptions();\n          showBrokenImageIcon();\n          blockCmdArrowNavigation();\n        }\n      };\n      const dropDragEndEvent = () => {\n        editor.on('drop', event => {\n          var _a;\n          const data = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/html');\n          if (isString(data) && /^<img[^>]*>$/.test(data)) {\n            editor.dispatch('dragend', new window.DragEvent('dragend', event));\n          }\n        });\n      };\n      const setup = () => {\n        removeBlockQuoteOnBackSpace();\n        emptyEditorWhenDeleting();\n        if (!Env.windowsPhone) {\n          normalizeSelection();\n        }\n        if (isWebKit) {\n          documentElementEditingFocus();\n          selectControlElements();\n          setDefaultBlockType();\n          blockFormSubmitInsideEditor();\n          disableBackspaceIntoATable();\n          removeAppleInterchangeBrs();\n          if (isiOS) {\n            restoreFocusOnKeyDown();\n            bodyHeight();\n            tapLinksAndImages();\n          } else {\n            selectAll();\n          }\n        }\n        if (isGecko) {\n          removeHrOnBackspace();\n          focusBody();\n          removeStylesWhenDeletingAcrossBlockElements();\n          setGeckoEditingOptions();\n          addBrAfterLastLinks();\n          showBrokenImageIcon();\n          blockCmdArrowNavigation();\n          disableBackspaceIntoATable();\n          dropDragEndEvent();\n        }\n      };\n      if (isRtc(editor)) {\n        setupRtc();\n      } else {\n        setup();\n      }\n      return {\n        refreshContentEditable,\n        isHidden\n      };\n    };\n\n    const DOM$6 = DOMUtils.DOM;\n    const appendStyle = (editor, text) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      const container = getStyleContainer(getRootNode(body));\n      const style = SugarElement.fromTag('style');\n      set$3(style, 'type', 'text/css');\n      append$1(style, SugarElement.fromText(text));\n      append$1(container, style);\n      editor.on('remove', () => {\n        remove$5(style);\n      });\n    };\n    const getRootName = editor => editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n    const removeUndefined = obj => filter$4(obj, v => isUndefined(v) === false);\n    const mkParserSettings = editor => {\n      const getOption = editor.options.get;\n      const blobCache = editor.editorUpload.blobCache;\n      return removeUndefined({\n        allow_conditional_comments: getOption('allow_conditional_comments'),\n        allow_html_data_urls: getOption('allow_html_data_urls'),\n        allow_svg_data_urls: getOption('allow_svg_data_urls'),\n        allow_html_in_named_anchor: getOption('allow_html_in_named_anchor'),\n        allow_script_urls: getOption('allow_script_urls'),\n        allow_unsafe_link_target: getOption('allow_unsafe_link_target'),\n        convert_unsafe_embeds: getOption('convert_unsafe_embeds'),\n        convert_fonts_to_spans: getOption('convert_fonts_to_spans'),\n        fix_list_elements: getOption('fix_list_elements'),\n        font_size_legacy_values: getOption('font_size_legacy_values'),\n        forced_root_block: getOption('forced_root_block'),\n        forced_root_block_attrs: getOption('forced_root_block_attrs'),\n        preserve_cdata: getOption('preserve_cdata'),\n        inline_styles: getOption('inline_styles'),\n        root_name: getRootName(editor),\n        sandbox_iframes: getOption('sandbox_iframes'),\n        sanitize: getOption('xss_sanitization'),\n        validate: true,\n        blob_cache: blobCache,\n        document: editor.getDoc()\n      });\n    };\n    const mkSchemaSettings = editor => {\n      const getOption = editor.options.get;\n      return removeUndefined({\n        custom_elements: getOption('custom_elements'),\n        extended_valid_elements: getOption('extended_valid_elements'),\n        invalid_elements: getOption('invalid_elements'),\n        invalid_styles: getOption('invalid_styles'),\n        schema: getOption('schema'),\n        valid_children: getOption('valid_children'),\n        valid_classes: getOption('valid_classes'),\n        valid_elements: getOption('valid_elements'),\n        valid_styles: getOption('valid_styles'),\n        verify_html: getOption('verify_html'),\n        padd_empty_block_inline_children: getOption('format_empty_lines')\n      });\n    };\n    const mkSerializerSettings = editor => {\n      const getOption = editor.options.get;\n      return {\n        ...mkParserSettings(editor),\n        ...mkSchemaSettings(editor),\n        ...removeUndefined({\n          remove_trailing_brs: getOption('remove_trailing_brs'),\n          pad_empty_with_br: getOption('pad_empty_with_br'),\n          url_converter: getOption('url_converter'),\n          url_converter_scope: getOption('url_converter_scope'),\n          element_format: getOption('element_format'),\n          entities: getOption('entities'),\n          entity_encoding: getOption('entity_encoding'),\n          indent: getOption('indent'),\n          indent_after: getOption('indent_after'),\n          indent_before: getOption('indent_before')\n        })\n      };\n    };\n    const createParser = editor => {\n      const parser = DomParser(mkParserSettings(editor), editor.schema);\n      parser.addAttributeFilter('src,href,style,tabindex', (nodes, name) => {\n        const dom = editor.dom;\n        const internalName = 'data-mce-' + name;\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          let value = node.attr(name);\n          if (value && !node.attr(internalName)) {\n            if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n              continue;\n            }\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n              if (!value.length) {\n                value = null;\n              }\n              node.attr(internalName, value);\n              node.attr(name, value);\n            } else if (name === 'tabindex') {\n              node.attr(internalName, value);\n              node.attr(name, null);\n            } else {\n              node.attr(internalName, editor.convertURL(value, name, node.name));\n            }\n          }\n        }\n      });\n      parser.addNodeFilter('script', nodes => {\n        let i = nodes.length;\n        while (i--) {\n          const node = nodes[i];\n          const type = node.attr('type') || 'no/type';\n          if (type.indexOf('mce-') !== 0) {\n            node.attr('type', 'mce-' + type);\n          }\n        }\n      });\n      if (shouldPreserveCData(editor)) {\n        parser.addNodeFilter('#cdata', nodes => {\n          var _a;\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            node.type = 8;\n            node.name = '#comment';\n            node.value = '[CDATA[' + editor.dom.encode((_a = node.value) !== null && _a !== void 0 ? _a : '') + ']]';\n          }\n        });\n      }\n      parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', nodes => {\n        let i = nodes.length;\n        const nonEmptyElements = editor.schema.getNonEmptyElements();\n        while (i--) {\n          const node = nodes[i];\n          if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n            node.append(new AstNode('br', 1));\n          }\n        }\n      });\n      return parser;\n    };\n    const autoFocus = editor => {\n      const autoFocus = getAutoFocus(editor);\n      if (autoFocus) {\n        Delay.setEditorTimeout(editor, () => {\n          let focusEditor;\n          if (autoFocus === true) {\n            focusEditor = editor;\n          } else {\n            focusEditor = editor.editorManager.get(autoFocus);\n          }\n          if (focusEditor && !focusEditor.destroyed) {\n            focusEditor.focus();\n            focusEditor.selection.scrollIntoView();\n          }\n        }, 100);\n      }\n    };\n    const moveSelectionToFirstCaretPosition = editor => {\n      const root = editor.dom.getRoot();\n      if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n        firstPositionIn(root).each(pos => {\n          const node = pos.getNode();\n          const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n          editor.selection.setRng(caretPos.toRange());\n        });\n      }\n    };\n    const initEditor = editor => {\n      editor.bindPendingEventDelegates();\n      editor.initialized = true;\n      fireInit(editor);\n      editor.focus(true);\n      moveSelectionToFirstCaretPosition(editor);\n      editor.nodeChanged({ initial: true });\n      const initInstanceCallback = getInitInstanceCallback(editor);\n      if (isFunction(initInstanceCallback)) {\n        initInstanceCallback.call(editor, editor);\n      }\n      autoFocus(editor);\n    };\n    const getStyleSheetLoader$1 = editor => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n    const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n      const {\n        pass: bundledCss,\n        fail: normalCss\n      } = partition$2(css, name => tinymce.Resource.has(toContentSkinResourceName(name)));\n      const bundledPromises = bundledCss.map(url => {\n        const css = tinymce.Resource.get(toContentSkinResourceName(url));\n        if (isString(css)) {\n          return Promise.resolve(getStyleSheetLoader$1(editor).loadRawCss(url, css));\n        }\n        return Promise.resolve();\n      });\n      const promises = [\n        ...bundledPromises,\n        getStyleSheetLoader$1(editor).loadAll(normalCss)\n      ];\n      if (editor.inline) {\n        return promises;\n      } else {\n        return promises.concat([editor.ui.styleSheetLoader.loadAll(framedFonts)]);\n      }\n    };\n    const loadContentCss = editor => {\n      const styleSheetLoader = getStyleSheetLoader$1(editor);\n      const fontCss = getFontCss(editor);\n      const css = editor.contentCSS;\n      const removeCss = () => {\n        styleSheetLoader.unloadAll(css);\n        if (!editor.inline) {\n          editor.ui.styleSheetLoader.unloadAll(fontCss);\n        }\n      };\n      const loaded = () => {\n        if (editor.removed) {\n          removeCss();\n        } else {\n          editor.on('remove', removeCss);\n        }\n      };\n      if (editor.contentStyles.length > 0) {\n        let contentCssText = '';\n        Tools.each(editor.contentStyles, style => {\n          contentCssText += style + '\\r\\n';\n        });\n        editor.dom.addStyle(contentCssText);\n      }\n      const allStylesheets = Promise.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n      const contentStyle = getContentStyle(editor);\n      if (contentStyle) {\n        appendStyle(editor, contentStyle);\n      }\n      return allStylesheets;\n    };\n    const preInit = editor => {\n      const doc = editor.getDoc(), body = editor.getBody();\n      firePreInit(editor);\n      if (!shouldBrowserSpellcheck(editor)) {\n        doc.body.spellcheck = false;\n        DOM$6.setAttrib(body, 'spellcheck', 'false');\n      }\n      editor.quirks = Quirks(editor);\n      firePostRender(editor);\n      const directionality = getDirectionality(editor);\n      if (directionality !== undefined) {\n        body.dir = directionality;\n      }\n      const protect = getProtect(editor);\n      if (protect) {\n        editor.on('BeforeSetContent', e => {\n          Tools.each(protect, pattern => {\n            e.content = e.content.replace(pattern, str => {\n              return '<!--mce:protected ' + escape(str) + '-->';\n            });\n          });\n        });\n      }\n      editor.on('SetContent', () => {\n        editor.addVisual(editor.getBody());\n      });\n      editor.on('compositionstart compositionend', e => {\n        editor.composing = e.type === 'compositionstart';\n      });\n    };\n    const loadInitialContent = editor => {\n      if (!isRtc(editor)) {\n        editor.load({\n          initial: true,\n          format: 'html'\n        });\n      }\n      editor.startContent = editor.getContent({ format: 'raw' });\n    };\n    const initEditorWithInitialContent = editor => {\n      if (editor.removed !== true) {\n        loadInitialContent(editor);\n        initEditor(editor);\n      }\n    };\n    const startProgress = editor => {\n      let canceled = false;\n      const progressTimeout = setTimeout(() => {\n        if (!canceled) {\n          editor.setProgressState(true);\n        }\n      }, 500);\n      return () => {\n        clearTimeout(progressTimeout);\n        canceled = true;\n        editor.setProgressState(false);\n      };\n    };\n    const contentBodyLoaded = editor => {\n      const targetElm = editor.getElement();\n      let doc = editor.getDoc();\n      if (editor.inline) {\n        DOM$6.addClass(targetElm, 'mce-content-body');\n        editor.contentDocument = doc = document;\n        editor.contentWindow = window;\n        editor.bodyElement = targetElm;\n        editor.contentAreaContainer = targetElm;\n      }\n      const body = editor.getBody();\n      body.disabled = true;\n      editor.readonly = isReadOnly$1(editor);\n      editor._editableRoot = hasEditableRoot$1(editor);\n      if (!editor.readonly && editor.hasEditableRoot()) {\n        if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n          body.style.position = 'relative';\n        }\n        body.contentEditable = 'true';\n      }\n      body.disabled = false;\n      editor.editorUpload = EditorUpload(editor);\n      editor.schema = Schema(mkSchemaSettings(editor));\n      editor.dom = DOMUtils(doc, {\n        keep_values: true,\n        url_converter: editor.convertURL,\n        url_converter_scope: editor,\n        update_styles: true,\n        root_element: editor.inline ? editor.getBody() : null,\n        collect: editor.inline,\n        schema: editor.schema,\n        contentCssCors: shouldUseContentCssCors(editor),\n        referrerPolicy: getReferrerPolicy(editor),\n        onSetAttrib: e => {\n          editor.dispatch('SetAttrib', e);\n        },\n        force_hex_color: shouldForceHexColor(editor)\n      });\n      editor.parser = createParser(editor);\n      editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n      editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n      editor.annotator = Annotator(editor);\n      editor.formatter = Formatter(editor);\n      editor.undoManager = UndoManager(editor);\n      editor._nodeChangeDispatcher = new NodeChange(editor);\n      editor._selectionOverrides = SelectionOverrides(editor);\n      setup$p(editor);\n      setup$6(editor);\n      setup$n(editor);\n      if (!isRtc(editor)) {\n        setup$5(editor);\n        setup$1(editor);\n      }\n      const caret = setup$b(editor);\n      setup$q(editor, caret);\n      setup$o(editor);\n      setup$r(editor);\n      setup$7(editor);\n      const setupRtcThunk = setup$t(editor);\n      preInit(editor);\n      setupRtcThunk.fold(() => {\n        const cancelProgress = startProgress(editor);\n        loadContentCss(editor).then(() => {\n          initEditorWithInitialContent(editor);\n          cancelProgress();\n        });\n      }, setupRtc => {\n        editor.setProgressState(true);\n        loadContentCss(editor).then(() => {\n          setupRtc().then(_rtcMode => {\n            editor.setProgressState(false);\n            initEditorWithInitialContent(editor);\n            bindEvents(editor);\n          }, err => {\n            editor.notificationManager.open({\n              type: 'error',\n              text: String(err)\n            });\n            initEditorWithInitialContent(editor);\n            bindEvents(editor);\n          });\n        });\n      });\n    };\n\n    const filter = always;\n    const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n\n    const DOM$5 = DOMUtils.DOM;\n    const createIframeElement = (id, title, customAttrs, tabindex) => {\n      const iframe = SugarElement.fromTag('iframe');\n      tabindex.each(t => set$3(iframe, 'tabindex', t));\n      setAll$1(iframe, customAttrs);\n      setAll$1(iframe, {\n        id: id + '_ifr',\n        frameBorder: '0',\n        allowTransparency: 'true',\n        title\n      });\n      add$2(iframe, 'tox-edit-area__iframe');\n      return iframe;\n    };\n    const getIframeHtml = editor => {\n      let iframeHTML = getDocType(editor) + '<html><head>';\n      if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n        iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n      }\n      iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n      const bodyId = getBodyId(editor);\n      const bodyClass = getBodyClass(editor);\n      const translatedAriaText = editor.translate(getIframeAriaText(editor));\n      if (getContentSecurityPolicy(editor)) {\n        iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + getContentSecurityPolicy(editor) + '\" />';\n      }\n      iframeHTML += '</head>' + `<body id=\"${ bodyId }\" class=\"mce-content-body ${ bodyClass }\" data-id=\"${ editor.id }\" aria-label=\"${ translatedAriaText }\">` + '<br>' + '</body></html>';\n      return iframeHTML;\n    };\n    const createIframe = (editor, boxInfo) => {\n      const iframeTitle = editor.translate('Rich Text Area');\n      const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), 'tabindex').bind(toInt);\n      const ifr = createIframeElement(editor.id, iframeTitle, getIframeAttrs(editor), tabindex).dom;\n      ifr.onload = () => {\n        ifr.onload = null;\n        editor.dispatch('load');\n      };\n      editor.contentAreaContainer = boxInfo.iframeContainer;\n      editor.iframeElement = ifr;\n      editor.iframeHTML = getIframeHtml(editor);\n      DOM$5.add(boxInfo.iframeContainer, ifr);\n    };\n    const setupIframeBody = editor => {\n      const iframe = editor.iframeElement;\n      const ready = () => {\n        editor.contentDocument = iframe.contentDocument;\n        contentBodyLoaded(editor);\n      };\n      if (shouldUseDocumentWrite(editor) || Env.browser.isFirefox()) {\n        const doc = editor.getDoc();\n        doc.open();\n        doc.write(editor.iframeHTML);\n        doc.close();\n        ready();\n      } else {\n        const binder = bind(SugarElement.fromDom(iframe), 'load', () => {\n          binder.unbind();\n          ready();\n        });\n        iframe.srcdoc = editor.iframeHTML;\n      }\n    };\n    const init$1 = (editor, boxInfo) => {\n      createIframe(editor, boxInfo);\n      if (boxInfo.editorContainer) {\n        boxInfo.editorContainer.style.display = editor.orgDisplay;\n        editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n      }\n      editor.getElement().style.display = 'none';\n      DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n      editor.getElement().style.visibility = editor.orgVisibility;\n      setupIframeBody(editor);\n    };\n\n    const DOM$4 = DOMUtils.DOM;\n    const initPlugin = (editor, initializedPlugins, plugin) => {\n      const Plugin = PluginManager.get(plugin);\n      const pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n      plugin = Tools.trim(plugin);\n      if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n        if (editor.plugins[plugin]) {\n          return;\n        }\n        try {\n          const pluginInstance = Plugin(editor, pluginUrl) || {};\n          editor.plugins[plugin] = pluginInstance;\n          if (isFunction(pluginInstance.init)) {\n            pluginInstance.init(editor, pluginUrl);\n            initializedPlugins.push(plugin);\n          }\n        } catch (e) {\n          pluginInitError(editor, plugin, e);\n        }\n      }\n    };\n    const trimLegacyPrefix = name => {\n      return name.replace(/^\\-/, '');\n    };\n    const initPlugins = editor => {\n      const initializedPlugins = [];\n      each$e(getPlugins(editor), name => {\n        initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n      });\n    };\n    const initIcons = editor => {\n      const iconPackName = Tools.trim(getIconPackName(editor));\n      const currentIcons = editor.ui.registry.getAll().icons;\n      const loadIcons = {\n        ...IconManager.get('default').icons,\n        ...IconManager.get(iconPackName).icons\n      };\n      each$d(loadIcons, (svgData, icon) => {\n        if (!has$2(currentIcons, icon)) {\n          editor.ui.registry.addIcon(icon, svgData);\n        }\n      });\n    };\n    const initTheme = editor => {\n      const theme = getTheme(editor);\n      if (isString(theme)) {\n        const Theme = ThemeManager.get(theme);\n        editor.theme = Theme(editor, ThemeManager.urls[theme]) || {};\n        if (isFunction(editor.theme.init)) {\n          editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''));\n        }\n      } else {\n        editor.theme = {};\n      }\n    };\n    const initModel = editor => {\n      const model = getModel(editor);\n      const Model = ModelManager.get(model);\n      editor.model = Model(editor, ModelManager.urls[model]);\n    };\n    const renderFromLoadedTheme = editor => {\n      const render = editor.theme.renderUI;\n      return render ? render() : renderThemeFalse(editor);\n    };\n    const renderFromThemeFunc = editor => {\n      const elm = editor.getElement();\n      const theme = getTheme(editor);\n      const info = theme(editor, elm);\n      if (info.editorContainer.nodeType) {\n        info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n      }\n      if (info.iframeContainer && info.iframeContainer.nodeType) {\n        info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n      }\n      info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n      return info;\n    };\n    const createThemeFalseResult = (element, iframe) => {\n      return {\n        editorContainer: element,\n        iframeContainer: iframe,\n        api: {}\n      };\n    };\n    const renderThemeFalseIframe = targetElement => {\n      const iframeContainer = DOM$4.create('div');\n      DOM$4.insertAfter(iframeContainer, targetElement);\n      return createThemeFalseResult(iframeContainer, iframeContainer);\n    };\n    const renderThemeFalse = editor => {\n      const targetElement = editor.getElement();\n      return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n    };\n    const renderThemeUi = editor => {\n      const elm = editor.getElement();\n      editor.orgDisplay = elm.style.display;\n      if (isString(getTheme(editor))) {\n        return renderFromLoadedTheme(editor);\n      } else if (isFunction(getTheme(editor))) {\n        return renderFromThemeFunc(editor);\n      } else {\n        return renderThemeFalse(editor);\n      }\n    };\n    const augmentEditorUiApi = (editor, api) => {\n      const uiApiFacade = {\n        show: Optional.from(api.show).getOr(noop),\n        hide: Optional.from(api.hide).getOr(noop),\n        isEnabled: Optional.from(api.isEnabled).getOr(always),\n        setEnabled: state => {\n          if (!editor.mode.isReadOnly()) {\n            Optional.from(api.setEnabled).each(f => f(state));\n          }\n        }\n      };\n      editor.ui = {\n        ...editor.ui,\n        ...uiApiFacade\n      };\n    };\n    const init = async editor => {\n      editor.dispatch('ScriptsLoaded');\n      initIcons(editor);\n      initTheme(editor);\n      initModel(editor);\n      initPlugins(editor);\n      const renderInfo = await renderThemeUi(editor);\n      augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n      editor.editorContainer = renderInfo.editorContainer;\n      appendContentCssFromSettings(editor);\n      if (editor.inline) {\n        contentBodyLoaded(editor);\n      } else {\n        init$1(editor, {\n          editorContainer: renderInfo.editorContainer,\n          iframeContainer: renderInfo.iframeContainer\n        });\n      }\n    };\n\n    const DOM$3 = DOMUtils.DOM;\n    const hasSkipLoadPrefix = name => name.charAt(0) === '-';\n    const loadLanguage = (scriptLoader, editor) => {\n      const languageCode = getLanguageCode(editor);\n      const languageUrl = getLanguageUrl(editor);\n      if (!I18n.hasCode(languageCode) && languageCode !== 'en') {\n        const url = isNotEmpty(languageUrl) ? languageUrl : `${ editor.editorManager.baseURL }/langs/${ languageCode }.js`;\n        scriptLoader.add(url).catch(() => {\n          languageLoadError(editor, url, languageCode);\n        });\n      }\n    };\n    const loadTheme = (editor, suffix) => {\n      const theme = getTheme(editor);\n      if (isString(theme) && !hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n        const themeUrl = getThemeUrl(editor);\n        const url = themeUrl ? editor.documentBaseURI.toAbsolute(themeUrl) : `themes/${ theme }/theme${ suffix }.js`;\n        ThemeManager.load(theme, url).catch(() => {\n          themeLoadError(editor, url, theme);\n        });\n      }\n    };\n    const loadModel = (editor, suffix) => {\n      const model = getModel(editor);\n      if (model !== 'plugin' && !has$2(ModelManager.urls, model)) {\n        const modelUrl = getModelUrl(editor);\n        const url = isString(modelUrl) ? editor.documentBaseURI.toAbsolute(modelUrl) : `models/${ model }/model${ suffix }.js`;\n        ModelManager.load(model, url).catch(() => {\n          modelLoadError(editor, url, model);\n        });\n      }\n    };\n    const getIconsUrlMetaFromUrl = editor => Optional.from(getIconsUrl(editor)).filter(isNotEmpty).map(url => ({\n      url,\n      name: Optional.none()\n    }));\n    const getIconsUrlMetaFromName = (editor, name, suffix) => Optional.from(name).filter(name => isNotEmpty(name) && !IconManager.has(name)).map(name => ({\n      url: `${ editor.editorManager.baseURL }/icons/${ name }/icons${ suffix }.js`,\n      name: Optional.some(name)\n    }));\n    const loadIcons = (scriptLoader, editor, suffix) => {\n      const defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n      const customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(() => getIconsUrlMetaFromName(editor, getIconPackName(editor), ''));\n      each$e(cat([\n        defaultIconsUrl,\n        customIconsUrl\n      ]), urlMeta => {\n        scriptLoader.add(urlMeta.url).catch(() => {\n          iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n        });\n      });\n    };\n    const loadPlugins = (editor, suffix) => {\n      const loadPlugin = (name, url) => {\n        PluginManager.load(name, url).catch(() => {\n          pluginLoadError(editor, url, name);\n        });\n      };\n      each$d(getExternalPlugins$1(editor), (url, name) => {\n        loadPlugin(name, url);\n        editor.options.set('plugins', getPlugins(editor).concat(name));\n      });\n      each$e(getPlugins(editor), plugin => {\n        plugin = Tools.trim(plugin);\n        if (plugin && !PluginManager.urls[plugin] && !hasSkipLoadPrefix(plugin)) {\n          loadPlugin(plugin, `plugins/${ plugin }/plugin${ suffix }.js`);\n        }\n      });\n    };\n    const isThemeLoaded = editor => {\n      const theme = getTheme(editor);\n      return !isString(theme) || isNonNullable(ThemeManager.get(theme));\n    };\n    const isModelLoaded = editor => {\n      const model = getModel(editor);\n      return isNonNullable(ModelManager.get(model));\n    };\n    const loadScripts = (editor, suffix) => {\n      const scriptLoader = ScriptLoader.ScriptLoader;\n      const initEditor = () => {\n        if (!editor.removed && isThemeLoaded(editor) && isModelLoaded(editor)) {\n          init(editor);\n        }\n      };\n      loadTheme(editor, suffix);\n      loadModel(editor, suffix);\n      loadLanguage(scriptLoader, editor);\n      loadIcons(scriptLoader, editor, suffix);\n      loadPlugins(editor, suffix);\n      scriptLoader.loadQueue().then(initEditor, initEditor);\n    };\n    const getStyleSheetLoader = (element, editor) => instance.forElement(element, {\n      contentCssCors: hasContentCssCors(editor),\n      referrerPolicy: getReferrerPolicy(editor)\n    });\n    const render = editor => {\n      const id = editor.id;\n      I18n.setCode(getLanguageCode(editor));\n      const readyHandler = () => {\n        DOM$3.unbind(window, 'ready', readyHandler);\n        editor.render();\n      };\n      if (!EventUtils.Event.domLoaded) {\n        DOM$3.bind(window, 'ready', readyHandler);\n        return;\n      }\n      if (!editor.getElement()) {\n        return;\n      }\n      const element = SugarElement.fromDom(editor.getElement());\n      const snapshot = clone$4(element);\n      editor.on('remove', () => {\n        eachr(element.dom.attributes, attr => remove$a(element, attr.name));\n        setAll$1(element, snapshot);\n      });\n      editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n      if (!isInline$1(editor)) {\n        editor.orgVisibility = editor.getElement().style.visibility;\n        editor.getElement().style.visibility = 'hidden';\n      } else {\n        editor.inline = true;\n      }\n      const form = editor.getElement().form || DOM$3.getParent(id, 'form');\n      if (form) {\n        editor.formElement = form;\n        if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n          DOM$3.insertAfter(DOM$3.create('input', {\n            type: 'hidden',\n            name: id\n          }), id);\n          editor.hasHiddenInput = true;\n        }\n        editor.formEventDelegate = e => {\n          editor.dispatch(e.type, e);\n        };\n        DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n        editor.on('reset', () => {\n          editor.resetContent();\n        });\n        if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n          form._mceOldSubmit = form.submit;\n          form.submit = () => {\n            editor.editorManager.triggerSave();\n            editor.setDirty(false);\n            return form._mceOldSubmit(form);\n          };\n        }\n      }\n      editor.windowManager = WindowManager(editor);\n      editor.notificationManager = NotificationManager(editor);\n      if (isEncodingXml(editor)) {\n        editor.on('GetContent', e => {\n          if (e.save) {\n            e.content = DOM$3.encode(e.content);\n          }\n        });\n      }\n      if (shouldAddFormSubmitTrigger(editor)) {\n        editor.on('submit', () => {\n          if (editor.initialized) {\n            editor.save();\n          }\n        });\n      }\n      if (shouldAddUnloadTrigger(editor)) {\n        editor._beforeUnload = () => {\n          if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n            editor.save({\n              format: 'raw',\n              no_events: true,\n              set_dirty: false\n            });\n          }\n        };\n        editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n      }\n      editor.editorManager.add(editor);\n      loadScripts(editor, editor.suffix);\n    };\n\n    const setEditableRoot = (editor, state) => {\n      if (editor._editableRoot !== state) {\n        editor._editableRoot = state;\n        if (!editor.readonly) {\n          editor.getBody().contentEditable = String(editor.hasEditableRoot());\n          editor.nodeChanged();\n        }\n        fireEditableRootStateChange(editor, state);\n      }\n    };\n    const hasEditableRoot = editor => editor._editableRoot;\n\n    const sectionResult = (sections, settings) => ({\n      sections: constant(sections),\n      options: constant(settings)\n    });\n    const deviceDetection = detect$2().deviceType;\n    const isPhone = deviceDetection.isPhone();\n    const isTablet = deviceDetection.isTablet();\n    const normalizePlugins = plugins => {\n      if (isNullable(plugins)) {\n        return [];\n      } else {\n        const pluginNames = isArray$1(plugins) ? plugins : plugins.split(/[ ,]/);\n        const trimmedPlugins = map$3(pluginNames, trim$4);\n        return filter$5(trimmedPlugins, isNotEmpty);\n      }\n    };\n    const extractSections = (keys, options) => {\n      const result = bifilter(options, (value, key) => {\n        return contains$2(keys, key);\n      });\n      return sectionResult(result.t, result.f);\n    };\n    const getSection = (sectionResult, name, defaults = {}) => {\n      const sections = sectionResult.sections();\n      const sectionOptions = get$a(sections, name).getOr({});\n      return Tools.extend({}, defaults, sectionOptions);\n    };\n    const hasSection = (sectionResult, name) => {\n      return has$2(sectionResult.sections(), name);\n    };\n    const getSectionConfig = (sectionResult, name) => {\n      return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n    };\n    const getMobileOverrideOptions = (mobileOptions, isPhone) => {\n      const defaultMobileOptions = {\n        table_grid: false,\n        object_resizing: false,\n        resize: false,\n        toolbar_mode: get$a(mobileOptions, 'toolbar_mode').getOr('scrolling'),\n        toolbar_sticky: false\n      };\n      const defaultPhoneOptions = { menubar: false };\n      return {\n        ...defaultMobileOptions,\n        ...isPhone ? defaultPhoneOptions : {}\n      };\n    };\n    const getExternalPlugins = (overrideOptions, options) => {\n      var _a;\n      const userDefinedExternalPlugins = (_a = options.external_plugins) !== null && _a !== void 0 ? _a : {};\n      if (overrideOptions && overrideOptions.external_plugins) {\n        return Tools.extend({}, overrideOptions.external_plugins, userDefinedExternalPlugins);\n      } else {\n        return userDefinedExternalPlugins;\n      }\n    };\n    const combinePlugins = (forcedPlugins, plugins) => [\n      ...normalizePlugins(forcedPlugins),\n      ...normalizePlugins(plugins)\n    ];\n    const getPlatformPlugins = (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) => {\n      if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n        return mobilePlugins;\n      } else {\n        return desktopPlugins;\n      }\n    };\n    const processPlugins = (isMobileDevice, sectionResult, defaultOverrideOptions, options) => {\n      const forcedPlugins = normalizePlugins(defaultOverrideOptions.forced_plugins);\n      const desktopPlugins = normalizePlugins(options.plugins);\n      const mobileConfig = getSectionConfig(sectionResult, 'mobile');\n      const mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n      const platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n      const combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n      return Tools.extend(options, {\n        forced_plugins: forcedPlugins,\n        plugins: combinedPlugins\n      });\n    };\n    const isOnMobile = (isMobileDevice, sectionResult) => {\n      return isMobileDevice && hasSection(sectionResult, 'mobile');\n    };\n    const combineOptions = (isMobileDevice, isPhone, defaultOptions, defaultOverrideOptions, options) => {\n      var _a;\n      const deviceOverrideOptions = isMobileDevice ? { mobile: getMobileOverrideOptions((_a = options.mobile) !== null && _a !== void 0 ? _a : {}, isPhone) } : {};\n      const sectionResult = extractSections(['mobile'], deepMerge(deviceOverrideOptions, options));\n      const extendedOptions = Tools.extend(defaultOptions, defaultOverrideOptions, sectionResult.options(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult.options()) });\n      return processPlugins(isMobileDevice, sectionResult, defaultOverrideOptions, extendedOptions);\n    };\n    const normalizeOptions = (defaultOverrideOptions, options) => combineOptions(isPhone || isTablet, isPhone, options, defaultOverrideOptions, options);\n\n    const addVisual = (editor, elm) => addVisual$1(editor, elm);\n\n    const registerExecCommands$3 = editor => {\n      const toggleFormat = (name, value) => {\n        editor.formatter.toggle(name, value);\n        editor.nodeChanged();\n      };\n      const toggleAlign = align => () => {\n        each$e('left,center,right,justify'.split(','), name => {\n          if (align !== name) {\n            editor.formatter.remove('align' + name);\n          }\n        });\n        if (align !== 'none') {\n          toggleFormat('align' + align);\n        }\n      };\n      editor.editorCommands.addCommands({\n        JustifyLeft: toggleAlign('left'),\n        JustifyCenter: toggleAlign('center'),\n        JustifyRight: toggleAlign('right'),\n        JustifyFull: toggleAlign('justify'),\n        JustifyNone: toggleAlign('none')\n      });\n    };\n    const registerQueryStateCommands$1 = editor => {\n      const alignStates = name => () => {\n        const selection = editor.selection;\n        const nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n        return exists(nodes, node => isNonNullable(editor.formatter.matchNode(node, name)));\n      };\n      editor.editorCommands.addCommands({\n        JustifyLeft: alignStates('alignleft'),\n        JustifyCenter: alignStates('aligncenter'),\n        JustifyRight: alignStates('alignright'),\n        JustifyFull: alignStates('alignjustify')\n      }, 'state');\n    };\n    const registerCommands$b = editor => {\n      registerExecCommands$3(editor);\n      registerQueryStateCommands$1(editor);\n    };\n\n    const registerCommands$a = editor => {\n      editor.editorCommands.addCommands({\n        'Cut,Copy,Paste': command => {\n          const doc = editor.getDoc();\n          let failed;\n          try {\n            doc.execCommand(command);\n          } catch (ex) {\n            failed = true;\n          }\n          if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n            failed = true;\n          }\n          if (failed || !doc.queryCommandSupported(command)) {\n            let msg = editor.translate(`Your browser doesn't support direct access to the clipboard. ` + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n            if (Env.os.isMacOS() || Env.os.isiOS()) {\n              msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n            }\n            editor.notificationManager.open({\n              text: msg,\n              type: 'error'\n            });\n          }\n        }\n      });\n    };\n\n    const trimOrPadLeftRight = (dom, rng, html, schema) => {\n      const root = SugarElement.fromDom(dom.getRoot());\n      if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng), schema)) {\n        html = html.replace(/^ /, '&nbsp;');\n      } else {\n        html = html.replace(/^&nbsp;/, ' ');\n      }\n      if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng), schema)) {\n        html = html.replace(/(&nbsp;| )(<br( \\/)>)?$/, '&nbsp;');\n      } else {\n        html = html.replace(/&nbsp;(<br( \\/)?>)?$/, ' ');\n      }\n      return html;\n    };\n\n    const processValue$1 = value => {\n      if (typeof value !== 'string') {\n        const details = Tools.extend({\n          paste: value.paste,\n          data: { paste: value.paste }\n        }, value);\n        return {\n          content: value.content,\n          details\n        };\n      }\n      return {\n        content: value,\n        details: {}\n      };\n    };\n    const trimOrPad = (editor, value) => {\n      const selection = editor.selection;\n      const dom = editor.dom;\n      if (/^ | $/.test(value)) {\n        return trimOrPadLeftRight(dom, selection.getRng(), value, editor.schema);\n      } else {\n        return value;\n      }\n    };\n    const insertAtCaret = (editor, value) => {\n      if (editor.selection.isEditable()) {\n        const {content, details} = processValue$1(value);\n        preProcessSetContent(editor, {\n          ...details,\n          content: trimOrPad(editor, content),\n          format: 'html',\n          set: false,\n          selection: true\n        }).each(args => {\n          const insertedContent = insertContent$1(editor, args.content, details);\n          postProcessSetContent(editor, insertedContent, args);\n          editor.addVisual();\n        });\n      }\n    };\n\n    const registerCommands$9 = editor => {\n      editor.editorCommands.addCommands({\n        mceCleanup: () => {\n          const bm = editor.selection.getBookmark();\n          editor.setContent(editor.getContent());\n          editor.selection.moveToBookmark(bm);\n        },\n        insertImage: (_command, _ui, value) => {\n          insertAtCaret(editor, editor.dom.createHTML('img', { src: value }));\n        },\n        insertHorizontalRule: () => {\n          editor.execCommand('mceInsertContent', false, '<hr>');\n        },\n        insertText: (_command, _ui, value) => {\n          insertAtCaret(editor, editor.dom.encode(value));\n        },\n        insertHTML: (_command, _ui, value) => {\n          insertAtCaret(editor, value);\n        },\n        mceInsertContent: (_command, _ui, value) => {\n          insertAtCaret(editor, value);\n        },\n        mceSetContent: (_command, _ui, value) => {\n          editor.setContent(value);\n        },\n        mceReplaceContent: (_command, _ui, value) => {\n          editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n        },\n        mceNewDocument: () => {\n          editor.setContent(getNewDocumentContent(editor));\n        }\n      });\n    };\n\n    const legacyPropNames = {\n      'font-size': 'size',\n      'font-family': 'face'\n    };\n    const isFont = isTag('font');\n    const getSpecifiedFontProp = (propName, rootElm, elm) => {\n      const getProperty = elm => getRaw(elm, propName).orThunk(() => {\n        if (isFont(elm)) {\n          return get$a(legacyPropNames, propName).bind(legacyPropName => getOpt(elm, legacyPropName));\n        } else {\n          return Optional.none();\n        }\n      });\n      const isRoot = elm => eq(SugarElement.fromDom(rootElm), elm);\n      return closest$1(SugarElement.fromDom(elm), elm => getProperty(elm), isRoot);\n    };\n    const normalizeFontFamily = fontFamily => fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n    const getComputedFontProp = (propName, elm) => Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n    const getFontProp = propName => (rootElm, elm) => Optional.from(elm).map(SugarElement.fromDom).filter(isElement$7).bind(element => getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom))).getOr('');\n    const getFontSize = getFontProp('font-size');\n    const getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n    const findFirstCaretElement = editor => firstPositionIn(editor.getBody()).bind(caret => {\n      const container = caret.container();\n      return Optional.from(isText$a(container) ? container.parentNode : container);\n    });\n    const getCaretElement = editor => Optional.from(editor.selection.getRng()).bind(rng => {\n      const root = editor.getBody();\n      const atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n      return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n    });\n    const bindRange = (editor, binder) => getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$7).bind(binder);\n    const mapRange = (editor, mapper) => bindRange(editor, compose1(Optional.some, mapper));\n\n    const fromFontSizeNumber = (editor, value) => {\n      if (/^[0-9.]+$/.test(value)) {\n        const fontSizeNumber = parseInt(value, 10);\n        if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n          const fontSizes = getFontStyleValues(editor);\n          const fontClasses = getFontSizeClasses(editor);\n          if (fontClasses.length > 0) {\n            return fontClasses[fontSizeNumber - 1] || value;\n          } else {\n            return fontSizes[fontSizeNumber - 1] || value;\n          }\n        } else {\n          return value;\n        }\n      } else {\n        return value;\n      }\n    };\n    const normalizeFontNames = font => {\n      const fonts = font.split(/\\s*,\\s*/);\n      return map$3(fonts, font => {\n        if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, `'`))) {\n          return `'${ font }'`;\n        } else {\n          return font;\n        }\n      }).join(',');\n    };\n    const fontNameAction = (editor, value) => {\n      const font = fromFontSizeNumber(editor, value);\n      editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n      editor.nodeChanged();\n    };\n    const fontNameQuery = editor => mapRange(editor, elm => getFontFamily(editor.getBody(), elm.dom)).getOr('');\n    const fontSizeAction = (editor, value) => {\n      editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n      editor.nodeChanged();\n    };\n    const fontSizeQuery = editor => mapRange(editor, elm => getFontSize(editor.getBody(), elm.dom)).getOr('');\n\n    const lineHeightQuery = editor => mapRange(editor, elm => {\n      const root = SugarElement.fromDom(editor.getBody());\n      const specifiedStyle = closest$1(elm, elm => getRaw(elm, 'line-height'), curry(eq, root));\n      const computedStyle = () => {\n        const lineHeight = parseFloat(get$7(elm, 'line-height'));\n        const fontSize = parseFloat(get$7(elm, 'font-size'));\n        return String(lineHeight / fontSize);\n      };\n      return specifiedStyle.getOrThunk(computedStyle);\n    }).getOr('');\n    const lineHeightAction = (editor, lineHeight) => {\n      editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n      editor.nodeChanged();\n    };\n\n    const registerExecCommands$2 = editor => {\n      const toggleFormat = (name, value) => {\n        editor.formatter.toggle(name, value);\n        editor.nodeChanged();\n      };\n      editor.editorCommands.addCommands({\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => {\n          toggleFormat(command);\n        },\n        'ForeColor,HiliteColor': (command, _ui, value) => {\n          toggleFormat(command, { value });\n        },\n        'BackColor': (_command, _ui, value) => {\n          toggleFormat('hilitecolor', { value });\n        },\n        'FontName': (_command, _ui, value) => {\n          fontNameAction(editor, value);\n        },\n        'FontSize': (_command, _ui, value) => {\n          fontSizeAction(editor, value);\n        },\n        'LineHeight': (_command, _ui, value) => {\n          lineHeightAction(editor, value);\n        },\n        'Lang': (command, _ui, lang) => {\n          var _a;\n          toggleFormat(command, {\n            value: lang.code,\n            customValue: (_a = lang.customCode) !== null && _a !== void 0 ? _a : null\n          });\n        },\n        'RemoveFormat': command => {\n          editor.formatter.remove(command);\n        },\n        'mceBlockQuote': () => {\n          toggleFormat('blockquote');\n        },\n        'FormatBlock': (_command, _ui, value) => {\n          toggleFormat(isString(value) ? value : 'p');\n        },\n        'mceToggleFormat': (_command, _ui, value) => {\n          toggleFormat(value);\n        }\n      });\n    };\n    const registerQueryValueCommands = editor => {\n      const isFormatMatch = name => editor.formatter.match(name);\n      editor.editorCommands.addCommands({\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => isFormatMatch(command),\n        'mceBlockQuote': () => isFormatMatch('blockquote')\n      }, 'state');\n      editor.editorCommands.addQueryValueHandler('FontName', () => fontNameQuery(editor));\n      editor.editorCommands.addQueryValueHandler('FontSize', () => fontSizeQuery(editor));\n      editor.editorCommands.addQueryValueHandler('LineHeight', () => lineHeightQuery(editor));\n    };\n    const registerCommands$8 = editor => {\n      registerExecCommands$2(editor);\n      registerQueryValueCommands(editor);\n    };\n\n    const registerCommands$7 = editor => {\n      editor.editorCommands.addCommands({\n        mceAddUndoLevel: () => {\n          editor.undoManager.add();\n        },\n        mceEndUndoLevel: () => {\n          editor.undoManager.add();\n        },\n        Undo: () => {\n          editor.undoManager.undo();\n        },\n        Redo: () => {\n          editor.undoManager.redo();\n        }\n      });\n    };\n\n    const registerCommands$6 = editor => {\n      editor.editorCommands.addCommands({\n        Indent: () => {\n          indent(editor);\n        },\n        Outdent: () => {\n          outdent(editor);\n        }\n      });\n      editor.editorCommands.addCommands({ Outdent: () => canOutdent(editor) }, 'state');\n    };\n\n    const registerCommands$5 = editor => {\n      const applyLinkToSelection = (_command, _ui, value) => {\n        const linkDetails = isString(value) ? { href: value } : value;\n        const anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n        if (isObject(linkDetails) && isString(linkDetails.href)) {\n          linkDetails.href = linkDetails.href.replace(/ /g, '%20');\n          if (!anchor || !linkDetails.href) {\n            editor.formatter.remove('link');\n          }\n          if (linkDetails.href) {\n            editor.formatter.apply('link', linkDetails, anchor);\n          }\n        }\n      };\n      editor.editorCommands.addCommands({\n        unlink: () => {\n          if (editor.selection.isEditable()) {\n            if (editor.selection.isCollapsed()) {\n              const elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n              if (elm) {\n                editor.dom.remove(elm, true);\n              }\n              return;\n            }\n            editor.formatter.remove('link');\n          }\n        },\n        mceInsertLink: applyLinkToSelection,\n        createLink: applyLinkToSelection\n      });\n    };\n\n    const registerExecCommands$1 = editor => {\n      editor.editorCommands.addCommands({\n        'InsertUnorderedList,InsertOrderedList': command => {\n          editor.getDoc().execCommand(command);\n          const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n          if (listElm) {\n            const listParent = listElm.parentNode;\n            if (listParent && /^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n              const bm = editor.selection.getBookmark();\n              editor.dom.split(listParent, listElm);\n              editor.selection.moveToBookmark(bm);\n            }\n          }\n        }\n      });\n    };\n    const registerQueryStateCommands = editor => {\n      editor.editorCommands.addCommands({\n        'InsertUnorderedList,InsertOrderedList': command => {\n          const list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n          return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n        }\n      }, 'state');\n    };\n    const registerCommands$4 = editor => {\n      registerExecCommands$1(editor);\n      registerQueryStateCommands(editor);\n    };\n\n    const getTopParentBlock = (editor, node, root, container) => {\n      const dom = editor.dom;\n      const selector = node => dom.isBlock(node) && node.parentElement === root;\n      const topParentBlock = selector(node) ? node : dom.getParent(container, selector, root);\n      return Optional.from(topParentBlock).map(SugarElement.fromDom);\n    };\n    const insert = (editor, before) => {\n      const dom = editor.dom;\n      const rng = editor.selection.getRng();\n      const node = before ? editor.selection.getStart() : editor.selection.getEnd();\n      const container = before ? rng.startContainer : rng.endContainer;\n      const root = getEditableRoot(dom, container);\n      if (!root || !root.isContentEditable) {\n        return;\n      }\n      const insertFn = before ? before$3 : after$4;\n      const newBlockName = getForcedRootBlock(editor);\n      getTopParentBlock(editor, node, root, container).each(parentBlock => {\n        const newBlock = createNewBlock(editor, container, parentBlock.dom, root, false, newBlockName);\n        insertFn(parentBlock, SugarElement.fromDom(newBlock));\n        editor.selection.setCursorLocation(newBlock, 0);\n        editor.dispatch('NewBlock', { newBlock });\n        fireInputEvent(editor, 'insertParagraph');\n      });\n    };\n    const insertBefore = editor => insert(editor, true);\n    const insertAfter = editor => insert(editor, false);\n\n    const registerCommands$3 = editor => {\n      editor.editorCommands.addCommands({\n        InsertNewBlockBefore: () => {\n          insertBefore(editor);\n        },\n        InsertNewBlockAfter: () => {\n          insertAfter(editor);\n        }\n      });\n    };\n\n    const registerCommands$2 = editor => {\n      editor.editorCommands.addCommands({\n        insertParagraph: () => {\n          insertBreak(blockbreak, editor);\n        },\n        mceInsertNewLine: (_command, _ui, value) => {\n          insert$1(editor, value);\n        },\n        InsertLineBreak: (_command, _ui, _value) => {\n          insertBreak(linebreak, editor);\n        }\n      });\n    };\n\n    const registerCommands$1 = editor => {\n      editor.editorCommands.addCommands({\n        mceSelectNodeDepth: (_command, _ui, value) => {\n          let counter = 0;\n          editor.dom.getParent(editor.selection.getNode(), node => {\n            if (isElement$6(node) && counter++ === value) {\n              editor.selection.select(node);\n              return false;\n            } else {\n              return true;\n            }\n          }, editor.getBody());\n        },\n        mceSelectNode: (_command, _ui, value) => {\n          editor.selection.select(value);\n        },\n        selectAll: () => {\n          const editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$3);\n          if (editingHost) {\n            const rng = editor.dom.createRng();\n            rng.selectNodeContents(editingHost);\n            editor.selection.setRng(rng);\n          }\n        }\n      });\n    };\n\n    const registerExecCommands = editor => {\n      editor.editorCommands.addCommands({\n        mceRemoveNode: (_command, _ui, value) => {\n          const node = value !== null && value !== void 0 ? value : editor.selection.getNode();\n          if (node !== editor.getBody()) {\n            const bm = editor.selection.getBookmark();\n            editor.dom.remove(node, true);\n            editor.selection.moveToBookmark(bm);\n          }\n        },\n        mcePrint: () => {\n          editor.getWin().print();\n        },\n        mceFocus: (_command, _ui, value) => {\n          focus(editor, value === true);\n        },\n        mceToggleVisualAid: () => {\n          editor.hasVisual = !editor.hasVisual;\n          editor.addVisual();\n        }\n      });\n    };\n    const registerCommands = editor => {\n      registerCommands$b(editor);\n      registerCommands$a(editor);\n      registerCommands$7(editor);\n      registerCommands$1(editor);\n      registerCommands$9(editor);\n      registerCommands$5(editor);\n      registerCommands$6(editor);\n      registerCommands$3(editor);\n      registerCommands$2(editor);\n      registerCommands$4(editor);\n      registerCommands$8(editor);\n      registerExecCommands(editor);\n    };\n\n    const selectionSafeCommands = ['toggleview'];\n    const isSelectionSafeCommand = command => contains$2(selectionSafeCommands, command.toLowerCase());\n    class EditorCommands {\n      constructor(editor) {\n        this.commands = {\n          state: {},\n          exec: {},\n          value: {}\n        };\n        this.editor = editor;\n      }\n      execCommand(command, ui = false, value, args) {\n        const editor = this.editor;\n        const lowerCaseCommand = command.toLowerCase();\n        const skipFocus = args === null || args === void 0 ? void 0 : args.skip_focus;\n        if (editor.removed) {\n          return false;\n        }\n        if (lowerCaseCommand !== 'mcefocus') {\n          if (!/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(lowerCaseCommand) && !skipFocus) {\n            editor.focus();\n          } else {\n            restore(editor);\n          }\n        }\n        const eventArgs = editor.dispatch('BeforeExecCommand', {\n          command,\n          ui,\n          value\n        });\n        if (eventArgs.isDefaultPrevented()) {\n          return false;\n        }\n        const func = this.commands.exec[lowerCaseCommand];\n        if (isFunction(func)) {\n          func(lowerCaseCommand, ui, value);\n          editor.dispatch('ExecCommand', {\n            command,\n            ui,\n            value\n          });\n          return true;\n        }\n        return false;\n      }\n      queryCommandState(command) {\n        if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n          return false;\n        }\n        const lowerCaseCommand = command.toLowerCase();\n        const func = this.commands.state[lowerCaseCommand];\n        if (isFunction(func)) {\n          return func(lowerCaseCommand);\n        }\n        return false;\n      }\n      queryCommandValue(command) {\n        if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n          return '';\n        }\n        const lowerCaseCommand = command.toLowerCase();\n        const func = this.commands.value[lowerCaseCommand];\n        if (isFunction(func)) {\n          return func(lowerCaseCommand);\n        }\n        return '';\n      }\n      addCommands(commandList, type = 'exec') {\n        const commands = this.commands;\n        each$d(commandList, (callback, command) => {\n          each$e(command.toLowerCase().split(','), command => {\n            commands[type][command] = callback;\n          });\n        });\n      }\n      addCommand(command, callback, scope) {\n        const lowerCaseCommand = command.toLowerCase();\n        this.commands.exec[lowerCaseCommand] = (_command, ui, value) => callback.call(scope !== null && scope !== void 0 ? scope : this.editor, ui, value);\n      }\n      queryCommandSupported(command) {\n        const lowerCaseCommand = command.toLowerCase();\n        if (this.commands.exec[lowerCaseCommand]) {\n          return true;\n        } else {\n          return false;\n        }\n      }\n      addQueryStateHandler(command, callback, scope) {\n        this.commands.state[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n      }\n      addQueryValueHandler(command, callback, scope) {\n        this.commands.value[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n      }\n    }\n\n    const internalContentEditableAttr = 'data-mce-contenteditable';\n    const toggleClass = (elm, cls, state) => {\n      if (has(elm, cls) && !state) {\n        remove$7(elm, cls);\n      } else if (state) {\n        add$2(elm, cls);\n      }\n    };\n    const setEditorCommandState = (editor, cmd, state) => {\n      try {\n        editor.getDoc().execCommand(cmd, false, String(state));\n      } catch (ex) {\n      }\n    };\n    const setContentEditable = (elm, state) => {\n      elm.dom.contentEditable = state ? 'true' : 'false';\n    };\n    const switchOffContentEditableTrue = elm => {\n      each$e(descendants(elm, '*[contenteditable=\"true\"]'), elm => {\n        set$3(elm, internalContentEditableAttr, 'true');\n        setContentEditable(elm, false);\n      });\n    };\n    const switchOnContentEditableTrue = elm => {\n      each$e(descendants(elm, `*[${ internalContentEditableAttr }=\"true\"]`), elm => {\n        remove$a(elm, internalContentEditableAttr);\n        setContentEditable(elm, true);\n      });\n    };\n    const removeFakeSelection = editor => {\n      Optional.from(editor.selection.getNode()).each(elm => {\n        elm.removeAttribute('data-mce-selected');\n      });\n    };\n    const restoreFakeSelection = editor => {\n      editor.selection.setRng(editor.selection.getRng());\n    };\n    const toggleReadOnly = (editor, state) => {\n      const body = SugarElement.fromDom(editor.getBody());\n      toggleClass(body, 'mce-content-readonly', state);\n      if (state) {\n        editor.selection.controlSelection.hideResizeRect();\n        editor._selectionOverrides.hideFakeCaret();\n        removeFakeSelection(editor);\n        editor.readonly = true;\n        setContentEditable(body, false);\n        switchOffContentEditableTrue(body);\n      } else {\n        editor.readonly = false;\n        if (editor.hasEditableRoot()) {\n          setContentEditable(body, true);\n        }\n        switchOnContentEditableTrue(body);\n        setEditorCommandState(editor, 'StyleWithCSS', false);\n        setEditorCommandState(editor, 'enableInlineTableEditing', false);\n        setEditorCommandState(editor, 'enableObjectResizing', false);\n        if (hasEditorOrUiFocus(editor)) {\n          editor.focus();\n        }\n        restoreFakeSelection(editor);\n        editor.nodeChanged();\n      }\n    };\n    const isReadOnly = editor => editor.readonly;\n    const registerFilters = editor => {\n      editor.parser.addAttributeFilter('contenteditable', nodes => {\n        if (isReadOnly(editor)) {\n          each$e(nodes, node => {\n            node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n            node.attr('contenteditable', 'false');\n          });\n        }\n      });\n      editor.serializer.addAttributeFilter(internalContentEditableAttr, nodes => {\n        if (isReadOnly(editor)) {\n          each$e(nodes, node => {\n            node.attr('contenteditable', node.attr(internalContentEditableAttr));\n          });\n        }\n      });\n      editor.serializer.addTempAttr(internalContentEditableAttr);\n    };\n    const registerReadOnlyContentFilters = editor => {\n      if (editor.serializer) {\n        registerFilters(editor);\n      } else {\n        editor.on('PreInit', () => {\n          registerFilters(editor);\n        });\n      }\n    };\n    const isClickEvent = e => e.type === 'click';\n    const allowedEvents = ['copy'];\n    const isReadOnlyAllowedEvent = e => contains$2(allowedEvents, e.type);\n    const getAnchorHrefOpt = (editor, elm) => {\n      const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n      return closest$3(elm, 'a', isRoot).bind(a => getOpt(a, 'href'));\n    };\n    const processReadonlyEvents = (editor, e) => {\n      if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n        const elm = SugarElement.fromDom(e.target);\n        getAnchorHrefOpt(editor, elm).each(href => {\n          e.preventDefault();\n          if (/^#/.test(href)) {\n            const targetEl = editor.dom.select(`${ href },[name=\"${ removeLeading(href, '#') }\"]`);\n            if (targetEl.length) {\n              editor.selection.scrollIntoView(targetEl[0], true);\n            }\n          } else {\n            window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n          }\n        });\n      } else if (isReadOnlyAllowedEvent(e)) {\n        editor.dispatch(e.type, e);\n      }\n    };\n    const registerReadOnlySelectionBlockers = editor => {\n      editor.on('ShowCaret', e => {\n        if (isReadOnly(editor)) {\n          e.preventDefault();\n        }\n      });\n      editor.on('ObjectSelected', e => {\n        if (isReadOnly(editor)) {\n          e.preventDefault();\n        }\n      });\n    };\n\n    const nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n    class EventDispatcher {\n      static isNative(name) {\n        return !!nativeEvents[name.toLowerCase()];\n      }\n      constructor(settings) {\n        this.bindings = {};\n        this.settings = settings || {};\n        this.scope = this.settings.scope || this;\n        this.toggleEvent = this.settings.toggleEvent || never;\n      }\n      fire(name, args) {\n        return this.dispatch(name, args);\n      }\n      dispatch(name, args) {\n        const lcName = name.toLowerCase();\n        const event = normalize$3(lcName, args !== null && args !== void 0 ? args : {}, this.scope);\n        if (this.settings.beforeFire) {\n          this.settings.beforeFire(event);\n        }\n        const handlers = this.bindings[lcName];\n        if (handlers) {\n          for (let i = 0, l = handlers.length; i < l; i++) {\n            const callback = handlers[i];\n            if (callback.removed) {\n              continue;\n            }\n            if (callback.once) {\n              this.off(lcName, callback.func);\n            }\n            if (event.isImmediatePropagationStopped()) {\n              return event;\n            }\n            if (callback.func.call(this.scope, event) === false) {\n              event.preventDefault();\n              return event;\n            }\n          }\n        }\n        return event;\n      }\n      on(name, callback, prepend, extra) {\n        if (callback === false) {\n          callback = never;\n        }\n        if (callback) {\n          const wrappedCallback = {\n            func: callback,\n            removed: false\n          };\n          if (extra) {\n            Tools.extend(wrappedCallback, extra);\n          }\n          const names = name.toLowerCase().split(' ');\n          let i = names.length;\n          while (i--) {\n            const currentName = names[i];\n            let handlers = this.bindings[currentName];\n            if (!handlers) {\n              handlers = [];\n              this.toggleEvent(currentName, true);\n            }\n            if (prepend) {\n              handlers = [\n                wrappedCallback,\n                ...handlers\n              ];\n            } else {\n              handlers = [\n                ...handlers,\n                wrappedCallback\n              ];\n            }\n            this.bindings[currentName] = handlers;\n          }\n        }\n        return this;\n      }\n      off(name, callback) {\n        if (name) {\n          const names = name.toLowerCase().split(' ');\n          let i = names.length;\n          while (i--) {\n            const currentName = names[i];\n            let handlers = this.bindings[currentName];\n            if (!currentName) {\n              each$d(this.bindings, (_value, bindingName) => {\n                this.toggleEvent(bindingName, false);\n                delete this.bindings[bindingName];\n              });\n              return this;\n            }\n            if (handlers) {\n              if (!callback) {\n                handlers.length = 0;\n              } else {\n                const filteredHandlers = partition$2(handlers, handler => handler.func === callback);\n                handlers = filteredHandlers.fail;\n                this.bindings[currentName] = handlers;\n                each$e(filteredHandlers.pass, handler => {\n                  handler.removed = true;\n                });\n              }\n              if (!handlers.length) {\n                this.toggleEvent(name, false);\n                delete this.bindings[currentName];\n              }\n            }\n          }\n        } else {\n          each$d(this.bindings, (_value, name) => {\n            this.toggleEvent(name, false);\n          });\n          this.bindings = {};\n        }\n        return this;\n      }\n      once(name, callback, prepend) {\n        return this.on(name, callback, prepend, { once: true });\n      }\n      has(name) {\n        name = name.toLowerCase();\n        const binding = this.bindings[name];\n        return !(!binding || binding.length === 0);\n      }\n    }\n\n    const getEventDispatcher = obj => {\n      if (!obj._eventDispatcher) {\n        obj._eventDispatcher = new EventDispatcher({\n          scope: obj,\n          toggleEvent: (name, state) => {\n            if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n              obj.toggleNativeEvent(name, state);\n            }\n          }\n        });\n      }\n      return obj._eventDispatcher;\n    };\n    const Observable = {\n      fire(name, args, bubble) {\n        return this.dispatch(name, args, bubble);\n      },\n      dispatch(name, args, bubble) {\n        const self = this;\n        if (self.removed && name !== 'remove' && name !== 'detach') {\n          return normalize$3(name.toLowerCase(), args !== null && args !== void 0 ? args : {}, self);\n        }\n        const dispatcherArgs = getEventDispatcher(self).dispatch(name, args);\n        if (bubble !== false && self.parent) {\n          let parent = self.parent();\n          while (parent && !dispatcherArgs.isPropagationStopped()) {\n            parent.dispatch(name, dispatcherArgs, false);\n            parent = parent.parent ? parent.parent() : undefined;\n          }\n        }\n        return dispatcherArgs;\n      },\n      on(name, callback, prepend) {\n        return getEventDispatcher(this).on(name, callback, prepend);\n      },\n      off(name, callback) {\n        return getEventDispatcher(this).off(name, callback);\n      },\n      once(name, callback) {\n        return getEventDispatcher(this).once(name, callback);\n      },\n      hasEventListeners(name) {\n        return getEventDispatcher(this).has(name);\n      }\n    };\n\n    const DOM$2 = DOMUtils.DOM;\n    let customEventRootDelegates;\n    const getEventTarget = (editor, eventName) => {\n      if (eventName === 'selectionchange') {\n        return editor.getDoc();\n      }\n      if (!editor.inline && /^(?:mouse|touch|click|contextmenu|drop|dragover|dragend)/.test(eventName)) {\n        return editor.getDoc().documentElement;\n      }\n      const eventRoot = getEventRoot(editor);\n      if (eventRoot) {\n        if (!editor.eventRoot) {\n          editor.eventRoot = DOM$2.select(eventRoot)[0];\n        }\n        return editor.eventRoot;\n      }\n      return editor.getBody();\n    };\n    const isListening = editor => !editor.hidden && !isReadOnly(editor);\n    const fireEvent = (editor, eventName, e) => {\n      if (isListening(editor)) {\n        editor.dispatch(eventName, e);\n      } else if (isReadOnly(editor)) {\n        processReadonlyEvents(editor, e);\n      }\n    };\n    const bindEventDelegate = (editor, eventName) => {\n      if (!editor.delegates) {\n        editor.delegates = {};\n      }\n      if (editor.delegates[eventName] || editor.removed) {\n        return;\n      }\n      const eventRootElm = getEventTarget(editor, eventName);\n      if (getEventRoot(editor)) {\n        if (!customEventRootDelegates) {\n          customEventRootDelegates = {};\n          editor.editorManager.on('removeEditor', () => {\n            if (!editor.editorManager.activeEditor) {\n              if (customEventRootDelegates) {\n                each$d(customEventRootDelegates, (_value, name) => {\n                  editor.dom.unbind(getEventTarget(editor, name));\n                });\n                customEventRootDelegates = null;\n              }\n            }\n          });\n        }\n        if (customEventRootDelegates[eventName]) {\n          return;\n        }\n        const delegate = e => {\n          const target = e.target;\n          const editors = editor.editorManager.get();\n          let i = editors.length;\n          while (i--) {\n            const body = editors[i].getBody();\n            if (body === target || DOM$2.isChildOf(target, body)) {\n              fireEvent(editors[i], eventName, e);\n            }\n          }\n        };\n        customEventRootDelegates[eventName] = delegate;\n        DOM$2.bind(eventRootElm, eventName, delegate);\n      } else {\n        const delegate = e => {\n          fireEvent(editor, eventName, e);\n        };\n        DOM$2.bind(eventRootElm, eventName, delegate);\n        editor.delegates[eventName] = delegate;\n      }\n    };\n    const EditorObservable = {\n      ...Observable,\n      bindPendingEventDelegates() {\n        const self = this;\n        Tools.each(self._pendingNativeEvents, name => {\n          bindEventDelegate(self, name);\n        });\n      },\n      toggleNativeEvent(name, state) {\n        const self = this;\n        if (name === 'focus' || name === 'blur') {\n          return;\n        }\n        if (self.removed) {\n          return;\n        }\n        if (state) {\n          if (self.initialized) {\n            bindEventDelegate(self, name);\n          } else {\n            if (!self._pendingNativeEvents) {\n              self._pendingNativeEvents = [name];\n            } else {\n              self._pendingNativeEvents.push(name);\n            }\n          }\n        } else if (self.initialized && self.delegates) {\n          self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n          delete self.delegates[name];\n        }\n      },\n      unbindAllNativeEvents() {\n        const self = this;\n        const body = self.getBody();\n        const dom = self.dom;\n        if (self.delegates) {\n          each$d(self.delegates, (value, name) => {\n            self.dom.unbind(getEventTarget(self, name), name, value);\n          });\n          delete self.delegates;\n        }\n        if (!self.inline && body && dom) {\n          body.onload = null;\n          dom.unbind(self.getWin());\n          dom.unbind(self.getDoc());\n        }\n        if (dom) {\n          dom.unbind(body);\n          dom.unbind(self.getContainer());\n        }\n      }\n    };\n\n    const stringListProcessor = value => {\n      if (isString(value)) {\n        return {\n          value: value.split(/[ ,]/),\n          valid: true\n        };\n      } else if (isArrayOf(value, isString)) {\n        return {\n          value,\n          valid: true\n        };\n      } else {\n        return {\n          valid: false,\n          message: `The value must be a string[] or a comma/space separated string.`\n        };\n      }\n    };\n    const getBuiltInProcessor = type => {\n      const validator = (() => {\n        switch (type) {\n        case 'array':\n          return isArray$1;\n        case 'boolean':\n          return isBoolean;\n        case 'function':\n          return isFunction;\n        case 'number':\n          return isNumber;\n        case 'object':\n          return isObject;\n        case 'string':\n          return isString;\n        case 'string[]':\n          return stringListProcessor;\n        case 'object[]':\n          return val => isArrayOf(val, isObject);\n        case 'regexp':\n          return val => is$4(val, RegExp);\n        default:\n          return always;\n        }\n      })();\n      return value => processValue(value, validator, `The value must be a ${ type }.`);\n    };\n    const isBuiltInSpec = spec => isString(spec.processor);\n    const getErrorMessage = (message, result) => {\n      const additionalText = isEmpty$3(result.message) ? '' : `. ${ result.message }`;\n      return message + additionalText;\n    };\n    const isValidResult = result => result.valid;\n    const processValue = (value, processor, message = '') => {\n      const result = processor(value);\n      if (isBoolean(result)) {\n        return result ? {\n          value: value,\n          valid: true\n        } : {\n          valid: false,\n          message\n        };\n      } else {\n        return result;\n      }\n    };\n    const processDefaultValue = (name, defaultValue, processor) => {\n      if (!isUndefined(defaultValue)) {\n        const result = processValue(defaultValue, processor);\n        if (isValidResult(result)) {\n          return result.value;\n        } else {\n          console.error(getErrorMessage(`Invalid default value passed for the \"${ name }\" option`, result));\n        }\n      }\n      return undefined;\n    };\n    const create$5 = (editor, initialOptions) => {\n      const registry = {};\n      const values = {};\n      const setValue = (name, value, processor) => {\n        const result = processValue(value, processor);\n        if (isValidResult(result)) {\n          values[name] = result.value;\n          return true;\n        } else {\n          console.warn(getErrorMessage(`Invalid value passed for the ${ name } option`, result));\n          return false;\n        }\n      };\n      const register = (name, spec) => {\n        const processor = isBuiltInSpec(spec) ? getBuiltInProcessor(spec.processor) : spec.processor;\n        const defaultValue = processDefaultValue(name, spec.default, processor);\n        registry[name] = {\n          ...spec,\n          default: defaultValue,\n          processor\n        };\n        const initValue = get$a(values, name).orThunk(() => get$a(initialOptions, name));\n        initValue.each(value => setValue(name, value, processor));\n      };\n      const isRegistered = name => has$2(registry, name);\n      const get = name => get$a(values, name).orThunk(() => get$a(registry, name).map(spec => spec.default)).getOrUndefined();\n      const set = (name, value) => {\n        if (!isRegistered(name)) {\n          console.warn(`\"${ name }\" is not a registered option. Ensure the option has been registered before setting a value.`);\n          return false;\n        } else {\n          const spec = registry[name];\n          if (spec.immutable) {\n            console.error(`\"${ name }\" is an immutable option and cannot be updated`);\n            return false;\n          } else {\n            return setValue(name, value, spec.processor);\n          }\n        }\n      };\n      const unset = name => {\n        const registered = isRegistered(name);\n        if (registered) {\n          delete values[name];\n        }\n        return registered;\n      };\n      const isSet = name => has$2(values, name);\n      return {\n        register,\n        isRegistered,\n        get,\n        set,\n        unset,\n        isSet\n      };\n    };\n\n    const defaultModes = [\n      'design',\n      'readonly'\n    ];\n    const switchToMode = (editor, activeMode, availableModes, mode) => {\n      const oldMode = availableModes[activeMode.get()];\n      const newMode = availableModes[mode];\n      try {\n        newMode.activate();\n      } catch (e) {\n        console.error(`problem while activating editor mode ${ mode }:`, e);\n        return;\n      }\n      oldMode.deactivate();\n      if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n        toggleReadOnly(editor, newMode.editorReadOnly);\n      }\n      activeMode.set(mode);\n      fireSwitchMode(editor, mode);\n    };\n    const setMode = (editor, availableModes, activeMode, mode) => {\n      if (mode === activeMode.get()) {\n        return;\n      } else if (!has$2(availableModes, mode)) {\n        throw new Error(`Editor mode '${ mode }' is invalid`);\n      }\n      if (editor.initialized) {\n        switchToMode(editor, activeMode, availableModes, mode);\n      } else {\n        editor.on('init', () => switchToMode(editor, activeMode, availableModes, mode));\n      }\n    };\n    const registerMode = (availableModes, mode, api) => {\n      if (contains$2(defaultModes, mode)) {\n        throw new Error(`Cannot override default mode ${ mode }`);\n      }\n      return {\n        ...availableModes,\n        [mode]: {\n          ...api,\n          deactivate: () => {\n            try {\n              api.deactivate();\n            } catch (e) {\n              console.error(`problem while deactivating editor mode ${ mode }:`, e);\n            }\n          }\n        }\n      };\n    };\n\n    const create$4 = editor => {\n      const activeMode = Cell('design');\n      const availableModes = Cell({\n        design: {\n          activate: noop,\n          deactivate: noop,\n          editorReadOnly: false\n        },\n        readonly: {\n          activate: noop,\n          deactivate: noop,\n          editorReadOnly: true\n        }\n      });\n      registerReadOnlyContentFilters(editor);\n      registerReadOnlySelectionBlockers(editor);\n      return {\n        isReadOnly: () => isReadOnly(editor),\n        set: mode => setMode(editor, availableModes.get(), activeMode, mode),\n        get: () => activeMode.get(),\n        register: (mode, api) => {\n          availableModes.set(registerMode(availableModes.get(), mode, api));\n        }\n      };\n    };\n\n    const each$2 = Tools.each, explode = Tools.explode;\n    const keyCodeLookup = {\n      f1: 112,\n      f2: 113,\n      f3: 114,\n      f4: 115,\n      f5: 116,\n      f6: 117,\n      f7: 118,\n      f8: 119,\n      f9: 120,\n      f10: 121,\n      f11: 122,\n      f12: 123\n    };\n    const modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n    const isModifier = key => key in modifierNames;\n    const parseShortcut = pattern => {\n      const shortcut = {};\n      const isMac = Env.os.isMacOS() || Env.os.isiOS();\n      each$2(explode(pattern.toLowerCase(), '+'), value => {\n        if (isModifier(value)) {\n          shortcut[value] = true;\n        } else {\n          if (/^[0-9]{2,}$/.test(value)) {\n            shortcut.keyCode = parseInt(value, 10);\n          } else {\n            shortcut.charCode = value.charCodeAt(0);\n            shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n          }\n        }\n      });\n      const id = [shortcut.keyCode];\n      let key;\n      for (key in modifierNames) {\n        if (shortcut[key]) {\n          id.push(key);\n        } else {\n          shortcut[key] = false;\n        }\n      }\n      shortcut.id = id.join(',');\n      if (shortcut.access) {\n        shortcut.alt = true;\n        if (isMac) {\n          shortcut.ctrl = true;\n        } else {\n          shortcut.shift = true;\n        }\n      }\n      if (shortcut.meta) {\n        if (isMac) {\n          shortcut.meta = true;\n        } else {\n          shortcut.ctrl = true;\n          shortcut.meta = false;\n        }\n      }\n      return shortcut;\n    };\n    class Shortcuts {\n      constructor(editor) {\n        this.shortcuts = {};\n        this.pendingPatterns = [];\n        this.editor = editor;\n        const self = this;\n        editor.on('keyup keypress keydown', e => {\n          if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n            each$2(self.shortcuts, shortcut => {\n              if (self.matchShortcut(e, shortcut)) {\n                self.pendingPatterns = shortcut.subpatterns.slice(0);\n                if (e.type === 'keydown') {\n                  self.executeShortcutAction(shortcut);\n                }\n              }\n            });\n            if (self.matchShortcut(e, self.pendingPatterns[0])) {\n              if (self.pendingPatterns.length === 1) {\n                if (e.type === 'keydown') {\n                  self.executeShortcutAction(self.pendingPatterns[0]);\n                }\n              }\n              self.pendingPatterns.shift();\n            }\n          }\n        });\n      }\n      add(pattern, desc, cmdFunc, scope) {\n        const self = this;\n        const func = self.normalizeCommandFunc(cmdFunc);\n        each$2(explode(Tools.trim(pattern)), pattern => {\n          const shortcut = self.createShortcut(pattern, desc, func, scope);\n          self.shortcuts[shortcut.id] = shortcut;\n        });\n        return true;\n      }\n      remove(pattern) {\n        const shortcut = this.createShortcut(pattern);\n        if (this.shortcuts[shortcut.id]) {\n          delete this.shortcuts[shortcut.id];\n          return true;\n        }\n        return false;\n      }\n      normalizeCommandFunc(cmdFunc) {\n        const self = this;\n        const cmd = cmdFunc;\n        if (typeof cmd === 'string') {\n          return () => {\n            self.editor.execCommand(cmd, false, null);\n          };\n        } else if (Tools.isArray(cmd)) {\n          return () => {\n            self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n          };\n        } else {\n          return cmd;\n        }\n      }\n      createShortcut(pattern, desc, cmdFunc, scope) {\n        const shortcuts = Tools.map(explode(pattern, '>'), parseShortcut);\n        shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n          func: cmdFunc,\n          scope: scope || this.editor\n        });\n        return Tools.extend(shortcuts[0], {\n          desc: this.editor.translate(desc),\n          subpatterns: shortcuts.slice(1)\n        });\n      }\n      hasModifier(e) {\n        return e.altKey || e.ctrlKey || e.metaKey;\n      }\n      isFunctionKey(e) {\n        return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n      }\n      matchShortcut(e, shortcut) {\n        if (!shortcut) {\n          return false;\n        }\n        if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n          return false;\n        }\n        if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n          return false;\n        }\n        if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n          e.preventDefault();\n          return true;\n        }\n        return false;\n      }\n      executeShortcutAction(shortcut) {\n        return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n      }\n    }\n\n    const create$3 = () => {\n      const buttons = {};\n      const menuItems = {};\n      const popups = {};\n      const icons = {};\n      const contextMenus = {};\n      const contextToolbars = {};\n      const sidebars = {};\n      const views = {};\n      const add = (collection, type) => (name, spec) => {\n        collection[name.toLowerCase()] = {\n          ...spec,\n          type\n        };\n      };\n      const addIcon = (name, svgData) => icons[name.toLowerCase()] = svgData;\n      return {\n        addButton: add(buttons, 'button'),\n        addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n        addToggleButton: add(buttons, 'togglebutton'),\n        addMenuButton: add(buttons, 'menubutton'),\n        addSplitButton: add(buttons, 'splitbutton'),\n        addMenuItem: add(menuItems, 'menuitem'),\n        addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n        addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n        addAutocompleter: add(popups, 'autocompleter'),\n        addContextMenu: add(contextMenus, 'contextmenu'),\n        addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n        addContextForm: add(contextToolbars, 'contextform'),\n        addSidebar: add(sidebars, 'sidebar'),\n        addView: add(views, 'views'),\n        addIcon,\n        getAll: () => ({\n          buttons,\n          menuItems,\n          icons,\n          popups,\n          contextMenus,\n          contextToolbars,\n          sidebars,\n          views\n        })\n      };\n    };\n\n    const registry = () => {\n      const bridge = create$3();\n      return {\n        addAutocompleter: bridge.addAutocompleter,\n        addButton: bridge.addButton,\n        addContextForm: bridge.addContextForm,\n        addContextMenu: bridge.addContextMenu,\n        addContextToolbar: bridge.addContextToolbar,\n        addIcon: bridge.addIcon,\n        addMenuButton: bridge.addMenuButton,\n        addMenuItem: bridge.addMenuItem,\n        addNestedMenuItem: bridge.addNestedMenuItem,\n        addSidebar: bridge.addSidebar,\n        addSplitButton: bridge.addSplitButton,\n        addToggleButton: bridge.addToggleButton,\n        addGroupToolbarButton: bridge.addGroupToolbarButton,\n        addToggleMenuItem: bridge.addToggleMenuItem,\n        addView: bridge.addView,\n        getAll: bridge.getAll\n      };\n    };\n\n    const DOM$1 = DOMUtils.DOM;\n    const extend = Tools.extend, each$1 = Tools.each;\n    class Editor {\n      constructor(id, options, editorManager) {\n        this.plugins = {};\n        this.contentCSS = [];\n        this.contentStyles = [];\n        this.loadedCSS = {};\n        this.isNotDirty = false;\n        this.composing = false;\n        this.destroyed = false;\n        this.hasHiddenInput = false;\n        this.iframeElement = null;\n        this.initialized = false;\n        this.readonly = false;\n        this.removed = false;\n        this.startContent = '';\n        this._pendingNativeEvents = [];\n        this._skinLoaded = false;\n        this._editableRoot = true;\n        this.editorManager = editorManager;\n        this.documentBaseUrl = editorManager.documentBaseURL;\n        extend(this, EditorObservable);\n        const self = this;\n        this.id = id;\n        this.hidden = false;\n        const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);\n        this.options = create$5(self, normalizedOptions);\n        register$7(self);\n        const getOption = this.options.get;\n        if (getOption('deprecation_warnings')) {\n          logWarnings(options, normalizedOptions);\n        }\n        const suffix = getOption('suffix');\n        if (suffix) {\n          editorManager.suffix = suffix;\n        }\n        this.suffix = editorManager.suffix;\n        const baseUrl = getOption('base_url');\n        if (baseUrl) {\n          editorManager._setBaseUrl(baseUrl);\n        }\n        this.baseUri = editorManager.baseURI;\n        const referrerPolicy = getReferrerPolicy(self);\n        if (referrerPolicy) {\n          ScriptLoader.ScriptLoader._setReferrerPolicy(referrerPolicy);\n          DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(referrerPolicy);\n        }\n        const contentCssCors = hasContentCssCors(self);\n        if (isNonNullable(contentCssCors)) {\n          DOMUtils.DOM.styleSheetLoader._setContentCssCors(contentCssCors);\n        }\n        AddOnManager.languageLoad = getOption('language_load');\n        AddOnManager.baseURL = editorManager.baseURL;\n        this.setDirty(false);\n        this.documentBaseURI = new URI(getDocumentBaseUrl(self), { base_uri: this.baseUri });\n        this.baseURI = this.baseUri;\n        this.inline = isInline$1(self);\n        this.hasVisual = isVisualAidsEnabled(self);\n        this.shortcuts = new Shortcuts(this);\n        this.editorCommands = new EditorCommands(this);\n        registerCommands(this);\n        const cacheSuffix = getOption('cache_suffix');\n        if (cacheSuffix) {\n          Env.cacheSuffix = cacheSuffix.replace(/^[\\?\\&]+/, '');\n        }\n        this.ui = {\n          registry: registry(),\n          styleSheetLoader: undefined,\n          show: noop,\n          hide: noop,\n          setEnabled: noop,\n          isEnabled: always\n        };\n        this.mode = create$4(self);\n        editorManager.dispatch('SetupEditor', { editor: this });\n        const setupCallback = getSetupCallback(self);\n        if (isFunction(setupCallback)) {\n          setupCallback.call(self, self);\n        }\n      }\n      render() {\n        render(this);\n      }\n      focus(skipFocus) {\n        this.execCommand('mceFocus', false, skipFocus);\n      }\n      hasFocus() {\n        return hasFocus(this);\n      }\n      translate(text) {\n        return I18n.translate(text);\n      }\n      getParam(name, defaultVal, type) {\n        const options = this.options;\n        if (!options.isRegistered(name)) {\n          if (isNonNullable(type)) {\n            options.register(name, {\n              processor: type,\n              default: defaultVal\n            });\n          } else {\n            options.register(name, {\n              processor: always,\n              default: defaultVal\n            });\n          }\n        }\n        return !options.isSet(name) && !isUndefined(defaultVal) ? defaultVal : options.get(name);\n      }\n      hasPlugin(name, loaded) {\n        const hasPlugin = contains$2(getPlugins(this), name);\n        if (hasPlugin) {\n          return loaded ? PluginManager.get(name) !== undefined : true;\n        } else {\n          return false;\n        }\n      }\n      nodeChanged(args) {\n        this._nodeChangeDispatcher.nodeChanged(args);\n      }\n      addCommand(name, callback, scope) {\n        this.editorCommands.addCommand(name, callback, scope);\n      }\n      addQueryStateHandler(name, callback, scope) {\n        this.editorCommands.addQueryStateHandler(name, callback, scope);\n      }\n      addQueryValueHandler(name, callback, scope) {\n        this.editorCommands.addQueryValueHandler(name, callback, scope);\n      }\n      addShortcut(pattern, desc, cmdFunc, scope) {\n        this.shortcuts.add(pattern, desc, cmdFunc, scope);\n      }\n      execCommand(cmd, ui, value, args) {\n        return this.editorCommands.execCommand(cmd, ui, value, args);\n      }\n      queryCommandState(cmd) {\n        return this.editorCommands.queryCommandState(cmd);\n      }\n      queryCommandValue(cmd) {\n        return this.editorCommands.queryCommandValue(cmd);\n      }\n      queryCommandSupported(cmd) {\n        return this.editorCommands.queryCommandSupported(cmd);\n      }\n      show() {\n        const self = this;\n        if (self.hidden) {\n          self.hidden = false;\n          if (self.inline) {\n            self.getBody().contentEditable = 'true';\n          } else {\n            DOM$1.show(self.getContainer());\n            DOM$1.hide(self.id);\n          }\n          self.load();\n          self.dispatch('show');\n        }\n      }\n      hide() {\n        const self = this;\n        if (!self.hidden) {\n          self.save();\n          if (self.inline) {\n            self.getBody().contentEditable = 'false';\n            if (self === self.editorManager.focusedEditor) {\n              self.editorManager.focusedEditor = null;\n            }\n          } else {\n            DOM$1.hide(self.getContainer());\n            DOM$1.setStyle(self.id, 'display', self.orgDisplay);\n          }\n          self.hidden = true;\n          self.dispatch('hide');\n        }\n      }\n      isHidden() {\n        return this.hidden;\n      }\n      setProgressState(state, time) {\n        this.dispatch('ProgressState', {\n          state,\n          time\n        });\n      }\n      load(args = {}) {\n        const self = this;\n        const elm = self.getElement();\n        if (self.removed) {\n          return '';\n        }\n        if (elm) {\n          const loadArgs = {\n            ...args,\n            load: true\n          };\n          const value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n          const html = self.setContent(value, loadArgs);\n          if (!loadArgs.no_events) {\n            self.dispatch('LoadContent', {\n              ...loadArgs,\n              element: elm\n            });\n          }\n          return html;\n        } else {\n          return '';\n        }\n      }\n      save(args = {}) {\n        const self = this;\n        let elm = self.getElement();\n        if (!elm || !self.initialized || self.removed) {\n          return '';\n        }\n        const getArgs = {\n          ...args,\n          save: true,\n          element: elm\n        };\n        let html = self.getContent(getArgs);\n        const saveArgs = {\n          ...getArgs,\n          content: html\n        };\n        if (!saveArgs.no_events) {\n          self.dispatch('SaveContent', saveArgs);\n        }\n        if (saveArgs.format === 'raw') {\n          self.dispatch('RawSaveContent', saveArgs);\n        }\n        html = saveArgs.content;\n        if (!isTextareaOrInput(elm)) {\n          if (args.is_removing || !self.inline) {\n            elm.innerHTML = html;\n          }\n          const form = DOM$1.getParent(self.id, 'form');\n          if (form) {\n            each$1(form.elements, elm => {\n              if (elm.name === self.id) {\n                elm.value = html;\n                return false;\n              } else {\n                return true;\n              }\n            });\n          }\n        } else {\n          elm.value = html;\n        }\n        saveArgs.element = getArgs.element = elm = null;\n        if (saveArgs.set_dirty !== false) {\n          self.setDirty(false);\n        }\n        return html;\n      }\n      setContent(content, args) {\n        return setContent(this, content, args);\n      }\n      getContent(args) {\n        return getContent(this, args);\n      }\n      insertContent(content, args) {\n        if (args) {\n          content = extend({ content }, args);\n        }\n        this.execCommand('mceInsertContent', false, content);\n      }\n      resetContent(initialContent) {\n        if (initialContent === undefined) {\n          setContent(this, this.startContent, { format: 'raw' });\n        } else {\n          setContent(this, initialContent);\n        }\n        this.undoManager.reset();\n        this.setDirty(false);\n        this.nodeChanged();\n      }\n      isDirty() {\n        return !this.isNotDirty;\n      }\n      setDirty(state) {\n        const oldState = !this.isNotDirty;\n        this.isNotDirty = !state;\n        if (state && state !== oldState) {\n          this.dispatch('dirty');\n        }\n      }\n      getContainer() {\n        const self = this;\n        if (!self.container) {\n          self.container = self.editorContainer || DOM$1.get(self.id + '_parent');\n        }\n        return self.container;\n      }\n      getContentAreaContainer() {\n        return this.contentAreaContainer;\n      }\n      getElement() {\n        if (!this.targetElm) {\n          this.targetElm = DOM$1.get(this.id);\n        }\n        return this.targetElm;\n      }\n      getWin() {\n        const self = this;\n        if (!self.contentWindow) {\n          const elm = self.iframeElement;\n          if (elm) {\n            self.contentWindow = elm.contentWindow;\n          }\n        }\n        return self.contentWindow;\n      }\n      getDoc() {\n        const self = this;\n        if (!self.contentDocument) {\n          const win = self.getWin();\n          if (win) {\n            self.contentDocument = win.document;\n          }\n        }\n        return self.contentDocument;\n      }\n      getBody() {\n        var _a, _b;\n        const doc = this.getDoc();\n        return (_b = (_a = this.bodyElement) !== null && _a !== void 0 ? _a : doc === null || doc === void 0 ? void 0 : doc.body) !== null && _b !== void 0 ? _b : null;\n      }\n      convertURL(url, name, elm) {\n        const self = this, getOption = self.options.get;\n        const urlConverterCallback = getUrlConverterCallback(self);\n        if (isFunction(urlConverterCallback)) {\n          return urlConverterCallback.call(self, url, elm, true, name);\n        }\n        if (!getOption('convert_urls') || elm === 'link' || isObject(elm) && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n          return url;\n        }\n        const urlObject = new URI(url);\n        if (urlObject.protocol !== 'http' && urlObject.protocol !== 'https' && urlObject.protocol !== '') {\n          return url;\n        }\n        if (getOption('relative_urls')) {\n          return self.documentBaseURI.toRelative(url);\n        }\n        url = self.documentBaseURI.toAbsolute(url, getOption('remove_script_host'));\n        return url;\n      }\n      addVisual(elm) {\n        addVisual(this, elm);\n      }\n      setEditableRoot(state) {\n        setEditableRoot(this, state);\n      }\n      hasEditableRoot() {\n        return hasEditableRoot(this);\n      }\n      remove() {\n        remove$1(this);\n      }\n      destroy(automatic) {\n        destroy(this, automatic);\n      }\n      uploadImages() {\n        return this.editorUpload.uploadImages();\n      }\n      _scanForImages() {\n        return this.editorUpload.scanForImages();\n      }\n    }\n\n    const DOM = DOMUtils.DOM;\n    const each = Tools.each;\n    let boundGlobalEvents = false;\n    let beforeUnloadDelegate;\n    let editors = [];\n    const globalEventDelegate = e => {\n      const type = e.type;\n      each(EditorManager.get(), editor => {\n        switch (type) {\n        case 'scroll':\n          editor.dispatch('ScrollWindow', e);\n          break;\n        case 'resize':\n          editor.dispatch('ResizeWindow', e);\n          break;\n        }\n      });\n    };\n    const toggleGlobalEvents = state => {\n      if (state !== boundGlobalEvents) {\n        const DOM = DOMUtils.DOM;\n        if (state) {\n          DOM.bind(window, 'resize', globalEventDelegate);\n          DOM.bind(window, 'scroll', globalEventDelegate);\n        } else {\n          DOM.unbind(window, 'resize', globalEventDelegate);\n          DOM.unbind(window, 'scroll', globalEventDelegate);\n        }\n        boundGlobalEvents = state;\n      }\n    };\n    const removeEditorFromList = targetEditor => {\n      const oldEditors = editors;\n      editors = filter$5(editors, editor => {\n        return targetEditor !== editor;\n      });\n      if (EditorManager.activeEditor === targetEditor) {\n        EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n      }\n      if (EditorManager.focusedEditor === targetEditor) {\n        EditorManager.focusedEditor = null;\n      }\n      return oldEditors.length !== editors.length;\n    };\n    const purgeDestroyedEditor = editor => {\n      if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n        removeEditorFromList(editor);\n        editor.unbindAllNativeEvents();\n        editor.destroy(true);\n        editor.removed = true;\n      }\n    };\n    const isQuirksMode = document.compatMode !== 'CSS1Compat';\n    const EditorManager = {\n      ...Observable,\n      baseURI: null,\n      baseURL: null,\n      defaultOptions: {},\n      documentBaseURL: null,\n      suffix: null,\n      majorVersion: '6',\n      minorVersion: '8.0',\n      releaseDate: '2023-11-22',\n      i18n: I18n,\n      activeEditor: null,\n      focusedEditor: null,\n      setup() {\n        const self = this;\n        let baseURL = '';\n        let suffix = '';\n        let documentBaseURL = URI.getDocumentBaseUrl(document.location);\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n          documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n            documentBaseURL += '/';\n          }\n        }\n        const preInit = window.tinymce || window.tinyMCEPreInit;\n        if (preInit) {\n          baseURL = preInit.base || preInit.baseURL;\n          suffix = preInit.suffix;\n        } else {\n          const scripts = document.getElementsByTagName('script');\n          for (let i = 0; i < scripts.length; i++) {\n            const src = scripts[i].src || '';\n            if (src === '') {\n              continue;\n            }\n            const srcScript = src.substring(src.lastIndexOf('/'));\n            if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n              if (srcScript.indexOf('.min') !== -1) {\n                suffix = '.min';\n              }\n              baseURL = src.substring(0, src.lastIndexOf('/'));\n              break;\n            }\n          }\n          if (!baseURL && document.currentScript) {\n            const src = document.currentScript.src;\n            if (src.indexOf('.min') !== -1) {\n              suffix = '.min';\n            }\n            baseURL = src.substring(0, src.lastIndexOf('/'));\n          }\n        }\n        self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n        self.documentBaseURL = documentBaseURL;\n        self.baseURI = new URI(self.baseURL);\n        self.suffix = suffix;\n        setup$w(self);\n      },\n      overrideDefaults(defaultOptions) {\n        const baseUrl = defaultOptions.base_url;\n        if (baseUrl) {\n          this._setBaseUrl(baseUrl);\n        }\n        const suffix = defaultOptions.suffix;\n        if (suffix) {\n          this.suffix = suffix;\n        }\n        this.defaultOptions = defaultOptions;\n        const pluginBaseUrls = defaultOptions.plugin_base_urls;\n        if (pluginBaseUrls !== undefined) {\n          each$d(pluginBaseUrls, (pluginBaseUrl, pluginName) => {\n            AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n          });\n        }\n      },\n      init(options) {\n        const self = this;\n        let result;\n        const invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n        const isInvalidInlineTarget = (options, elm) => options.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n        const createId = elm => {\n          let id = elm.id;\n          if (!id) {\n            id = get$a(elm, 'name').filter(name => !DOM.get(name)).getOrThunk(DOM.uniqueId);\n            elm.setAttribute('id', id);\n          }\n          return id;\n        };\n        const execCallback = name => {\n          const callback = options[name];\n          if (!callback) {\n            return;\n          }\n          return callback.apply(self, []);\n        };\n        const findTargets = options => {\n          if (Env.browser.isIE() || Env.browser.isEdge()) {\n            initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tiny.cloud/docs/tinymce/6/support/#supportedwebbrowsers');\n            return [];\n          } else if (isQuirksMode) {\n            initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n            return [];\n          } else if (isString(options.selector)) {\n            return DOM.select(options.selector);\n          } else if (isNonNullable(options.target)) {\n            return [options.target];\n          } else {\n            return [];\n          }\n        };\n        let provideResults = editors => {\n          result = editors;\n        };\n        const initEditors = () => {\n          let initCount = 0;\n          const editors = [];\n          let targets;\n          const createEditor = (id, options, targetElm) => {\n            const editor = new Editor(id, options, self);\n            editors.push(editor);\n            editor.on('init', () => {\n              if (++initCount === targets.length) {\n                provideResults(editors);\n              }\n            });\n            editor.targetElm = editor.targetElm || targetElm;\n            editor.render();\n          };\n          DOM.unbind(window, 'ready', initEditors);\n          execCallback('onpageload');\n          targets = unique$1(findTargets(options));\n          Tools.each(targets, elm => {\n            purgeDestroyedEditor(self.get(elm.id));\n          });\n          targets = Tools.grep(targets, elm => {\n            return !self.get(elm.id);\n          });\n          if (targets.length === 0) {\n            provideResults([]);\n          } else {\n            each(targets, elm => {\n              if (isInvalidInlineTarget(options, elm)) {\n                initError('Could not initialize inline editor on invalid inline target element', elm);\n              } else {\n                createEditor(createId(elm), options, elm);\n              }\n            });\n          }\n        };\n        DOM.bind(window, 'ready', initEditors);\n        return new Promise(resolve => {\n          if (result) {\n            resolve(result);\n          } else {\n            provideResults = editors => {\n              resolve(editors);\n            };\n          }\n        });\n      },\n      get(id) {\n        if (arguments.length === 0) {\n          return editors.slice(0);\n        } else if (isString(id)) {\n          return find$2(editors, editor => {\n            return editor.id === id;\n          }).getOr(null);\n        } else if (isNumber(id)) {\n          return editors[id] ? editors[id] : null;\n        } else {\n          return null;\n        }\n      },\n      add(editor) {\n        const self = this;\n        const existingEditor = self.get(editor.id);\n        if (existingEditor === editor) {\n          return editor;\n        }\n        if (existingEditor === null) {\n          editors.push(editor);\n        }\n        toggleGlobalEvents(true);\n        self.activeEditor = editor;\n        self.dispatch('AddEditor', { editor });\n        if (!beforeUnloadDelegate) {\n          beforeUnloadDelegate = e => {\n            const event = self.dispatch('BeforeUnload');\n            if (event.returnValue) {\n              e.preventDefault();\n              e.returnValue = event.returnValue;\n              return event.returnValue;\n            }\n          };\n          window.addEventListener('beforeunload', beforeUnloadDelegate);\n        }\n        return editor;\n      },\n      createEditor(id, options) {\n        return this.add(new Editor(id, options, this));\n      },\n      remove(selector) {\n        const self = this;\n        let editor;\n        if (!selector) {\n          for (let i = editors.length - 1; i >= 0; i--) {\n            self.remove(editors[i]);\n          }\n          return;\n        }\n        if (isString(selector)) {\n          each(DOM.select(selector), elm => {\n            editor = self.get(elm.id);\n            if (editor) {\n              self.remove(editor);\n            }\n          });\n          return;\n        }\n        editor = selector;\n        if (isNull(self.get(editor.id))) {\n          return null;\n        }\n        if (removeEditorFromList(editor)) {\n          self.dispatch('RemoveEditor', { editor });\n        }\n        if (editors.length === 0) {\n          window.removeEventListener('beforeunload', beforeUnloadDelegate);\n        }\n        editor.remove();\n        toggleGlobalEvents(editors.length > 0);\n        return editor;\n      },\n      execCommand(cmd, ui, value) {\n        var _a;\n        const self = this;\n        const editorId = isObject(value) ? (_a = value.id) !== null && _a !== void 0 ? _a : value.index : value;\n        switch (cmd) {\n        case 'mceAddEditor': {\n            if (!self.get(editorId)) {\n              const editorOptions = value.options;\n              new Editor(editorId, editorOptions, self).render();\n            }\n            return true;\n          }\n        case 'mceRemoveEditor': {\n            const editor = self.get(editorId);\n            if (editor) {\n              editor.remove();\n            }\n            return true;\n          }\n        case 'mceToggleEditor': {\n            const editor = self.get(editorId);\n            if (!editor) {\n              self.execCommand('mceAddEditor', false, value);\n              return true;\n            }\n            if (editor.isHidden()) {\n              editor.show();\n            } else {\n              editor.hide();\n            }\n            return true;\n          }\n        }\n        if (self.activeEditor) {\n          return self.activeEditor.execCommand(cmd, ui, value);\n        }\n        return false;\n      },\n      triggerSave: () => {\n        each(editors, editor => {\n          editor.save();\n        });\n      },\n      addI18n: (code, items) => {\n        I18n.add(code, items);\n      },\n      translate: text => {\n        return I18n.translate(text);\n      },\n      setActive(editor) {\n        const activeEditor = this.activeEditor;\n        if (this.activeEditor !== editor) {\n          if (activeEditor) {\n            activeEditor.dispatch('deactivate', { relatedTarget: editor });\n          }\n          editor.dispatch('activate', { relatedTarget: activeEditor });\n        }\n        this.activeEditor = editor;\n      },\n      _setBaseUrl(baseUrl) {\n        this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n        this.baseURI = new URI(this.baseURL);\n      }\n    };\n    EditorManager.setup();\n\n    const setup = () => {\n      const dataValue = value$2();\n      const FakeClipboardItem = items => ({\n        items,\n        types: keys(items),\n        getType: type => get$a(items, type).getOrUndefined()\n      });\n      const write = data => {\n        dataValue.set(data);\n      };\n      const read = () => dataValue.get().getOrUndefined();\n      const clear = dataValue.clear;\n      return {\n        FakeClipboardItem,\n        write,\n        read,\n        clear\n      };\n    };\n    const FakeClipboard = setup();\n\n    const min = Math.min, max = Math.max, round = Math.round;\n    const relativePosition = (rect, targetRect, rel) => {\n      let x = targetRect.x;\n      let y = targetRect.y;\n      const w = rect.w;\n      const h = rect.h;\n      const targetW = targetRect.w;\n      const targetH = targetRect.h;\n      const relChars = (rel || '').split('');\n      if (relChars[0] === 'b') {\n        y += targetH;\n      }\n      if (relChars[1] === 'r') {\n        x += targetW;\n      }\n      if (relChars[0] === 'c') {\n        y += round(targetH / 2);\n      }\n      if (relChars[1] === 'c') {\n        x += round(targetW / 2);\n      }\n      if (relChars[3] === 'b') {\n        y -= h;\n      }\n      if (relChars[4] === 'r') {\n        x -= w;\n      }\n      if (relChars[3] === 'c') {\n        y -= round(h / 2);\n      }\n      if (relChars[4] === 'c') {\n        x -= round(w / 2);\n      }\n      return create$2(x, y, w, h);\n    };\n    const findBestRelativePosition = (rect, targetRect, constrainRect, rels) => {\n      for (let i = 0; i < rels.length; i++) {\n        const pos = relativePosition(rect, targetRect, rels[i]);\n        if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n          return rels[i];\n        }\n      }\n      return null;\n    };\n    const inflate = (rect, w, h) => {\n      return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n    };\n    const intersect = (rect, cropRect) => {\n      const x1 = max(rect.x, cropRect.x);\n      const y1 = max(rect.y, cropRect.y);\n      const x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n      const y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n      if (x2 - x1 < 0 || y2 - y1 < 0) {\n        return null;\n      }\n      return create$2(x1, y1, x2 - x1, y2 - y1);\n    };\n    const clamp = (rect, clampRect, fixedSize) => {\n      let x1 = rect.x;\n      let y1 = rect.y;\n      let x2 = rect.x + rect.w;\n      let y2 = rect.y + rect.h;\n      const cx2 = clampRect.x + clampRect.w;\n      const cy2 = clampRect.y + clampRect.h;\n      const underflowX1 = max(0, clampRect.x - x1);\n      const underflowY1 = max(0, clampRect.y - y1);\n      const overflowX2 = max(0, x2 - cx2);\n      const overflowY2 = max(0, y2 - cy2);\n      x1 += underflowX1;\n      y1 += underflowY1;\n      if (fixedSize) {\n        x2 += underflowX1;\n        y2 += underflowY1;\n        x1 -= overflowX2;\n        y1 -= overflowY2;\n      }\n      x2 -= overflowX2;\n      y2 -= overflowY2;\n      return create$2(x1, y1, x2 - x1, y2 - y1);\n    };\n    const create$2 = (x, y, w, h) => {\n      return {\n        x,\n        y,\n        w,\n        h\n      };\n    };\n    const fromClientRect = clientRect => {\n      return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n    };\n    const Rect = {\n      inflate,\n      relativePosition,\n      findBestRelativePosition,\n      intersect,\n      clamp,\n      create: create$2,\n      fromClientRect\n    };\n\n    const awaiter = (resolveCb, rejectCb, timeout = 1000) => {\n      let done = false;\n      let timer = null;\n      const complete = completer => (...args) => {\n        if (!done) {\n          done = true;\n          if (timer !== null) {\n            clearTimeout(timer);\n            timer = null;\n          }\n          completer.apply(null, args);\n        }\n      };\n      const resolve = complete(resolveCb);\n      const reject = complete(rejectCb);\n      const start = (...args) => {\n        if (!done && timer === null) {\n          timer = setTimeout(() => reject.apply(null, args), timeout);\n        }\n      };\n      return {\n        start,\n        resolve,\n        reject\n      };\n    };\n    const create$1 = () => {\n      const tasks = {};\n      const resultFns = {};\n      const resources = {};\n      const load = (id, url) => {\n        const loadErrMsg = `Script at URL \"${ url }\" failed to load`;\n        const runErrMsg = `Script at URL \"${ url }\" did not call \\`tinymce.Resource.add('${ id }', data)\\` within 1 second`;\n        if (tasks[id] !== undefined) {\n          return tasks[id];\n        } else {\n          const task = new Promise((resolve, reject) => {\n            const waiter = awaiter(resolve, reject);\n            resultFns[id] = waiter.resolve;\n            ScriptLoader.ScriptLoader.loadScript(url).then(() => waiter.start(runErrMsg), () => waiter.reject(loadErrMsg));\n          });\n          tasks[id] = task;\n          return task;\n        }\n      };\n      const add = (id, data) => {\n        if (resultFns[id] !== undefined) {\n          resultFns[id](data);\n          delete resultFns[id];\n        }\n        tasks[id] = Promise.resolve(data);\n        resources[id] = data;\n      };\n      const has = id => {\n        return id in resources;\n      };\n      const unload = id => {\n        delete tasks[id];\n      };\n      const get = id => resources[id];\n      return {\n        load,\n        add,\n        has,\n        get,\n        unload\n      };\n    };\n    const Resource = create$1();\n\n    const create = () => (() => {\n      let data = {};\n      let keys = [];\n      const storage = {\n        getItem: key => {\n          const item = data[key];\n          return item ? item : null;\n        },\n        setItem: (key, value) => {\n          keys.push(key);\n          data[key] = String(value);\n        },\n        key: index => {\n          return keys[index];\n        },\n        removeItem: key => {\n          keys = keys.filter(k => k === key);\n          delete data[key];\n        },\n        clear: () => {\n          keys = [];\n          data = {};\n        },\n        length: 0\n      };\n      Object.defineProperty(storage, 'length', {\n        get: () => keys.length,\n        configurable: false,\n        enumerable: false\n      });\n      return storage;\n    })();\n\n    let localStorage;\n    try {\n      const test = '__storage_test__';\n      localStorage = window.localStorage;\n      localStorage.setItem(test, test);\n      localStorage.removeItem(test);\n    } catch (e) {\n      localStorage = create();\n    }\n    var LocalStorage = localStorage;\n\n    const publicApi = {\n      geom: { Rect },\n      util: {\n        Delay,\n        Tools,\n        VK,\n        URI,\n        EventDispatcher,\n        Observable,\n        I18n,\n        LocalStorage,\n        ImageUploader\n      },\n      dom: {\n        EventUtils,\n        TreeWalker: DomTreeWalker,\n        TextSeeker,\n        DOMUtils,\n        ScriptLoader,\n        RangeUtils,\n        Serializer: DomSerializer,\n        StyleSheetLoader,\n        ControlSelection,\n        BookmarkManager,\n        Selection: EditorSelection,\n        Event: EventUtils.Event\n      },\n      html: {\n        Styles,\n        Entities,\n        Node: AstNode,\n        Schema,\n        DomParser,\n        Writer,\n        Serializer: HtmlSerializer\n      },\n      Env,\n      AddOnManager,\n      Annotator,\n      Formatter,\n      UndoManager,\n      EditorCommands,\n      WindowManager,\n      NotificationManager,\n      EditorObservable,\n      Shortcuts,\n      Editor,\n      FocusManager,\n      EditorManager,\n      DOM: DOMUtils.DOM,\n      ScriptLoader: ScriptLoader.ScriptLoader,\n      PluginManager,\n      ThemeManager,\n      ModelManager,\n      IconManager,\n      Resource,\n      FakeClipboard,\n      trim: Tools.trim,\n      isArray: Tools.isArray,\n      is: Tools.is,\n      toArray: Tools.toArray,\n      makeMap: Tools.makeMap,\n      each: Tools.each,\n      map: Tools.map,\n      grep: Tools.grep,\n      inArray: Tools.inArray,\n      extend: Tools.extend,\n      walk: Tools.walk,\n      resolve: Tools.resolve,\n      explode: Tools.explode,\n      _addCacheSuffix: Tools._addCacheSuffix\n    };\n    const tinymce$1 = Tools.extend(EditorManager, publicApi);\n\n    const exportToModuleLoaders = tinymce => {\n      if (typeof module === 'object') {\n        try {\n          module.exports = tinymce;\n        } catch (_) {\n        }\n      }\n    };\n    const exportToWindowGlobal = tinymce => {\n      window.tinymce = tinymce;\n      window.tinyMCE = tinymce;\n    };\n    exportToWindowGlobal(tinymce$1);\n    exportToModuleLoaders(tinymce$1);\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$2 = t => a => t === a;\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isArray = isType$1('array');\n    const isNull = eq$2(null);\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$2(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n\n    const noop = () => {\n    };\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const identity = x => {\n      return x;\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const not = f => t => !f(t);\n    const die = msg => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply = f => {\n      return f();\n    };\n    const never = constant(false);\n    const always = constant(true);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const range$1 = (num, f) => {\n      const r = [];\n      for (let i = 0; i < num; i++) {\n        r.push(f(i));\n      }\n      return r;\n    };\n    const map$1 = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$2 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const partition = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        const arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$2 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const foldr = (xs, f, acc) => {\n      eachr(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const foldl = (xs, f, acc) => {\n      each$2(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$1 = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const findIndex = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(i);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind$2 = (xs, f) => flatten(map$1(xs, f));\n    const forall = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        const x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = xs => {\n      const r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    const mapToObject = (xs, f) => {\n      const r = {};\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    const sort$1 = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$d(xs, 0);\n    const last$2 = xs => get$d(xs, xs.length - 1);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each$1 = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const map = (obj, f) => {\n      return tupleMap(obj, (x, i) => ({\n        k: i,\n        v: f(x, i)\n      }));\n    };\n    const tupleMap = (obj, f) => {\n      const r = {};\n      each$1(obj, (x, i) => {\n        const tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each$1(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const filter$1 = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const mapToArray = (obj, f) => {\n      const r = [];\n      each$1(obj, (value, name) => {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    const values = obj => {\n      return mapToArray(obj, identity);\n    };\n    const get$c = (obj, key) => {\n      return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n    const isEmpty = r => {\n      for (const x in r) {\n        if (hasOwnProperty.call(r, x)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const path = (parts, scope) => {\n      let o = scope !== undefined && scope !== null ? scope : Global;\n      for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    const resolve$2 = (p, scope) => {\n      const parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    const unsafe = (name, scope) => {\n      return resolve$2(name, scope);\n    };\n    const getOrDie = (name, scope) => {\n      const actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n\n    const getPrototypeOf = Object.getPrototypeOf;\n    const sandHTMLElement = scope => {\n      return getOrDie('HTMLElement', scope);\n    };\n    const isPrototypeOf = x => {\n      const scope = resolve$2('ownerDocument.defaultView', x);\n      return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n    };\n\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n    const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n    const isElement = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement(e) && name(e) === tag;\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set$2 = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const setAll$1 = (element, attrs) => {\n      const dom = element.dom;\n      each$1(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const setOptions = (element, attrs) => {\n      each$1(attrs, (v, k) => {\n        v.fold(() => {\n          remove$7(element, k);\n        }, value => {\n          rawSet(element.dom, k, value);\n        });\n      });\n    };\n    const get$b = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const getOpt = (element, key) => Optional.from(get$b(element, key));\n    const remove$7 = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n    const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const fromHtml$1 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom$1(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom$1(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom$1(node);\n    };\n    const fromDom$1 = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n    const SugarElement = {\n      fromHtml: fromHtml$1,\n      fromTag,\n      fromText,\n      fromDom: fromDom$1,\n      fromPoint: fromPoint$1\n    };\n\n    const is$2 = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all$1 = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    const eq$1 = (e1, e2) => e1.dom === e2.dom;\n    const contains$1 = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    const is$1 = is$2;\n\n    const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n    const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n    const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n    const parents = (element, isRoot) => {\n      const stop = isFunction(isRoot) ? isRoot : never;\n      let dom = element.dom;\n      const ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        const rawParent = dom.parentNode;\n        const p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n    const child$2 = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child$2(element, 0);\n\n    const before$3 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after$5 = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$1(v, element);\n        });\n      }, v => {\n        before$3(v, element);\n      });\n    };\n    const prepend = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$1(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$1 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const appendAt = (parent, element, index) => {\n      child$2(parent, index).fold(() => {\n        append$1(parent, element);\n      }, v => {\n        before$3(v, element);\n      });\n    };\n    const wrap = (element, wrapper) => {\n      before$3(element, wrapper);\n      append$1(wrapper, element);\n    };\n\n    const after$4 = (marker, elements) => {\n      each$2(elements, (x, i) => {\n        const e = i === 0 ? marker : elements[i - 1];\n        after$5(e, x);\n      });\n    };\n    const append = (parent, elements) => {\n      each$2(elements, x => {\n        append$1(parent, x);\n      });\n    };\n\n    const empty = element => {\n      element.dom.textContent = '';\n      each$2(children$2(element), rogue => {\n        remove$6(rogue);\n      });\n    };\n    const remove$6 = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    const unwrap = wrapper => {\n      const children = children$2(wrapper);\n      if (children.length > 0) {\n        after$4(wrapper, children);\n      }\n      remove$6(wrapper);\n    };\n\n    const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const shallow = original => clone$1(original, false);\n    const deep = original => clone$1(original, true);\n    const shallowAs = (original, tag) => {\n      const nu = SugarElement.fromTag(tag);\n      const attributes = clone$2(original);\n      setAll$1(nu, attributes);\n      return nu;\n    };\n    const copy$2 = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      const cloneChildren = children$2(deep(original));\n      append(nu, cloneChildren);\n      return nu;\n    };\n    const mutate$1 = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      after$5(original, nu);\n      const children = children$2(original);\n      append(nu, children);\n      remove$6(original);\n      return nu;\n    };\n\n    const validSectionList = [\n      'tfoot',\n      'thead',\n      'tbody',\n      'colgroup'\n    ];\n    const isValidSection = parentName => contains$2(validSectionList, parentName);\n    const grid = (rows, columns) => ({\n      rows,\n      columns\n    });\n    const address = (row, column) => ({\n      row,\n      column\n    });\n    const detail = (element, rowspan, colspan) => ({\n      element,\n      rowspan,\n      colspan\n    });\n    const detailnew = (element, rowspan, colspan, isNew) => ({\n      element,\n      rowspan,\n      colspan,\n      isNew\n    });\n    const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n      element,\n      rowspan,\n      colspan,\n      row,\n      column,\n      isLocked\n    });\n    const rowdetail = (element, cells, section) => ({\n      element,\n      cells,\n      section\n    });\n    const rowdetailnew = (element, cells, section, isNew) => ({\n      element,\n      cells,\n      section,\n      isNew\n    });\n    const elementnew = (element, isNew, isLocked) => ({\n      element,\n      isNew,\n      isLocked\n    });\n    const rowcells = (element, cells, section, isNew) => ({\n      element,\n      cells,\n      section,\n      isNew\n    });\n    const bounds = (startRow, startCol, finishRow, finishCol) => ({\n      startRow,\n      startCol,\n      finishRow,\n      finishCol\n    });\n    const columnext = (element, colspan, column) => ({\n      element,\n      colspan,\n      column\n    });\n    const colgroup = (element, columns) => ({\n      element,\n      columns\n    });\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const isSupported$1 = constant(supported);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n    const getOriginalEventTarget = event => {\n      if (isSupported$1() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n    const body$1 = () => getBody$1(SugarElement.fromDom(document));\n    const getBody$1 = doc => {\n      const b = doc.dom.body;\n      if (b === null || b === undefined) {\n        throw new Error('Body is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n    const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n    const descendants$1 = (scope, predicate) => {\n      let result = [];\n      each$2(children$2(scope), x => {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants$1(x, predicate));\n      });\n      return result;\n    };\n\n    const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n    const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n    const descendants = (scope, selector) => all$1(selector, scope);\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$2 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$2 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n    };\n    const child$1 = (scope, predicate) => {\n      const pred = node => predicate(SugarElement.fromDom(node));\n      const result = find$1(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n    const descendant$1 = (scope, predicate) => {\n      const descend = node => {\n        for (let i = 0; i < node.childNodes.length; i++) {\n          const child = SugarElement.fromDom(node.childNodes[i]);\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(node.childNodes[i]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n\n    const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n    const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is = (element, selector) => is$2(element, selector);\n      return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n    };\n\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const contains = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n    const endsWith = (str, suffix) => {\n      return checkRange(str, suffix, str.length - suffix.length);\n    };\n    const blank = r => s => s.replace(r, '');\n    const trim = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const toFloat = value => {\n      const num = parseFloat(value);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const internalRemove = (dom, property) => {\n      if (isSupported(dom)) {\n        dom.style.removeProperty(property);\n      }\n    };\n    const set$1 = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n    const setAll = (element, css) => {\n      const dom = element.dom;\n      each$1(css, (v, k) => {\n        internalSet(dom, k, v);\n      });\n    };\n    const get$a = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    const getRaw$2 = (element, property) => {\n      const dom = element.dom;\n      const raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(r => r.length > 0);\n    };\n    const remove$5 = (element, property) => {\n      const dom = element.dom;\n      internalRemove(dom, property);\n      if (is(getOpt(element, 'style').map(trim), '')) {\n        remove$7(element, 'style');\n      }\n    };\n    const copy$1 = (source, target) => {\n      const sourceDom = source.dom;\n      const targetDom = target.dom;\n      if (isSupported(sourceDom) && isSupported(targetDom)) {\n        targetDom.style.cssText = sourceDom.style.cssText;\n      }\n    };\n\n    const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n    const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n    const hasColspan = cellOrCol => {\n      if (isTag('col')(cellOrCol)) {\n        return getAttrValue(cellOrCol, 'span', 1) > 1;\n      } else {\n        return getSpan(cellOrCol, 'colspan') > 1;\n      }\n    };\n    const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n    const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n    const minWidth = constant(10);\n    const minHeight = constant(10);\n\n    const firstLayer = (scope, selector) => {\n      return filterFirstLayer(scope, selector, always);\n    };\n    const filterFirstLayer = (scope, selector, predicate) => {\n      return bind$2(children$2(scope), x => {\n        if (is$2(x, selector)) {\n          return predicate(x) ? [x] : [];\n        } else {\n          return filterFirstLayer(x, selector, predicate);\n        }\n      });\n    };\n\n    const lookup = (tags, element, isRoot = never) => {\n      if (isRoot(element)) {\n        return Optional.none();\n      }\n      if (contains$2(tags, name(element))) {\n        return Optional.some(element);\n      }\n      const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n      return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n    };\n    const cell = (element, isRoot) => lookup([\n      'td',\n      'th'\n    ], element, isRoot);\n    const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n    const columns$1 = ancestor => {\n      if (is$2(ancestor, 'colgroup')) {\n        return children(ancestor, 'col');\n      } else {\n        return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n      }\n    };\n    const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n    const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n    const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n    const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n      if (name(row) === 'colgroup') {\n        const cells = map$1(columns$1(row), column => {\n          const colspan = getAttrValue(column, 'span', 1);\n          return detail(column, 1, colspan);\n        });\n        return rowdetail(row, cells, 'colgroup');\n      } else {\n        const cells = map$1(cells$1(row), cell => {\n          const rowspan = getAttrValue(cell, 'rowspan', 1);\n          const colspan = getAttrValue(cell, 'colspan', 1);\n          return detail(cell, rowspan, colspan);\n        });\n        return rowdetail(row, cells, getSection(row));\n      }\n    });\n    const getParentSection = group => parent(group).map(parent => {\n      const parentName = name(parent);\n      return isValidSection(parentName) ? parentName : 'tbody';\n    }).getOr('tbody');\n    const fromTable$1 = table => {\n      const rows = rows$1(table);\n      const columnGroups$1 = columnGroups(table);\n      const elems = [\n        ...columnGroups$1,\n        ...rows\n      ];\n      return fromRowsOrColGroups(elems, getParentSection);\n    };\n    const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const DeviceType = (os, browser, userAgent, mediaMatch) => {\n      const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      const isiPhone = os.isiOS() && !isiPad;\n      const isMobile = os.isiOS() || os.isAndroid();\n      const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview),\n        isDesktop: constant(isDesktop)\n      };\n    };\n\n    const firstMatch = (regexes, s) => {\n      for (let i = 0; i < regexes.length; i++) {\n        const x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    const find = (regexes, agent) => {\n      const r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = i => {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$2(group(1), group(2));\n    };\n    const detect$5 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$2();\n      }\n      return find(versionRegexes, cleanedAgent);\n    };\n    const unknown$2 = () => {\n      return nu$2(0, 0);\n    };\n    const nu$2 = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$2,\n      detect: detect$5,\n      unknown: unknown$2\n    };\n\n    const detectBrowser$1 = (browsers, userAgentData) => {\n      return findMap(userAgentData.brands, uaBrand => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$1(browsers, browser => {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(info => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n\n    const detect$4 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$1(candidates, candidate => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers, userAgent) => {\n      return detect$4(browsers, userAgent).map(browser => {\n        const version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version\n        };\n      });\n    };\n    const detectOs = (oses, userAgent) => {\n      return detect$4(oses, userAgent).map(os => {\n        const version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version\n        };\n      });\n    };\n\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = target => {\n      return uastring => {\n        return contains(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: uastring => {\n          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chromium',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: uastring => {\n          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: uastring => {\n          return contains(uastring, 'msie') || contains(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: uastring => {\n          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: uastring => {\n          return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'macOS',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    const edge = 'Edge';\n    const chromium = 'Chromium';\n    const ie = 'IE';\n    const opera = 'Opera';\n    const firefox = 'Firefox';\n    const safari = 'Safari';\n    const unknown$1 = () => {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$1 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isBrowser = name => () => current === name;\n      return {\n        current,\n        version,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$1,\n      nu: nu$1,\n      edge: constant(edge),\n      chromium: constant(chromium),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    const windows = 'Windows';\n    const ios = 'iOS';\n    const android = 'Android';\n    const linux = 'Linux';\n    const macos = 'macOS';\n    const solaris = 'Solaris';\n    const freebsd = 'FreeBSD';\n    const chromeos = 'ChromeOS';\n    const unknown = () => {\n      return nu({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu = info => {\n      const current = info.current;\n      const version = info.version;\n      const isOS = name => () => current === name;\n      return {\n        current,\n        version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown,\n      nu,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      macos: constant(macos),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd),\n      chromeos: constant(chromeos)\n    };\n\n    const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n      const browsers = PlatformInfo.browsers();\n      const oses = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$3 };\n\n    const mediaMatch = query => window.matchMedia(query).matches;\n    let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect$2 = () => platform();\n\n    const Dimension = (name, getOffset) => {\n      const set = (element, h) => {\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n        }\n        const dom = element.dom;\n        if (isSupported(dom)) {\n          dom.style[name] = h + 'px';\n        }\n      };\n      const get = element => {\n        const r = getOffset(element);\n        if (r <= 0 || r === null) {\n          const css = get$a(element, name);\n          return parseFloat(css) || 0;\n        }\n        return r;\n      };\n      const getOuter = get;\n      const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n        const val = get$a(element, property);\n        const value = val === undefined ? 0 : parseInt(val, 10);\n        return isNaN(value) ? acc : acc + value;\n      }, 0);\n      const max = (element, value, properties) => {\n        const cumulativeInclusions = aggregate(element, properties);\n        const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set,\n        get,\n        getOuter,\n        aggregate,\n        max\n      };\n    };\n\n    const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n    const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n    const calcContentBoxSize = (element, size, upper, lower) => {\n      const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n      const paddingLower = getProp(element, `padding-${ lower }`, 0);\n      const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n      const borderLower = getProp(element, `border-${ lower }-width`, 0);\n      return size - paddingUpper - paddingLower - borderUpper - borderLower;\n    };\n    const getCalculatedWidth = (element, boxSizing) => {\n      const dom = element.dom;\n      const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n      return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n    };\n    const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n    const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n    const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n    const api$2 = Dimension('width', element => element.dom.offsetWidth);\n    const get$9 = element => api$2.get(element);\n    const getOuter$2 = element => api$2.getOuter(element);\n    const getInner = getInnerWidth;\n    const getRuntime$1 = getWidth;\n\n    const addCells = (gridRow, index, cells) => {\n      const existingCells = gridRow.cells;\n      const before = existingCells.slice(0, index);\n      const after = existingCells.slice(index);\n      const newCells = before.concat(cells).concat(after);\n      return setCells(gridRow, newCells);\n    };\n    const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n    const mutateCell = (gridRow, index, cell) => {\n      const cells = gridRow.cells;\n      cells[index] = cell;\n    };\n    const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n    const mapCells = (gridRow, f) => {\n      const cells = gridRow.cells;\n      const r = map$1(cells, f);\n      return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n    };\n    const getCell = (gridRow, index) => gridRow.cells[index];\n    const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n    const cellLength = gridRow => gridRow.cells.length;\n    const extractGridDetails = grid => {\n      const result = partition(grid, row => row.section === 'colgroup');\n      return {\n        rows: result.fail,\n        cols: result.pass\n      };\n    };\n    const clone = (gridRow, cloneRow, cloneCell) => {\n      const newCells = map$1(gridRow.cells, cloneCell);\n      return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n    };\n\n    const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n    const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n    const getLockedColumnsFromGrid = grid => {\n      const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n        each$2(row.cells, (cell, idx) => {\n          if (cell.isLocked) {\n            acc[idx] = true;\n          }\n        });\n        return acc;\n      }, {});\n      const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n      return sort$1(lockedArr);\n    };\n\n    const key = (row, column) => {\n      return row + ',' + column;\n    };\n    const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n    const findItem = (warehouse, item, comparator) => {\n      const filtered = filterItems(warehouse, detail => {\n        return comparator(item, detail.element);\n      });\n      return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n    };\n    const filterItems = (warehouse, predicate) => {\n      const all = bind$2(warehouse.all, r => {\n        return r.cells;\n      });\n      return filter$2(all, predicate);\n    };\n    const generateColumns = rowData => {\n      const columnsGroup = {};\n      let index = 0;\n      each$2(rowData.cells, column => {\n        const colspan = column.colspan;\n        range$1(colspan, columnIndex => {\n          const colIndex = index + columnIndex;\n          columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n        });\n        index += colspan;\n      });\n      return columnsGroup;\n    };\n    const generate$1 = list => {\n      const access = {};\n      const cells = [];\n      const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n      const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n      let maxRows = 0;\n      let maxColumns = 0;\n      let rowCount = 0;\n      const {\n        pass: colgroupRows,\n        fail: rows\n      } = partition(list, rowData => rowData.section === 'colgroup');\n      each$2(rows, rowData => {\n        const currentRow = [];\n        each$2(rowData.cells, rowCell => {\n          let start = 0;\n          while (access[key(rowCount, start)] !== undefined) {\n            start++;\n          }\n          const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n          const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n          for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n            for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n              const rowPosition = rowCount + occupiedRowPosition;\n              const columnPosition = start + occupiedColumnPosition;\n              const newpos = key(rowPosition, columnPosition);\n              access[newpos] = current;\n              maxColumns = Math.max(maxColumns, columnPosition + 1);\n            }\n          }\n          currentRow.push(current);\n        });\n        maxRows++;\n        cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n        rowCount++;\n      });\n      const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n        const columns = generateColumns(rowData);\n        const colgroup$1 = colgroup(rowData.element, values(columns));\n        return {\n          colgroups: [colgroup$1],\n          columns\n        };\n      }).getOrThunk(() => ({\n        colgroups: [],\n        columns: {}\n      }));\n      const grid$1 = grid(maxRows, maxColumns);\n      return {\n        grid: grid$1,\n        access,\n        all: cells,\n        columns,\n        colgroups\n      };\n    };\n    const fromTable = table => {\n      const list = fromTable$1(table);\n      return generate$1(list);\n    };\n    const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n    const justColumns = warehouse => values(warehouse.columns);\n    const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n    const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n    const Warehouse = {\n      fromTable,\n      generate: generate$1,\n      getAt,\n      findItem,\n      filterItems,\n      justCells,\n      justColumns,\n      hasColumns,\n      getColumnAt\n    };\n\n    const columns = (warehouse, isValidCell = always) => {\n      const grid = warehouse.grid;\n      const cols = range$1(grid.columns, identity);\n      const rowsArr = range$1(grid.rows, identity);\n      return map$1(cols, col => {\n        const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n        const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n        const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n        return decide(getBlock, isValid, getFallback);\n      });\n    };\n    const decide = (getBlock, isValid, getFallback) => {\n      const inBlock = getBlock();\n      const validInBlock = find$1(inBlock, isValid);\n      const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n      return detailOption.map(detail => detail.element);\n    };\n    const rows = warehouse => {\n      const grid = warehouse.grid;\n      const rowsArr = range$1(grid.rows, identity);\n      const cols = range$1(grid.columns, identity);\n      return map$1(rowsArr, row => {\n        const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n        const isSingle = detail => detail.rowspan === 1;\n        const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n        return decide(getBlock, isSingle, getFallback);\n      });\n    };\n\n    const deduce = (xs, index) => {\n      if (index < 0 || index >= xs.length - 1) {\n        return Optional.none();\n      }\n      const current = xs[index].fold(() => {\n        const rest = reverse(xs.slice(0, index));\n        return findMap(rest, (a, i) => a.map(aa => ({\n          value: aa,\n          delta: i + 1\n        })));\n      }, c => Optional.some({\n        value: c,\n        delta: 0\n      }));\n      const next = xs[index + 1].fold(() => {\n        const rest = xs.slice(index + 1);\n        return findMap(rest, (a, i) => a.map(aa => ({\n          value: aa,\n          delta: i + 1\n        })));\n      }, n => Optional.some({\n        value: n,\n        delta: 1\n      }));\n      return current.bind(c => next.map(n => {\n        const extras = n.delta + c.delta;\n        return Math.abs(n.value - c.value) / extras;\n      }));\n    };\n\n    const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n    const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n    const api$1 = Dimension('height', element => {\n      const dom = element.dom;\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n    });\n    const get$8 = element => api$1.get(element);\n    const getOuter$1 = element => api$1.getOuter(element);\n    const getRuntime = getHeight$1;\n\n    const r = (left, top) => {\n      const translate = (x, y) => r(left + x, top + y);\n      return {\n        left,\n        top,\n        translate\n      };\n    };\n    const SugarPosition = r;\n\n    const boxPosition = dom => {\n      const box = dom.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    const firstDefinedOrZero = (a, b) => {\n      if (a !== undefined) {\n        return a;\n      } else {\n        return b !== undefined ? b : 0;\n      }\n    };\n    const absolute = element => {\n      const doc = element.dom.ownerDocument;\n      const body = doc.body;\n      const win = doc.defaultView;\n      const html = doc.documentElement;\n      if (body === element.dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n      const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n      const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport = element => {\n      const dom = element.dom;\n      const doc = dom.ownerDocument;\n      const body = doc.body;\n      if (body === dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom);\n    };\n\n    const rowInfo = (row, y) => ({\n      row,\n      y\n    });\n    const colInfo = (col, x) => ({\n      col,\n      x\n    });\n    const rtlEdge = cell => {\n      const pos = absolute(cell);\n      return pos.left + getOuter$2(cell);\n    };\n    const ltrEdge = cell => {\n      return absolute(cell).left;\n    };\n    const getLeftEdge = (index, cell) => {\n      return colInfo(index, ltrEdge(cell));\n    };\n    const getRightEdge = (index, cell) => {\n      return colInfo(index, rtlEdge(cell));\n    };\n    const getTop$1 = cell => {\n      return absolute(cell).top;\n    };\n    const getTopEdge = (index, cell) => {\n      return rowInfo(index, getTop$1(cell));\n    };\n    const getBottomEdge = (index, cell) => {\n      return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n    };\n    const findPositions = (getInnerEdge, getOuterEdge, array) => {\n      if (array.length === 0) {\n        return [];\n      }\n      const lines = map$1(array.slice(1), (cellOption, index) => {\n        return cellOption.map(cell => {\n          return getInnerEdge(index, cell);\n        });\n      });\n      const lastLine = array[array.length - 1].map(cell => {\n        return getOuterEdge(array.length - 1, cell);\n      });\n      return lines.concat([lastLine]);\n    };\n    const negate = step => {\n      return -step;\n    };\n    const height = {\n      delta: identity,\n      positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n      edge: getTop$1\n    };\n    const ltr$1 = {\n      delta: identity,\n      edge: ltrEdge,\n      positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n    };\n    const rtl$1 = {\n      delta: negate,\n      edge: rtlEdge,\n      positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n    };\n    const detect$1 = onDirection(ltr$1, rtl$1);\n    const width = {\n      delta: (amount, table) => detect$1(table).delta(amount, table),\n      positions: (cols, table) => detect$1(table).positions(cols, table),\n      edge: cell => detect$1(cell).edge(cell)\n    };\n\n    const units = {\n      unsupportedLength: [\n        'em',\n        'ex',\n        'cap',\n        'ch',\n        'ic',\n        'rem',\n        'lh',\n        'rlh',\n        'vw',\n        'vh',\n        'vi',\n        'vb',\n        'vmin',\n        'vmax',\n        'cm',\n        'mm',\n        'Q',\n        'in',\n        'pc',\n        'pt',\n        'px'\n      ],\n      fixed: [\n        'px',\n        'pt'\n      ],\n      relative: ['%'],\n      empty: ['']\n    };\n    const pattern = (() => {\n      const decimalDigits = '[0-9]+';\n      const signedInteger = '[+-]?' + decimalDigits;\n      const exponentPart = '[eE]' + signedInteger;\n      const dot = '\\\\.';\n      const opt = input => `(?:${ input })?`;\n      const unsignedDecimalLiteral = [\n        'Infinity',\n        decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n        dot + decimalDigits + opt(exponentPart),\n        decimalDigits + opt(exponentPart)\n      ].join('|');\n      const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n      return new RegExp(`^(${ float })(.*)$`);\n    })();\n    const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n    const parse = (input, accepted) => {\n      const match = Optional.from(pattern.exec(input));\n      return match.bind(array => {\n        const value = Number(array[1]);\n        const unitRaw = array[2];\n        if (isUnit(unitRaw, accepted)) {\n          return Optional.some({\n            value,\n            unit: unitRaw\n          });\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n\n    const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n    const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n    const isCol$2 = isTag('col');\n    const getPercentSize = (elm, outerGetter, innerGetter) => {\n      const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n      return outerGetter(elm) / innerGetter(relativeParent) * 100;\n    };\n    const setPixelWidth = (cell, amount) => {\n      set$1(cell, 'width', amount + 'px');\n    };\n    const setPercentageWidth = (cell, amount) => {\n      set$1(cell, 'width', amount + '%');\n    };\n    const setHeight = (cell, amount) => {\n      set$1(cell, 'height', amount + 'px');\n    };\n    const getHeightValue = cell => getRuntime(cell) + 'px';\n    const convert = (cell, number, getter, setter) => {\n      const newSize = table(cell).map(table => {\n        const total = getter(table);\n        return Math.floor(number / 100 * total);\n      }).getOr(number);\n      setter(cell, newSize);\n      return newSize;\n    };\n    const normalizePixelSize = (value, cell, getter, setter) => {\n      const number = parseFloat(value);\n      return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n    };\n    const getTotalHeight = cell => {\n      const value = getHeightValue(cell);\n      if (!value) {\n        return get$8(cell);\n      }\n      return normalizePixelSize(value, cell, get$8, setHeight);\n    };\n    const get$7 = (cell, type, f) => {\n      const v = f(cell);\n      const span = getSpan(cell, type);\n      return v / span;\n    };\n    const getRaw$1 = (element, prop) => {\n      return getRaw$2(element, prop).orThunk(() => {\n        return getOpt(element, prop).map(val => val + 'px');\n      });\n    };\n    const getRawWidth$1 = element => getRaw$1(element, 'width');\n    const getRawHeight = element => getRaw$1(element, 'height');\n    const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n    const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n    const getHeight = cell => {\n      return get$7(cell, 'rowspan', getTotalHeight);\n    };\n    const getGenericWidth = cell => {\n      const width = getRawWidth$1(cell);\n      return width.bind(w => parse(w, [\n        'fixed',\n        'relative',\n        'empty'\n      ]));\n    };\n    const setGenericWidth = (cell, amount, unit) => {\n      set$1(cell, 'width', amount + unit);\n    };\n    const getPixelTableWidth = table => get$9(table) + 'px';\n    const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n    const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n    const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n    const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n    const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n    const isCol$1 = isTag('col');\n    const getRawW = cell => {\n      return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n    };\n    const getRawH = cell => {\n      return getRawHeight(cell).getOrThunk(() => getHeight(cell) + 'px');\n    };\n    const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n    const isValidColumn = cell => {\n      const browser = detect$2().browser;\n      const supportsColWidths = browser.isChromium() || browser.isFirefox();\n      return isCol$1(cell) ? supportsColWidths : true;\n    };\n    const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n    const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n      const columnCells = columns(warehouse);\n      const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n      const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n      const colFilter = not(hasColspan);\n      return map$1(columns$1, (cellOption, c) => {\n        return getDimension(cellOption, c, backups, colFilter, column => {\n          if (isValidColumn(column)) {\n            return getWidth(column);\n          } else {\n            const cell = bindFrom(columnCells[c], identity);\n            return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n          }\n        }, fallback);\n      });\n    };\n    const getDeduced = deduced => {\n      return deduced.map(d => {\n        return d + 'px';\n      }).getOr('');\n    };\n    const getRawWidths = (warehouse, table) => {\n      return getWidthFrom(warehouse, table, getRawW, getDeduced);\n    };\n    const getPercentageWidths = (warehouse, table, tableSize) => {\n      return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n        return deduced.fold(() => {\n          return tableSize.minCellWidth();\n        }, cellWidth => {\n          return cellWidth / tableSize.pixelWidth() * 100;\n        });\n      });\n    };\n    const getPixelWidths = (warehouse, table, tableSize) => {\n      return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n        return deduced.getOrThunk(tableSize.minCellWidth);\n      });\n    };\n    const getHeightFrom = (warehouse, table, direction, getHeight, fallback) => {\n      const rows$1 = rows(warehouse);\n      const backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), pos => pos.map(p => p.y)));\n      return map$1(rows$1, (cellOption, c) => {\n        return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n      });\n    };\n    const getPixelHeights = (warehouse, table, direction) => {\n      return getHeightFrom(warehouse, table, direction, getHeight, deduced => {\n        return deduced.getOrThunk(minHeight);\n      });\n    };\n    const getRawHeights = (warehouse, table, direction) => {\n      return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n    };\n\n    const widthLookup = (table, getter) => () => {\n      if (inBody(table)) {\n        return getter(table);\n      } else {\n        return parseFloat(getRaw$2(table, 'width').getOr('0'));\n      }\n    };\n    const noneSize = table => {\n      const getWidth = widthLookup(table, get$9);\n      const zero = constant(0);\n      const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n      return {\n        width: getWidth,\n        pixelWidth: getWidth,\n        getWidths,\n        getCellDelta: zero,\n        singleColumnWidth: constant([0]),\n        minCellWidth: zero,\n        setElementWidth: noop,\n        adjustTableWidth: noop,\n        isRelative: true,\n        label: 'none'\n      };\n    };\n    const percentageSize = table => {\n      const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n      const getWidth = widthLookup(table, get$9);\n      const getCellDelta = delta => delta / getWidth() * 100;\n      const singleColumnWidth = (w, _delta) => [100 - w];\n      const minCellWidth = () => minWidth() / getWidth() * 100;\n      const adjustTableWidth = delta => {\n        const currentWidth = getFloatWidth();\n        const change = delta / 100 * currentWidth;\n        const newWidth = currentWidth + change;\n        setPercentageWidth(table, newWidth);\n      };\n      const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n      return {\n        width: getFloatWidth,\n        pixelWidth: getWidth,\n        getWidths,\n        getCellDelta,\n        singleColumnWidth,\n        minCellWidth,\n        setElementWidth: setPercentageWidth,\n        adjustTableWidth,\n        isRelative: true,\n        label: 'percent'\n      };\n    };\n    const pixelSize = table => {\n      const getWidth = widthLookup(table, get$9);\n      const getCellDelta = identity;\n      const singleColumnWidth = (w, delta) => {\n        const newNext = Math.max(minWidth(), w + delta);\n        return [newNext - w];\n      };\n      const adjustTableWidth = delta => {\n        const newWidth = getWidth() + delta;\n        setPixelWidth(table, newWidth);\n      };\n      const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n      return {\n        width: getWidth,\n        pixelWidth: getWidth,\n        getWidths,\n        getCellDelta,\n        singleColumnWidth,\n        minCellWidth: minWidth,\n        setElementWidth: setPixelWidth,\n        adjustTableWidth,\n        isRelative: false,\n        label: 'pixel'\n      };\n    };\n    const chooseSize = (element, width) => {\n      const percentMatch = percentageBasedSizeRegex().exec(width);\n      if (percentMatch !== null) {\n        return percentageSize(element);\n      } else {\n        return pixelSize(element);\n      }\n    };\n    const getTableSize = table => {\n      const width = getRawWidth$1(table);\n      return width.fold(() => noneSize(table), w => chooseSize(table, w));\n    };\n    const TableSize = {\n      getTableSize,\n      pixelSize,\n      percentageSize,\n      noneSize\n    };\n\n    const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n      minRow,\n      minCol,\n      maxRow,\n      maxCol,\n      allCells,\n      selectedCells\n    });\n    const findSelectedStats = (house, isSelected) => {\n      const totalColumns = house.grid.columns;\n      const totalRows = house.grid.rows;\n      let minRow = totalRows;\n      let minCol = totalColumns;\n      let maxRow = 0;\n      let maxCol = 0;\n      const allCells = [];\n      const selectedCells = [];\n      each$1(house.access, detail => {\n        allCells.push(detail);\n        if (isSelected(detail)) {\n          selectedCells.push(detail);\n          const startRow = detail.row;\n          const endRow = startRow + detail.rowspan - 1;\n          const startCol = detail.column;\n          const endCol = startCol + detail.colspan - 1;\n          if (startRow < minRow) {\n            minRow = startRow;\n          } else if (endRow > maxRow) {\n            maxRow = endRow;\n          }\n          if (startCol < minCol) {\n            minCol = startCol;\n          } else if (endCol > maxCol) {\n            maxCol = endCol;\n          }\n        }\n      });\n      return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n    };\n    const makeCell = (list, seenSelected, rowIndex) => {\n      const row = list[rowIndex].element;\n      const td = SugarElement.fromTag('td');\n      append$1(td, SugarElement.fromTag('br'));\n      const f = seenSelected ? append$1 : prepend;\n      f(row, td);\n    };\n    const fillInGaps = (list, house, stats, isSelected) => {\n      const rows = filter$2(list, row => row.section !== 'colgroup');\n      const totalColumns = house.grid.columns;\n      const totalRows = house.grid.rows;\n      for (let i = 0; i < totalRows; i++) {\n        let seenSelected = false;\n        for (let j = 0; j < totalColumns; j++) {\n          if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n            const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n            if (needCell) {\n              makeCell(rows, seenSelected, i);\n            } else {\n              seenSelected = true;\n            }\n          }\n        }\n      }\n    };\n    const clean = (replica, stats, house, widthDelta) => {\n      each$1(house.columns, col => {\n        if (col.column < stats.minCol || col.column > stats.maxCol) {\n          remove$6(col.element);\n        }\n      });\n      const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n      each$2(emptyRows, remove$6);\n      if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n        each$2(firstLayer(replica, 'th,td'), cell => {\n          remove$7(cell, 'rowspan');\n          remove$7(cell, 'colspan');\n        });\n      }\n      remove$7(replica, LOCKED_COL_ATTR);\n      remove$7(replica, 'data-snooker-col-series');\n      const tableSize = TableSize.getTableSize(replica);\n      tableSize.adjustTableWidth(widthDelta);\n    };\n    const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n      if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n        return 0;\n      }\n      const colWidths = getPixelWidths(warehouse, table, tableSize);\n      const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n      const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n      const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n      const delta = newWidth - tableSize.pixelWidth();\n      return tableSize.getCellDelta(delta);\n    };\n    const extract$1 = (table, selectedSelector) => {\n      const isSelected = detail => is$2(detail.element, selectedSelector);\n      const replica = deep(table);\n      const list = fromTable$1(replica);\n      const tableSize = TableSize.getTableSize(table);\n      const replicaHouse = Warehouse.generate(list);\n      const replicaStats = findSelectedStats(replicaHouse, isSelected);\n      const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n      const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n      each$2(unselectedCells, remove$6);\n      fillInGaps(list, replicaHouse, replicaStats, isSelected);\n      const house = Warehouse.fromTable(table);\n      const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n      clean(replica, replicaStats, replicaHouse, widthDelta);\n      return replica;\n    };\n\n    const nbsp = '\\xA0';\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api = NodeValue(isText, 'text');\n    const get$6 = element => api.get(element);\n    const getOption = element => api.getOption(element);\n    const set = (element, value) => api.set(element, value);\n\n    const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n    const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n    const isContentEditableFalse = elem => isHTMLElement(elem) && get$b(elem, 'contenteditable') === 'false';\n    const elementsWithCursorPosition = [\n      'img',\n      'br'\n    ];\n    const isCursorPosition = elem => {\n      const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n      return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse(elem);\n    };\n\n    const first = element => descendant$1(element, isCursorPosition);\n    const last$1 = element => descendantRtl(element, isCursorPosition);\n    const descendantRtl = (scope, predicate) => {\n      const descend = element => {\n        const children = children$2(element);\n        for (let i = children.length - 1; i >= 0; i--) {\n          const child = children[i];\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(child);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope);\n    };\n\n    const transferableAttributes = {\n      scope: [\n        'row',\n        'col'\n      ]\n    };\n    const createCell = doc => () => {\n      const td = SugarElement.fromTag('td', doc.dom);\n      append$1(td, SugarElement.fromTag('br', doc.dom));\n      return td;\n    };\n    const createCol = doc => () => {\n      return SugarElement.fromTag('col', doc.dom);\n    };\n    const createColgroup = doc => () => {\n      return SugarElement.fromTag('colgroup', doc.dom);\n    };\n    const createRow$1 = doc => () => {\n      return SugarElement.fromTag('tr', doc.dom);\n    };\n    const replace$1 = (cell, tag, attrs) => {\n      const replica = copy$2(cell, tag);\n      each$1(attrs, (v, k) => {\n        if (v === null) {\n          remove$7(replica, k);\n        } else {\n          set$2(replica, k, v);\n        }\n      });\n      return replica;\n    };\n    const pasteReplace = cell => {\n      return cell;\n    };\n    const cloneFormats = (oldCell, newCell, formats) => {\n      const first$1 = first(oldCell);\n      return first$1.map(firstText => {\n        const formatSelector = formats.join(',');\n        const parents = ancestors$3(firstText, formatSelector, element => {\n          return eq$1(element, oldCell);\n        });\n        return foldr(parents, (last, parent) => {\n          const clonedFormat = shallow(parent);\n          append$1(last, clonedFormat);\n          return clonedFormat;\n        }, newCell);\n      }).getOr(newCell);\n    };\n    const cloneAppropriateAttributes = (original, clone) => {\n      each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n    };\n    const cellOperations = (mutate, doc, formatsToClone) => {\n      const cloneCss = (prev, clone) => {\n        copy$1(prev.element, clone);\n        remove$5(clone, 'height');\n        if (prev.colspan !== 1) {\n          remove$5(clone, 'width');\n        }\n      };\n      const newCell = prev => {\n        const td = SugarElement.fromTag(name(prev.element), doc.dom);\n        const formats = formatsToClone.getOr([\n          'strong',\n          'em',\n          'b',\n          'i',\n          'span',\n          'font',\n          'h1',\n          'h2',\n          'h3',\n          'h4',\n          'h5',\n          'h6',\n          'p',\n          'div'\n        ]);\n        const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n        append$1(lastNode, SugarElement.fromTag('br'));\n        cloneCss(prev, td);\n        cloneAppropriateAttributes(prev.element, td);\n        mutate(prev.element, td);\n        return td;\n      };\n      const newCol = prev => {\n        const col = SugarElement.fromTag(name(prev.element), doc.dom);\n        cloneCss(prev, col);\n        mutate(prev.element, col);\n        return col;\n      };\n      return {\n        col: newCol,\n        colgroup: createColgroup(doc),\n        row: createRow$1(doc),\n        cell: newCell,\n        replace: replace$1,\n        colGap: createCol(doc),\n        gap: createCell(doc)\n      };\n    };\n    const paste$1 = doc => {\n      return {\n        col: createCol(doc),\n        colgroup: createColgroup(doc),\n        row: createRow$1(doc),\n        cell: createCell(doc),\n        replace: pasteReplace,\n        colGap: createCol(doc),\n        gap: createCell(doc)\n      };\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      return children$2(SugarElement.fromDom(div));\n    };\n    const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n    const option = name => editor => editor.options.get(name);\n    const defaultWidth = '100%';\n    const getPixelForcedWidth = editor => {\n      var _a;\n      const dom = editor.dom;\n      const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n      return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n    };\n    const determineDefaultTableStyles = (editor, defaultStyles) => {\n      if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n        return defaultStyles;\n      } else if (isTablePixelsForced(editor)) {\n        return {\n          ...defaultStyles,\n          width: getPixelForcedWidth(editor)\n        };\n      } else {\n        return {\n          ...defaultStyles,\n          width: defaultWidth\n        };\n      }\n    };\n    const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n      if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n        return defaultAttributes;\n      } else if (isTablePixelsForced(editor)) {\n        return {\n          ...defaultAttributes,\n          width: getPixelForcedWidth(editor)\n        };\n      } else {\n        return {\n          ...defaultAttributes,\n          width: defaultWidth\n        };\n      }\n    };\n    const register = editor => {\n      const registerOption = editor.options.register;\n      registerOption('table_clone_elements', { processor: 'string[]' });\n      registerOption('table_use_colgroups', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_header_type', {\n        processor: value => {\n          const valid = contains$2([\n            'section',\n            'cells',\n            'sectionCells',\n            'auto'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: section, cells, sectionCells or auto.'\n          };\n        },\n        default: 'section'\n      });\n      registerOption('table_sizing_mode', {\n        processor: 'string',\n        default: 'auto'\n      });\n      registerOption('table_default_attributes', {\n        processor: 'object',\n        default: { border: '1' }\n      });\n      registerOption('table_default_styles', {\n        processor: 'object',\n        default: { 'border-collapse': 'collapse' }\n      });\n      registerOption('table_column_resizing', {\n        processor: value => {\n          const valid = contains$2([\n            'preservetable',\n            'resizetable'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be preservetable, or resizetable.'\n          };\n        },\n        default: 'preservetable'\n      });\n      registerOption('table_resize_bars', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_style_by_css', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_merge_content_on_paste', {\n        processor: 'boolean',\n        default: true\n      });\n    };\n    const getTableCloneElements = editor => {\n      return Optional.from(editor.options.get('table_clone_elements'));\n    };\n    const hasTableObjectResizing = editor => {\n      const objectResizing = editor.options.get('object_resizing');\n      return contains$2(objectResizing.split(','), 'table');\n    };\n    const getTableHeaderType = option('table_header_type');\n    const getTableColumnResizingBehaviour = option('table_column_resizing');\n    const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n    const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n    const getTableSizingMode = option('table_sizing_mode');\n    const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n    const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n    const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n    const hasTableResizeBars = option('table_resize_bars');\n    const shouldStyleWithCss = option('table_style_by_css');\n    const shouldMergeContentOnPaste = option('table_merge_content_on_paste');\n    const getTableDefaultAttributes = editor => {\n      const options = editor.options;\n      const defaultAttributes = options.get('table_default_attributes');\n      return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n    };\n    const getTableDefaultStyles = editor => {\n      const options = editor.options;\n      const defaultStyles = options.get('table_default_styles');\n      return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n    };\n    const tableUseColumnGroup = option('table_use_colgroups');\n\n    const closest = target => closest$1(target, '[contenteditable]');\n    const isEditable$1 = (element, assumeEditable = false) => {\n      if (inBody(element)) {\n        return element.dom.isContentEditable;\n      } else {\n        return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n      }\n    };\n    const getRaw = element => element.dom.contentEditable;\n\n    const getBody = editor => SugarElement.fromDom(editor.getBody());\n    const getIsRoot = editor => element => eq$1(element, getBody(editor));\n    const removeDataStyle = table => {\n      remove$7(table, 'data-mce-style');\n      const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n      each$2(cells$1(table), removeStyleAttribute);\n      each$2(columns$1(table), removeStyleAttribute);\n      each$2(rows$1(table), removeStyleAttribute);\n    };\n    const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n    const getPixelWidth = elm => elm.getBoundingClientRect().width;\n    const getPixelHeight = elm => elm.getBoundingClientRect().height;\n    const getRawWidth = (editor, elm) => {\n      const raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n      return Optional.from(raw).filter(isNotEmpty);\n    };\n    const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n    const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n    const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);\n\n    const inSelection = (bounds, detail) => {\n      const leftEdge = detail.column;\n      const rightEdge = detail.column + detail.colspan - 1;\n      const topEdge = detail.row;\n      const bottomEdge = detail.row + detail.rowspan - 1;\n      return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n    };\n    const isWithin = (bounds, detail) => {\n      return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n    };\n    const isRectangular = (warehouse, bounds) => {\n      let isRect = true;\n      const detailIsWithin = curry(isWithin, bounds);\n      for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n        for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n          isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n        }\n      }\n      return isRect ? Optional.some(bounds) : Optional.none();\n    };\n\n    const getBounds = (detailA, detailB) => {\n      return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n    };\n    const getAnyBox = (warehouse, startCell, finishCell) => {\n      const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n      const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n      return startCoords.bind(sc => {\n        return finishCoords.map(fc => {\n          return getBounds(sc, fc);\n        });\n      });\n    };\n    const getBox$1 = (warehouse, startCell, finishCell) => {\n      return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n        return isRectangular(warehouse, bounds);\n      });\n    };\n\n    const moveBy$1 = (warehouse, cell, row, column) => {\n      return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n        const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n        const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n        const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n        return dest.map(d => {\n          return d.element;\n        });\n      });\n    };\n    const intercepts$1 = (warehouse, start, finish) => {\n      return getAnyBox(warehouse, start, finish).map(bounds => {\n        const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n        return map$1(inside, detail => {\n          return detail.element;\n        });\n      });\n    };\n    const parentCell = (warehouse, innerCell) => {\n      const isContainedBy = (c1, c2) => {\n        return contains$1(c2, c1);\n      };\n      return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n        return detail.element;\n      });\n    };\n\n    const moveBy = (cell, deltaRow, deltaColumn) => {\n      return table(cell).bind(table => {\n        const warehouse = getWarehouse(table);\n        return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n      });\n    };\n    const intercepts = (table, first, last) => {\n      const warehouse = getWarehouse(table);\n      return intercepts$1(warehouse, first, last);\n    };\n    const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n      const warehouse = getWarehouse(table);\n      const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n      const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n      return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n    };\n    const getBox = (table, first, last) => {\n      const warehouse = getWarehouse(table);\n      return getBox$1(warehouse, first, last);\n    };\n    const getWarehouse = Warehouse.fromTable;\n\n    var TagBoundaries = [\n      'body',\n      'p',\n      'div',\n      'article',\n      'aside',\n      'figcaption',\n      'figure',\n      'footer',\n      'header',\n      'nav',\n      'section',\n      'ol',\n      'ul',\n      'li',\n      'table',\n      'thead',\n      'tbody',\n      'tfoot',\n      'caption',\n      'tr',\n      'td',\n      'th',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'blockquote',\n      'pre',\n      'address'\n    ];\n\n    var DomUniverse = () => {\n      const clone = element => {\n        return SugarElement.fromDom(element.dom.cloneNode(false));\n      };\n      const document = element => documentOrOwner(element).dom;\n      const isBoundary = element => {\n        if (!isElement(element)) {\n          return false;\n        }\n        if (name(element) === 'body') {\n          return true;\n        }\n        return contains$2(TagBoundaries, name(element));\n      };\n      const isEmptyTag = element => {\n        if (!isElement(element)) {\n          return false;\n        }\n        return contains$2([\n          'br',\n          'img',\n          'hr',\n          'input'\n        ], name(element));\n      };\n      const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n      const comparePosition = (element, other) => {\n        return element.dom.compareDocumentPosition(other.dom);\n      };\n      const copyAttributesTo = (source, destination) => {\n        const as = clone$2(source);\n        setAll$1(destination, as);\n      };\n      const isSpecial = element => {\n        const tag = name(element);\n        return contains$2([\n          'script',\n          'noscript',\n          'iframe',\n          'noframes',\n          'noembed',\n          'title',\n          'style',\n          'textarea',\n          'xmp'\n        ], tag);\n      };\n      const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n      return {\n        up: constant({\n          selector: ancestor$1,\n          closest: closest$1,\n          predicate: ancestor$2,\n          all: parents\n        }),\n        down: constant({\n          selector: descendants,\n          predicate: descendants$1\n        }),\n        styles: constant({\n          get: get$a,\n          getRaw: getRaw$2,\n          set: set$1,\n          remove: remove$5\n        }),\n        attrs: constant({\n          get: get$b,\n          set: set$2,\n          remove: remove$7,\n          copyTo: copyAttributesTo\n        }),\n        insert: constant({\n          before: before$3,\n          after: after$5,\n          afterAll: after$4,\n          append: append$1,\n          appendAll: append,\n          prepend: prepend,\n          wrap: wrap\n        }),\n        remove: constant({\n          unwrap: unwrap,\n          remove: remove$6\n        }),\n        create: constant({\n          nu: SugarElement.fromTag,\n          clone,\n          text: SugarElement.fromText\n        }),\n        query: constant({\n          comparePosition,\n          prevSibling: prevSibling,\n          nextSibling: nextSibling\n        }),\n        property: constant({\n          children: children$2,\n          name: name,\n          parent: parent,\n          document,\n          isText: isText,\n          isComment: isComment,\n          isElement: isElement,\n          isSpecial,\n          getLanguage,\n          getText: get$6,\n          setText: set,\n          isBoundary,\n          isEmptyTag,\n          isNonEditable\n        }),\n        eq: eq$1,\n        is: is$1\n      };\n    };\n\n    const all = (universe, look, elements, f) => {\n      const head = elements[0];\n      const tail = elements.slice(1);\n      return f(universe, look, head, tail);\n    };\n    const oneAll = (universe, look, elements) => {\n      return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n    };\n    const unsafeOne = (universe, look, head, tail) => {\n      const start = look(universe, head);\n      return foldr(tail, (b, a) => {\n        const current = look(universe, a);\n        return commonElement(universe, b, current);\n      }, start);\n    };\n    const commonElement = (universe, start, end) => {\n      return start.bind(s => {\n        return end.filter(curry(universe.eq, s));\n      });\n    };\n\n    const eq = (universe, item) => {\n      return curry(universe.eq, item);\n    };\n    const ancestors$2 = (universe, start, end, isRoot = never) => {\n      const ps1 = [start].concat(universe.up().all(start));\n      const ps2 = [end].concat(universe.up().all(end));\n      const prune = path => {\n        const index = findIndex(path, isRoot);\n        return index.fold(() => {\n          return path;\n        }, ind => {\n          return path.slice(0, ind + 1);\n        });\n      };\n      const pruned1 = prune(ps1);\n      const pruned2 = prune(ps2);\n      const shared = find$1(pruned1, x => {\n        return exists(pruned2, eq(universe, x));\n      });\n      return {\n        firstpath: pruned1,\n        secondpath: pruned2,\n        shared\n      };\n    };\n\n    const sharedOne$1 = oneAll;\n    const ancestors$1 = ancestors$2;\n\n    const universe$3 = DomUniverse();\n    const sharedOne = (look, elements) => {\n      return sharedOne$1(universe$3, (_universe, element) => {\n        return look(element);\n      }, elements);\n    };\n    const ancestors = (start, finish, isRoot) => {\n      return ancestors$1(universe$3, start, finish, isRoot);\n    };\n\n    const lookupTable = container => {\n      return ancestor$1(container, 'table');\n    };\n    const identify = (start, finish, isRoot) => {\n      const getIsRoot = rootTable => {\n        return element => {\n          return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n        };\n      };\n      if (eq$1(start, finish)) {\n        return Optional.some({\n          boxes: Optional.some([start]),\n          start,\n          finish\n        });\n      } else {\n        return lookupTable(start).bind(startTable => {\n          return lookupTable(finish).bind(finishTable => {\n            if (eq$1(startTable, finishTable)) {\n              return Optional.some({\n                boxes: intercepts(startTable, start, finish),\n                start,\n                finish\n              });\n            } else if (contains$1(startTable, finishTable)) {\n              const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n              const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n              return Optional.some({\n                boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n                start,\n                finish: finishCell\n              });\n            } else if (contains$1(finishTable, startTable)) {\n              const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n              const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n              return Optional.some({\n                boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n                start,\n                finish: startCell\n              });\n            } else {\n              return ancestors(start, finish).shared.bind(lca => {\n                return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n                  const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n                  const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n                  const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n                  const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n                  return Optional.some({\n                    boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n                    start: startCell,\n                    finish: finishCell\n                  });\n                });\n              });\n            }\n          });\n        });\n      }\n    };\n    const retrieve$1 = (container, selector) => {\n      const sels = descendants(container, selector);\n      return sels.length > 0 ? Optional.some(sels) : Optional.none();\n    };\n    const getLast = (boxes, lastSelectedSelector) => {\n      return find$1(boxes, box => {\n        return is$2(box, lastSelectedSelector);\n      });\n    };\n    const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n      return descendant(container, firstSelectedSelector).bind(first => {\n        return descendant(container, lastSelectedSelector).bind(last => {\n          return sharedOne(lookupTable, [\n            first,\n            last\n          ]).map(table => {\n            return {\n              first,\n              last,\n              table\n            };\n          });\n        });\n      });\n    };\n    const expandTo = (finish, firstSelectedSelector) => {\n      return ancestor$1(finish, 'table').bind(table => {\n        return descendant(table, firstSelectedSelector).bind(start => {\n          return identify(start, finish).bind(identified => {\n            return identified.boxes.map(boxes => {\n              return {\n                boxes,\n                start: identified.start,\n                finish: identified.finish\n              };\n            });\n          });\n        });\n      });\n    };\n    const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n      return getLast(boxes, lastSelectedSelector).bind(last => {\n        return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n          return expandTo(finish, firstSelectedSelector);\n        });\n      });\n    };\n\n    const retrieve = (container, selector) => {\n      return retrieve$1(container, selector);\n    };\n    const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n      return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n        const isRoot = ancestor => {\n          return eq$1(container, ancestor);\n        };\n        const sectionSelector = 'thead,tfoot,tbody,table';\n        const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n        const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n        return firstAncestor.bind(fA => {\n          return lastAncestor.bind(lA => {\n            return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n          });\n        });\n      });\n    };\n\n    const selection = identity;\n    const unmergable = selectedCells => {\n      const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n      const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n      return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n    };\n    const mergable = (table, selectedCells, ephemera) => {\n      if (selectedCells.length <= 1) {\n        return Optional.none();\n      } else {\n        return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n          bounds,\n          cells: selectedCells\n        }));\n      }\n    };\n\n    const strSelected = 'data-mce-selected';\n    const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n    const strAttributeSelector = '[' + strSelected + ']';\n    const strFirstSelected = 'data-mce-first-selected';\n    const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n    const strLastSelected = 'data-mce-last-selected';\n    const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n    const attributeSelector = strAttributeSelector;\n    const ephemera = {\n      selected: strSelected,\n      selectedSelector: strSelectedSelector,\n      firstSelected: strFirstSelected,\n      firstSelectedSelector: strFirstSelectedSelector,\n      lastSelected: strLastSelected,\n      lastSelectedSelector: strLastSelectedSelector\n    };\n\n    const forMenu = (selectedCells, table, cell) => ({\n      element: cell,\n      mergable: mergable(table, selectedCells, ephemera),\n      unmergable: unmergable(selectedCells),\n      selection: selection(selectedCells)\n    });\n    const paste = (element, clipboard, generators) => ({\n      element,\n      clipboard,\n      generators\n    });\n    const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n      selection: selection(selectedCells),\n      clipboard,\n      generators\n    });\n\n    const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n    const getSelectionFromSelector = selector => (initCell, isRoot) => {\n      const cellName = name(initCell);\n      const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n      return closest$1(cell, selector, isRoot);\n    };\n    const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n    const getSelectionCell = getSelectionFromSelector('th,td');\n    const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n    const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n    const extractSelected = cells => {\n      return table(cells[0]).map(table => {\n        const replica = extract$1(table, attributeSelector);\n        removeDataStyle(replica);\n        return [replica];\n      });\n    };\n    const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n    const getTextContent = elements => map$1(elements, element => element.dom.innerText).join('');\n    const registerEvents = (editor, actions) => {\n      editor.on('BeforeGetContent', e => {\n        const multiCellContext = cells => {\n          e.preventDefault();\n          extractSelected(cells).each(elements => {\n            e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n          });\n        };\n        if (e.selection === true) {\n          const cells = getCellsFromFakeSelection(editor);\n          if (cells.length >= 1) {\n            multiCellContext(cells);\n          }\n        }\n      });\n      editor.on('BeforeSetContent', e => {\n        if (e.selection === true && e.paste === true) {\n          const selectedCells = getCellsFromSelection(editor);\n          head(selectedCells).each(cell => {\n            table(cell).each(table => {\n              const elements = filter$2(fromHtml(e.content), content => {\n                return name(content) !== 'meta';\n              });\n              const isTable = isTag('table');\n              if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {\n                e.preventDefault();\n                const doc = SugarElement.fromDom(editor.getDoc());\n                const generators = paste$1(doc);\n                const targets = paste(cell, elements[0], generators);\n                actions.pasteCells(table, targets).each(() => {\n                  editor.focus();\n                });\n              }\n            });\n          });\n        }\n      });\n    };\n\n    const point = (element, offset) => ({\n      element,\n      offset\n    });\n\n    const scan$1 = (universe, element, direction) => {\n      if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n        return direction(element).bind(elem => {\n          return scan$1(universe, elem, direction).orThunk(() => {\n            return Optional.some(elem);\n          });\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const toEnd = (universe, element) => {\n      if (universe.property().isText(element)) {\n        return universe.property().getText(element).length;\n      }\n      const children = universe.property().children(element);\n      return children.length;\n    };\n    const freefallRtl$2 = (universe, element) => {\n      const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n      if (universe.property().isText(candidate)) {\n        return point(candidate, toEnd(universe, candidate));\n      }\n      const children = universe.property().children(candidate);\n      return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n    };\n\n    const freefallRtl$1 = freefallRtl$2;\n\n    const universe$2 = DomUniverse();\n    const freefallRtl = element => {\n      return freefallRtl$1(universe$2, element);\n    };\n\n    const halve = (main, other) => {\n      if (!hasColspan(main)) {\n        const width = getGenericWidth(main);\n        width.each(w => {\n          const newWidth = w.value / 2;\n          setGenericWidth(main, newWidth, w.unit);\n          setGenericWidth(other, newWidth, w.unit);\n        });\n      }\n    };\n\n    const zero = array => map$1(array, constant(0));\n    const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n    const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n      if (!predicate(delta)) {\n        return delta;\n      } else {\n        const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n        const diff = Math.abs(newSize - sizes[index]);\n        return delta >= 0 ? diff : -diff;\n      }\n    };\n    const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n    const clampDelta = clampDeltaHelper(always);\n    const resizeTable = () => {\n      const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n        const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n        return surround(sizes, index, next + 1, [\n          clampedDelta,\n          0\n        ], zero);\n      };\n      const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n        const ratio = (100 + delta) / 100;\n        const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n        return map$1(sizes, (size, idx) => {\n          const newSize = idx === index ? newThis : size / ratio;\n          return newSize - size;\n        });\n      };\n      const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n        if (isRelative) {\n          return calcRelativeDeltas(sizes, index, delta, minCellSize);\n        } else {\n          return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n        }\n      };\n      const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n      const resizeTable = (resizer, delta) => resizer(delta);\n      const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n        if (isRelative) {\n          return calcRelativeDeltas(sizes, index, delta, minCellSize);\n        } else {\n          const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n          return zero(sizes.slice(0, index)).concat([clampedDelta]);\n        }\n      };\n      const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n        if (isRelative) {\n          const tableWidth = totalWidth + pixelDelta;\n          const ratio = tableWidth / totalWidth;\n          const newSizes = map$1(sizes, size => size / ratio);\n          return {\n            delta: ratio * 100 - 100,\n            newSizes\n          };\n        } else {\n          return {\n            delta: pixelDelta,\n            newSizes: sizes\n          };\n        }\n      };\n      return {\n        resizeTable,\n        clampTableDelta: clampNegativeDelta,\n        calcLeftEdgeDeltas,\n        calcMiddleDeltas,\n        calcRightEdgeDeltas,\n        calcRedestributedWidths\n      };\n    };\n    const preserveTable = () => {\n      const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n        const idx = delta >= 0 ? next : index;\n        const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n        return surround(sizes, index, next + 1, [\n          clampedDelta,\n          -clampedDelta\n        ], zero);\n      };\n      const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n      const resizeTable = (resizer, delta, isLastColumn) => {\n        if (isLastColumn) {\n          resizer(delta);\n        }\n      };\n      const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n        if (isRelative) {\n          return zero(sizes);\n        } else {\n          const diff = delta / sizes.length;\n          return map$1(sizes, constant(diff));\n        }\n      };\n      const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n        if (isLastColumn) {\n          if (delta >= 0) {\n            return delta;\n          } else {\n            const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n            return Math.max(-maxDelta, delta);\n          }\n        } else {\n          return clampNegativeDelta(sizes, index, delta, minCellSize);\n        }\n      };\n      const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n        delta: 0,\n        newSizes: sizes\n      });\n      return {\n        resizeTable,\n        clampTableDelta,\n        calcLeftEdgeDeltas,\n        calcMiddleDeltas,\n        calcRightEdgeDeltas,\n        calcRedestributedWidths\n      };\n    };\n\n    const getGridSize = table => {\n      const warehouse = Warehouse.fromTable(table);\n      return warehouse.grid;\n    };\n\n    const isHeaderCell = isTag('th');\n    const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n    const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n      if (isHeaderRow && isHeaderCells) {\n        return 'sectionCells';\n      } else if (isHeaderRow) {\n        return 'section';\n      } else {\n        return 'cells';\n      }\n    };\n    const getRowType = row => {\n      const isHeaderRow = row.section === 'thead';\n      const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n      if (row.section === 'tfoot') {\n        return { type: 'footer' };\n      } else if (isHeaderRow || isHeaderCells) {\n        return {\n          type: 'header',\n          subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n        };\n      } else {\n        return { type: 'body' };\n      }\n    };\n    const findCommonCellType = cells => {\n      const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n      if (headerCells.length === 0) {\n        return Optional.some('td');\n      } else if (headerCells.length === cells.length) {\n        return Optional.some('th');\n      } else {\n        return Optional.none();\n      }\n    };\n    const findCommonRowType = rows => {\n      const rowTypes = map$1(rows, row => getRowType(row).type);\n      const hasHeader = contains$2(rowTypes, 'header');\n      const hasFooter = contains$2(rowTypes, 'footer');\n      if (!hasHeader && !hasFooter) {\n        return Optional.some('body');\n      } else {\n        const hasBody = contains$2(rowTypes, 'body');\n        if (hasHeader && !hasBody && !hasFooter) {\n          return Optional.some('header');\n        } else if (!hasHeader && !hasBody && hasFooter) {\n          return Optional.some('footer');\n        } else {\n          return Optional.none();\n        }\n      }\n    };\n    const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n      const rowType = getRowType(row);\n      return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n    });\n\n    const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n    const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n    const section = () => ({\n      transformRow,\n      transformCell: (cell, comparator, substitution) => {\n        const newCell = substitution(cell.element, comparator);\n        const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n        return elementnew(fixedCell, cell.isNew, cell.isLocked);\n      }\n    });\n    const sectionCells = () => ({\n      transformRow,\n      transformCell\n    });\n    const cells = () => ({\n      transformRow: (row, section) => {\n        const newSection = section === 'thead' ? 'tbody' : section;\n        return transformRow(row, newSection);\n      },\n      transformCell\n    });\n    const fallback = () => ({\n      transformRow: identity,\n      transformCell\n    });\n    const getTableSectionType = (table, fallback) => {\n      const warehouse = Warehouse.fromTable(table);\n      const type = findTableRowHeaderType(warehouse).getOr(fallback);\n      switch (type) {\n      case 'section':\n        return section();\n      case 'sectionCells':\n        return sectionCells();\n      case 'cells':\n        return cells();\n      }\n    };\n    const TableSection = {\n      getTableSectionType,\n      section,\n      sectionCells,\n      cells,\n      fallback\n    };\n\n    const setIfNot = (element, property, value, ignore) => {\n      if (value === ignore) {\n        remove$7(element, property);\n      } else {\n        set$2(element, property, value);\n      }\n    };\n    const insert$1 = (table, selector, element) => {\n      last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n    };\n    const generateSection = (table, sectionName) => {\n      const section = child(table, sectionName).getOrThunk(() => {\n        const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n        if (sectionName === 'thead') {\n          insert$1(table, 'caption,colgroup', newSection);\n        } else if (sectionName === 'colgroup') {\n          insert$1(table, 'caption', newSection);\n        } else {\n          append$1(table, newSection);\n        }\n        return newSection;\n      });\n      empty(section);\n      return section;\n    };\n    const render$1 = (table, grid) => {\n      const newRows = [];\n      const newCells = [];\n      const syncRows = gridSection => map$1(gridSection, row => {\n        if (row.isNew) {\n          newRows.push(row.element);\n        }\n        const tr = row.element;\n        empty(tr);\n        each$2(row.cells, cell => {\n          if (cell.isNew) {\n            newCells.push(cell.element);\n          }\n          setIfNot(cell.element, 'colspan', cell.colspan, 1);\n          setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n          append$1(tr, cell.element);\n        });\n        return tr;\n      });\n      const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n        setIfNot(col.element, 'span', col.colspan, 1);\n        return col.element;\n      }));\n      const renderSection = (gridSection, sectionName) => {\n        const section = generateSection(table, sectionName);\n        const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n        const sectionElems = sync(gridSection);\n        append(section, sectionElems);\n      };\n      const removeSection = sectionName => {\n        child(table, sectionName).each(remove$6);\n      };\n      const renderOrRemoveSection = (gridSection, sectionName) => {\n        if (gridSection.length > 0) {\n          renderSection(gridSection, sectionName);\n        } else {\n          removeSection(sectionName);\n        }\n      };\n      const headSection = [];\n      const bodySection = [];\n      const footSection = [];\n      const columnGroupsSection = [];\n      each$2(grid, row => {\n        switch (row.section) {\n        case 'thead':\n          headSection.push(row);\n          break;\n        case 'tbody':\n          bodySection.push(row);\n          break;\n        case 'tfoot':\n          footSection.push(row);\n          break;\n        case 'colgroup':\n          columnGroupsSection.push(row);\n          break;\n        }\n      });\n      renderOrRemoveSection(columnGroupsSection, 'colgroup');\n      renderOrRemoveSection(headSection, 'thead');\n      renderOrRemoveSection(bodySection, 'tbody');\n      renderOrRemoveSection(footSection, 'tfoot');\n      return {\n        newRows,\n        newCells\n      };\n    };\n    const copy = grid => map$1(grid, row => {\n      const tr = shallow(row.element);\n      each$2(row.cells, cell => {\n        const clonedCell = deep(cell.element);\n        setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n        setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n        append$1(tr, clonedCell);\n      });\n      return tr;\n    });\n\n    const getColumn = (grid, index) => {\n      return map$1(grid, row => {\n        return getCell(row, index);\n      });\n    };\n    const getRow = (grid, index) => {\n      return grid[index];\n    };\n    const findDiff = (xs, comp) => {\n      if (xs.length === 0) {\n        return 0;\n      }\n      const first = xs[0];\n      const index = findIndex(xs, x => {\n        return !comp(first.element, x.element);\n      });\n      return index.getOr(xs.length);\n    };\n    const subgrid = (grid, row, column, comparator) => {\n      const gridRow = getRow(grid, row);\n      const isColRow = gridRow.section === 'colgroup';\n      const colspan = findDiff(gridRow.cells.slice(column), comparator);\n      const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n      return {\n        colspan,\n        rowspan\n      };\n    };\n\n    const toDetails = (grid, comparator) => {\n      const seen = map$1(grid, row => map$1(row.cells, never));\n      const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n        for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n          for (let column = columnIndex; column < columnIndex + colspan; column++) {\n            seen[row][column] = true;\n          }\n        }\n      };\n      return map$1(grid, (row, rowIndex) => {\n        const details = bind$2(row.cells, (cell, columnIndex) => {\n          if (seen[rowIndex][columnIndex] === false) {\n            const result = subgrid(grid, rowIndex, columnIndex, comparator);\n            updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n            return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n          } else {\n            return [];\n          }\n        });\n        return rowdetailnew(row.element, details, row.section, row.isNew);\n      });\n    };\n    const toGrid = (warehouse, generators, isNew) => {\n      const grid = [];\n      each$2(warehouse.colgroups, colgroup => {\n        const colgroupCols = [];\n        for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n          const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n          colgroupCols.push(element);\n        }\n        grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n      });\n      for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n        const rowCells = [];\n        for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n          const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n          rowCells.push(element);\n        }\n        const rowDetail = warehouse.all[rowIndex];\n        const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n        grid.push(row);\n      }\n      return grid;\n    };\n\n    const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n    const toDetailList = grid => toDetails(grid, eq$1);\n    const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n    const extractCells = (warehouse, target, predicate) => {\n      const details = map$1(target.selection, cell$1 => {\n        return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n      });\n      const cells = cat(details);\n      return someIf(cells.length > 0, cells);\n    };\n    const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n      const warehouse = Warehouse.fromTable(table);\n      const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n      const output = extract(warehouse, target).map(info => {\n        const model = fromWarehouse(warehouse, generators);\n        const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n        const lockedColumns = getLockedColumnsFromGrid(result.grid);\n        const grid = toDetailList(result.grid);\n        return {\n          info,\n          grid,\n          cursor: result.cursor,\n          lockedColumns\n        };\n      });\n      return output.bind(out => {\n        const newElements = render$1(table, out.grid);\n        const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n        const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n        adjustment(table, out.grid, out.info, {\n          sizing: tableSizing,\n          resize: resizing,\n          section: tableSection\n        });\n        postAction(table);\n        remove$7(table, LOCKED_COL_ATTR);\n        if (out.lockedColumns.length > 0) {\n          set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n        }\n        return Optional.some({\n          cursor: out.cursor,\n          newRows: newElements.newRows,\n          newCells: newElements.newCells\n        });\n      });\n    };\n    const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n      const value = {\n        ...details,\n        generators: target.generators,\n        clipboard: target.clipboard\n      };\n      return value;\n    }));\n    const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n      cells,\n      generators: target.generators,\n      clipboard: target.clipboard\n    }));\n    const onMergable = (_warehouse, target) => target.mergable;\n    const onUnmergable = (_warehouse, target) => target.unmergable;\n    const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n    const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n    const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n    const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n    const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n    const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n    const merge$2 = (grid, bounds, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      if (rows.length === 0) {\n        return grid;\n      }\n      for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n        for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n          const row = rows[i];\n          const isLocked = getCell(row, j).isLocked;\n          mutateCell(row, j, elementnew(substitution(), false, isLocked));\n        }\n      }\n      return grid;\n    };\n    const unmerge = (grid, target, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      let first = true;\n      for (let i = 0; i < rows.length; i++) {\n        for (let j = 0; j < cellLength(rows[0]); j++) {\n          const row = rows[i];\n          const currentCell = getCell(row, j);\n          const currentCellElm = currentCell.element;\n          const isToReplace = comparator(currentCellElm, target);\n          if (isToReplace && !first) {\n            mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n          } else if (isToReplace) {\n            first = false;\n          }\n        }\n      }\n      return grid;\n    };\n    const uniqueCells = (row, comparator) => {\n      return foldl(row, (rest, cell) => {\n        return exists(rest, currentCell => {\n          return comparator(currentCell.element, cell.element);\n        }) ? rest : rest.concat([cell]);\n      }, []);\n    };\n    const splitCols = (grid, index, comparator, substitution) => {\n      if (index > 0 && index < grid[0].cells.length) {\n        each$2(grid, row => {\n          const prevCell = row.cells[index - 1];\n          let offset = 0;\n          const substitute = substitution();\n          while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n            mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n            offset++;\n          }\n        });\n      }\n      return grid;\n    };\n    const splitRows = (grid, index, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      if (index > 0 && index < rows.length) {\n        const rowPrevCells = rows[index - 1].cells;\n        const cells = uniqueCells(rowPrevCells, comparator);\n        each$2(cells, cell => {\n          let replacement = Optional.none();\n          for (let i = index; i < rows.length; i++) {\n            for (let j = 0; j < cellLength(rows[0]); j++) {\n              const row = rows[i];\n              const current = getCell(row, j);\n              const isToReplace = comparator(current.element, cell.element);\n              if (isToReplace) {\n                if (replacement.isNone()) {\n                  replacement = Optional.some(substitution());\n                }\n                replacement.each(sub => {\n                  mutateCell(row, j, elementnew(sub, true, current.isLocked));\n                });\n              }\n            }\n          }\n        });\n      }\n      return grid;\n    };\n\n    const value$1 = value => {\n      const applyHelper = fn => fn(value);\n      const constHelper = constant(value);\n      const outputHelper = () => output;\n      const output = {\n        tag: true,\n        inner: value,\n        fold: (_onError, onValue) => onValue(value),\n        isValue: always,\n        isError: never,\n        map: mapper => Result.value(mapper(value)),\n        mapError: outputHelper,\n        bind: applyHelper,\n        exists: applyHelper,\n        forall: applyHelper,\n        getOr: constHelper,\n        or: outputHelper,\n        getOrThunk: constHelper,\n        orThunk: outputHelper,\n        getOrDie: constHelper,\n        each: fn => {\n          fn(value);\n        },\n        toOptional: () => Optional.some(value)\n      };\n      return output;\n    };\n    const error = error => {\n      const outputHelper = () => output;\n      const output = {\n        tag: false,\n        inner: error,\n        fold: (onError, _onValue) => onError(error),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: mapper => Result.error(mapper(error)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity,\n        or: identity,\n        getOrThunk: apply,\n        orThunk: apply,\n        getOrDie: die(String(error)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output;\n    };\n    const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n    const Result = {\n      value: value$1,\n      error,\n      fromOption\n    };\n\n    const measure = (startAddress, gridA, gridB) => {\n      if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n        return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n      }\n      const rowRemainder = gridA.slice(startAddress.row);\n      const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n      const colRequired = cellLength(gridB[0]);\n      const rowRequired = gridB.length;\n      return Result.value({\n        rowDelta: rowRemainder.length - rowRequired,\n        colDelta: colRemainder.length - colRequired\n      });\n    };\n    const measureWidth = (gridA, gridB) => {\n      const colLengthA = cellLength(gridA[0]);\n      const colLengthB = cellLength(gridB[0]);\n      return {\n        rowDelta: 0,\n        colDelta: colLengthA - colLengthB\n      };\n    };\n    const measureHeight = (gridA, gridB) => {\n      const rowLengthA = gridA.length;\n      const rowLengthB = gridB.length;\n      return {\n        rowDelta: rowLengthA - rowLengthB,\n        colDelta: 0\n      };\n    };\n    const generateElements = (amount, row, generators, isLocked) => {\n      const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n      return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n    };\n    const rowFill = (grid, amount, generators, lockedColumns) => {\n      const exampleRow = grid[grid.length - 1];\n      return grid.concat(range$1(amount, () => {\n        const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n        const row = clone(exampleRow, generator, identity);\n        const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n        return setCells(row, elements);\n      }));\n    };\n    const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n      const newChildren = generateElements(amount, row, generators, never);\n      return addCells(row, startIndex, newChildren);\n    });\n    const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n      return foldl(lockedColumns, (acc, colNum) => {\n        const newChild = generateElements(1, row, generators, always)[0];\n        return addCell(acc, colNum, newChild);\n      }, row);\n    });\n    const tailor = (gridA, delta, generators) => {\n      const fillCols = delta.colDelta < 0 ? colFill : identity;\n      const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n      const lockedColumns = getLockedColumnsFromGrid(gridA);\n      const gridWidth = cellLength(gridA[0]);\n      const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n      const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n      const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n      return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n    };\n\n    const isSpanning = (grid, row, col, comparator) => {\n      const candidate = getCell(grid[row], col);\n      const matching = curry(comparator, candidate.element);\n      const currentRow = grid[row];\n      return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n    };\n    const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n      const startRow = startAddress.row;\n      const startCol = startAddress.column;\n      const mergeHeight = gridBRows.length;\n      const mergeWidth = cellLength(gridBRows[0]);\n      const endRow = startRow + mergeHeight;\n      const endCol = startCol + mergeWidth + lockedColumns.length;\n      const lockedColumnObj = mapToObject(lockedColumns, always);\n      for (let r = startRow; r < endRow; r++) {\n        let skippedCol = 0;\n        for (let c = startCol; c < endCol; c++) {\n          if (lockedColumnObj[c]) {\n            skippedCol++;\n            continue;\n          }\n          if (isSpanning(gridA, r, c, comparator)) {\n            unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n          }\n          const gridBColIndex = c - startCol - skippedCol;\n          const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n          const newCellElm = newCell.element;\n          const replacement = generator.replace(newCellElm);\n          mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n        }\n      }\n      return gridA;\n    };\n    const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n      const gridColLength = cellLength(grid[0]);\n      const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n      const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n      const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n      return {\n        row: adjustedRowAddress,\n        column: validColAddress\n      };\n    };\n    const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n    const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n      const lockedColumns = getLockedColumnsFromGrid(gridA);\n      const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n      const gridBRows = extractGridDetails(gridB).rows;\n      const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n      const result = measure(validStartAddress, gridA, gridBRows);\n      return result.map(diff => {\n        const delta = {\n          ...diff,\n          colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n        };\n        const fittedGrid = tailor(gridA, delta, generator);\n        const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n        const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n        return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n      });\n    };\n    const insertCols = (index, gridA, gridB, generator, comparator) => {\n      splitCols(gridA, index, comparator, generator.cell);\n      const delta = measureHeight(gridB, gridA);\n      const fittedNewGrid = tailor(gridB, delta, generator);\n      const secondDelta = measureHeight(gridA, fittedNewGrid);\n      const fittedOldGrid = tailor(gridA, secondDelta, generator);\n      return map$1(fittedOldGrid, (gridRow, i) => {\n        return addCells(gridRow, index, fittedNewGrid[i].cells);\n      });\n    };\n    const insertRows = (index, gridA, gridB, generator, comparator) => {\n      splitRows(gridA, index, comparator, generator.cell);\n      const locked = getLockedColumnsFromGrid(gridA);\n      const diff = measureWidth(gridA, gridB);\n      const delta = {\n        ...diff,\n        colDelta: diff.colDelta - locked.length\n      };\n      const fittedOldGrid = tailor(gridA, delta, generator);\n      const {\n        cols: oldCols,\n        rows: oldRows\n      } = extractGridDetails(fittedOldGrid);\n      const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n      const secondDiff = measureWidth(gridB, gridA);\n      const secondDelta = {\n        ...secondDiff,\n        colDelta: secondDiff.colDelta + newLocked.length\n      };\n      const fittedGridB = lockedColFill(gridB, generator, newLocked);\n      const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n      return [\n        ...oldCols,\n        ...oldRows.slice(0, index),\n        ...fittedNewGrid,\n        ...oldRows.slice(index, oldRows.length)\n      ];\n    };\n\n    const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n    const insertRowAt = (grid, index, example, comparator, substitution) => {\n      const {rows, cols} = extractGridDetails(grid);\n      const before = rows.slice(0, index);\n      const after = rows.slice(index);\n      const newRow = cloneRow(rows[example], (ex, c) => {\n        const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n        const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n        return ret;\n      }, comparator, substitution);\n      return [\n        ...cols,\n        ...before,\n        newRow,\n        ...after\n      ];\n    };\n    const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n      if (section === 'colgroup' || !withinSpan) {\n        const cell = getCell(row, example);\n        return elementnew(substitution(cell.element, comparator), true, false);\n      } else {\n        return getCell(row, column);\n      }\n    };\n    const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n      const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n      const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n      return addCell(row, index, sub);\n    });\n    const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n      const existingCells = row.cells;\n      const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n      return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n    });\n    const deleteRowsAt = (grid, start, finish) => {\n      const {rows, cols} = extractGridDetails(grid);\n      return [\n        ...cols,\n        ...rows.slice(0, start),\n        ...rows.slice(finish + 1)\n      ];\n    };\n\n    const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n    const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n    const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n    const rowReplacerPredicate = (targetRow, columnHeaders) => {\n      const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n      return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n        const type = name(cell.element);\n        return !(type === 'th' && columnHeaders[colIndex]);\n      };\n    };\n    const columnReplacePredicate = (targetColumn, rowHeaders) => {\n      const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n      return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n        const type = name(cell.element);\n        return !(type === 'th' && rowHeaders[rowIndex]);\n      };\n    };\n    const determineScope = (applyScope, cell, newScope, isInHeader) => {\n      const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n      const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n      if (applyScope) {\n        return isHeaderCell(cell) ? getScope(newScope) : null;\n      } else if (isInHeader && isHeaderCell(cell)) {\n        const oppositeScope = newScope === 'row' ? 'col' : 'row';\n        return getScope(oppositeScope);\n      } else {\n        return null;\n      }\n    };\n    const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n    const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n    const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n    const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n      const isTarget = cell => {\n        return exists(targets, target => {\n          return comparator(cell.element, target.element);\n        });\n      };\n      return map$1(grid, (row, rowIndex) => {\n        return mapCells(row, (cell, colIndex) => {\n          if (isTarget(cell)) {\n            const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n            genScope(newCell, rowIndex, colIndex).each(scope => {\n              setOptions(newCell.element, { scope: Optional.from(scope) });\n            });\n            return newCell;\n          } else {\n            return cell;\n          }\n        });\n      });\n    };\n    const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n      return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n    });\n    const getRowCells = (rows, rowIndex, comparator) => {\n      const targetRow = rows[rowIndex];\n      return bind$2(targetRow.cells, (item, i) => {\n        return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n      });\n    };\n    const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n      const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n      const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n      const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n      return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n    };\n    const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n      const {cols, rows} = extractGridDetails(grid);\n      const targetRow = rows[indexes[0]];\n      const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n      const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n      const newRows = [...rows];\n      each$2(indexes, index => {\n        newRows[index] = tableSection.transformRow(rows[index], section);\n      });\n      const newGrid = [\n        ...cols,\n        ...newRows\n      ];\n      const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n      const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n      return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n    };\n    const replaceCells = (grid, details, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n      return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n    };\n\n    const generate = cases => {\n      if (!isArray(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      const constructors = [];\n      const adt = {};\n      each$2(cases, (acase, count) => {\n        const keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        const key = keys$1[0];\n        const value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          const match = branches => {\n            const branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            const allReqd = forall(constructors, reqKey => {\n              return contains$2(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: (...foldArgs) => {\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              const target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match,\n            log: label => {\n              console.log(label, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    const Adt = { generate };\n\n    const adt$6 = Adt.generate([\n      { none: [] },\n      { only: ['index'] },\n      {\n        left: [\n          'index',\n          'next'\n        ]\n      },\n      {\n        middle: [\n          'prev',\n          'index',\n          'next'\n        ]\n      },\n      {\n        right: [\n          'prev',\n          'index'\n        ]\n      }\n    ]);\n    const ColumnContext = { ...adt$6 };\n\n    const neighbours = (input, index) => {\n      if (input.length === 0) {\n        return ColumnContext.none();\n      }\n      if (input.length === 1) {\n        return ColumnContext.only(0);\n      }\n      if (index === 0) {\n        return ColumnContext.left(0, 1);\n      }\n      if (index === input.length - 1) {\n        return ColumnContext.right(index - 1, index);\n      }\n      if (index > 0 && index < input.length - 1) {\n        return ColumnContext.middle(index - 1, index, index + 1);\n      }\n      return ColumnContext.none();\n    };\n    const determine = (input, column, step, tableSize, resize) => {\n      const result = input.slice(0);\n      const context = neighbours(input, column);\n      const onNone = constant(map$1(result, constant(0)));\n      const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n      const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n      const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n      const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n      return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n    };\n\n    const total = (start, end, measures) => {\n      let r = 0;\n      for (let i = start; i < end; i++) {\n        r += measures[i] !== undefined ? measures[i] : 0;\n      }\n      return r;\n    };\n    const recalculateWidthForCells = (warehouse, widths) => {\n      const all = Warehouse.justCells(warehouse);\n      return map$1(all, cell => {\n        const width = total(cell.column, cell.column + cell.colspan, widths);\n        return {\n          element: cell.element,\n          width,\n          colspan: cell.colspan\n        };\n      });\n    };\n    const recalculateWidthForColumns = (warehouse, widths) => {\n      const groups = Warehouse.justColumns(warehouse);\n      return map$1(groups, (column, index) => ({\n        element: column.element,\n        width: widths[index],\n        colspan: column.colspan\n      }));\n    };\n    const recalculateHeightForCells = (warehouse, heights) => {\n      const all = Warehouse.justCells(warehouse);\n      return map$1(all, cell => {\n        const height = total(cell.row, cell.row + cell.rowspan, heights);\n        return {\n          element: cell.element,\n          height,\n          rowspan: cell.rowspan\n        };\n      });\n    };\n    const matchRowHeight = (warehouse, heights) => {\n      return map$1(warehouse.all, (row, i) => {\n        return {\n          element: row.element,\n          height: heights[i]\n        };\n      });\n    };\n\n    const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n    const recalculate = (warehouse, widths) => {\n      if (Warehouse.hasColumns(warehouse)) {\n        return recalculateWidthForColumns(warehouse, widths);\n      } else {\n        return recalculateWidthForCells(warehouse, widths);\n      }\n    };\n    const recalculateAndApply = (warehouse, widths, tableSize) => {\n      const newSizes = recalculate(warehouse, widths);\n      each$2(newSizes, cell => {\n        tableSize.setElementWidth(cell.element, cell.width);\n      });\n    };\n    const adjustWidth = (table, delta, index, resizing, tableSize) => {\n      const warehouse = Warehouse.fromTable(table);\n      const step = tableSize.getCellDelta(delta);\n      const widths = tableSize.getWidths(warehouse, tableSize);\n      const isLastColumn = index === warehouse.grid.columns - 1;\n      const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n      const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n      const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n      recalculateAndApply(warehouse, newWidths, tableSize);\n      resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n    };\n    const adjustHeight = (table, delta, index, direction) => {\n      const warehouse = Warehouse.fromTable(table);\n      const heights = getPixelHeights(warehouse, table, direction);\n      const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n      const newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n      const newRowSizes = matchRowHeight(warehouse, newHeights);\n      each$2(newRowSizes, row => {\n        setHeight(row.element, row.height);\n      });\n      each$2(newCellSizes, cell => {\n        setHeight(cell.element, cell.height);\n      });\n      const total = sumUp(newHeights);\n      setHeight(table, total);\n    };\n    const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n      const warehouse = Warehouse.generate(list);\n      const sizes = tableSize.getWidths(warehouse, tableSize);\n      const tablePixelWidth = tableSize.pixelWidth();\n      const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n      recalculateAndApply(warehouse, newSizes, tableSize);\n      tableSize.adjustTableWidth(delta);\n    };\n    const adjustWidthTo = (_table, list, _info, tableSize) => {\n      const warehouse = Warehouse.generate(list);\n      const widths = tableSize.getWidths(warehouse, tableSize);\n      recalculateAndApply(warehouse, widths, tableSize);\n    };\n\n    const uniqueColumns = details => {\n      const uniqueCheck = (rest, detail) => {\n        const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n        return columnExists ? rest : rest.concat([detail]);\n      };\n      return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n    };\n\n    const isCol = isTag('col');\n    const isColgroup = isTag('colgroup');\n    const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n    const elementToData = element => {\n      const colspan = getAttrValue(element, 'colspan', 1);\n      const rowspan = getAttrValue(element, 'rowspan', 1);\n      return {\n        element,\n        colspan,\n        rowspan\n      };\n    };\n    const modification = (generators, toData = elementToData) => {\n      const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n      const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n      const add = element => {\n        if (isRow$1(element)) {\n          return nuRow({ element });\n        } else {\n          const cell = element;\n          const replacement = nuCell(toData(cell));\n          recent = Optional.some({\n            item: cell,\n            replacement\n          });\n          return replacement;\n        }\n      };\n      let recent = Optional.none();\n      const getOrInit = (element, comparator) => {\n        return recent.fold(() => {\n          return add(element);\n        }, p => {\n          return comparator(element, p.item) ? p.replacement : add(element);\n        });\n      };\n      return { getOrInit };\n    };\n    const transform$1 = tag => {\n      return generators => {\n        const list = [];\n        const find = (element, comparator) => {\n          return find$1(list, x => {\n            return comparator(x.item, element);\n          });\n        };\n        const makeNew = element => {\n          const attrs = tag === 'td' ? { scope: null } : {};\n          const cell = generators.replace(element, tag, attrs);\n          list.push({\n            item: element,\n            sub: cell\n          });\n          return cell;\n        };\n        const replaceOrInit = (element, comparator) => {\n          if (isRow$1(element) || isCol(element)) {\n            return element;\n          } else {\n            const cell = element;\n            return find(cell, comparator).fold(() => {\n              return makeNew(cell);\n            }, p => {\n              return comparator(element, p.item) ? p.sub : makeNew(cell);\n            });\n          }\n        };\n        return { replaceOrInit };\n      };\n    };\n    const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n    const merging = generators => {\n      const unmerge = cell => {\n        const scope = getScopeAttribute(cell);\n        scope.each(attribute => set$2(cell, 'scope', attribute));\n        return () => {\n          const raw = generators.cell({\n            element: cell,\n            colspan: 1,\n            rowspan: 1\n          });\n          remove$5(raw, 'width');\n          remove$5(cell, 'width');\n          scope.each(attribute => set$2(raw, 'scope', attribute));\n          return raw;\n        };\n      };\n      const merge = cells => {\n        const getScopeProperty = () => {\n          const stringAttributes = cat(map$1(cells, getScopeAttribute));\n          if (stringAttributes.length === 0) {\n            return Optional.none();\n          } else {\n            const baseScope = stringAttributes[0];\n            const scopes = [\n              'row',\n              'col'\n            ];\n            const isMixed = exists(stringAttributes, attribute => {\n              return attribute !== baseScope && contains$2(scopes, attribute);\n            });\n            return isMixed ? Optional.none() : Optional.from(baseScope);\n          }\n        };\n        remove$5(cells[0], 'width');\n        getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n        return constant(cells[0]);\n      };\n      return {\n        unmerge,\n        merge\n      };\n    };\n    const Generators = {\n      modification,\n      transform: transform$1,\n      merging\n    };\n\n    const blockList = [\n      'body',\n      'p',\n      'div',\n      'article',\n      'aside',\n      'figcaption',\n      'figure',\n      'footer',\n      'header',\n      'nav',\n      'section',\n      'ol',\n      'ul',\n      'table',\n      'thead',\n      'tfoot',\n      'tbody',\n      'caption',\n      'tr',\n      'td',\n      'th',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'blockquote',\n      'pre',\n      'address'\n    ];\n    const isList$1 = (universe, item) => {\n      const tagName = universe.property().name(item);\n      return contains$2([\n        'ol',\n        'ul'\n      ], tagName);\n    };\n    const isBlock$1 = (universe, item) => {\n      const tagName = universe.property().name(item);\n      return contains$2(blockList, tagName);\n    };\n    const isEmptyTag$1 = (universe, item) => {\n      return contains$2([\n        'br',\n        'img',\n        'hr',\n        'input'\n      ], universe.property().name(item));\n    };\n\n    const universe$1 = DomUniverse();\n    const isBlock = element => {\n      return isBlock$1(universe$1, element);\n    };\n    const isList = element => {\n      return isList$1(universe$1, element);\n    };\n    const isEmptyTag = element => {\n      return isEmptyTag$1(universe$1, element);\n    };\n\n    const merge = cells => {\n      const isBr = isTag('br');\n      const advancedBr = children => {\n        return forall(children, c => {\n          return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n        });\n      };\n      const isListItem = el => {\n        return name(el) === 'li' || ancestor$2(el, isList).isSome();\n      };\n      const siblingIsBlock = el => {\n        return nextSibling(el).map(rightSibling => {\n          if (isBlock(rightSibling)) {\n            return true;\n          }\n          if (isEmptyTag(rightSibling)) {\n            return name(rightSibling) === 'img' ? false : true;\n          }\n          return false;\n        }).getOr(false);\n      };\n      const markCell = cell => {\n        return last$1(cell).bind(rightEdge => {\n          const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n          return parent(rightEdge).map(parent => {\n            return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n          });\n        }).getOr([]);\n      };\n      const markContent = () => {\n        const content = bind$2(cells, cell => {\n          const children = children$2(cell);\n          return advancedBr(children) ? [] : children.concat(markCell(cell));\n        });\n        return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n      };\n      const contents = markContent();\n      empty(cells[0]);\n      append(cells[0], contents);\n    };\n\n    const isEditable = elem => isEditable$1(elem, true);\n    const prune = table => {\n      const cells = cells$1(table);\n      if (cells.length === 0) {\n        remove$6(table);\n      }\n    };\n    const outcome = (grid, cursor) => ({\n      grid,\n      cursor\n    });\n    const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n      const elem = cell.element;\n      return someIf(isEditable(elem), elem);\n    }));\n    const elementFromGrid = (grid, row, column) => {\n      var _a, _b;\n      const rows = extractGridDetails(grid).rows;\n      return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n    };\n    const bundle = (grid, row, column) => {\n      const cursorElement = elementFromGrid(grid, row, column);\n      return outcome(grid, cursorElement);\n    };\n    const uniqueRows = details => {\n      const rowCompilation = (rest, detail) => {\n        const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n        return rowExists ? rest : rest.concat([detail]);\n      };\n      return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n    };\n    const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n      const targetIndex = details[0].row;\n      const rows = uniqueRows(details);\n      const newGrid = foldr(rows, (acc, row) => {\n        const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n        return {\n          grid: newG,\n          delta: acc.delta + 1\n        };\n      }, {\n        grid,\n        delta: 0\n      }).grid;\n      return bundle(newGrid, targetIndex, details[0].column);\n    };\n    const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n      const rows = uniqueRows(details);\n      const target = rows[rows.length - 1];\n      const targetIndex = target.row + target.rowspan;\n      const newGrid = foldr(rows, (newG, row) => {\n        return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n      }, grid);\n      return bundle(newGrid, targetIndex, details[0].column);\n    };\n    const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n      const details = extractDetail.details;\n      const columns = uniqueColumns(details);\n      const targetIndex = columns[0].column;\n      const newGrid = foldr(columns, (acc, col) => {\n        const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n        return {\n          grid: newG,\n          delta: acc.delta + 1\n        };\n      }, {\n        grid,\n        delta: 0\n      }).grid;\n      return bundle(newGrid, details[0].row, targetIndex);\n    };\n    const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n      const details = extractDetail.details;\n      const target = details[details.length - 1];\n      const targetIndex = target.column + target.colspan;\n      const columns = uniqueColumns(details);\n      const newGrid = foldr(columns, (newG, col) => {\n        return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n      }, grid);\n      return bundle(newGrid, details[0].row, targetIndex);\n    };\n    const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const columns = uniqueColumns(details);\n      const columnIndexes = map$1(columns, detail => detail.column);\n      const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const columns = uniqueColumns(details);\n      const columnIndexes = map$1(columns, detail => detail.column);\n      const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n      const rows = uniqueRows(details);\n      const rowIndexes = map$1(rows, detail => detail.row);\n      const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opMakeRowsHeader = makeRowsSection('thead', true);\n    const opMakeRowsBody = makeRowsSection('tbody', false);\n    const opMakeRowsFooter = makeRowsSection('tfoot', false);\n    const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n      const columns = uniqueColumns(extractDetail.details);\n      const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n      const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n      return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n    };\n    const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n      const rows = uniqueRows(details);\n      const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n      const maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;\n      return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n    };\n    const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n      const cells = mergable.cells;\n      merge(cells);\n      const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n      return outcome(newGrid, Optional.from(cells[0]));\n    };\n    const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n      const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n      const newGrid = foldr(unmergable, unmerge$1, grid);\n      return outcome(newGrid, Optional.from(unmergable[0]));\n    };\n    const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n      const gridify = (table, generators) => {\n        const wh = Warehouse.fromTable(table);\n        return toGrid(wh, generators, true);\n      };\n      const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n      const startAddress = address(pasteDetails.row, pasteDetails.column);\n      const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n      return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n        return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n      });\n    };\n    const gridifyRows = (rows, generators, context) => {\n      const pasteDetails = fromPastedRows(rows, context.section);\n      const wh = Warehouse.generate(pasteDetails);\n      return toGrid(wh, generators, true);\n    };\n    const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[0].column;\n      const context = rows[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n      const context = rows[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[0].row;\n      const context = rows[index];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n      const context = rows[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opGetColumnsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minColRange = selectedCells[0].column;\n        const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n        const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n        return findCommonCellType(selectedColumnCells);\n      }).getOr('');\n    };\n    const opGetCellsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(findCommonCellType).getOr('');\n    };\n    const opGetRowsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minRowRange = selectedCells[0].row;\n        const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n        const selectedRows = house.all.slice(minRowRange, maxRowRange);\n        return findCommonRowType(selectedRows);\n      }).getOr('');\n    };\n    const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n    const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n    const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n    const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n    const getColumnsWidth = (warehouse, details) => {\n      const columns$1 = columns(warehouse);\n      const uniqueCols = uniqueColumns(details);\n      return foldl(uniqueCols, (acc, detail) => {\n        const column = columns$1[detail.column];\n        const colWidth = column.map(getOuter$2).getOr(0);\n        return acc + colWidth;\n      }, 0);\n    };\n    const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n      const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n      return !checkLocked(warehouse, details);\n    }).map(details => ({\n      details,\n      pixelDelta: getColumnsWidth(warehouse, details)\n    }));\n    const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n      details,\n      pixelDelta: -getColumnsWidth(warehouse, details)\n    }));\n    const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n      const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n      return !checkLocked(warehouse, details.cells);\n    });\n    const headerCellGenerator = Generators.transform('th');\n    const bodyCellGenerator = Generators.transform('td');\n    const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n    const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n    const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n    const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n    const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n    const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n    const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n    const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n    const makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n    const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n    const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n    const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n    const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n    const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n    const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n    const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n    const getColumnsType = opGetColumnsType;\n    const getCellsType = opGetCellsType;\n    const getRowsType = opGetRowsType;\n\n    const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n    const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n    const fireTableModified = (editor, table, data) => {\n      editor.dispatch('TableModified', {\n        ...data,\n        table\n      });\n    };\n    const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n      editor.dispatch('TableSelectionChange', {\n        cells,\n        start,\n        finish,\n        otherCells\n      });\n    };\n    const fireTableSelectionClear = editor => {\n      editor.dispatch('TableSelectionClear');\n    };\n    const fireObjectResizeStart = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResizeStart', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const fireObjectResized = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResized', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const styleModified = {\n      structure: false,\n      style: true\n    };\n    const structureModified = {\n      structure: true,\n      style: false\n    };\n    const styleAndStructureModified = {\n      structure: true,\n      style: true\n    };\n\n    const get$5 = (editor, table) => {\n      if (isTablePercentagesForced(editor)) {\n        return TableSize.percentageSize(table);\n      } else if (isTablePixelsForced(editor)) {\n        return TableSize.pixelSize(table);\n      } else {\n        return TableSize.getTableSize(table);\n      }\n    };\n\n    const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n      const isTableBody = editor => name(getBody(editor)) === 'table';\n      const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n      const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n      const cloneFormats = getTableCloneElements(editor);\n      const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n      const getTableSectionType = table => {\n        switch (getTableHeaderType(editor)) {\n        case 'section':\n          return TableSection.section();\n        case 'sectionCells':\n          return TableSection.sectionCells();\n        case 'cells':\n          return TableSection.cells();\n        default:\n          return TableSection.getTableSectionType(table, 'section');\n        }\n      };\n      const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n        const cells = cells$1(table);\n        return head(cells).filter(inBody).map(firstCell => {\n          cellSelectionHandler.clearSelectedCells(table.dom);\n          const rng = editor.dom.createRng();\n          rng.selectNode(firstCell.dom);\n          editor.selection.setRng(rng);\n          set$2(firstCell, 'data-mce-selected', '1');\n          return rng;\n        });\n      }, cell => {\n        const des = freefallRtl(cell);\n        const rng = editor.dom.createRng();\n        rng.setStart(des.element.dom, des.offset);\n        rng.setEnd(des.element.dom, des.offset);\n        editor.selection.setRng(rng);\n        cellSelectionHandler.clearSelectedCells(table.dom);\n        return Optional.some(rng);\n      });\n      const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n        removeDataStyle(table);\n        const doc = SugarElement.fromDom(editor.getDoc());\n        const generators = cellOperations(mutate, doc, cloneFormats);\n        const behaviours = {\n          sizing: get$5(editor, table),\n          resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n          section: getTableSectionType(table)\n        };\n        return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n          resizeHandler.refresh(table.dom);\n          each$2(result.newRows, row => {\n            fireNewRow(editor, row.dom);\n          });\n          each$2(result.newCells, cell => {\n            fireNewCell(editor, cell.dom);\n          });\n          const range = setSelectionFromAction(table, result);\n          if (inBody(table)) {\n            removeDataStyle(table);\n            if (!noEvents) {\n              fireTableModified(editor, table.dom, effect);\n            }\n          }\n          return range.map(rng => ({\n            rng,\n            effect\n          }));\n        }) : Optional.none();\n      };\n      const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n      const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n      const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n      const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n      const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n      const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n      const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n      const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n      const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n      const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n      const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n      const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n      const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n      const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n      const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n      const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n      const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n      const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n      const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n      const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n      const getTableCellType = getCellsType;\n      const getTableColType = getColumnsType;\n      const getTableRowType = getRowsType;\n      return {\n        deleteRow,\n        deleteColumn,\n        insertRowsBefore: insertRowsBefore$1,\n        insertRowsAfter: insertRowsAfter$1,\n        insertColumnsBefore: insertColumnsBefore$1,\n        insertColumnsAfter: insertColumnsAfter$1,\n        mergeCells: mergeCells$1,\n        unmergeCells: unmergeCells$1,\n        pasteColsBefore: pasteColsBefore$1,\n        pasteColsAfter: pasteColsAfter$1,\n        pasteRowsBefore: pasteRowsBefore$1,\n        pasteRowsAfter: pasteRowsAfter$1,\n        pasteCells: pasteCells$1,\n        makeCellsHeader: makeCellsHeader$1,\n        unmakeCellsHeader: unmakeCellsHeader$1,\n        makeColumnsHeader: makeColumnsHeader$1,\n        unmakeColumnsHeader: unmakeColumnsHeader$1,\n        makeRowsHeader: makeRowsHeader$1,\n        makeRowsBody: makeRowsBody$1,\n        makeRowsFooter: makeRowsFooter$1,\n        getTableRowType,\n        getTableCellType,\n        getTableColType\n      };\n    };\n\n    const constrainSpan = (element, property, value) => {\n      const currentColspan = getAttrValue(element, property, 1);\n      if (value === 1 || currentColspan <= 1) {\n        remove$7(element, property);\n      } else {\n        set$2(element, property, Math.min(value, currentColspan));\n      }\n    };\n    const isColInRange = (minColRange, maxColRange) => cell => {\n      const endCol = cell.column + cell.colspan - 1;\n      const startCol = cell.column;\n      return endCol >= minColRange && startCol < maxColRange;\n    };\n    const generateColGroup = (house, minColRange, maxColRange) => {\n      if (Warehouse.hasColumns(house)) {\n        const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n        const copiedCols = map$1(colsToCopy, c => {\n          const clonedCol = deep(c.element);\n          constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n          return clonedCol;\n        });\n        const fakeColgroup = SugarElement.fromTag('colgroup');\n        append(fakeColgroup, copiedCols);\n        return [fakeColgroup];\n      } else {\n        return [];\n      }\n    };\n    const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n      const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n      const copiedCells = map$1(cellsToCopy, cell => {\n        const clonedCell = deep(cell.element);\n        constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n        return clonedCell;\n      });\n      const fakeTR = SugarElement.fromTag('tr');\n      append(fakeTR, copiedCells);\n      return fakeTR;\n    });\n    const copyCols = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onUnlockedCells(house, target);\n      return details.map(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minColRange = selectedCells[0].column;\n        const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n        const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n        const fakeRows = generateRows(house, minColRange, maxColRange);\n        return [\n          ...fakeColGroups,\n          ...fakeRows\n        ];\n      });\n    };\n\n    const copyRows = (table, target, generators) => {\n      const warehouse = Warehouse.fromTable(table);\n      const details = onCells(warehouse, target);\n      return details.bind(selectedCells => {\n        const grid = toGrid(warehouse, generators, false);\n        const rows = extractGridDetails(grid).rows;\n        const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n        const filteredGrid = bind$2(slicedGrid, row => {\n          const newCells = filter$2(row.cells, cell => !cell.isLocked);\n          return newCells.length > 0 ? [{\n              ...row,\n              cells: newCells\n            }] : [];\n        });\n        const slicedDetails = toDetailList(filteredGrid);\n        return someIf(slicedDetails.length > 0, slicedDetails);\n      }).map(slicedDetails => copy(slicedDetails));\n    };\n\n    const adt$5 = Adt.generate([\n      { invalid: ['raw'] },\n      { pixels: ['value'] },\n      { percent: ['value'] }\n    ]);\n    const validateFor = (suffix, type, value) => {\n      const rawAmount = value.substring(0, value.length - suffix.length);\n      const amount = parseFloat(rawAmount);\n      return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n    };\n    const from = value => {\n      if (endsWith(value, '%')) {\n        return validateFor('%', adt$5.percent, value);\n      }\n      if (endsWith(value, 'px')) {\n        return validateFor('px', adt$5.pixels, value);\n      }\n      return adt$5.invalid(value);\n    };\n    const Size = {\n      ...adt$5,\n      from\n    };\n\n    const redistributeToPercent = (widths, totalWidth) => {\n      return map$1(widths, w => {\n        const colType = Size.from(w);\n        return colType.fold(() => {\n          return w;\n        }, px => {\n          const ratio = px / totalWidth * 100;\n          return ratio + '%';\n        }, pc => {\n          return pc + '%';\n        });\n      });\n    };\n    const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n      const scale = newTotalWidth / totalWidth;\n      return map$1(widths, w => {\n        const colType = Size.from(w);\n        return colType.fold(() => {\n          return w;\n        }, px => {\n          return px * scale + 'px';\n        }, pc => {\n          return pc / 100 * newTotalWidth + 'px';\n        });\n      });\n    };\n    const redistributeEmpty = (newWidthType, columns) => {\n      const f = newWidthType.fold(() => constant(''), pixels => {\n        const num = pixels / columns;\n        return constant(num + 'px');\n      }, () => {\n        const num = 100 / columns;\n        return constant(num + '%');\n      });\n      return range$1(columns, f);\n    };\n    const redistributeValues = (newWidthType, widths, totalWidth) => {\n      return newWidthType.fold(() => {\n        return widths;\n      }, px => {\n        return redistributeToPx(widths, totalWidth, px);\n      }, _pc => {\n        return redistributeToPercent(widths, totalWidth);\n      });\n    };\n    const redistribute$1 = (widths, totalWidth, newWidth) => {\n      const newType = Size.from(newWidth);\n      const floats = forall(widths, s => {\n        return s === '0px';\n      }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n      return normalize(floats);\n    };\n    const sum = (values, fallback) => {\n      if (values.length === 0) {\n        return fallback;\n      }\n      return foldr(values, (rest, v) => {\n        return Size.from(v).fold(constant(0), identity, identity) + rest;\n      }, 0);\n    };\n    const roundDown = (num, unit) => {\n      const floored = Math.floor(num);\n      return {\n        value: floored + unit,\n        remainder: num - floored\n      };\n    };\n    const add$3 = (value, amount) => {\n      return Size.from(value).fold(constant(value), px => {\n        return px + amount + 'px';\n      }, pc => {\n        return pc + amount + '%';\n      });\n    };\n    const normalize = values => {\n      if (values.length === 0) {\n        return values;\n      }\n      const scan = foldr(values, (rest, value) => {\n        const info = Size.from(value).fold(() => ({\n          value,\n          remainder: 0\n        }), num => roundDown(num, 'px'), num => ({\n          value: num + '%',\n          remainder: 0\n        }));\n        return {\n          output: [info.value].concat(rest.output),\n          remainder: rest.remainder + info.remainder\n        };\n      }, {\n        output: [],\n        remainder: 0\n      });\n      const r = scan.output;\n      return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n    };\n    const validate = Size.from;\n\n    const redistributeToW = (newWidths, cells, unit) => {\n      each$2(cells, cell => {\n        const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n        const w = sum(widths, minWidth());\n        set$1(cell.element, 'width', w + unit);\n      });\n    };\n    const redistributeToColumns = (newWidths, columns, unit) => {\n      each$2(columns, (column, index) => {\n        const width = sum([newWidths[index]], minWidth());\n        set$1(column.element, 'width', width + unit);\n      });\n    };\n    const redistributeToH = (newHeights, rows, cells, unit) => {\n      each$2(cells, cell => {\n        const heights = newHeights.slice(cell.row, cell.rowspan + cell.row);\n        const h = sum(heights, minHeight());\n        set$1(cell.element, 'height', h + unit);\n      });\n      each$2(rows, (row, i) => {\n        set$1(row.element, 'height', newHeights[i]);\n      });\n    };\n    const getUnit = newSize => {\n      return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n    };\n    const redistribute = (table, optWidth, optHeight) => {\n      const warehouse = Warehouse.fromTable(table);\n      const rows = warehouse.all;\n      const cells = Warehouse.justCells(warehouse);\n      const columns = Warehouse.justColumns(warehouse);\n      optWidth.each(newWidth => {\n        const widthUnit = getUnit(newWidth);\n        const totalWidth = get$9(table);\n        const oldWidths = getRawWidths(warehouse, table);\n        const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n        if (Warehouse.hasColumns(warehouse)) {\n          redistributeToColumns(nuWidths, columns, widthUnit);\n        } else {\n          redistributeToW(nuWidths, cells, widthUnit);\n        }\n        set$1(table, 'width', newWidth);\n      });\n      optHeight.each(newHeight => {\n        const hUnit = getUnit(newHeight);\n        const totalHeight = get$8(table);\n        const oldHeights = getRawHeights(warehouse, table, height);\n        const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n        redistributeToH(nuHeights, rows, cells, hUnit);\n        set$1(table, 'height', newHeight);\n      });\n    };\n    const isPercentSizing = isPercentSizing$1;\n    const isPixelSizing = isPixelSizing$1;\n    const isNoneSizing = isNoneSizing$1;\n\n    const cleanupLegacyAttributes = element => {\n      remove$7(element, 'width');\n    };\n    const convertToPercentSize = table => {\n      const newWidth = getPercentTableWidth(table);\n      redistribute(table, Optional.some(newWidth), Optional.none());\n      cleanupLegacyAttributes(table);\n    };\n    const convertToPixelSize = table => {\n      const newWidth = getPixelTableWidth(table);\n      redistribute(table, Optional.some(newWidth), Optional.none());\n      cleanupLegacyAttributes(table);\n    };\n    const convertToNoneSize = table => {\n      remove$5(table, 'width');\n      const columns = columns$1(table);\n      const rowElements = columns.length > 0 ? columns : cells$1(table);\n      each$2(rowElements, cell => {\n        remove$5(cell, 'width');\n        cleanupLegacyAttributes(cell);\n      });\n      cleanupLegacyAttributes(table);\n    };\n\n    const DefaultRenderOptions = {\n      styles: {\n        'border-collapse': 'collapse',\n        'width': '100%'\n      },\n      attributes: { border: '1' },\n      colGroups: false\n    };\n    const tableHeaderCell = () => SugarElement.fromTag('th');\n    const tableCell = () => SugarElement.fromTag('td');\n    const tableColumn = () => SugarElement.fromTag('col');\n    const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n      const tr = SugarElement.fromTag('tr');\n      for (let j = 0; j < columns; j++) {\n        const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n        if (j < columnHeaders) {\n          set$2(td, 'scope', 'row');\n        }\n        if (rowIndex < rowHeaders) {\n          set$2(td, 'scope', 'col');\n        }\n        append$1(td, SugarElement.fromTag('br'));\n        append$1(tr, td);\n      }\n      return tr;\n    };\n    const createGroupRow = columns => {\n      const columnGroup = SugarElement.fromTag('colgroup');\n      range$1(columns, () => append$1(columnGroup, tableColumn()));\n      return columnGroup;\n    };\n    const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n    const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n      const table = SugarElement.fromTag('table');\n      const rowHeadersGoInThead = headerType !== 'cells';\n      setAll(table, renderOpts.styles);\n      setAll$1(table, renderOpts.attributes);\n      if (renderOpts.colGroups) {\n        append$1(table, createGroupRow(columns));\n      }\n      const actualRowHeaders = Math.min(rows, rowHeaders);\n      if (rowHeadersGoInThead && rowHeaders > 0) {\n        const thead = SugarElement.fromTag('thead');\n        append$1(table, thead);\n        const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n        const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n        append(thead, theadRows);\n      }\n      const tbody = SugarElement.fromTag('tbody');\n      append$1(table, tbody);\n      const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n      const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n      const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n      append(tbody, tbodyRows);\n      return table;\n    };\n\n    const get$4 = element => element.dom.innerHTML;\n    const getOuter = element => {\n      const container = SugarElement.fromTag('div');\n      const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n      append$1(container, clone);\n      return get$4(container);\n    };\n\n    const placeCaretInCell = (editor, cell) => {\n      editor.selection.select(cell.dom, true);\n      editor.selection.collapse(true);\n    };\n    const selectFirstCellInTable = (editor, tableElm) => {\n      descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n    };\n    const fireEvents = (editor, table) => {\n      each$2(descendants(table, 'tr'), row => {\n        fireNewRow(editor, row.dom);\n        each$2(descendants(row, 'th,td'), cell => {\n          fireNewCell(editor, cell.dom);\n        });\n      });\n    };\n    const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n    const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n      const defaultStyles = getTableDefaultStyles(editor);\n      const options = {\n        styles: defaultStyles,\n        attributes: getTableDefaultAttributes(editor),\n        colGroups: tableUseColumnGroup(editor)\n      };\n      editor.undoManager.ignore(() => {\n        const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n        set$2(table, 'data-mce-id', '__mce');\n        const html = getOuter(table);\n        editor.insertContent(html);\n        editor.addVisual();\n      });\n      return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n        if (isTablePixelsForced(editor)) {\n          convertToPixelSize(table);\n        } else if (isTableResponsiveForced(editor)) {\n          convertToNoneSize(table);\n        } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n          convertToPercentSize(table);\n        }\n        removeDataStyle(table);\n        remove$7(table, 'data-mce-id');\n        fireEvents(editor, table);\n        selectFirstCellInTable(editor, table);\n        return table.dom;\n      }).getOrNull();\n    };\n    const insertTable = (editor, rows, columns, options = {}) => {\n      const checkInput = val => isNumber(val) && val > 0;\n      if (checkInput(rows) && checkInput(columns)) {\n        const headerRows = options.headerRows || 0;\n        const headerColumns = options.headerColumns || 0;\n        return insert(editor, columns, rows, headerColumns, headerRows);\n      } else {\n        console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n        return null;\n      }\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n    const tableTypeBase = 'x-tinymce/dom-table-';\n    const tableTypeRow = tableTypeBase + 'rows';\n    const tableTypeColumn = tableTypeBase + 'columns';\n    const setData = items => {\n      const fakeClipboardItem = global.FakeClipboardItem(items);\n      global.write([fakeClipboardItem]);\n    };\n    const getData = type => {\n      var _a;\n      const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n      return findMap(items, item => Optional.from(item.getType(type)));\n    };\n    const clearData = type => {\n      if (getData(type).isSome()) {\n        global.clear();\n      }\n    };\n    const setRows = rowsOpt => {\n      rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n    };\n    const getRows = () => getData(tableTypeRow);\n    const clearRows = () => clearData(tableTypeRow);\n    const setColumns = columnsOpt => {\n      columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n    };\n    const getColumns = () => getData(tableTypeColumn);\n    const clearColumns = () => clearData(tableTypeColumn);\n\n    const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n    const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n    const registerCommands = (editor, actions) => {\n      const isRoot = getIsRoot(editor);\n      const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n        table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n          const cursor = SugarElement.fromText('');\n          after$5(table, cursor);\n          remove$6(table);\n          if (editor.dom.isEmpty(editor.getBody())) {\n            editor.setContent('');\n            editor.selection.setCursorLocation();\n          } else {\n            const rng = editor.dom.createRng();\n            rng.setStart(cursor.dom, 0);\n            rng.setEnd(cursor.dom, 0);\n            editor.selection.setRng(rng);\n            editor.nodeChanged();\n          }\n        });\n      });\n      const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n        const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n        if (!isForcedSizing) {\n          table(cellOrCaption, isRoot).each(table => {\n            if (sizing === 'relative' && !isPercentSizing(table)) {\n              convertToPercentSize(table);\n            } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n              convertToPixelSize(table);\n            } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n              convertToNoneSize(table);\n            }\n            removeDataStyle(table);\n            fireTableModified(editor, table.dom, structureModified);\n          });\n        }\n      });\n      const getTableFromCell = cell => table(cell, isRoot);\n      const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n      const toggleTableClass = (_ui, clazz) => {\n        performActionOnSelection(table => {\n          editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n          fireTableModified(editor, table.dom, styleModified);\n        });\n      };\n      const toggleTableCellClass = (_ui, clazz) => {\n        performActionOnSelection(table => {\n          const selectedCells = getCellsFromSelection(editor);\n          const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n          const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n          each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n          fireTableModified(editor, table.dom, styleModified);\n        });\n      };\n      const toggleCaption = () => {\n        getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n          table(cellOrCaption, isRoot).each(table => {\n            child(table, 'caption').fold(() => {\n              const caption = SugarElement.fromTag('caption');\n              append$1(caption, SugarElement.fromText('Caption'));\n              appendAt(table, caption, 0);\n              editor.selection.setCursorLocation(caption.dom, 0);\n            }, caption => {\n              if (isTag('caption')(cellOrCaption)) {\n                one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n              }\n              remove$6(caption);\n            });\n            fireTableModified(editor, table.dom, structureModified);\n          });\n        });\n      };\n      const postExecute = _data => {\n        editor.focus();\n      };\n      const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n        execute(table, targets, noEvents).each(postExecute);\n      });\n      const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n        const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n        return copyRows(table, targets, generators);\n      });\n      const copyColSelection = () => performActionOnSelection((table, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n        return copyCols(table, targets);\n      });\n      const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n        const clonedRows = map$1(rows, row => deep(row));\n        performActionOnSelection((table, startCell) => {\n          const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n          const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n          execute(table, targets).each(postExecute);\n        });\n      });\n      const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n        actOnSelection(getAction(type), args.no_events);\n      });\n      each$1({\n        mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n        mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n        mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n        mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n        mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n        mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n        mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n        mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n        mceTableCutCol: () => copyColSelection().each(selection => {\n          setColumns(selection);\n          actOnSelection(actions.deleteColumn);\n        }),\n        mceTableCutRow: () => copyRowSelection().each(selection => {\n          setRows(selection);\n          actOnSelection(actions.deleteRow);\n        }),\n        mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n        mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n        mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n        mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n        mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n        mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n        mceTableDelete: eraseTable,\n        mceTableCellToggleClass: toggleTableCellClass,\n        mceTableToggleClass: toggleTableClass,\n        mceTableToggleCaption: toggleCaption,\n        mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n        mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n        mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n        mceTableRowType: actOnType(type => {\n          switch (type) {\n          case 'header':\n            return actions.makeRowsHeader;\n          case 'footer':\n            return actions.makeRowsFooter;\n          default:\n            return actions.makeRowsBody;\n          }\n        })\n      }, (func, name) => editor.addCommand(name, func));\n      editor.addCommand('mceInsertTable', (_ui, args) => {\n        insertTable(editor, args.rows, args.columns, args.options);\n      });\n      editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n        const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n        if (!isObject(args)) {\n          return;\n        }\n        const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1);\n        if (cells.length === 0) {\n          return;\n        }\n        const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n        if (isEmpty(validArgs)) {\n          return;\n        }\n        each$1(validArgs, (value, style) => {\n          const formatName = getFormatName(style);\n          each$2(cells, cell => {\n            if (value === '') {\n              editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n            } else {\n              editor.formatter.apply(formatName, { value }, cell.dom);\n            }\n          });\n        });\n        getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n      });\n    };\n\n    const registerQueryCommands = (editor, actions) => {\n      const isRoot = getIsRoot(editor);\n      const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n        const targets = forMenu(getCellsFromSelection(editor), table, cell);\n        return action(table, targets);\n      })).getOr('');\n      each$1({\n        mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n        mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n        mceTableColType: () => lookupOnSelection(actions.getTableColType)\n      }, (func, name) => editor.addQueryValueHandler(name, func));\n    };\n\n    const adt$4 = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n    const getStart$1 = situ => situ.fold(identity, identity, identity);\n    const before$2 = adt$4.before;\n    const on = adt$4.on;\n    const after$3 = adt$4.after;\n    const Situ = {\n      before: before$2,\n      on,\n      after: after$3,\n      cata: cata$1,\n      getStart: getStart$1\n    };\n\n    const create$4 = (selection, kill) => ({\n      selection,\n      kill\n    });\n    const Response = { create: create$4 };\n\n    const selectNode = (win, element) => {\n      const rng = win.document.createRange();\n      rng.selectNode(element.dom);\n      return rng;\n    };\n    const selectNodeContents = (win, element) => {\n      const rng = win.document.createRange();\n      selectNodeContentsUsing(rng, element);\n      return rng;\n    };\n    const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n    const setStart = (rng, situ) => {\n      situ.fold(e => {\n        rng.setStartBefore(e.dom);\n      }, (e, o) => {\n        rng.setStart(e.dom, o);\n      }, e => {\n        rng.setStartAfter(e.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold(e => {\n        rng.setEndBefore(e.dom);\n      }, (e, o) => {\n        rng.setEnd(e.dom, o);\n      }, e => {\n        rng.setEndAfter(e.dom);\n      });\n    };\n    const relativeToNative = (win, startSitu, finishSitu) => {\n      const range = win.document.createRange();\n      setStart(range, startSitu);\n      setFinish(range, finishSitu);\n      return range;\n    };\n    const exactToNative = (win, start, soffset, finish, foffset) => {\n      const rng = win.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const toRect = rect => ({\n      left: rect.left,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      width: rect.width,\n      height: rect.height\n    });\n    const getFirstRect$1 = rng => {\n      const rects = rng.getClientRects();\n      const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n      return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n    };\n\n    const adt$3 = Adt.generate([\n      {\n        ltr: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      },\n      {\n        rtl: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n    const getRanges = (win, selection) => selection.match({\n      domRange: rng => {\n        return {\n          ltr: constant(rng),\n          rtl: Optional.none\n        };\n      },\n      relative: (startSitu, finishSitu) => {\n        return {\n          ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n          rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n        };\n      },\n      exact: (start, soffset, finish, foffset) => {\n        return {\n          ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n          rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n        };\n      }\n    });\n    const doDiagnose = (win, ranges) => {\n      const rng = ranges.ltr();\n      if (rng.collapsed) {\n        const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n        return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n      } else {\n        return fromRange(win, adt$3.ltr, rng);\n      }\n    };\n    const diagnose = (win, selection) => {\n      const ranges = getRanges(win, selection);\n      return doDiagnose(win, ranges);\n    };\n    const asLtrRange = (win, selection) => {\n      const diagnosis = diagnose(win, selection);\n      return diagnosis.match({\n        ltr: (start, soffset, finish, foffset) => {\n          const rng = win.document.createRange();\n          rng.setStart(start.dom, soffset);\n          rng.setEnd(finish.dom, foffset);\n          return rng;\n        },\n        rtl: (start, soffset, finish, foffset) => {\n          const rng = win.document.createRange();\n          rng.setStart(finish.dom, foffset);\n          rng.setEnd(start.dom, soffset);\n          return rng;\n        }\n      });\n    };\n    adt$3.ltr;\n    adt$3.rtl;\n\n    const create$3 = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$3 };\n\n    const create$2 = (start, soffset, finish, foffset) => {\n      return {\n        start: Situ.on(start, soffset),\n        finish: Situ.on(finish, foffset)\n      };\n    };\n    const Situs = { create: create$2 };\n\n    const convertToRange = (win, selection) => {\n      const rng = asLtrRange(win, selection);\n      return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n    };\n    const makeSitus = Situs.create;\n\n    const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n      if (!(eq$1(start, finish) && soffset === foffset)) {\n        return closest$1(start, 'td,th', isRoot).bind(s => {\n          return closest$1(finish, 'td,th', isRoot).bind(f => {\n            return detect(container, isRoot, s, f, selectRange);\n          });\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const detect = (container, isRoot, start, finish, selectRange) => {\n      if (!eq$1(start, finish)) {\n        return identify(start, finish, isRoot).bind(cellSel => {\n          const boxes = cellSel.boxes.getOr([]);\n          if (boxes.length > 1) {\n            selectRange(container, boxes, cellSel.start, cellSel.finish);\n            return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n          } else {\n            return Optional.none();\n          }\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const update = (rows, columns, container, selected, annotations) => {\n      const updateSelection = newSels => {\n        annotations.clearBeforeUpdate(container);\n        annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n        return newSels.boxes;\n      };\n      return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n    };\n\n    const traverse = (item, mode) => ({\n      item,\n      mode\n    });\n    const backtrack = (universe, item, _direction, transition = sidestep) => {\n      return universe.property().parent(item).map(p => {\n        return traverse(p, transition);\n      });\n    };\n    const sidestep = (universe, item, direction, transition = advance) => {\n      return direction.sibling(universe, item).map(p => {\n        return traverse(p, transition);\n      });\n    };\n    const advance = (universe, item, direction, transition = advance) => {\n      const children = universe.property().children(item);\n      const result = direction.first(children);\n      return result.map(r => {\n        return traverse(r, transition);\n      });\n    };\n    const successors = [\n      {\n        current: backtrack,\n        next: sidestep,\n        fallback: Optional.none()\n      },\n      {\n        current: sidestep,\n        next: advance,\n        fallback: Optional.some(backtrack)\n      },\n      {\n        current: advance,\n        next: advance,\n        fallback: Optional.some(sidestep)\n      }\n    ];\n    const go = (universe, item, mode, direction, rules = successors) => {\n      const ruleOpt = find$1(rules, succ => {\n        return succ.current === mode;\n      });\n      return ruleOpt.bind(rule => {\n        return rule.current(universe, item, direction, rule.next).orThunk(() => {\n          return rule.fallback.bind(fb => {\n            return go(universe, item, fb, direction);\n          });\n        });\n      });\n    };\n\n    const left$1 = () => {\n      const sibling = (universe, item) => {\n        return universe.query().prevSibling(item);\n      };\n      const first = children => {\n        return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n      };\n      return {\n        sibling,\n        first\n      };\n    };\n    const right$1 = () => {\n      const sibling = (universe, item) => {\n        return universe.query().nextSibling(item);\n      };\n      const first = children => {\n        return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n      };\n      return {\n        sibling,\n        first\n      };\n    };\n    const Walkers = {\n      left: left$1,\n      right: right$1\n    };\n\n    const hone = (universe, item, predicate, mode, direction, isRoot) => {\n      const next = go(universe, item, mode, direction);\n      return next.bind(n => {\n        if (isRoot(n.item)) {\n          return Optional.none();\n        } else {\n          return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n        }\n      });\n    };\n    const left = (universe, item, predicate, isRoot) => {\n      return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n    };\n    const right = (universe, item, predicate, isRoot) => {\n      return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n    };\n\n    const isLeaf = universe => element => universe.property().children(element).length === 0;\n    const before$1 = (universe, item, isRoot) => {\n      return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n    };\n    const after$2 = (universe, item, isRoot) => {\n      return seekRight$1(universe, item, isLeaf(universe), isRoot);\n    };\n    const seekLeft$1 = left;\n    const seekRight$1 = right;\n\n    const universe = DomUniverse();\n    const before = (element, isRoot) => {\n      return before$1(universe, element, isRoot);\n    };\n    const after$1 = (element, isRoot) => {\n      return after$2(universe, element, isRoot);\n    };\n    const seekLeft = (element, predicate, isRoot) => {\n      return seekLeft$1(universe, element, predicate, isRoot);\n    };\n    const seekRight = (element, predicate, isRoot) => {\n      return seekRight$1(universe, element, predicate, isRoot);\n    };\n\n    const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n    const adt$2 = Adt.generate([\n      { none: ['message'] },\n      { success: [] },\n      { failedUp: ['cell'] },\n      { failedDown: ['cell'] }\n    ]);\n    const isOverlapping = (bridge, before, after) => {\n      const beforeBounds = bridge.getRect(before);\n      const afterBounds = bridge.getRect(after);\n      return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n    };\n    const isRow = elem => {\n      return closest$1(elem, 'tr');\n    };\n    const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n      return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n        return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n          if (!eq$1(afterCell, beforeCell)) {\n            return sharedOne(isRow, [\n              afterCell,\n              beforeCell\n            ]).fold(() => {\n              return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n            }, _sharedRow => {\n              return failure(beforeCell);\n            });\n          } else {\n            return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n          }\n        });\n      }).getOr(adt$2.none('default'));\n    };\n    const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n      return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n    };\n    const BeforeAfter = {\n      ...adt$2,\n      verify,\n      cata\n    };\n\n    const inParent = (parent, children, element, index) => ({\n      parent,\n      children,\n      element,\n      index\n    });\n    const indexInParent = element => parent(element).bind(parent => {\n      const children = children$2(parent);\n      return indexOf(children, element).map(index => inParent(parent, children, element, index));\n    });\n    const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n    const isBr = isTag('br');\n    const gatherer = (cand, gather, isRoot) => {\n      return gather(cand, isRoot).bind(target => {\n        return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n      });\n    };\n    const handleBr = (isRoot, element, direction) => {\n      return direction.traverse(element).orThunk(() => {\n        return gatherer(element, direction.gather, isRoot);\n      }).map(direction.relative);\n    };\n    const findBr = (element, offset) => {\n      return child$2(element, offset).filter(isBr).orThunk(() => {\n        return child$2(element, offset - 1).filter(isBr);\n      });\n    };\n    const handleParent = (isRoot, element, offset, direction) => {\n      return findBr(element, offset).bind(br => {\n        return direction.traverse(br).fold(() => {\n          return gatherer(br, direction.gather, isRoot).map(direction.relative);\n        }, adjacent => {\n          return indexInParent(adjacent).map(info => {\n            return Situ.on(info.parent, info.index);\n          });\n        });\n      });\n    };\n    const tryBr = (isRoot, element, offset, direction) => {\n      const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n      return target.map(tgt => {\n        return {\n          start: tgt,\n          finish: tgt\n        };\n      });\n    };\n    const process = analysis => {\n      return BeforeAfter.cata(analysis, _message => {\n        return Optional.none();\n      }, () => {\n        return Optional.none();\n      }, cell => {\n        return Optional.some(point(cell, 0));\n      }, cell => {\n        return Optional.some(point(cell, getEnd(cell)));\n      });\n    };\n\n    const moveDown = (caret, amount) => {\n      return {\n        left: caret.left,\n        top: caret.top + amount,\n        right: caret.right,\n        bottom: caret.bottom + amount\n      };\n    };\n    const moveUp = (caret, amount) => {\n      return {\n        left: caret.left,\n        top: caret.top - amount,\n        right: caret.right,\n        bottom: caret.bottom - amount\n      };\n    };\n    const translate = (caret, xDelta, yDelta) => {\n      return {\n        left: caret.left + xDelta,\n        top: caret.top + yDelta,\n        right: caret.right + xDelta,\n        bottom: caret.bottom + yDelta\n      };\n    };\n    const getTop = caret => {\n      return caret.top;\n    };\n    const getBottom = caret => {\n      return caret.bottom;\n    };\n\n    const getPartialBox = (bridge, element, offset) => {\n      if (offset >= 0 && offset < getEnd(element)) {\n        return bridge.getRangedRect(element, offset, element, offset + 1);\n      } else if (offset > 0) {\n        return bridge.getRangedRect(element, offset - 1, element, offset);\n      }\n      return Optional.none();\n    };\n    const toCaret = rect => ({\n      left: rect.left,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom\n    });\n    const getElemBox = (bridge, element) => {\n      return Optional.some(bridge.getRect(element));\n    };\n    const getBoxAt = (bridge, element, offset) => {\n      if (isElement(element)) {\n        return getElemBox(bridge, element).map(toCaret);\n      } else if (isText(element)) {\n        return getPartialBox(bridge, element, offset).map(toCaret);\n      } else {\n        return Optional.none();\n      }\n    };\n    const getEntireBox = (bridge, element) => {\n      if (isElement(element)) {\n        return getElemBox(bridge, element).map(toCaret);\n      } else if (isText(element)) {\n        return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n      } else {\n        return Optional.none();\n      }\n    };\n\n    const JUMP_SIZE = 5;\n    const NUM_RETRIES = 100;\n    const adt$1 = Adt.generate([\n      { none: [] },\n      { retry: ['caret'] }\n    ]);\n    const isOutside = (caret, box) => {\n      return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n    };\n    const inOutsideBlock = (bridge, element, caret) => {\n      return closest$2(element, isBlock).fold(never, cell => {\n        return getEntireBox(bridge, cell).exists(box => {\n          return isOutside(caret, box);\n        });\n      });\n    };\n    const adjustDown = (bridge, element, guessBox, original, caret) => {\n      const lowerCaret = moveDown(caret, JUMP_SIZE);\n      if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n        return adt$1.retry(lowerCaret);\n      } else if (guessBox.top > caret.bottom) {\n        return adt$1.retry(lowerCaret);\n      } else if (guessBox.top === caret.bottom) {\n        return adt$1.retry(moveDown(caret, 1));\n      } else {\n        return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n      }\n    };\n    const adjustUp = (bridge, element, guessBox, original, caret) => {\n      const higherCaret = moveUp(caret, JUMP_SIZE);\n      if (Math.abs(guessBox.top - original.top) < 1) {\n        return adt$1.retry(higherCaret);\n      } else if (guessBox.bottom < caret.top) {\n        return adt$1.retry(higherCaret);\n      } else if (guessBox.bottom === caret.top) {\n        return adt$1.retry(moveUp(caret, 1));\n      } else {\n        return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n      }\n    };\n    const upMovement = {\n      point: getTop,\n      adjuster: adjustUp,\n      move: moveUp,\n      gather: before\n    };\n    const downMovement = {\n      point: getBottom,\n      adjuster: adjustDown,\n      move: moveDown,\n      gather: after$1\n    };\n    const isAtTable = (bridge, x, y) => {\n      return bridge.elementFromPoint(x, y).filter(elm => {\n        return name(elm) === 'table';\n      }).isSome();\n    };\n    const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n      return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n    };\n    const adjustTil = (bridge, movement, original, caret, numRetries) => {\n      if (numRetries === 0) {\n        return Optional.some(caret);\n      }\n      if (isAtTable(bridge, caret.left, movement.point(caret))) {\n        return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n      }\n      return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n        return guess.start.fold(Optional.none, element => {\n          return getEntireBox(bridge, element).bind(guessBox => {\n            return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n              return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n            });\n          }).orThunk(() => {\n            return Optional.some(caret);\n          });\n        }, Optional.none);\n      });\n    };\n    const checkScroll = (movement, adjusted, bridge) => {\n      if (movement.point(adjusted) > bridge.getInnerHeight()) {\n        return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n      } else if (movement.point(adjusted) < 0) {\n        return Optional.some(-movement.point(adjusted));\n      } else {\n        return Optional.none();\n      }\n    };\n    const retry = (movement, bridge, caret) => {\n      const moved = movement.move(caret, JUMP_SIZE);\n      const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n      return checkScroll(movement, adjusted, bridge).fold(() => {\n        return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n      }, delta => {\n        bridge.scrollBy(0, delta);\n        return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n      });\n    };\n    const Retries = {\n      tryUp: curry(retry, upMovement),\n      tryDown: curry(retry, downMovement),\n      getJumpSize: constant(JUMP_SIZE)\n    };\n\n    const MAX_RETRIES = 20;\n    const findSpot = (bridge, isRoot, direction) => {\n      return bridge.getSelection().bind(sel => {\n        return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n          return Optional.some(point(sel.finish, sel.foffset));\n        }, brNeighbour => {\n          const range = bridge.fromSitus(brNeighbour);\n          const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n          return process(analysis);\n        });\n      });\n    };\n    const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n      if (numRetries === 0) {\n        return Optional.none();\n      }\n      return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n        const range = bridge.fromSitus(situs);\n        const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n        return BeforeAfter.cata(analysis, () => {\n          return Optional.none();\n        }, () => {\n          return Optional.some(situs);\n        }, cell => {\n          if (eq$1(element, cell) && offset === 0) {\n            return tryAgain(bridge, element, offset, moveUp, direction);\n          } else {\n            return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n          }\n        }, cell => {\n          if (eq$1(element, cell) && offset === getEnd(cell)) {\n            return tryAgain(bridge, element, offset, moveDown, direction);\n          } else {\n            return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n          }\n        });\n      });\n    };\n    const tryAgain = (bridge, element, offset, move, direction) => {\n      return getBoxAt(bridge, element, offset).bind(box => {\n        return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n      });\n    };\n    const tryAt = (bridge, direction, box) => {\n      const browser = detect$2().browser;\n      if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n        return direction.retry(bridge, box);\n      } else {\n        return Optional.none();\n      }\n    };\n    const tryCursor = (bridge, isRoot, element, offset, direction) => {\n      return getBoxAt(bridge, element, offset).bind(box => {\n        return tryAt(bridge, direction, box);\n      });\n    };\n    const handle$1 = (bridge, isRoot, direction) => {\n      return findSpot(bridge, isRoot, direction).bind(spot => {\n        return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n      });\n    };\n\n    const inSameTable = (elem, table) => {\n      return ancestor(elem, e => {\n        return parent(e).exists(p => {\n          return eq$1(p, table);\n        });\n      });\n    };\n    const simulate = (bridge, isRoot, direction, initial, anchor) => {\n      return closest$1(initial, 'td,th', isRoot).bind(start => {\n        return closest$1(start, 'table', isRoot).bind(table => {\n          if (!inSameTable(anchor, table)) {\n            return Optional.none();\n          }\n          return handle$1(bridge, isRoot, direction).bind(range => {\n            return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n              return {\n                start,\n                finish,\n                range\n              };\n            });\n          });\n        });\n      });\n    };\n    const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n      return precheck(initial, isRoot).orThunk(() => {\n        return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n          const range = info.range;\n          return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n        });\n      });\n    };\n    const firstUpCheck = (initial, isRoot) => {\n      return closest$1(initial, 'tr', isRoot).bind(startRow => {\n        return closest$1(startRow, 'table', isRoot).bind(table => {\n          const rows = descendants(table, 'tr');\n          if (eq$1(startRow, rows[0])) {\n            return seekLeft(table, element => {\n              return last$1(element).isSome();\n            }, isRoot).map(last => {\n              const lastOffset = getEnd(last);\n              return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n            });\n          } else {\n            return Optional.none();\n          }\n        });\n      });\n    };\n    const lastDownCheck = (initial, isRoot) => {\n      return closest$1(initial, 'tr', isRoot).bind(startRow => {\n        return closest$1(startRow, 'table', isRoot).bind(table => {\n          const rows = descendants(table, 'tr');\n          if (eq$1(startRow, rows[rows.length - 1])) {\n            return seekRight(table, element => {\n              return first(element).isSome();\n            }, isRoot).map(first => {\n              return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n            });\n          } else {\n            return Optional.none();\n          }\n        });\n      });\n    };\n    const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n      return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n        return detect(container, isRoot, info.start, info.finish, selectRange);\n      });\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const value = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n    const isInEditableContext = cell => parentElement(cell).exists(isEditable$1);\n    const MouseSelection = (bridge, container, isRoot, annotations) => {\n      const cursor = value();\n      const clearstate = cursor.clear;\n      const applySelection = event => {\n        cursor.on(start => {\n          annotations.clearBeforeUpdate(container);\n          findCell(event.target, isRoot).each(finish => {\n            identify(start, finish, isRoot).each(cellSel => {\n              const boxes = cellSel.boxes.getOr([]);\n              if (boxes.length === 1) {\n                const singleCell = boxes[0];\n                const isNonEditableCell = getRaw(singleCell) === 'false';\n                const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n                if (isNonEditableCell && isCellClosestContentEditable) {\n                  annotations.selectRange(container, boxes, singleCell, singleCell);\n                  bridge.selectContents(singleCell);\n                }\n              } else if (boxes.length > 1) {\n                annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n                bridge.selectContents(finish);\n              }\n            });\n          });\n        });\n      };\n      const mousedown = event => {\n        annotations.clear(container);\n        findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set);\n      };\n      const mouseover = event => {\n        applySelection(event);\n      };\n      const mouseup = event => {\n        applySelection(event);\n        clearstate();\n      };\n      return {\n        clearstate,\n        mousedown,\n        mouseover,\n        mouseup\n      };\n    };\n\n    const down = {\n      traverse: nextSibling,\n      gather: after$1,\n      relative: Situ.before,\n      retry: Retries.tryDown,\n      failure: BeforeAfter.failedDown\n    };\n    const up = {\n      traverse: prevSibling,\n      gather: before,\n      relative: Situ.before,\n      retry: Retries.tryUp,\n      failure: BeforeAfter.failedUp\n    };\n\n    const isKey = key => {\n      return keycode => {\n        return keycode === key;\n      };\n    };\n    const isUp = isKey(38);\n    const isDown = isKey(40);\n    const isNavigation = keycode => {\n      return keycode >= 37 && keycode <= 40;\n    };\n    const ltr = {\n      isBackward: isKey(37),\n      isForward: isKey(39)\n    };\n    const rtl = {\n      isBackward: isKey(39),\n      isForward: isKey(37)\n    };\n\n    const get$3 = _DOC => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n    const by = (x, y, _DOC) => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const win = doc.defaultView;\n      if (win) {\n        win.scrollBy(x, y);\n      }\n    };\n\n    const adt = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    const getStart = selection => selection.match({\n      domRange: rng => SugarElement.fromDom(rng.startContainer),\n      relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n      exact: (start, _soffset, _finish, _foffset) => start\n    });\n    const domRange = adt.domRange;\n    const relative = adt.relative;\n    const exact = adt.exact;\n    const getWin = selection => {\n      const start = getStart(selection);\n      return defaultView(start);\n    };\n    const range = SimRange.create;\n    const SimSelection = {\n      domRange,\n      relative,\n      exact,\n      exactFromRange,\n      getWin,\n      range\n    };\n\n    const caretPositionFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n        if (pos.offsetNode === null) {\n          return Optional.none();\n        }\n        const r = doc.dom.createRange();\n        r.setStart(pos.offsetNode, pos.offset);\n        r.collapse();\n        return Optional.some(r);\n      });\n    };\n    const caretRangeFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n    };\n    const availableSearch = (() => {\n      if (document.caretPositionFromPoint) {\n        return caretPositionFromPoint;\n      } else if (document.caretRangeFromPoint) {\n        return caretRangeFromPoint;\n      } else {\n        return Optional.none;\n      }\n    })();\n    const fromPoint = (win, x, y) => {\n      const doc = SugarElement.fromDom(win.document);\n      return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n    };\n\n    const beforeSpecial = (element, offset) => {\n      const name$1 = name(element);\n      if ('input' === name$1) {\n        return Situ.after(element);\n      } else if (!contains$2([\n          'br',\n          'img'\n        ], name$1)) {\n        return Situ.on(element, offset);\n      } else {\n        return offset === 0 ? Situ.before(element) : Situ.after(element);\n      }\n    };\n    const preprocessRelative = (startSitu, finishSitu) => {\n      const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      return SimSelection.relative(start, finish);\n    };\n    const preprocessExact = (start, soffset, finish, foffset) => {\n      const startSitu = beforeSpecial(start, soffset);\n      const finishSitu = beforeSpecial(finish, foffset);\n      return SimSelection.relative(startSitu, finishSitu);\n    };\n\n    const makeRange = (start, soffset, finish, foffset) => {\n      const doc = owner(start);\n      const rng = doc.dom.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const after = (start, soffset, finish, foffset) => {\n      const r = makeRange(start, soffset, finish, foffset);\n      const same = eq$1(start, finish) && soffset === foffset;\n      return r.collapsed && !same;\n    };\n\n    const getNativeSelection = win => Optional.from(win.getSelection());\n    const doSetNativeRange = (win, rng) => {\n      getNativeSelection(win).each(selection => {\n        selection.removeAllRanges();\n        selection.addRange(rng);\n      });\n    };\n    const doSetRange = (win, start, soffset, finish, foffset) => {\n      const rng = exactToNative(win, start, soffset, finish, foffset);\n      doSetNativeRange(win, rng);\n    };\n    const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n      selection.collapse(start.dom, soffset);\n      selection.extend(finish.dom, foffset);\n    };\n    const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n      ltr: (start, soffset, finish, foffset) => {\n        doSetRange(win, start, soffset, finish, foffset);\n      },\n      rtl: (start, soffset, finish, foffset) => {\n        getNativeSelection(win).each(selection => {\n          if (selection.setBaseAndExtent) {\n            selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n          } else if (selection.extend) {\n            try {\n              setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n            } catch (e) {\n              doSetRange(win, finish, foffset, start, soffset);\n            }\n          } else {\n            doSetRange(win, finish, foffset, start, soffset);\n          }\n        });\n      }\n    });\n    const setExact = (win, start, soffset, finish, foffset) => {\n      const relative = preprocessExact(start, soffset, finish, foffset);\n      setRangeFromRelative(win, relative);\n    };\n    const setRelative = (win, startSitu, finishSitu) => {\n      const relative = preprocessRelative(startSitu, finishSitu);\n      setRangeFromRelative(win, relative);\n    };\n    const readRange = selection => {\n      if (selection.rangeCount > 0) {\n        const firstRng = selection.getRangeAt(0);\n        const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n        return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n      } else {\n        return Optional.none();\n      }\n    };\n    const doGetExact = selection => {\n      if (selection.anchorNode === null || selection.focusNode === null) {\n        return readRange(selection);\n      } else {\n        const anchor = SugarElement.fromDom(selection.anchorNode);\n        const focus = SugarElement.fromDom(selection.focusNode);\n        return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n      }\n    };\n    const setToElement = (win, element, selectNodeContents$1 = true) => {\n      const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n      const rng = rngGetter(win, element);\n      doSetNativeRange(win, rng);\n    };\n    const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n    const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n    const getFirstRect = (win, selection) => {\n      const rng = asLtrRange(win, selection);\n      return getFirstRect$1(rng);\n    };\n    const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n    const clear = win => {\n      getNativeSelection(win).each(selection => selection.removeAllRanges());\n    };\n\n    const WindowBridge = win => {\n      const elementFromPoint = (x, y) => {\n        return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n      };\n      const getRect = element => {\n        return element.dom.getBoundingClientRect();\n      };\n      const getRangedRect = (start, soffset, finish, foffset) => {\n        const sel = SimSelection.exact(start, soffset, finish, foffset);\n        return getFirstRect(win, sel);\n      };\n      const getSelection = () => {\n        return get$2(win).map(exactAdt => {\n          return convertToRange(win, exactAdt);\n        });\n      };\n      const fromSitus = situs => {\n        const relative = SimSelection.relative(situs.start, situs.finish);\n        return convertToRange(win, relative);\n      };\n      const situsFromPoint = (x, y) => {\n        return getAtPoint(win, x, y).map(exact => {\n          return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n        });\n      };\n      const clearSelection = () => {\n        clear(win);\n      };\n      const collapseSelection = (toStart = false) => {\n        get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n          const situ = toStart ? startSitu : finishSitu;\n          setRelative(win, situ, situ);\n        }, (start, soffset, finish, foffset) => {\n          const node = toStart ? start : finish;\n          const offset = toStart ? soffset : foffset;\n          setExact(win, node, offset, node, offset);\n        }));\n      };\n      const selectNode = element => {\n        setToElement(win, element, false);\n      };\n      const selectContents = element => {\n        setToElement(win, element);\n      };\n      const setSelection = sel => {\n        setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n      };\n      const setRelativeSelection = (start, finish) => {\n        setRelative(win, start, finish);\n      };\n      const getInnerHeight = () => {\n        return win.innerHeight;\n      };\n      const getScrollY = () => {\n        const pos = get$3(SugarElement.fromDom(win.document));\n        return pos.top;\n      };\n      const scrollBy = (x, y) => {\n        by(x, y, SugarElement.fromDom(win.document));\n      };\n      return {\n        elementFromPoint,\n        getRect,\n        getRangedRect,\n        getSelection,\n        fromSitus,\n        situsFromPoint,\n        clearSelection,\n        collapseSelection,\n        setSelection,\n        setRelativeSelection,\n        selectNode,\n        selectContents,\n        getInnerHeight,\n        getScrollY,\n        scrollBy\n      };\n    };\n\n    const rc = (rows, cols) => ({\n      rows,\n      cols\n    });\n    const mouse = (win, container, isRoot, annotations) => {\n      const bridge = WindowBridge(win);\n      const handlers = MouseSelection(bridge, container, isRoot, annotations);\n      return {\n        clearstate: handlers.clearstate,\n        mousedown: handlers.mousedown,\n        mouseover: handlers.mouseover,\n        mouseup: handlers.mouseup\n      };\n    };\n    const isEditableNode = node => closest$2(node, isHTMLElement).exists(isEditable$1);\n    const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish);\n    const keyboard = (win, container, isRoot, annotations) => {\n      const bridge = WindowBridge(win);\n      const clearToNavigate = () => {\n        annotations.clear(container);\n        return Optional.none();\n      };\n      const keydown = (event, start, soffset, finish, foffset, direction) => {\n        const realEvent = event.raw;\n        const keycode = realEvent.which;\n        const shiftKey = realEvent.shiftKey === true;\n        const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n          if (isNavigation(keycode) && !shiftKey) {\n            annotations.clearBeforeUpdate(container);\n          }\n          if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n            return Optional.none;\n          } else if (isDown(keycode) && shiftKey) {\n            return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n          } else if (isUp(keycode) && shiftKey) {\n            return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n          } else if (isDown(keycode)) {\n            return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n          } else if (isUp(keycode)) {\n            return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n          } else {\n            return Optional.none;\n          }\n        }, selected => {\n          const update$1 = attempts => {\n            return () => {\n              const navigation = findMap(attempts, delta => {\n                return update(delta.rows, delta.cols, container, selected, annotations);\n              });\n              return navigation.fold(() => {\n                return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n                  const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n                  bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n                  annotations.clear(container);\n                  return Response.create(Optional.none(), true);\n                });\n              }, _ => {\n                return Optional.some(Response.create(Optional.none(), true));\n              });\n            };\n          };\n          if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n            return Optional.none;\n          } else if (isDown(keycode) && shiftKey) {\n            return update$1([rc(+1, 0)]);\n          } else if (isUp(keycode) && shiftKey) {\n            return update$1([rc(-1, 0)]);\n          } else if (direction.isBackward(keycode) && shiftKey) {\n            return update$1([\n              rc(0, -1),\n              rc(-1, 0)\n            ]);\n          } else if (direction.isForward(keycode) && shiftKey) {\n            return update$1([\n              rc(0, +1),\n              rc(+1, 0)\n            ]);\n          } else if (isNavigation(keycode) && !shiftKey) {\n            return clearToNavigate;\n          } else {\n            return Optional.none;\n          }\n        });\n        return handler();\n      };\n      const keyup = (event, start, soffset, finish, foffset) => {\n        return retrieve$1(container, annotations.selectedSelector).fold(() => {\n          const realEvent = event.raw;\n          const keycode = realEvent.which;\n          const shiftKey = realEvent.shiftKey === true;\n          if (!shiftKey) {\n            return Optional.none();\n          }\n          if (isNavigation(keycode) && isEditableSelection(start, finish)) {\n            return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n          } else {\n            return Optional.none();\n          }\n        }, Optional.none);\n      };\n      return {\n        keydown,\n        keyup\n      };\n    };\n    const external = (win, container, isRoot, annotations) => {\n      const bridge = WindowBridge(win);\n      return (start, finish) => {\n        annotations.clearBeforeUpdate(container);\n        identify(start, finish, isRoot).each(cellSel => {\n          const boxes = cellSel.boxes.getOr([]);\n          annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n          bridge.selectContents(finish);\n          bridge.collapseSelection();\n        });\n      };\n    };\n\n    const read = (element, attr) => {\n      const value = get$b(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    const add$2 = (element, attr, id) => {\n      const old = read(element, attr);\n      const nu = old.concat([id]);\n      set$2(element, attr, nu.join(' '));\n      return true;\n    };\n    const remove$4 = (element, attr, id) => {\n      const nu = filter$2(read(element, attr), v => v !== id);\n      if (nu.length > 0) {\n        set$2(element, attr, nu.join(' '));\n      } else {\n        remove$7(element, attr);\n      }\n      return false;\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n    const get$1 = element => read(element, 'class');\n    const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n    const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n    const add = (element, clazz) => {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$1(element, clazz);\n      }\n    };\n    const cleanClass = element => {\n      const classList = supports(element) ? element.dom.classList : get$1(element);\n      if (classList.length === 0) {\n        remove$7(element, 'class');\n      }\n    };\n    const remove$2 = (element, clazz) => {\n      if (supports(element)) {\n        const classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$3(element, clazz);\n      }\n      cleanClass(element);\n    };\n    const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n    const remove$1 = (element, classes) => {\n      each$2(classes, x => {\n        remove$2(element, x);\n      });\n    };\n\n    const addClass = clazz => element => {\n      add(element, clazz);\n    };\n    const removeClasses = classes => element => {\n      remove$1(element, classes);\n    };\n\n    const byClass = ephemera => {\n      const addSelectionClass = addClass(ephemera.selected);\n      const removeSelectionClasses = removeClasses([\n        ephemera.selected,\n        ephemera.lastSelected,\n        ephemera.firstSelected\n      ]);\n      const clear = container => {\n        const sels = descendants(container, ephemera.selectedSelector);\n        each$2(sels, removeSelectionClasses);\n      };\n      const selectRange = (container, cells, start, finish) => {\n        clear(container);\n        each$2(cells, addSelectionClass);\n        add(start, ephemera.firstSelected);\n        add(finish, ephemera.lastSelected);\n      };\n      return {\n        clearBeforeUpdate: clear,\n        clear,\n        selectRange,\n        selectedSelector: ephemera.selectedSelector,\n        firstSelectedSelector: ephemera.firstSelectedSelector,\n        lastSelectedSelector: ephemera.lastSelectedSelector\n      };\n    };\n    const byAttr = (ephemera, onSelection, onClear) => {\n      const removeSelectionAttributes = element => {\n        remove$7(element, ephemera.selected);\n        remove$7(element, ephemera.firstSelected);\n        remove$7(element, ephemera.lastSelected);\n      };\n      const addSelectionAttribute = element => {\n        set$2(element, ephemera.selected, '1');\n      };\n      const clear = container => {\n        clearBeforeUpdate(container);\n        onClear();\n      };\n      const clearBeforeUpdate = container => {\n        const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n        each$2(sels, removeSelectionAttributes);\n      };\n      const selectRange = (container, cells, start, finish) => {\n        clear(container);\n        each$2(cells, addSelectionAttribute);\n        set$2(start, ephemera.firstSelected, '1');\n        set$2(finish, ephemera.lastSelected, '1');\n        onSelection(cells, start, finish);\n      };\n      return {\n        clearBeforeUpdate,\n        clear,\n        selectRange,\n        selectedSelector: ephemera.selectedSelector,\n        firstSelectedSelector: ephemera.firstSelectedSelector,\n        lastSelectedSelector: ephemera.lastSelectedSelector\n      };\n    };\n    const SelectionAnnotation = {\n      byClass,\n      byAttr\n    };\n\n    const fold = (subject, onNone, onMultiple, onSingle) => {\n      switch (subject.tag) {\n      case 'none':\n        return onNone();\n      case 'single':\n        return onSingle(subject.element);\n      case 'multiple':\n        return onMultiple(subject.elements);\n      }\n    };\n    const none = () => ({ tag: 'none' });\n    const multiple = elements => ({\n      tag: 'multiple',\n      elements\n    });\n    const single = element => ({\n      tag: 'single',\n      element\n    });\n\n    const Selections = (lazyRoot, getStart, selectedSelector) => {\n      const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n      return { get };\n    };\n\n    const getUpOrLeftCells = (grid, selectedCells) => {\n      const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n      const upDetails = toDetailList(upGrid);\n      return bind$2(upDetails, detail => {\n        const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n        return map$1(slicedCells, cell => cell.element);\n      });\n    };\n    const getDownOrRightCells = (grid, selectedCells) => {\n      const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n      const downDetails = toDetailList(downGrid);\n      return bind$2(downDetails, detail => {\n        const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n        return map$1(slicedCells, cell => cell.element);\n      });\n    };\n    const getOtherCells = (table, target, generators) => {\n      const warehouse = Warehouse.fromTable(table);\n      const details = onCells(warehouse, target);\n      return details.map(selectedCells => {\n        const grid = toGrid(warehouse, generators, false);\n        const {rows} = extractGridDetails(grid);\n        const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n        const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n        return {\n          upOrLeftCells,\n          downOrRightCells\n        };\n      });\n    };\n\n    const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n      target,\n      x,\n      y,\n      stop,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent$1 = rawEvent => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n    };\n    const handle = (filter, handler) => rawEvent => {\n      if (filter(rawEvent)) {\n        handler(fromRawEvent$1(rawEvent));\n      }\n    };\n    const binder = (element, event, filter, handler, useCapture) => {\n      const wrapped = handle(filter, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n\n    const filter = always;\n    const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n    const fromRawEvent = fromRawEvent$1;\n\n    const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n    const TableCellSelectionHandler = (editor, resizeHandler) => {\n      const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n      const onSelection = (cells, start, finish) => {\n        const tableOpt = table(start);\n        tableOpt.each(table => {\n          const cloneFormats = getTableCloneElements(editor);\n          const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n          const selectedCells = getCellsFromSelection(editor);\n          const otherCells = getOtherCells(table, { selection: selectedCells }, generators);\n          fireTableSelectionChange(editor, cells, start, finish, otherCells);\n        });\n      };\n      const onClear = () => fireTableSelectionClear(editor);\n      const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n      editor.on('init', _e => {\n        const win = editor.getWin();\n        const body = getBody(editor);\n        const isRoot = getIsRoot(editor);\n        const syncSelection = () => {\n          const sel = editor.selection;\n          const start = SugarElement.fromDom(sel.getStart());\n          const end = SugarElement.fromDom(sel.getEnd());\n          const shared = sharedOne(table, [\n            start,\n            end\n          ]);\n          shared.fold(() => annotations.clear(body), noop);\n        };\n        const mouseHandlers = mouse(win, body, isRoot, annotations);\n        const keyHandlers = keyboard(win, body, isRoot, annotations);\n        const external$1 = external(win, body, isRoot, annotations);\n        const hasShiftKey = event => event.raw.shiftKey === true;\n        editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n        const handleResponse = (event, response) => {\n          if (!hasShiftKey(event)) {\n            return;\n          }\n          if (response.kill) {\n            event.kill();\n          }\n          response.selection.each(ns => {\n            const relative = SimSelection.relative(ns.start, ns.finish);\n            const rng = asLtrRange(win, relative);\n            editor.selection.setRng(rng);\n          });\n        };\n        const keyup = event => {\n          const wrappedEvent = fromRawEvent(event);\n          if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n            const rng = editor.selection.getRng();\n            const start = SugarElement.fromDom(rng.startContainer);\n            const end = SugarElement.fromDom(rng.endContainer);\n            keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n              handleResponse(wrappedEvent, response);\n            });\n          }\n        };\n        const keydown = event => {\n          const wrappedEvent = fromRawEvent(event);\n          resizeHandler.hide();\n          const rng = editor.selection.getRng();\n          const start = SugarElement.fromDom(rng.startContainer);\n          const end = SugarElement.fromDom(rng.endContainer);\n          const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n          keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n            handleResponse(wrappedEvent, response);\n          });\n          resizeHandler.show();\n        };\n        const isLeftMouse = raw => raw.button === 0;\n        const isLeftButtonPressed = raw => {\n          if (raw.buttons === undefined) {\n            return true;\n          }\n          return (raw.buttons & 1) !== 0;\n        };\n        const dragStart = _e => {\n          mouseHandlers.clearstate();\n        };\n        const mouseDown = e => {\n          if (isLeftMouse(e) && hasInternalTarget(e)) {\n            mouseHandlers.mousedown(fromRawEvent(e));\n          }\n        };\n        const mouseOver = e => {\n          if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n            mouseHandlers.mouseover(fromRawEvent(e));\n          }\n        };\n        const mouseUp = e => {\n          if (isLeftMouse(e) && hasInternalTarget(e)) {\n            mouseHandlers.mouseup(fromRawEvent(e));\n          }\n        };\n        const getDoubleTap = () => {\n          const lastTarget = Cell(SugarElement.fromDom(body));\n          const lastTimeStamp = Cell(0);\n          const touchEnd = t => {\n            const target = SugarElement.fromDom(t.target);\n            if (isTag('td')(target) || isTag('th')(target)) {\n              const lT = lastTarget.get();\n              const lTS = lastTimeStamp.get();\n              if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n                t.preventDefault();\n                external$1(target, target);\n              }\n            }\n            lastTarget.set(target);\n            lastTimeStamp.set(t.timeStamp);\n          };\n          return { touchEnd };\n        };\n        const doubleTap = getDoubleTap();\n        editor.on('dragstart', dragStart);\n        editor.on('mousedown', mouseDown);\n        editor.on('mouseover', mouseOver);\n        editor.on('mouseup', mouseUp);\n        editor.on('touchend', doubleTap.touchEnd);\n        editor.on('keyup', keyup);\n        editor.on('keydown', keydown);\n        editor.on('NodeChange', syncSelection);\n      });\n      editor.on('PreInit', () => {\n        editor.serializer.addTempAttr(ephemera.firstSelected);\n        editor.serializer.addTempAttr(ephemera.lastSelected);\n      });\n      const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n      const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n        return map$1(cells, cell => cell.dom);\n      }, cell => [cell.dom]);\n      return {\n        getSelectedCells,\n        clearSelectedCells\n      };\n    };\n\n    const Event = fields => {\n      let handlers = [];\n      const bind = handler => {\n        if (handler === undefined) {\n          throw new Error('Event bind error: undefined handler');\n        }\n        handlers.push(handler);\n      };\n      const unbind = handler => {\n        handlers = filter$2(handlers, h => {\n          return h !== handler;\n        });\n      };\n      const trigger = (...args) => {\n        const event = {};\n        each$2(fields, (name, i) => {\n          event[name] = args[i];\n        });\n        each$2(handlers, handler => {\n          handler(event);\n        });\n      };\n      return {\n        bind,\n        unbind,\n        trigger\n      };\n    };\n\n    const create$1 = typeDefs => {\n      const registry = map(typeDefs, event => {\n        return {\n          bind: event.bind,\n          unbind: event.unbind\n        };\n      });\n      const trigger = map(typeDefs, event => {\n        return event.trigger;\n      });\n      return {\n        registry,\n        trigger\n      };\n    };\n\n    const last = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const sort = arr => {\n      return arr.slice(0).sort();\n    };\n    const reqMessage = (required, keys) => {\n      throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n    };\n    const unsuppMessage = unsupported => {\n      throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n    };\n    const validateStrArr = (label, array) => {\n      if (!isArray(array)) {\n        throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n      }\n      each$2(array, a => {\n        if (!isString(a)) {\n          throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n        }\n      });\n    };\n    const invalidTypeMessage = (incorrect, type) => {\n      throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n    };\n    const checkDupes = everything => {\n      const sorted = sort(everything);\n      const dupe = find$1(sorted, (s, i) => {\n        return i < sorted.length - 1 && s === sorted[i + 1];\n      });\n      dupe.each(d => {\n        throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n      });\n    };\n\n    const base = (handleUnsupported, required) => {\n      return baseWith(handleUnsupported, required, {\n        validate: isFunction,\n        label: 'function'\n      });\n    };\n    const baseWith = (handleUnsupported, required, pred) => {\n      if (required.length === 0) {\n        throw new Error('You must specify at least one required field.');\n      }\n      validateStrArr('required', required);\n      checkDupes(required);\n      return obj => {\n        const keys$1 = keys(obj);\n        const allReqd = forall(required, req => {\n          return contains$2(keys$1, req);\n        });\n        if (!allReqd) {\n          reqMessage(required, keys$1);\n        }\n        handleUnsupported(required, keys$1);\n        const invalidKeys = filter$2(required, key => {\n          return !pred.validate(obj[key], key);\n        });\n        if (invalidKeys.length > 0) {\n          invalidTypeMessage(invalidKeys, pred.label);\n        }\n        return obj;\n      };\n    };\n    const handleExact = (required, keys) => {\n      const unsupported = filter$2(keys, key => {\n        return !contains$2(required, key);\n      });\n      if (unsupported.length > 0) {\n        unsuppMessage(unsupported);\n      }\n    };\n    const exactly = required => base(handleExact, required);\n\n    const DragMode = exactly([\n      'compare',\n      'extract',\n      'mutate',\n      'sink'\n    ]);\n    const DragSink = exactly([\n      'element',\n      'start',\n      'stop',\n      'destroy'\n    ]);\n    const DragApi = exactly([\n      'forceDrop',\n      'drop',\n      'move',\n      'delayDrop'\n    ]);\n\n    const InDrag = () => {\n      let previous = Optional.none();\n      const reset = () => {\n        previous = Optional.none();\n      };\n      const update = (mode, nu) => {\n        const result = previous.map(old => {\n          return mode.compare(old, nu);\n        });\n        previous = Optional.some(nu);\n        return result;\n      };\n      const onEvent = (event, mode) => {\n        const dataOption = mode.extract(event);\n        dataOption.each(data => {\n          const offset = update(mode, data);\n          offset.each(d => {\n            events.trigger.move(d);\n          });\n        });\n      };\n      const events = create$1({ move: Event(['info']) });\n      return {\n        onEvent,\n        reset,\n        events: events.registry\n      };\n    };\n\n    const NoDrag = () => {\n      const events = create$1({ move: Event(['info']) });\n      return {\n        onEvent: noop,\n        reset: noop,\n        events: events.registry\n      };\n    };\n\n    const Movement = () => {\n      const noDragState = NoDrag();\n      const inDragState = InDrag();\n      let dragState = noDragState;\n      const on = () => {\n        dragState.reset();\n        dragState = inDragState;\n      };\n      const off = () => {\n        dragState.reset();\n        dragState = noDragState;\n      };\n      const onEvent = (event, mode) => {\n        dragState.onEvent(event, mode);\n      };\n      const isOn = () => {\n        return dragState === inDragState;\n      };\n      return {\n        on,\n        off,\n        isOn,\n        onEvent,\n        events: inDragState.events\n      };\n    };\n\n    const setup = (mutation, mode, settings) => {\n      let active = false;\n      const events = create$1({\n        start: Event([]),\n        stop: Event([])\n      });\n      const movement = Movement();\n      const drop = () => {\n        sink.stop();\n        if (movement.isOn()) {\n          movement.off();\n          events.trigger.stop();\n        }\n      };\n      const throttledDrop = last(drop, 200);\n      const go = parent => {\n        sink.start(parent);\n        movement.on();\n        events.trigger.start();\n      };\n      const mousemove = event => {\n        throttledDrop.cancel();\n        movement.onEvent(event, mode);\n      };\n      movement.events.move.bind(event => {\n        mode.mutate(mutation, event.info);\n      });\n      const on = () => {\n        active = true;\n      };\n      const off = () => {\n        active = false;\n      };\n      const isActive = () => active;\n      const runIfActive = f => {\n        return (...args) => {\n          if (active) {\n            f.apply(null, args);\n          }\n        };\n      };\n      const sink = mode.sink(DragApi({\n        forceDrop: drop,\n        drop: runIfActive(drop),\n        move: runIfActive(mousemove),\n        delayDrop: runIfActive(throttledDrop.throttle)\n      }), settings);\n      const destroy = () => {\n        sink.destroy();\n      };\n      return {\n        element: sink.element,\n        go,\n        on,\n        off,\n        isActive,\n        destroy,\n        events: events.registry\n      };\n    };\n\n    const css = namespace => {\n      const dashNamespace = namespace.replace(/\\./g, '-');\n      const resolve = str => {\n        return dashNamespace + '-' + str;\n      };\n      return { resolve };\n    };\n\n    const styles$1 = css('ephox-dragster');\n    const resolve$1 = styles$1.resolve;\n\n    const Blocker = options => {\n      const settings = {\n        layerClass: resolve$1('blocker'),\n        ...options\n      };\n      const div = SugarElement.fromTag('div');\n      set$2(div, 'role', 'presentation');\n      setAll(div, {\n        position: 'fixed',\n        left: '0px',\n        top: '0px',\n        width: '100%',\n        height: '100%'\n      });\n      add(div, resolve$1('blocker'));\n      add(div, settings.layerClass);\n      const element = constant(div);\n      const destroy = () => {\n        remove$6(div);\n      };\n      return {\n        element,\n        destroy\n      };\n    };\n\n    const compare = (old, nu) => {\n      return SugarPosition(nu.left - old.left, nu.top - old.top);\n    };\n    const extract = event => {\n      return Optional.some(SugarPosition(event.x, event.y));\n    };\n    const mutate = (mutation, info) => {\n      mutation.mutate(info.left, info.top);\n    };\n    const sink = (dragApi, settings) => {\n      const blocker = Blocker(settings);\n      const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n      const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n      const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n      const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n      const destroy = () => {\n        blocker.destroy();\n        mup.unbind();\n        mmove.unbind();\n        mout.unbind();\n        mdown.unbind();\n      };\n      const start = parent => {\n        append$1(parent, blocker.element());\n      };\n      const stop = () => {\n        remove$6(blocker.element());\n      };\n      return DragSink({\n        element: blocker.element,\n        start,\n        stop,\n        destroy\n      });\n    };\n    var MouseDrag = DragMode({\n      compare,\n      extract,\n      sink,\n      mutate\n    });\n\n    const transform = (mutation, settings = {}) => {\n      var _a;\n      const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n      return setup(mutation, mode, settings);\n    };\n\n    const styles = css('ephox-snooker');\n    const resolve = styles.resolve;\n\n    const Mutation = () => {\n      const events = create$1({\n        drag: Event([\n          'xDelta',\n          'yDelta'\n        ])\n      });\n      const mutate = (x, y) => {\n        events.trigger.drag(x, y);\n      };\n      return {\n        mutate,\n        events: events.registry\n      };\n    };\n\n    const BarMutation = () => {\n      const events = create$1({\n        drag: Event([\n          'xDelta',\n          'yDelta',\n          'target'\n        ])\n      });\n      let target = Optional.none();\n      const delegate = Mutation();\n      delegate.events.drag.bind(event => {\n        target.each(t => {\n          events.trigger.drag(event.xDelta, event.yDelta, t);\n        });\n      });\n      const assign = t => {\n        target = Optional.some(t);\n      };\n      const get = () => {\n        return target;\n      };\n      return {\n        assign,\n        get,\n        mutate: delegate.mutate,\n        events: events.registry\n      };\n    };\n\n    const col = (column, x, y, w, h) => {\n      const bar = SugarElement.fromTag('div');\n      setAll(bar, {\n        position: 'absolute',\n        left: x - w / 2 + 'px',\n        top: y + 'px',\n        height: h + 'px',\n        width: w + 'px'\n      });\n      setAll$1(bar, {\n        'data-column': column,\n        'role': 'presentation'\n      });\n      return bar;\n    };\n    const row = (r, x, y, w, h) => {\n      const bar = SugarElement.fromTag('div');\n      setAll(bar, {\n        position: 'absolute',\n        left: x + 'px',\n        top: y - h / 2 + 'px',\n        height: h + 'px',\n        width: w + 'px'\n      });\n      setAll$1(bar, {\n        'data-row': r,\n        'role': 'presentation'\n      });\n      return bar;\n    };\n\n    const resizeBar = resolve('resizer-bar');\n    const resizeRowBar = resolve('resizer-rows');\n    const resizeColBar = resolve('resizer-cols');\n    const BAR_THICKNESS = 7;\n    const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n    const resizableColumns = (warehouse, isResizable) => {\n      const resizableCols = [];\n      range$1(warehouse.grid.columns, index => {\n        const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n        if (colElmOpt.forall(isResizable)) {\n          resizableCols.push(index);\n        }\n      });\n      return filter$2(resizableCols, colIndex => {\n        const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n        return forall(columnCells, cell => isResizable(cell.element));\n      });\n    };\n    const destroy = wire => {\n      const previous = descendants(wire.parent(), '.' + resizeBar);\n      each$2(previous, remove$6);\n    };\n    const drawBar = (wire, positions, create) => {\n      const origin = wire.origin();\n      each$2(positions, cpOption => {\n        cpOption.each(cp => {\n          const bar = create(origin, cp);\n          add(bar, resizeBar);\n          append$1(wire.parent(), bar);\n        });\n      });\n    };\n    const refreshCol = (wire, colPositions, position, tableHeight) => {\n      drawBar(wire, colPositions, (origin, cp) => {\n        const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n        add(colBar, resizeColBar);\n        return colBar;\n      });\n    };\n    const refreshRow = (wire, rowPositions, position, tableWidth) => {\n      drawBar(wire, rowPositions, (origin, cp) => {\n        const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n        add(rowBar, resizeRowBar);\n        return rowBar;\n      });\n    };\n    const refreshGrid = (warhouse, wire, table, rows, cols) => {\n      const position = absolute(table);\n      const isResizable = wire.isResizable;\n      const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n      const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n      const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n      refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n      const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n      const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n      const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n      refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n    };\n    const refresh = (wire, table) => {\n      destroy(wire);\n      if (wire.isResizable(table)) {\n        const warehouse = Warehouse.fromTable(table);\n        const rows$1 = rows(warehouse);\n        const cols = columns(warehouse);\n        refreshGrid(warehouse, wire, table, rows$1, cols);\n      }\n    };\n    const each = (wire, f) => {\n      const bars = descendants(wire.parent(), '.' + resizeBar);\n      each$2(bars, f);\n    };\n    const hide = wire => {\n      each(wire, bar => {\n        set$1(bar, 'display', 'none');\n      });\n    };\n    const show = wire => {\n      each(wire, bar => {\n        set$1(bar, 'display', 'block');\n      });\n    };\n    const isRowBar = element => {\n      return has(element, resizeRowBar);\n    };\n    const isColBar = element => {\n      return has(element, resizeColBar);\n    };\n\n    const resizeBarDragging = resolve('resizer-bar-dragging');\n    const BarManager = wire => {\n      const mutation = BarMutation();\n      const resizing = transform(mutation, {});\n      let hoverTable = Optional.none();\n      const getResizer = (element, type) => {\n        return Optional.from(get$b(element, type));\n      };\n      mutation.events.drag.bind(event => {\n        getResizer(event.target, 'data-row').each(_dataRow => {\n          const currentRow = getCssValue(event.target, 'top');\n          set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n        });\n        getResizer(event.target, 'data-column').each(_dataCol => {\n          const currentCol = getCssValue(event.target, 'left');\n          set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n        });\n      });\n      const getDelta = (target, dir) => {\n        const newX = getCssValue(target, dir);\n        const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n        return newX - oldX;\n      };\n      resizing.events.stop.bind(() => {\n        mutation.get().each(target => {\n          hoverTable.each(table => {\n            getResizer(target, 'data-row').each(row => {\n              const delta = getDelta(target, 'top');\n              remove$7(target, 'data-initial-top');\n              events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n            });\n            getResizer(target, 'data-column').each(column => {\n              const delta = getDelta(target, 'left');\n              remove$7(target, 'data-initial-left');\n              events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n            });\n            refresh(wire, table);\n          });\n        });\n      });\n      const handler = (target, dir) => {\n        events.trigger.startAdjust();\n        mutation.assign(target);\n        set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n        add(target, resizeBarDragging);\n        set$1(target, 'opacity', '0.2');\n        resizing.go(wire.parent());\n      };\n      const mousedown = bind(wire.parent(), 'mousedown', event => {\n        if (isRowBar(event.target)) {\n          handler(event.target, 'top');\n        }\n        if (isColBar(event.target)) {\n          handler(event.target, 'left');\n        }\n      });\n      const isRoot = e => {\n        return eq$1(e, wire.view());\n      };\n      const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n      const mouseover = bind(wire.view(), 'mouseover', event => {\n        findClosestEditableTable(event.target).fold(() => {\n          if (inBody(event.target)) {\n            destroy(wire);\n          }\n        }, table => {\n          if (resizing.isActive()) {\n            hoverTable = Optional.some(table);\n            refresh(wire, table);\n          }\n        });\n      });\n      const destroy$1 = () => {\n        mousedown.unbind();\n        mouseover.unbind();\n        resizing.destroy();\n        destroy(wire);\n      };\n      const refresh$1 = tbl => {\n        refresh(wire, tbl);\n      };\n      const events = create$1({\n        adjustHeight: Event([\n          'table',\n          'delta',\n          'row'\n        ]),\n        adjustWidth: Event([\n          'table',\n          'delta',\n          'column'\n        ]),\n        startAdjust: Event([])\n      });\n      return {\n        destroy: destroy$1,\n        refresh: refresh$1,\n        on: resizing.on,\n        off: resizing.off,\n        hideBars: curry(hide, wire),\n        showBars: curry(show, wire),\n        events: events.registry\n      };\n    };\n\n    const create = (wire, resizing, lazySizing) => {\n      const hdirection = height;\n      const vdirection = width;\n      const manager = BarManager(wire);\n      const events = create$1({\n        beforeResize: Event([\n          'table',\n          'type'\n        ]),\n        afterResize: Event([\n          'table',\n          'type'\n        ]),\n        startDrag: Event([])\n      });\n      manager.events.adjustHeight.bind(event => {\n        const table = event.table;\n        events.trigger.beforeResize(table, 'row');\n        const delta = hdirection.delta(event.delta, table);\n        adjustHeight(table, delta, event.row, hdirection);\n        events.trigger.afterResize(table, 'row');\n      });\n      manager.events.startAdjust.bind(_event => {\n        events.trigger.startDrag();\n      });\n      manager.events.adjustWidth.bind(event => {\n        const table = event.table;\n        events.trigger.beforeResize(table, 'col');\n        const delta = vdirection.delta(event.delta, table);\n        const tableSize = lazySizing(table);\n        adjustWidth(table, delta, event.column, resizing, tableSize);\n        events.trigger.afterResize(table, 'col');\n      });\n      return {\n        on: manager.on,\n        off: manager.off,\n        refreshBars: manager.refresh,\n        hideBars: manager.hideBars,\n        showBars: manager.showBars,\n        destroy: manager.destroy,\n        events: events.registry\n      };\n    };\n    const TableResize = { create };\n\n    const only = (element, isResizable) => {\n      const parent = isDocument(element) ? documentElement(element) : element;\n      return {\n        parent: constant(parent),\n        view: constant(element),\n        origin: constant(SugarPosition(0, 0)),\n        isResizable\n      };\n    };\n    const detached = (editable, chrome, isResizable) => {\n      const origin = () => absolute(chrome);\n      return {\n        parent: constant(chrome),\n        view: constant(editable),\n        origin,\n        isResizable\n      };\n    };\n    const body = (editable, chrome, isResizable) => {\n      return {\n        parent: constant(chrome),\n        view: constant(editable),\n        origin: constant(SugarPosition(0, 0)),\n        isResizable\n      };\n    };\n    const ResizeWire = {\n      only,\n      detached,\n      body\n    };\n\n    const createContainer = () => {\n      const container = SugarElement.fromTag('div');\n      setAll(container, {\n        position: 'static',\n        height: '0',\n        width: '0',\n        padding: '0',\n        margin: '0',\n        border: '0'\n      });\n      append$1(body$1(), container);\n      return container;\n    };\n    const get = (editor, isResizable) => {\n      return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n    };\n    const remove = (editor, wire) => {\n      if (editor.inline) {\n        remove$6(wire.parent());\n      }\n    };\n\n    const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n    const barResizerPrefix = 'bar-';\n    const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n    const syncPixels = table => {\n      const warehouse = Warehouse.fromTable(table);\n      if (!Warehouse.hasColumns(warehouse)) {\n        each$2(cells$1(table), cell => {\n          const computedWidth = get$a(cell, 'width');\n          set$1(cell, 'width', computedWidth);\n          remove$7(cell, 'width');\n        });\n      }\n    };\n    const TableResizeHandler = editor => {\n      const selectionRng = value();\n      const tableResize = value();\n      const resizeWire = value();\n      let startW;\n      let startRawW;\n      const lazySizing = table => get$5(editor, table);\n      const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n      const getNumColumns = table => getGridSize(table).columns;\n      const afterCornerResize = (table, origin, width) => {\n        const isRightEdgeResize = endsWith(origin, 'e');\n        if (startRawW === '') {\n          convertToPercentSize(table);\n        }\n        if (width !== startW && startRawW !== '') {\n          set$1(table, 'width', startRawW);\n          const resizing = lazyResizingBehaviour();\n          const tableSize = lazySizing(table);\n          const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n          adjustWidth(table, width - startW, col, resizing, tableSize);\n        } else if (isPercentage$1(startRawW)) {\n          const percentW = parseFloat(startRawW.replace('%', ''));\n          const targetPercentW = width * percentW / startW;\n          set$1(table, 'width', targetPercentW + '%');\n        }\n        if (isPixel(startRawW)) {\n          syncPixels(table);\n        }\n      };\n      const destroy = () => {\n        tableResize.on(sz => {\n          sz.destroy();\n        });\n        resizeWire.on(w => {\n          remove(editor, w);\n        });\n      };\n      editor.on('init', () => {\n        const rawWire = get(editor, isResizable);\n        resizeWire.set(rawWire);\n        if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n          const resizing = lazyResizingBehaviour();\n          const sz = TableResize.create(rawWire, resizing, lazySizing);\n          sz.on();\n          sz.events.startDrag.bind(_event => {\n            selectionRng.set(editor.selection.getRng());\n          });\n          sz.events.beforeResize.bind(event => {\n            const rawTable = event.table.dom;\n            fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n          });\n          sz.events.afterResize.bind(event => {\n            const table = event.table;\n            const rawTable = table.dom;\n            removeDataStyle(table);\n            selectionRng.on(rng => {\n              editor.selection.setRng(rng);\n              editor.focus();\n            });\n            fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n            editor.undoManager.add();\n          });\n          tableResize.set(sz);\n        }\n      });\n      editor.on('ObjectResizeStart', e => {\n        const targetElm = e.target;\n        if (isTable(targetElm)) {\n          const table = SugarElement.fromDom(targetElm);\n          each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n            editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n          });\n          if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n            convertToPixelSize(table);\n          } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n            convertToPercentSize(table);\n          }\n          if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n            convertToPercentSize(table);\n          }\n          startW = e.width;\n          startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n        }\n      });\n      editor.on('ObjectResized', e => {\n        const targetElm = e.target;\n        if (isTable(targetElm)) {\n          const table = SugarElement.fromDom(targetElm);\n          const origin = e.origin;\n          if (startsWith(origin, 'corner-')) {\n            afterCornerResize(table, origin, e.width);\n          }\n          removeDataStyle(table);\n          fireTableModified(editor, table.dom, styleModified);\n        }\n      });\n      editor.on('SwitchMode', () => {\n        tableResize.on(resize => {\n          if (editor.mode.isReadOnly()) {\n            resize.hideBars();\n          } else {\n            resize.showBars();\n          }\n        });\n      });\n      editor.on('dragstart dragend', e => {\n        tableResize.on(resize => {\n          if (e.type === 'dragstart') {\n            resize.hideBars();\n            resize.off();\n          } else {\n            resize.on();\n            resize.showBars();\n          }\n        });\n      });\n      editor.on('remove', () => {\n        destroy();\n      });\n      const refresh = table => {\n        tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n      };\n      const hide = () => {\n        tableResize.on(resize => resize.hideBars());\n      };\n      const show = () => {\n        tableResize.on(resize => resize.showBars());\n      };\n      return {\n        refresh,\n        hide,\n        show\n      };\n    };\n\n    const setupTable = editor => {\n      register(editor);\n      const resizeHandler = TableResizeHandler(editor);\n      const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n      const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n      registerCommands(editor, actions);\n      registerQueryCommands(editor, actions);\n      registerEvents(editor, actions);\n      return {\n        getSelectedCells: cellSelectionHandler.getSelectedCells,\n        clearSelectedCells: cellSelectionHandler.clearSelectedCells\n      };\n    };\n\n    const DomModel = editor => {\n      const table = setupTable(editor);\n      return { table };\n    };\n    var Model = () => {\n      global$1.add('dom', DomModel);\n    };\n\n    Model();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const applyListFormat = (editor, listName, styleValue) => {\n      const cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n      editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n    };\n\n    const register$2 = editor => {\n      editor.addCommand('ApplyUnorderedListStyle', (ui, value) => {\n        applyListFormat(editor, 'UL', value['list-style-type']);\n      });\n      editor.addCommand('ApplyOrderedListStyle', (ui, value) => {\n        applyListFormat(editor, 'OL', value['list-style-type']);\n      });\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const register$1 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('advlist_number_styles', {\n        processor: 'string[]',\n        default: 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman'.split(',')\n      });\n      registerOption('advlist_bullet_styles', {\n        processor: 'string[]',\n        default: 'default,circle,square'.split(',')\n      });\n    };\n    const getNumberStyles = option('advlist_number_styles');\n    const getBulletStyles = option('advlist_bullet_styles');\n\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n\n    const isCustomList = list => /\\btox\\-/.test(list.className);\n    const isChildOfBody = (editor, elm) => {\n      return editor.dom.isChildOf(elm, editor.getBody());\n    };\n    const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n    const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n    const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n    const inList = (editor, parents, nodeName) => findUntil(parents, parent => isListNode(parent) && !isCustomList(parent), isTableCellNode).exists(list => list.nodeName === nodeName && isChildOfBody(editor, list));\n    const getSelectedStyleType = editor => {\n      const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n      const style = editor.dom.getStyle(listElm, 'listStyleType');\n      return Optional.from(style);\n    };\n    const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n    const isWithinNonEditableList = (editor, element) => {\n      const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n      return isWithinNonEditable(editor, parentList) && editor.selection.isEditable();\n    };\n    const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n      const initialNode = editor.selection.getNode();\n      nodeChangeHandler({\n        parents: editor.dom.getParents(initialNode),\n        element: initialNode\n      });\n      editor.on('NodeChange', nodeChangeHandler);\n      return () => editor.off('NodeChange', nodeChangeHandler);\n    };\n\n    const styleValueToText = styleValue => {\n      return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, chr => {\n        return chr.toUpperCase();\n      });\n    };\n    const normalizeStyleValue = styleValue => isNullable(styleValue) || styleValue === 'default' ? '' : styleValue;\n    const makeSetupHandler = (editor, nodeName) => api => {\n      const updateButtonState = (editor, parents) => {\n        const element = editor.selection.getStart(true);\n        api.setActive(inList(editor, parents, nodeName));\n        api.setEnabled(!isWithinNonEditableList(editor, element) && editor.selection.isEditable());\n      };\n      const nodeChangeHandler = e => updateButtonState(editor, e.parents);\n      return setNodeChangeHandler(editor, nodeChangeHandler);\n    };\n    const addSplitButton = (editor, id, tooltip, cmd, nodeName, styles) => {\n      editor.ui.registry.addSplitButton(id, {\n        tooltip,\n        icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n        presets: 'listpreview',\n        columns: 3,\n        fetch: callback => {\n          const items = global.map(styles, styleValue => {\n            const iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n            const iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n            const itemValue = normalizeStyleValue(styleValue);\n            const displayText = styleValueToText(styleValue);\n            return {\n              type: 'choiceitem',\n              value: itemValue,\n              icon: 'list-' + iconStyle + '-' + iconName,\n              text: displayText\n            };\n          });\n          callback(items);\n        },\n        onAction: () => editor.execCommand(cmd),\n        onItemAction: (_splitButtonApi, value) => {\n          applyListFormat(editor, nodeName, value);\n        },\n        select: value => {\n          const listStyleType = getSelectedStyleType(editor);\n          return listStyleType.map(listStyle => value === listStyle).getOr(false);\n        },\n        onSetup: makeSetupHandler(editor, nodeName)\n      });\n    };\n    const addButton = (editor, id, tooltip, cmd, nodeName, styleValue) => {\n      editor.ui.registry.addToggleButton(id, {\n        active: false,\n        tooltip,\n        icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n        onSetup: makeSetupHandler(editor, nodeName),\n        onAction: () => editor.queryCommandState(cmd) || styleValue === '' ? editor.execCommand(cmd) : applyListFormat(editor, nodeName, styleValue)\n      });\n    };\n    const addControl = (editor, id, tooltip, cmd, nodeName, styles) => {\n      if (styles.length > 1) {\n        addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n      } else {\n        addButton(editor, id, tooltip, cmd, nodeName, normalizeStyleValue(styles[0]));\n      }\n    };\n    const register = editor => {\n      addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n      addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n    };\n\n    var Plugin = () => {\n      global$1.add('advlist', editor => {\n        if (editor.hasPlugin('lists')) {\n          register$1(editor);\n          register(editor);\n          register$2(editor);\n        } else {\n          console.error('Please use the Lists plugin together with the Advanced List plugin.');\n        }\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('allow_html_in_named_anchor', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const allowHtmlInNamedAnchor = option('allow_html_in_named_anchor');\n\n    const namedAnchorSelector = 'a:not([href])';\n    const isEmptyString = str => !str;\n    const getIdFromAnchor = elm => {\n      const id = elm.getAttribute('id') || elm.getAttribute('name');\n      return id || '';\n    };\n    const isAnchor = elm => elm.nodeName.toLowerCase() === 'a';\n    const isNamedAnchor = elm => isAnchor(elm) && !elm.getAttribute('href') && getIdFromAnchor(elm) !== '';\n    const isEmptyNamedAnchor = elm => isNamedAnchor(elm) && !elm.firstChild;\n\n    const removeEmptyNamedAnchorsInSelection = editor => {\n      const dom = editor.dom;\n      global$1(dom).walk(editor.selection.getRng(), nodes => {\n        global.each(nodes, node => {\n          if (isEmptyNamedAnchor(node)) {\n            dom.remove(node, false);\n          }\n        });\n      });\n    };\n    const isValidId = id => /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n    const getNamedAnchor = editor => editor.dom.getParent(editor.selection.getStart(), namedAnchorSelector);\n    const getId = editor => {\n      const anchor = getNamedAnchor(editor);\n      if (anchor) {\n        return getIdFromAnchor(anchor);\n      } else {\n        return '';\n      }\n    };\n    const createAnchor = (editor, id) => {\n      editor.undoManager.transact(() => {\n        if (!allowHtmlInNamedAnchor(editor)) {\n          editor.selection.collapse(true);\n        }\n        if (editor.selection.isCollapsed()) {\n          editor.insertContent(editor.dom.createHTML('a', { id }));\n        } else {\n          removeEmptyNamedAnchorsInSelection(editor);\n          editor.formatter.remove('namedAnchor', undefined, undefined, true);\n          editor.formatter.apply('namedAnchor', { value: id });\n          editor.addVisual();\n        }\n      });\n    };\n    const updateAnchor = (editor, id, anchorElement) => {\n      anchorElement.removeAttribute('name');\n      anchorElement.id = id;\n      editor.addVisual();\n      editor.undoManager.add();\n    };\n    const insert = (editor, id) => {\n      const anchor = getNamedAnchor(editor);\n      if (anchor) {\n        updateAnchor(editor, id, anchor);\n      } else {\n        createAnchor(editor, id);\n      }\n      editor.focus();\n    };\n\n    const insertAnchor = (editor, newId) => {\n      if (!isValidId(newId)) {\n        editor.windowManager.alert('ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n        return false;\n      } else {\n        insert(editor, newId);\n        return true;\n      }\n    };\n    const open = editor => {\n      const currentId = getId(editor);\n      editor.windowManager.open({\n        title: 'Anchor',\n        size: 'normal',\n        body: {\n          type: 'panel',\n          items: [{\n              name: 'id',\n              type: 'input',\n              label: 'ID',\n              placeholder: 'example'\n            }]\n        },\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        initialData: { id: currentId },\n        onSubmit: api => {\n          if (insertAnchor(editor, api.getData().id)) {\n            api.close();\n          }\n        }\n      });\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mceAnchor', () => {\n        open(editor);\n      });\n    };\n\n    const isNamedAnchorNode = node => isEmptyString(node.attr('href')) && !isEmptyString(node.attr('id') || node.attr('name'));\n    const isEmptyNamedAnchorNode = node => isNamedAnchorNode(node) && !node.firstChild;\n    const setContentEditable = state => nodes => {\n      for (let i = 0; i < nodes.length; i++) {\n        const node = nodes[i];\n        if (isEmptyNamedAnchorNode(node)) {\n          node.attr('contenteditable', state);\n        }\n      }\n    };\n    const setup = editor => {\n      editor.on('PreInit', () => {\n        editor.parser.addNodeFilter('a', setContentEditable('false'));\n        editor.serializer.addNodeFilter('a', setContentEditable(null));\n      });\n    };\n\n    const registerFormats = editor => {\n      editor.formatter.register('namedAnchor', {\n        inline: 'a',\n        selector: namedAnchorSelector,\n        remove: 'all',\n        split: true,\n        deep: true,\n        attributes: { id: '%value' },\n        onmatch: (node, _fmt, _itemName) => {\n          return isNamedAnchor(node);\n        }\n      });\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const onAction = () => editor.execCommand('mceAnchor');\n      editor.ui.registry.addToggleButton('anchor', {\n        icon: 'bookmark',\n        tooltip: 'Anchor',\n        onAction,\n        onSetup: buttonApi => {\n          const unbindSelectorChanged = editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;\n          const unbindEditableChanged = onSetupEditable(editor)(buttonApi);\n          return () => {\n            unbindSelectorChanged();\n            unbindEditableChanged();\n          };\n        }\n      });\n      editor.ui.registry.addMenuItem('anchor', {\n        icon: 'bookmark',\n        text: 'Anchor...',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$2.add('anchor', editor => {\n        register$2(editor);\n        setup(editor);\n        register$1(editor);\n        register(editor);\n        editor.on('PreInit', () => {\n          registerFormats(editor);\n        });\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n  'use strict';\n\n  var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n  const link = () => /(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)[A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?/g;\n\n  const option = name => editor => editor.options.get(name);\n  const register = editor => {\n    const registerOption = editor.options.register;\n    registerOption('autolink_pattern', {\n      processor: 'regexp',\n      default: new RegExp('^' + link().source + '$', 'i')\n    });\n    registerOption('link_default_target', { processor: 'string' });\n    registerOption('link_default_protocol', {\n      processor: 'string',\n      default: 'https'\n    });\n  };\n  const getAutoLinkPattern = option('autolink_pattern');\n  const getDefaultLinkTarget = option('link_default_target');\n  const getDefaultLinkProtocol = option('link_default_protocol');\n  const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n\n  const hasProto = (v, constructor, predicate) => {\n    var _a;\n    if (predicate(v, constructor.prototype)) {\n      return true;\n    } else {\n      return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n    }\n  };\n  const typeOf = x => {\n    const t = typeof x;\n    if (x === null) {\n      return 'null';\n    } else if (t === 'object' && Array.isArray(x)) {\n      return 'array';\n    } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n      return 'string';\n    } else {\n      return t;\n    }\n  };\n  const isType = type => value => typeOf(value) === type;\n  const eq = t => a => t === a;\n  const isString = isType('string');\n  const isUndefined = eq(undefined);\n  const isNullable = a => a === null || a === undefined;\n  const isNonNullable = a => !isNullable(a);\n\n  const not = f => t => !f(t);\n\n  const hasOwnProperty = Object.hasOwnProperty;\n  const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n  const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n  const contains = (str, substr, start = 0, end) => {\n    const idx = str.indexOf(substr, start);\n    if (idx !== -1) {\n      return isUndefined(end) ? true : idx + substr.length <= end;\n    } else {\n      return false;\n    }\n  };\n  const startsWith = (str, prefix) => {\n    return checkRange(str, prefix, 0);\n  };\n\n  const zeroWidth = '\\uFEFF';\n  const isZwsp = char => char === zeroWidth;\n  const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n  var global = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n  const isTextNode = node => node.nodeType === 3;\n  const isElement = node => node.nodeType === 1;\n  const isBracketOrSpace = char => /^[(\\[{ \\u00a0]$/.test(char);\n  const hasProtocol = url => /^([A-Za-z][A-Za-z\\d.+-]*:\\/\\/)|mailto:/.test(url);\n  const isPunctuation = char => /[?!,.;:]/.test(char);\n  const findChar = (text, index, predicate) => {\n    for (let i = index - 1; i >= 0; i--) {\n      const char = text.charAt(i);\n      if (!isZwsp(char) && predicate(char)) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  const freefallRtl = (container, offset) => {\n    let tempNode = container;\n    let tempOffset = offset;\n    while (isElement(tempNode) && tempNode.childNodes[tempOffset]) {\n      tempNode = tempNode.childNodes[tempOffset];\n      tempOffset = isTextNode(tempNode) ? tempNode.data.length : tempNode.childNodes.length;\n    }\n    return {\n      container: tempNode,\n      offset: tempOffset\n    };\n  };\n\n  const parseCurrentLine = (editor, offset) => {\n    var _a;\n    const voidElements = editor.schema.getVoidElements();\n    const autoLinkPattern = getAutoLinkPattern(editor);\n    const {dom, selection} = editor;\n    if (dom.getParent(selection.getNode(), 'a[href]') !== null) {\n      return null;\n    }\n    const rng = selection.getRng();\n    const textSeeker = global(dom, node => {\n      return dom.isBlock(node) || has(voidElements, node.nodeName.toLowerCase()) || dom.getContentEditable(node) === 'false';\n    });\n    const {\n      container: endContainer,\n      offset: endOffset\n    } = freefallRtl(rng.endContainer, rng.endOffset);\n    const root = (_a = dom.getParent(endContainer, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n    const endSpot = textSeeker.backwards(endContainer, endOffset + offset, (node, offset) => {\n      const text = node.data;\n      const idx = findChar(text, offset, not(isBracketOrSpace));\n      return idx === -1 || isPunctuation(text[idx]) ? idx : idx + 1;\n    }, root);\n    if (!endSpot) {\n      return null;\n    }\n    let lastTextNode = endSpot.container;\n    const startSpot = textSeeker.backwards(endSpot.container, endSpot.offset, (node, offset) => {\n      lastTextNode = node;\n      const idx = findChar(node.data, offset, isBracketOrSpace);\n      return idx === -1 ? idx : idx + 1;\n    }, root);\n    const newRng = dom.createRng();\n    if (!startSpot) {\n      newRng.setStart(lastTextNode, 0);\n    } else {\n      newRng.setStart(startSpot.container, startSpot.offset);\n    }\n    newRng.setEnd(endSpot.container, endSpot.offset);\n    const rngText = removeZwsp(newRng.toString());\n    const matches = rngText.match(autoLinkPattern);\n    if (matches) {\n      let url = matches[0];\n      if (startsWith(url, 'www.')) {\n        const protocol = getDefaultLinkProtocol(editor);\n        url = protocol + '://' + url;\n      } else if (contains(url, '@') && !hasProtocol(url)) {\n        url = 'mailto:' + url;\n      }\n      return {\n        rng: newRng,\n        url\n      };\n    } else {\n      return null;\n    }\n  };\n  const convertToLink = (editor, result) => {\n    const {dom, selection} = editor;\n    const {rng, url} = result;\n    const bookmark = selection.getBookmark();\n    selection.setRng(rng);\n    const command = 'createlink';\n    const args = {\n      command,\n      ui: false,\n      value: url\n    };\n    const beforeExecEvent = editor.dispatch('BeforeExecCommand', args);\n    if (!beforeExecEvent.isDefaultPrevented()) {\n      editor.getDoc().execCommand(command, false, url);\n      editor.dispatch('ExecCommand', args);\n      const defaultLinkTarget = getDefaultLinkTarget(editor);\n      if (isString(defaultLinkTarget)) {\n        const anchor = selection.getNode();\n        dom.setAttrib(anchor, 'target', defaultLinkTarget);\n        if (defaultLinkTarget === '_blank' && !allowUnsafeLinkTarget(editor)) {\n          dom.setAttrib(anchor, 'rel', 'noopener');\n        }\n      }\n    }\n    selection.moveToBookmark(bookmark);\n    editor.nodeChanged();\n  };\n  const handleSpacebar = editor => {\n    const result = parseCurrentLine(editor, -1);\n    if (isNonNullable(result)) {\n      convertToLink(editor, result);\n    }\n  };\n  const handleBracket = handleSpacebar;\n  const handleEnter = editor => {\n    const result = parseCurrentLine(editor, 0);\n    if (isNonNullable(result)) {\n      convertToLink(editor, result);\n    }\n  };\n  const setup = editor => {\n    editor.on('keydown', e => {\n      if (e.keyCode === 13 && !e.isDefaultPrevented()) {\n        handleEnter(editor);\n      }\n    });\n    editor.on('keyup', e => {\n      if (e.keyCode === 32) {\n        handleSpacebar(editor);\n      } else if (e.keyCode === 48 && e.shiftKey || e.keyCode === 221) {\n        handleBracket(editor);\n      }\n    });\n  };\n\n  var Plugin = () => {\n    global$1.add('autolink', editor => {\n      register(editor);\n      setup(editor);\n    });\n  };\n\n  Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const eq = t => a => t === a;\n    const isString = isType('string');\n    const isUndefined = eq(undefined);\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const fireRestoreDraft = editor => editor.dispatch('RestoreDraft');\n    const fireStoreDraft = editor => editor.dispatch('StoreDraft');\n    const fireRemoveDraft = editor => editor.dispatch('RemoveDraft');\n\n    const parse = timeString => {\n      const multiples = {\n        s: 1000,\n        m: 60000\n      };\n      const parsedTime = /^(\\d+)([ms]?)$/.exec(timeString);\n      return (parsedTime && parsedTime[2] ? multiples[parsedTime[2]] : 1) * parseInt(timeString, 10);\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const register$1 = editor => {\n      const registerOption = editor.options.register;\n      const timeProcessor = value => {\n        const valid = isString(value);\n        if (valid) {\n          return {\n            value: parse(value),\n            valid\n          };\n        } else {\n          return {\n            valid: false,\n            message: 'Must be a string.'\n          };\n        }\n      };\n      registerOption('autosave_ask_before_unload', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('autosave_prefix', {\n        processor: 'string',\n        default: 'tinymce-autosave-{path}{query}{hash}-{id}-'\n      });\n      registerOption('autosave_restore_when_empty', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('autosave_interval', {\n        processor: timeProcessor,\n        default: '30s'\n      });\n      registerOption('autosave_retention', {\n        processor: timeProcessor,\n        default: '20m'\n      });\n    };\n    const shouldAskBeforeUnload = option('autosave_ask_before_unload');\n    const shouldRestoreWhenEmpty = option('autosave_restore_when_empty');\n    const getAutoSaveInterval = option('autosave_interval');\n    const getAutoSaveRetention = option('autosave_retention');\n    const getAutoSavePrefix = editor => {\n      const location = document.location;\n      return editor.options.get('autosave_prefix').replace(/{path}/g, location.pathname).replace(/{query}/g, location.search).replace(/{hash}/g, location.hash).replace(/{id}/g, editor.id);\n    };\n\n    const isEmpty = (editor, html) => {\n      if (isUndefined(html)) {\n        return editor.dom.isEmpty(editor.getBody());\n      } else {\n        const trimmedHtml = global$1.trim(html);\n        if (trimmedHtml === '') {\n          return true;\n        } else {\n          const fragment = new DOMParser().parseFromString(trimmedHtml, 'text/html');\n          return editor.dom.isEmpty(fragment);\n        }\n      }\n    };\n    const hasDraft = editor => {\n      var _a;\n      const time = parseInt((_a = global$2.getItem(getAutoSavePrefix(editor) + 'time')) !== null && _a !== void 0 ? _a : '0', 10) || 0;\n      if (new Date().getTime() - time > getAutoSaveRetention(editor)) {\n        removeDraft(editor, false);\n        return false;\n      }\n      return true;\n    };\n    const removeDraft = (editor, fire) => {\n      const prefix = getAutoSavePrefix(editor);\n      global$2.removeItem(prefix + 'draft');\n      global$2.removeItem(prefix + 'time');\n      if (fire !== false) {\n        fireRemoveDraft(editor);\n      }\n    };\n    const storeDraft = editor => {\n      const prefix = getAutoSavePrefix(editor);\n      if (!isEmpty(editor) && editor.isDirty()) {\n        global$2.setItem(prefix + 'draft', editor.getContent({\n          format: 'raw',\n          no_events: true\n        }));\n        global$2.setItem(prefix + 'time', new Date().getTime().toString());\n        fireStoreDraft(editor);\n      }\n    };\n    const restoreDraft = editor => {\n      var _a;\n      const prefix = getAutoSavePrefix(editor);\n      if (hasDraft(editor)) {\n        editor.setContent((_a = global$2.getItem(prefix + 'draft')) !== null && _a !== void 0 ? _a : '', { format: 'raw' });\n        fireRestoreDraft(editor);\n      }\n    };\n    const startStoreDraft = editor => {\n      const interval = getAutoSaveInterval(editor);\n      global$3.setEditorInterval(editor, () => {\n        storeDraft(editor);\n      }, interval);\n    };\n    const restoreLastDraft = editor => {\n      editor.undoManager.transact(() => {\n        restoreDraft(editor);\n        removeDraft(editor);\n      });\n      editor.focus();\n    };\n\n    const get = editor => ({\n      hasDraft: () => hasDraft(editor),\n      storeDraft: () => storeDraft(editor),\n      restoreDraft: () => restoreDraft(editor),\n      removeDraft: fire => removeDraft(editor, fire),\n      isEmpty: html => isEmpty(editor, html)\n    });\n\n    var global = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n    const setup = editor => {\n      editor.editorManager.on('BeforeUnload', e => {\n        let msg;\n        global$1.each(global.get(), editor => {\n          if (editor.plugins.autosave) {\n            editor.plugins.autosave.storeDraft();\n          }\n          if (!msg && editor.isDirty() && shouldAskBeforeUnload(editor)) {\n            msg = editor.translate('You have unsaved changes are you sure you want to navigate away?');\n          }\n        });\n        if (msg) {\n          e.preventDefault();\n          e.returnValue = msg;\n        }\n      });\n    };\n\n    const makeSetupHandler = editor => api => {\n      api.setEnabled(hasDraft(editor));\n      const editorEventCallback = () => api.setEnabled(hasDraft(editor));\n      editor.on('StoreDraft RestoreDraft RemoveDraft', editorEventCallback);\n      return () => editor.off('StoreDraft RestoreDraft RemoveDraft', editorEventCallback);\n    };\n    const register = editor => {\n      startStoreDraft(editor);\n      const onAction = () => {\n        restoreLastDraft(editor);\n      };\n      editor.ui.registry.addButton('restoredraft', {\n        tooltip: 'Restore last draft',\n        icon: 'restore-draft',\n        onAction,\n        onSetup: makeSetupHandler(editor)\n      });\n      editor.ui.registry.addMenuItem('restoredraft', {\n        text: 'Restore last draft',\n        icon: 'restore-draft',\n        onAction,\n        onSetup: makeSetupHandler(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$4.add('autosave', editor => {\n        register$1(editor);\n        setup(editor);\n        register(editor);\n        editor.on('init', () => {\n          if (shouldRestoreWhenEmpty(editor) && editor.dom.isEmpty(editor.getBody())) {\n            restoreDraft(editor);\n          }\n        });\n        return get(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const fireInsertCustomChar = (editor, chr) => {\n      return editor.dispatch('insertCustomChar', { chr });\n    };\n\n    const insertChar = (editor, chr) => {\n      const evtChr = fireInsertCustomChar(editor, chr).chr;\n      editor.execCommand('mceInsertContent', false, evtChr);\n    };\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq = t => a => t === a;\n    const isArray$1 = isType('array');\n    const isNull = eq(null);\n    const isUndefined = eq(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const never = constant(false);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativePush = Array.prototype.push;\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray$1(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind = (xs, f) => flatten(map(xs, f));\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      const charMapProcessor = value => isFunction(value) || isArray$1(value);\n      registerOption('charmap', { processor: charMapProcessor });\n      registerOption('charmap_append', { processor: charMapProcessor });\n    };\n    const getCharMap$1 = option('charmap');\n    const getCharMapAppend = option('charmap_append');\n\n    const isArray = global.isArray;\n    const UserDefined = 'User Defined';\n    const getDefaultCharMap = () => {\n      return [\n        {\n          name: 'Currency',\n          characters: [\n            [\n              36,\n              'dollar sign'\n            ],\n            [\n              162,\n              'cent sign'\n            ],\n            [\n              8364,\n              'euro sign'\n            ],\n            [\n              163,\n              'pound sign'\n            ],\n            [\n              165,\n              'yen sign'\n            ],\n            [\n              164,\n              'currency sign'\n            ],\n            [\n              8352,\n              'euro-currency sign'\n            ],\n            [\n              8353,\n              'colon sign'\n            ],\n            [\n              8354,\n              'cruzeiro sign'\n            ],\n            [\n              8355,\n              'french franc sign'\n            ],\n            [\n              8356,\n              'lira sign'\n            ],\n            [\n              8357,\n              'mill sign'\n            ],\n            [\n              8358,\n              'naira sign'\n            ],\n            [\n              8359,\n              'peseta sign'\n            ],\n            [\n              8360,\n              'rupee sign'\n            ],\n            [\n              8361,\n              'won sign'\n            ],\n            [\n              8362,\n              'new sheqel sign'\n            ],\n            [\n              8363,\n              'dong sign'\n            ],\n            [\n              8365,\n              'kip sign'\n            ],\n            [\n              8366,\n              'tugrik sign'\n            ],\n            [\n              8367,\n              'drachma sign'\n            ],\n            [\n              8368,\n              'german penny symbol'\n            ],\n            [\n              8369,\n              'peso sign'\n            ],\n            [\n              8370,\n              'guarani sign'\n            ],\n            [\n              8371,\n              'austral sign'\n            ],\n            [\n              8372,\n              'hryvnia sign'\n            ],\n            [\n              8373,\n              'cedi sign'\n            ],\n            [\n              8374,\n              'livre tournois sign'\n            ],\n            [\n              8375,\n              'spesmilo sign'\n            ],\n            [\n              8376,\n              'tenge sign'\n            ],\n            [\n              8377,\n              'indian rupee sign'\n            ],\n            [\n              8378,\n              'turkish lira sign'\n            ],\n            [\n              8379,\n              'nordic mark sign'\n            ],\n            [\n              8380,\n              'manat sign'\n            ],\n            [\n              8381,\n              'ruble sign'\n            ],\n            [\n              20870,\n              'yen character'\n            ],\n            [\n              20803,\n              'yuan character'\n            ],\n            [\n              22291,\n              'yuan character, in hong kong and taiwan'\n            ],\n            [\n              22278,\n              'yen/yuan character variant one'\n            ]\n          ]\n        },\n        {\n          name: 'Text',\n          characters: [\n            [\n              169,\n              'copyright sign'\n            ],\n            [\n              174,\n              'registered sign'\n            ],\n            [\n              8482,\n              'trade mark sign'\n            ],\n            [\n              8240,\n              'per mille sign'\n            ],\n            [\n              181,\n              'micro sign'\n            ],\n            [\n              183,\n              'middle dot'\n            ],\n            [\n              8226,\n              'bullet'\n            ],\n            [\n              8230,\n              'three dot leader'\n            ],\n            [\n              8242,\n              'minutes / feet'\n            ],\n            [\n              8243,\n              'seconds / inches'\n            ],\n            [\n              167,\n              'section sign'\n            ],\n            [\n              182,\n              'paragraph sign'\n            ],\n            [\n              223,\n              'sharp s / ess-zed'\n            ]\n          ]\n        },\n        {\n          name: 'Quotations',\n          characters: [\n            [\n              8249,\n              'single left-pointing angle quotation mark'\n            ],\n            [\n              8250,\n              'single right-pointing angle quotation mark'\n            ],\n            [\n              171,\n              'left pointing guillemet'\n            ],\n            [\n              187,\n              'right pointing guillemet'\n            ],\n            [\n              8216,\n              'left single quotation mark'\n            ],\n            [\n              8217,\n              'right single quotation mark'\n            ],\n            [\n              8220,\n              'left double quotation mark'\n            ],\n            [\n              8221,\n              'right double quotation mark'\n            ],\n            [\n              8218,\n              'single low-9 quotation mark'\n            ],\n            [\n              8222,\n              'double low-9 quotation mark'\n            ],\n            [\n              60,\n              'less-than sign'\n            ],\n            [\n              62,\n              'greater-than sign'\n            ],\n            [\n              8804,\n              'less-than or equal to'\n            ],\n            [\n              8805,\n              'greater-than or equal to'\n            ],\n            [\n              8211,\n              'en dash'\n            ],\n            [\n              8212,\n              'em dash'\n            ],\n            [\n              175,\n              'macron'\n            ],\n            [\n              8254,\n              'overline'\n            ],\n            [\n              164,\n              'currency sign'\n            ],\n            [\n              166,\n              'broken bar'\n            ],\n            [\n              168,\n              'diaeresis'\n            ],\n            [\n              161,\n              'inverted exclamation mark'\n            ],\n            [\n              191,\n              'turned question mark'\n            ],\n            [\n              710,\n              'circumflex accent'\n            ],\n            [\n              732,\n              'small tilde'\n            ],\n            [\n              176,\n              'degree sign'\n            ],\n            [\n              8722,\n              'minus sign'\n            ],\n            [\n              177,\n              'plus-minus sign'\n            ],\n            [\n              247,\n              'division sign'\n            ],\n            [\n              8260,\n              'fraction slash'\n            ],\n            [\n              215,\n              'multiplication sign'\n            ],\n            [\n              185,\n              'superscript one'\n            ],\n            [\n              178,\n              'superscript two'\n            ],\n            [\n              179,\n              'superscript three'\n            ],\n            [\n              188,\n              'fraction one quarter'\n            ],\n            [\n              189,\n              'fraction one half'\n            ],\n            [\n              190,\n              'fraction three quarters'\n            ]\n          ]\n        },\n        {\n          name: 'Mathematical',\n          characters: [\n            [\n              402,\n              'function / florin'\n            ],\n            [\n              8747,\n              'integral'\n            ],\n            [\n              8721,\n              'n-ary sumation'\n            ],\n            [\n              8734,\n              'infinity'\n            ],\n            [\n              8730,\n              'square root'\n            ],\n            [\n              8764,\n              'similar to'\n            ],\n            [\n              8773,\n              'approximately equal to'\n            ],\n            [\n              8776,\n              'almost equal to'\n            ],\n            [\n              8800,\n              'not equal to'\n            ],\n            [\n              8801,\n              'identical to'\n            ],\n            [\n              8712,\n              'element of'\n            ],\n            [\n              8713,\n              'not an element of'\n            ],\n            [\n              8715,\n              'contains as member'\n            ],\n            [\n              8719,\n              'n-ary product'\n            ],\n            [\n              8743,\n              'logical and'\n            ],\n            [\n              8744,\n              'logical or'\n            ],\n            [\n              172,\n              'not sign'\n            ],\n            [\n              8745,\n              'intersection'\n            ],\n            [\n              8746,\n              'union'\n            ],\n            [\n              8706,\n              'partial differential'\n            ],\n            [\n              8704,\n              'for all'\n            ],\n            [\n              8707,\n              'there exists'\n            ],\n            [\n              8709,\n              'diameter'\n            ],\n            [\n              8711,\n              'backward difference'\n            ],\n            [\n              8727,\n              'asterisk operator'\n            ],\n            [\n              8733,\n              'proportional to'\n            ],\n            [\n              8736,\n              'angle'\n            ]\n          ]\n        },\n        {\n          name: 'Extended Latin',\n          characters: [\n            [\n              192,\n              'A - grave'\n            ],\n            [\n              193,\n              'A - acute'\n            ],\n            [\n              194,\n              'A - circumflex'\n            ],\n            [\n              195,\n              'A - tilde'\n            ],\n            [\n              196,\n              'A - diaeresis'\n            ],\n            [\n              197,\n              'A - ring above'\n            ],\n            [\n              256,\n              'A - macron'\n            ],\n            [\n              198,\n              'ligature AE'\n            ],\n            [\n              199,\n              'C - cedilla'\n            ],\n            [\n              200,\n              'E - grave'\n            ],\n            [\n              201,\n              'E - acute'\n            ],\n            [\n              202,\n              'E - circumflex'\n            ],\n            [\n              203,\n              'E - diaeresis'\n            ],\n            [\n              274,\n              'E - macron'\n            ],\n            [\n              204,\n              'I - grave'\n            ],\n            [\n              205,\n              'I - acute'\n            ],\n            [\n              206,\n              'I - circumflex'\n            ],\n            [\n              207,\n              'I - diaeresis'\n            ],\n            [\n              298,\n              'I - macron'\n            ],\n            [\n              208,\n              'ETH'\n            ],\n            [\n              209,\n              'N - tilde'\n            ],\n            [\n              210,\n              'O - grave'\n            ],\n            [\n              211,\n              'O - acute'\n            ],\n            [\n              212,\n              'O - circumflex'\n            ],\n            [\n              213,\n              'O - tilde'\n            ],\n            [\n              214,\n              'O - diaeresis'\n            ],\n            [\n              216,\n              'O - slash'\n            ],\n            [\n              332,\n              'O - macron'\n            ],\n            [\n              338,\n              'ligature OE'\n            ],\n            [\n              352,\n              'S - caron'\n            ],\n            [\n              217,\n              'U - grave'\n            ],\n            [\n              218,\n              'U - acute'\n            ],\n            [\n              219,\n              'U - circumflex'\n            ],\n            [\n              220,\n              'U - diaeresis'\n            ],\n            [\n              362,\n              'U - macron'\n            ],\n            [\n              221,\n              'Y - acute'\n            ],\n            [\n              376,\n              'Y - diaeresis'\n            ],\n            [\n              562,\n              'Y - macron'\n            ],\n            [\n              222,\n              'THORN'\n            ],\n            [\n              224,\n              'a - grave'\n            ],\n            [\n              225,\n              'a - acute'\n            ],\n            [\n              226,\n              'a - circumflex'\n            ],\n            [\n              227,\n              'a - tilde'\n            ],\n            [\n              228,\n              'a - diaeresis'\n            ],\n            [\n              229,\n              'a - ring above'\n            ],\n            [\n              257,\n              'a - macron'\n            ],\n            [\n              230,\n              'ligature ae'\n            ],\n            [\n              231,\n              'c - cedilla'\n            ],\n            [\n              232,\n              'e - grave'\n            ],\n            [\n              233,\n              'e - acute'\n            ],\n            [\n              234,\n              'e - circumflex'\n            ],\n            [\n              235,\n              'e - diaeresis'\n            ],\n            [\n              275,\n              'e - macron'\n            ],\n            [\n              236,\n              'i - grave'\n            ],\n            [\n              237,\n              'i - acute'\n            ],\n            [\n              238,\n              'i - circumflex'\n            ],\n            [\n              239,\n              'i - diaeresis'\n            ],\n            [\n              299,\n              'i - macron'\n            ],\n            [\n              240,\n              'eth'\n            ],\n            [\n              241,\n              'n - tilde'\n            ],\n            [\n              242,\n              'o - grave'\n            ],\n            [\n              243,\n              'o - acute'\n            ],\n            [\n              244,\n              'o - circumflex'\n            ],\n            [\n              245,\n              'o - tilde'\n            ],\n            [\n              246,\n              'o - diaeresis'\n            ],\n            [\n              248,\n              'o slash'\n            ],\n            [\n              333,\n              'o macron'\n            ],\n            [\n              339,\n              'ligature oe'\n            ],\n            [\n              353,\n              's - caron'\n            ],\n            [\n              249,\n              'u - grave'\n            ],\n            [\n              250,\n              'u - acute'\n            ],\n            [\n              251,\n              'u - circumflex'\n            ],\n            [\n              252,\n              'u - diaeresis'\n            ],\n            [\n              363,\n              'u - macron'\n            ],\n            [\n              253,\n              'y - acute'\n            ],\n            [\n              254,\n              'thorn'\n            ],\n            [\n              255,\n              'y - diaeresis'\n            ],\n            [\n              563,\n              'y - macron'\n            ],\n            [\n              913,\n              'Alpha'\n            ],\n            [\n              914,\n              'Beta'\n            ],\n            [\n              915,\n              'Gamma'\n            ],\n            [\n              916,\n              'Delta'\n            ],\n            [\n              917,\n              'Epsilon'\n            ],\n            [\n              918,\n              'Zeta'\n            ],\n            [\n              919,\n              'Eta'\n            ],\n            [\n              920,\n              'Theta'\n            ],\n            [\n              921,\n              'Iota'\n            ],\n            [\n              922,\n              'Kappa'\n            ],\n            [\n              923,\n              'Lambda'\n            ],\n            [\n              924,\n              'Mu'\n            ],\n            [\n              925,\n              'Nu'\n            ],\n            [\n              926,\n              'Xi'\n            ],\n            [\n              927,\n              'Omicron'\n            ],\n            [\n              928,\n              'Pi'\n            ],\n            [\n              929,\n              'Rho'\n            ],\n            [\n              931,\n              'Sigma'\n            ],\n            [\n              932,\n              'Tau'\n            ],\n            [\n              933,\n              'Upsilon'\n            ],\n            [\n              934,\n              'Phi'\n            ],\n            [\n              935,\n              'Chi'\n            ],\n            [\n              936,\n              'Psi'\n            ],\n            [\n              937,\n              'Omega'\n            ],\n            [\n              945,\n              'alpha'\n            ],\n            [\n              946,\n              'beta'\n            ],\n            [\n              947,\n              'gamma'\n            ],\n            [\n              948,\n              'delta'\n            ],\n            [\n              949,\n              'epsilon'\n            ],\n            [\n              950,\n              'zeta'\n            ],\n            [\n              951,\n              'eta'\n            ],\n            [\n              952,\n              'theta'\n            ],\n            [\n              953,\n              'iota'\n            ],\n            [\n              954,\n              'kappa'\n            ],\n            [\n              955,\n              'lambda'\n            ],\n            [\n              956,\n              'mu'\n            ],\n            [\n              957,\n              'nu'\n            ],\n            [\n              958,\n              'xi'\n            ],\n            [\n              959,\n              'omicron'\n            ],\n            [\n              960,\n              'pi'\n            ],\n            [\n              961,\n              'rho'\n            ],\n            [\n              962,\n              'final sigma'\n            ],\n            [\n              963,\n              'sigma'\n            ],\n            [\n              964,\n              'tau'\n            ],\n            [\n              965,\n              'upsilon'\n            ],\n            [\n              966,\n              'phi'\n            ],\n            [\n              967,\n              'chi'\n            ],\n            [\n              968,\n              'psi'\n            ],\n            [\n              969,\n              'omega'\n            ]\n          ]\n        },\n        {\n          name: 'Symbols',\n          characters: [\n            [\n              8501,\n              'alef symbol'\n            ],\n            [\n              982,\n              'pi symbol'\n            ],\n            [\n              8476,\n              'real part symbol'\n            ],\n            [\n              978,\n              'upsilon - hook symbol'\n            ],\n            [\n              8472,\n              'Weierstrass p'\n            ],\n            [\n              8465,\n              'imaginary part'\n            ]\n          ]\n        },\n        {\n          name: 'Arrows',\n          characters: [\n            [\n              8592,\n              'leftwards arrow'\n            ],\n            [\n              8593,\n              'upwards arrow'\n            ],\n            [\n              8594,\n              'rightwards arrow'\n            ],\n            [\n              8595,\n              'downwards arrow'\n            ],\n            [\n              8596,\n              'left right arrow'\n            ],\n            [\n              8629,\n              'carriage return'\n            ],\n            [\n              8656,\n              'leftwards double arrow'\n            ],\n            [\n              8657,\n              'upwards double arrow'\n            ],\n            [\n              8658,\n              'rightwards double arrow'\n            ],\n            [\n              8659,\n              'downwards double arrow'\n            ],\n            [\n              8660,\n              'left right double arrow'\n            ],\n            [\n              8756,\n              'therefore'\n            ],\n            [\n              8834,\n              'subset of'\n            ],\n            [\n              8835,\n              'superset of'\n            ],\n            [\n              8836,\n              'not a subset of'\n            ],\n            [\n              8838,\n              'subset of or equal to'\n            ],\n            [\n              8839,\n              'superset of or equal to'\n            ],\n            [\n              8853,\n              'circled plus'\n            ],\n            [\n              8855,\n              'circled times'\n            ],\n            [\n              8869,\n              'perpendicular'\n            ],\n            [\n              8901,\n              'dot operator'\n            ],\n            [\n              8968,\n              'left ceiling'\n            ],\n            [\n              8969,\n              'right ceiling'\n            ],\n            [\n              8970,\n              'left floor'\n            ],\n            [\n              8971,\n              'right floor'\n            ],\n            [\n              9001,\n              'left-pointing angle bracket'\n            ],\n            [\n              9002,\n              'right-pointing angle bracket'\n            ],\n            [\n              9674,\n              'lozenge'\n            ],\n            [\n              9824,\n              'black spade suit'\n            ],\n            [\n              9827,\n              'black club suit'\n            ],\n            [\n              9829,\n              'black heart suit'\n            ],\n            [\n              9830,\n              'black diamond suit'\n            ],\n            [\n              8194,\n              'en space'\n            ],\n            [\n              8195,\n              'em space'\n            ],\n            [\n              8201,\n              'thin space'\n            ],\n            [\n              8204,\n              'zero width non-joiner'\n            ],\n            [\n              8205,\n              'zero width joiner'\n            ],\n            [\n              8206,\n              'left-to-right mark'\n            ],\n            [\n              8207,\n              'right-to-left mark'\n            ]\n          ]\n        }\n      ];\n    };\n    const charmapFilter = charmap => {\n      return global.grep(charmap, item => {\n        return isArray(item) && item.length === 2;\n      });\n    };\n    const getCharsFromOption = optionValue => {\n      if (isArray(optionValue)) {\n        return charmapFilter(optionValue);\n      }\n      if (typeof optionValue === 'function') {\n        return optionValue();\n      }\n      return [];\n    };\n    const extendCharMap = (editor, charmap) => {\n      const userCharMap = getCharMap$1(editor);\n      if (userCharMap) {\n        charmap = [{\n            name: UserDefined,\n            characters: getCharsFromOption(userCharMap)\n          }];\n      }\n      const userCharMapAppend = getCharMapAppend(editor);\n      if (userCharMapAppend) {\n        const userDefinedGroup = global.grep(charmap, cg => cg.name === UserDefined);\n        if (userDefinedGroup.length) {\n          userDefinedGroup[0].characters = [\n            ...userDefinedGroup[0].characters,\n            ...getCharsFromOption(userCharMapAppend)\n          ];\n          return charmap;\n        }\n        return charmap.concat({\n          name: UserDefined,\n          characters: getCharsFromOption(userCharMapAppend)\n        });\n      }\n      return charmap;\n    };\n    const getCharMap = editor => {\n      const groups = extendCharMap(editor, getDefaultCharMap());\n      return groups.length > 1 ? [{\n          name: 'All',\n          characters: bind(groups, g => g.characters)\n        }].concat(groups) : groups;\n    };\n\n    const get = editor => {\n      const getCharMap$1 = () => {\n        return getCharMap(editor);\n      };\n      const insertChar$1 = chr => {\n        insertChar(editor, chr);\n      };\n      return {\n        getCharMap: getCharMap$1,\n        insertChar: insertChar$1\n      };\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const last = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const contains = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const fromCodePoint = String.fromCodePoint;\n\n    const charMatches = (charCode, name, lowerCasePattern) => {\n      if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) {\n        return true;\n      } else {\n        return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\\s+/g, ''), lowerCasePattern);\n      }\n    };\n    const scan = (group, pattern) => {\n      const matches = [];\n      const lowerCasePattern = pattern.toLowerCase();\n      each(group.characters, g => {\n        if (charMatches(g[0], g[1], lowerCasePattern)) {\n          matches.push(g);\n        }\n      });\n      return map(matches, m => ({\n        text: m[1],\n        value: fromCodePoint(m[0]),\n        icon: fromCodePoint(m[0])\n      }));\n    };\n\n    const patternName = 'pattern';\n    const open = (editor, charMap) => {\n      const makeGroupItems = () => [\n        {\n          label: 'Search',\n          type: 'input',\n          name: patternName\n        },\n        {\n          type: 'collection',\n          name: 'results'\n        }\n      ];\n      const makeTabs = () => map(charMap, charGroup => ({\n        title: charGroup.name,\n        name: charGroup.name,\n        items: makeGroupItems()\n      }));\n      const makePanel = () => ({\n        type: 'panel',\n        items: makeGroupItems()\n      });\n      const makeTabPanel = () => ({\n        type: 'tabpanel',\n        tabs: makeTabs()\n      });\n      const currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');\n      const scanAndSet = (dialogApi, pattern) => {\n        find(charMap, group => group.name === currentTab.get()).each(f => {\n          const items = scan(f, pattern);\n          dialogApi.setData({ results: items });\n        });\n      };\n      const SEARCH_DELAY = 40;\n      const updateFilter = last(dialogApi => {\n        const pattern = dialogApi.getData().pattern;\n        scanAndSet(dialogApi, pattern);\n      }, SEARCH_DELAY);\n      const body = charMap.length === 1 ? makePanel() : makeTabPanel();\n      const initialData = {\n        pattern: '',\n        results: scan(charMap[0], '')\n      };\n      const bridgeSpec = {\n        title: 'Special Character',\n        size: 'normal',\n        body,\n        buttons: [{\n            type: 'cancel',\n            name: 'close',\n            text: 'Close',\n            primary: true\n          }],\n        initialData,\n        onAction: (api, details) => {\n          if (details.name === 'results') {\n            insertChar(editor, details.value);\n            api.close();\n          }\n        },\n        onTabChange: (dialogApi, details) => {\n          currentTab.set(details.newTabName);\n          updateFilter.throttle(dialogApi);\n        },\n        onChange: (dialogApi, changeData) => {\n          if (changeData.name === patternName) {\n            updateFilter.throttle(dialogApi);\n          }\n        }\n      };\n      const dialogApi = editor.windowManager.open(bridgeSpec);\n      dialogApi.focus(patternName);\n    };\n\n    const register$1 = (editor, charMap) => {\n      editor.addCommand('mceShowCharmap', () => {\n        open(editor, charMap);\n      });\n    };\n\n    const init = (editor, all) => {\n      editor.ui.registry.addAutocompleter('charmap', {\n        trigger: ':',\n        columns: 'auto',\n        minChars: 2,\n        fetch: (pattern, _maxResults) => new Promise((resolve, _reject) => {\n          resolve(scan(all, pattern));\n        }),\n        onAction: (autocompleteApi, rng, value) => {\n          editor.selection.setRng(rng);\n          editor.insertContent(value);\n          autocompleteApi.hide();\n        }\n      });\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const onAction = () => editor.execCommand('mceShowCharmap');\n      editor.ui.registry.addButton('charmap', {\n        icon: 'insert-character',\n        tooltip: 'Special character',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n      editor.ui.registry.addMenuItem('charmap', {\n        icon: 'insert-character',\n        text: 'Special character...',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$1.add('charmap', editor => {\n        register$2(editor);\n        const charMap = getCharMap(editor);\n        register$1(editor, charMap);\n        register(editor);\n        init(editor, charMap[0]);\n        return get(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const isString = isType$1('string');\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const never = constant(false);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const filter = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    const is = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isElement = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement(e) && name(e) === tag;\n\n    const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const children$2 = element => map(element.dom.childNodes, SugarElement.fromDom);\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const remove = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n\n    const ancestor$1 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n\n    const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const get = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n\n    const getDirection = element => get(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n    const children$1 = (scope, predicate) => filter(children$2(scope), predicate);\n\n    const children = (scope, selector) => children$1(scope, e => is(e, selector));\n\n    const getParentElement = element => parent(element).filter(isElement);\n    const getNormalizedBlock = (element, isListItem) => {\n      const normalizedElement = isListItem ? ancestor(element, 'ol,ul') : Optional.some(element);\n      return normalizedElement.getOr(element);\n    };\n    const isListItem = isTag('li');\n    const setDirOnElements = (dom, blocks, dir) => {\n      each(blocks, block => {\n        const blockElement = SugarElement.fromDom(block);\n        const isBlockElementListItem = isListItem(blockElement);\n        const normalizedBlock = getNormalizedBlock(blockElement, isBlockElementListItem);\n        const normalizedBlockParent = getParentElement(normalizedBlock);\n        normalizedBlockParent.each(parent => {\n          dom.setStyle(normalizedBlock.dom, 'direction', null);\n          const parentDirection = getDirection(parent);\n          if (parentDirection === dir) {\n            remove(normalizedBlock, 'dir');\n          } else {\n            set(normalizedBlock, 'dir', dir);\n          }\n          if (getDirection(normalizedBlock) !== dir) {\n            dom.setStyle(normalizedBlock.dom, 'direction', dir);\n          }\n          if (isBlockElementListItem) {\n            const listItems = children(normalizedBlock, 'li[dir],li[style]');\n            each(listItems, listItem => {\n              remove(listItem, 'dir');\n              dom.setStyle(listItem.dom, 'direction', null);\n            });\n          }\n        });\n      });\n    };\n    const setDir = (editor, dir) => {\n      if (editor.selection.isEditable()) {\n        setDirOnElements(editor.dom, editor.selection.getSelectedBlocks(), dir);\n        editor.nodeChanged();\n      }\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mceDirectionLTR', () => {\n        setDir(editor, 'ltr');\n      });\n      editor.addCommand('mceDirectionRTL', () => {\n        setDir(editor, 'rtl');\n      });\n    };\n\n    const getNodeChangeHandler = (editor, dir) => api => {\n      const nodeChangeHandler = e => {\n        const element = SugarElement.fromDom(e.element);\n        api.setActive(getDirection(element) === dir);\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChangeHandler);\n      api.setEnabled(editor.selection.isEditable());\n      return () => editor.off('NodeChange', nodeChangeHandler);\n    };\n    const register = editor => {\n      editor.ui.registry.addToggleButton('ltr', {\n        tooltip: 'Left to right',\n        icon: 'ltr',\n        onAction: () => editor.execCommand('mceDirectionLTR'),\n        onSetup: getNodeChangeHandler(editor, 'ltr')\n      });\n      editor.ui.registry.addToggleButton('rtl', {\n        tooltip: 'Right to left',\n        icon: 'rtl',\n        onAction: () => editor.execCommand('mceDirectionRTL'),\n        onSetup: getNodeChangeHandler(editor, 'rtl')\n      });\n    };\n\n    var Plugin = () => {\n      global.add('directionality', editor => {\n        register$1(editor);\n        register(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const eq = t => a => t === a;\n    const isNull = eq(null);\n    const isUndefined = eq(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n\n    const noop = () => {\n    };\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const never = constant(false);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const map$1 = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const last = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const insertEmoticon = (editor, ch) => {\n      editor.insertContent(ch);\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const map = (obj, f) => {\n      return tupleMap(obj, (x, i) => ({\n        k: i,\n        v: f(x, i)\n      }));\n    };\n    const tupleMap = (obj, f) => {\n      const r = {};\n      each(obj, (x, i) => {\n        const tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n    const shallow = (old, nu) => {\n      return nu;\n    };\n    const baseMerge = merger => {\n      return (...objects) => {\n        if (objects.length === 0) {\n          throw new Error(`Can't merge zero objects`);\n        }\n        const ret = {};\n        for (let j = 0; j < objects.length; j++) {\n          const curObject = objects[j];\n          for (const key in curObject) {\n            if (has(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    const merge = baseMerge(shallow);\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const value = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const contains = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.Resource');\n\n    const DEFAULT_ID = 'tinymce.plugins.emoticons';\n    const option = name => editor => editor.options.get(name);\n    const register$2 = (editor, pluginUrl) => {\n      const registerOption = editor.options.register;\n      registerOption('emoticons_database', {\n        processor: 'string',\n        default: 'emojis'\n      });\n      registerOption('emoticons_database_url', {\n        processor: 'string',\n        default: `${ pluginUrl }/js/${ getEmojiDatabase(editor) }${ editor.suffix }.js`\n      });\n      registerOption('emoticons_database_id', {\n        processor: 'string',\n        default: DEFAULT_ID\n      });\n      registerOption('emoticons_append', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('emoticons_images_url', {\n        processor: 'string',\n        default: 'https://twemoji.maxcdn.com/v/13.0.1/72x72/'\n      });\n    };\n    const getEmojiDatabase = option('emoticons_database');\n    const getEmojiDatabaseUrl = option('emoticons_database_url');\n    const getEmojiDatabaseId = option('emoticons_database_id');\n    const getAppendedEmoji = option('emoticons_append');\n    const getEmojiImageUrl = option('emoticons_images_url');\n\n    const ALL_CATEGORY = 'All';\n    const categoryNameMap = {\n      symbols: 'Symbols',\n      people: 'People',\n      animals_and_nature: 'Animals and Nature',\n      food_and_drink: 'Food and Drink',\n      activity: 'Activity',\n      travel_and_places: 'Travel and Places',\n      objects: 'Objects',\n      flags: 'Flags',\n      user: 'User Defined'\n    };\n    const translateCategory = (categories, name) => has(categories, name) ? categories[name] : name;\n    const getUserDefinedEmoji = editor => {\n      const userDefinedEmoticons = getAppendedEmoji(editor);\n      return map(userDefinedEmoticons, value => ({\n        keywords: [],\n        category: 'user',\n        ...value\n      }));\n    };\n    const initDatabase = (editor, databaseUrl, databaseId) => {\n      const categories = value();\n      const all = value();\n      const emojiImagesUrl = getEmojiImageUrl(editor);\n      const getEmoji = lib => {\n        if (startsWith(lib.char, '<img')) {\n          return lib.char.replace(/src=\"([^\"]+)\"/, (match, url) => `src=\"${ emojiImagesUrl }${ url }\"`);\n        } else {\n          return lib.char;\n        }\n      };\n      const processEmojis = emojis => {\n        const cats = {};\n        const everything = [];\n        each(emojis, (lib, title) => {\n          const entry = {\n            title,\n            keywords: lib.keywords,\n            char: getEmoji(lib),\n            category: translateCategory(categoryNameMap, lib.category)\n          };\n          const current = cats[entry.category] !== undefined ? cats[entry.category] : [];\n          cats[entry.category] = current.concat([entry]);\n          everything.push(entry);\n        });\n        categories.set(cats);\n        all.set(everything);\n      };\n      editor.on('init', () => {\n        global.load(databaseId, databaseUrl).then(emojis => {\n          const userEmojis = getUserDefinedEmoji(editor);\n          processEmojis(merge(emojis, userEmojis));\n        }, err => {\n          console.log(`Failed to load emojis: ${ err }`);\n          categories.set({});\n          all.set([]);\n        });\n      });\n      const listCategory = category => {\n        if (category === ALL_CATEGORY) {\n          return listAll();\n        }\n        return categories.get().bind(cats => Optional.from(cats[category])).getOr([]);\n      };\n      const listAll = () => all.get().getOr([]);\n      const listCategories = () => [ALL_CATEGORY].concat(keys(categories.get().getOr({})));\n      const waitForLoad = () => {\n        if (hasLoaded()) {\n          return Promise.resolve(true);\n        } else {\n          return new Promise((resolve, reject) => {\n            let numRetries = 15;\n            const interval = setInterval(() => {\n              if (hasLoaded()) {\n                clearInterval(interval);\n                resolve(true);\n              } else {\n                numRetries--;\n                if (numRetries < 0) {\n                  console.log('Could not load emojis from url: ' + databaseUrl);\n                  clearInterval(interval);\n                  reject(false);\n                }\n              }\n            }, 100);\n          });\n        }\n      };\n      const hasLoaded = () => categories.isSet() && all.isSet();\n      return {\n        listCategories,\n        hasLoaded,\n        waitForLoad,\n        listAll,\n        listCategory\n      };\n    };\n\n    const emojiMatches = (emoji, lowerCasePattern) => contains(emoji.title.toLowerCase(), lowerCasePattern) || exists(emoji.keywords, k => contains(k.toLowerCase(), lowerCasePattern));\n    const emojisFrom = (list, pattern, maxResults) => {\n      const matches = [];\n      const lowerCasePattern = pattern.toLowerCase();\n      const reachedLimit = maxResults.fold(() => never, max => size => size >= max);\n      for (let i = 0; i < list.length; i++) {\n        if (pattern.length === 0 || emojiMatches(list[i], lowerCasePattern)) {\n          matches.push({\n            value: list[i].char,\n            text: list[i].title,\n            icon: list[i].char\n          });\n          if (reachedLimit(matches.length)) {\n            break;\n          }\n        }\n      }\n      return matches;\n    };\n\n    const patternName = 'pattern';\n    const open = (editor, database) => {\n      const initialState = {\n        pattern: '',\n        results: emojisFrom(database.listAll(), '', Optional.some(300))\n      };\n      const currentTab = Cell(ALL_CATEGORY);\n      const scan = dialogApi => {\n        const dialogData = dialogApi.getData();\n        const category = currentTab.get();\n        const candidates = database.listCategory(category);\n        const results = emojisFrom(candidates, dialogData[patternName], category === ALL_CATEGORY ? Optional.some(300) : Optional.none());\n        dialogApi.setData({ results });\n      };\n      const updateFilter = last(dialogApi => {\n        scan(dialogApi);\n      }, 200);\n      const searchField = {\n        label: 'Search',\n        type: 'input',\n        name: patternName\n      };\n      const resultsField = {\n        type: 'collection',\n        name: 'results'\n      };\n      const getInitialState = () => {\n        const body = {\n          type: 'tabpanel',\n          tabs: map$1(database.listCategories(), cat => ({\n            title: cat,\n            name: cat,\n            items: [\n              searchField,\n              resultsField\n            ]\n          }))\n        };\n        return {\n          title: 'Emojis',\n          size: 'normal',\n          body,\n          initialData: initialState,\n          onTabChange: (dialogApi, details) => {\n            currentTab.set(details.newTabName);\n            updateFilter.throttle(dialogApi);\n          },\n          onChange: updateFilter.throttle,\n          onAction: (dialogApi, actionData) => {\n            if (actionData.name === 'results') {\n              insertEmoticon(editor, actionData.value);\n              dialogApi.close();\n            }\n          },\n          buttons: [{\n              type: 'cancel',\n              text: 'Close',\n              primary: true\n            }]\n        };\n      };\n      const dialogApi = editor.windowManager.open(getInitialState());\n      dialogApi.focus(patternName);\n      if (!database.hasLoaded()) {\n        dialogApi.block('Loading emojis...');\n        database.waitForLoad().then(() => {\n          dialogApi.redial(getInitialState());\n          updateFilter.throttle(dialogApi);\n          dialogApi.focus(patternName);\n          dialogApi.unblock();\n        }).catch(_err => {\n          dialogApi.redial({\n            title: 'Emojis',\n            body: {\n              type: 'panel',\n              items: [{\n                  type: 'alertbanner',\n                  level: 'error',\n                  icon: 'warning',\n                  text: 'Could not load emojis'\n                }]\n            },\n            buttons: [{\n                type: 'cancel',\n                text: 'Close',\n                primary: true\n              }],\n            initialData: {\n              pattern: '',\n              results: []\n            }\n          });\n          dialogApi.focus(patternName);\n          dialogApi.unblock();\n        });\n      }\n    };\n\n    const register$1 = (editor, database) => {\n      editor.addCommand('mceEmoticons', () => open(editor, database));\n    };\n\n    const setup = editor => {\n      editor.on('PreInit', () => {\n        editor.parser.addAttributeFilter('data-emoticon', nodes => {\n          each$1(nodes, node => {\n            node.attr('data-mce-resize', 'false');\n            node.attr('data-mce-placeholder', '1');\n          });\n        });\n      });\n    };\n\n    const init = (editor, database) => {\n      editor.ui.registry.addAutocompleter('emoticons', {\n        trigger: ':',\n        columns: 'auto',\n        minChars: 2,\n        fetch: (pattern, maxResults) => database.waitForLoad().then(() => {\n          const candidates = database.listAll();\n          return emojisFrom(candidates, pattern, Optional.some(maxResults));\n        }),\n        onAction: (autocompleteApi, rng, value) => {\n          editor.selection.setRng(rng);\n          editor.insertContent(value);\n          autocompleteApi.hide();\n        }\n      });\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const onAction = () => editor.execCommand('mceEmoticons');\n      editor.ui.registry.addButton('emoticons', {\n        tooltip: 'Emojis',\n        icon: 'emoji',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n      editor.ui.registry.addMenuItem('emoticons', {\n        text: 'Emojis...',\n        icon: 'emoji',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$1.add('emoticons', (editor, pluginUrl) => {\n        register$2(editor, pluginUrl);\n        const databaseUrl = getEmojiDatabaseUrl(editor);\n        const databaseId = getEmojiDatabaseId(editor);\n        const database = initDatabase(editor, databaseUrl, databaseId);\n        register$1(editor, database);\n        register(editor);\n        init(editor, database);\n        setup(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","// Source: npm package: emojilib, file:emojis.json\nwindow.tinymce.Resource.add(\"tinymce.plugins.emoticons\",{grinning:{keywords:[\"face\",\"smile\",\"happy\",\"joy\",\":D\",\"grin\"],char:\"\\u{1f600}\",fitzpatrick_scale:!1,category:\"people\"},grimacing:{keywords:[\"face\",\"grimace\",\"teeth\"],char:\"\\u{1f62c}\",fitzpatrick_scale:!1,category:\"people\"},grin:{keywords:[\"face\",\"happy\",\"smile\",\"joy\",\"kawaii\"],char:\"\\u{1f601}\",fitzpatrick_scale:!1,category:\"people\"},joy:{keywords:[\"face\",\"cry\",\"tears\",\"weep\",\"happy\",\"happytears\",\"haha\"],char:\"\\u{1f602}\",fitzpatrick_scale:!1,category:\"people\"},rofl:{keywords:[\"face\",\"rolling\",\"floor\",\"laughing\",\"lol\",\"haha\"],char:\"\\u{1f923}\",fitzpatrick_scale:!1,category:\"people\"},partying:{keywords:[\"face\",\"celebration\",\"woohoo\"],char:\"\\u{1f973}\",fitzpatrick_scale:!1,category:\"people\"},smiley:{keywords:[\"face\",\"happy\",\"joy\",\"haha\",\":D\",\":)\",\"smile\",\"funny\"],char:\"\\u{1f603}\",fitzpatrick_scale:!1,category:\"people\"},smile:{keywords:[\"face\",\"happy\",\"joy\",\"funny\",\"haha\",\"laugh\",\"like\",\":D\",\":)\"],char:\"\\u{1f604}\",fitzpatrick_scale:!1,category:\"people\"},sweat_smile:{keywords:[\"face\",\"hot\",\"happy\",\"laugh\",\"sweat\",\"smile\",\"relief\"],char:\"\\u{1f605}\",fitzpatrick_scale:!1,category:\"people\"},laughing:{keywords:[\"happy\",\"joy\",\"lol\",\"satisfied\",\"haha\",\"face\",\"glad\",\"XD\",\"laugh\"],char:\"\\u{1f606}\",fitzpatrick_scale:!1,category:\"people\"},innocent:{keywords:[\"face\",\"angel\",\"heaven\",\"halo\"],char:\"\\u{1f607}\",fitzpatrick_scale:!1,category:\"people\"},wink:{keywords:[\"face\",\"happy\",\"mischievous\",\"secret\",\";)\",\"smile\",\"eye\"],char:\"\\u{1f609}\",fitzpatrick_scale:!1,category:\"people\"},blush:{keywords:[\"face\",\"smile\",\"happy\",\"flushed\",\"crush\",\"embarrassed\",\"shy\",\"joy\"],char:\"\\u{1f60a}\",fitzpatrick_scale:!1,category:\"people\"},slightly_smiling_face:{keywords:[\"face\",\"smile\"],char:\"\\u{1f642}\",fitzpatrick_scale:!1,category:\"people\"},upside_down_face:{keywords:[\"face\",\"flipped\",\"silly\",\"smile\"],char:\"\\u{1f643}\",fitzpatrick_scale:!1,category:\"people\"},relaxed:{keywords:[\"face\",\"blush\",\"massage\",\"happiness\"],char:\"\\u263a\\ufe0f\",fitzpatrick_scale:!1,category:\"people\"},yum:{keywords:[\"happy\",\"joy\",\"tongue\",\"smile\",\"face\",\"silly\",\"yummy\",\"nom\",\"delicious\",\"savouring\"],char:\"\\u{1f60b}\",fitzpatrick_scale:!1,category:\"people\"},relieved:{keywords:[\"face\",\"relaxed\",\"phew\",\"massage\",\"happiness\"],char:\"\\u{1f60c}\",fitzpatrick_scale:!1,category:\"people\"},heart_eyes:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"heart\"],char:\"\\u{1f60d}\",fitzpatrick_scale:!1,category:\"people\"},smiling_face_with_three_hearts:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"hearts\",\"adore\"],char:\"\\u{1f970}\",fitzpatrick_scale:!1,category:\"people\"},kissing_heart:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:\"\\u{1f618}\",fitzpatrick_scale:!1,category:\"people\"},kissing:{keywords:[\"love\",\"like\",\"face\",\"3\",\"valentines\",\"infatuation\",\"kiss\"],char:\"\\u{1f617}\",fitzpatrick_scale:!1,category:\"people\"},kissing_smiling_eyes:{keywords:[\"face\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:\"\\u{1f619}\",fitzpatrick_scale:!1,category:\"people\"},kissing_closed_eyes:{keywords:[\"face\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],char:\"\\u{1f61a}\",fitzpatrick_scale:!1,category:\"people\"},stuck_out_tongue_winking_eye:{keywords:[\"face\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"wink\",\"tongue\"],char:\"\\u{1f61c}\",fitzpatrick_scale:!1,category:\"people\"},zany:{keywords:[\"face\",\"goofy\",\"crazy\"],char:\"\\u{1f92a}\",fitzpatrick_scale:!1,category:\"people\"},raised_eyebrow:{keywords:[\"face\",\"distrust\",\"scepticism\",\"disapproval\",\"disbelief\",\"surprise\"],char:\"\\u{1f928}\",fitzpatrick_scale:!1,category:\"people\"},monocle:{keywords:[\"face\",\"stuffy\",\"wealthy\"],char:\"\\u{1f9d0}\",fitzpatrick_scale:!1,category:\"people\"},stuck_out_tongue_closed_eyes:{keywords:[\"face\",\"prank\",\"playful\",\"mischievous\",\"smile\",\"tongue\"],char:\"\\u{1f61d}\",fitzpatrick_scale:!1,category:\"people\"},stuck_out_tongue:{keywords:[\"face\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"tongue\"],char:\"\\u{1f61b}\",fitzpatrick_scale:!1,category:\"people\"},money_mouth_face:{keywords:[\"face\",\"rich\",\"dollar\",\"money\"],char:\"\\u{1f911}\",fitzpatrick_scale:!1,category:\"people\"},nerd_face:{keywords:[\"face\",\"nerdy\",\"geek\",\"dork\"],char:\"\\u{1f913}\",fitzpatrick_scale:!1,category:\"people\"},sunglasses:{keywords:[\"face\",\"cool\",\"smile\",\"summer\",\"beach\",\"sunglass\"],char:\"\\u{1f60e}\",fitzpatrick_scale:!1,category:\"people\"},star_struck:{keywords:[\"face\",\"smile\",\"starry\",\"eyes\",\"grinning\"],char:\"\\u{1f929}\",fitzpatrick_scale:!1,category:\"people\"},clown_face:{keywords:[\"face\"],char:\"\\u{1f921}\",fitzpatrick_scale:!1,category:\"people\"},cowboy_hat_face:{keywords:[\"face\",\"cowgirl\",\"hat\"],char:\"\\u{1f920}\",fitzpatrick_scale:!1,category:\"people\"},hugs:{keywords:[\"face\",\"smile\",\"hug\"],char:\"\\u{1f917}\",fitzpatrick_scale:!1,category:\"people\"},smirk:{keywords:[\"face\",\"smile\",\"mean\",\"prank\",\"smug\",\"sarcasm\"],char:\"\\u{1f60f}\",fitzpatrick_scale:!1,category:\"people\"},no_mouth:{keywords:[\"face\",\"hellokitty\"],char:\"\\u{1f636}\",fitzpatrick_scale:!1,category:\"people\"},neutral_face:{keywords:[\"indifference\",\"meh\",\":|\",\"neutral\"],char:\"\\u{1f610}\",fitzpatrick_scale:!1,category:\"people\"},expressionless:{keywords:[\"face\",\"indifferent\",\"-_-\",\"meh\",\"deadpan\"],char:\"\\u{1f611}\",fitzpatrick_scale:!1,category:\"people\"},unamused:{keywords:[\"indifference\",\"bored\",\"straight face\",\"serious\",\"sarcasm\",\"unimpressed\",\"skeptical\",\"dubious\",\"side_eye\"],char:\"\\u{1f612}\",fitzpatrick_scale:!1,category:\"people\"},roll_eyes:{keywords:[\"face\",\"eyeroll\",\"frustrated\"],char:\"\\u{1f644}\",fitzpatrick_scale:!1,category:\"people\"},thinking:{keywords:[\"face\",\"hmmm\",\"think\",\"consider\"],char:\"\\u{1f914}\",fitzpatrick_scale:!1,category:\"people\"},lying_face:{keywords:[\"face\",\"lie\",\"pinocchio\"],char:\"\\u{1f925}\",fitzpatrick_scale:!1,category:\"people\"},hand_over_mouth:{keywords:[\"face\",\"whoops\",\"shock\",\"surprise\"],char:\"\\u{1f92d}\",fitzpatrick_scale:!1,category:\"people\"},shushing:{keywords:[\"face\",\"quiet\",\"shhh\"],char:\"\\u{1f92b}\",fitzpatrick_scale:!1,category:\"people\"},symbols_over_mouth:{keywords:[\"face\",\"swearing\",\"cursing\",\"cussing\",\"profanity\",\"expletive\"],char:\"\\u{1f92c}\",fitzpatrick_scale:!1,category:\"people\"},exploding_head:{keywords:[\"face\",\"shocked\",\"mind\",\"blown\"],char:\"\\u{1f92f}\",fitzpatrick_scale:!1,category:\"people\"},flushed:{keywords:[\"face\",\"blush\",\"shy\",\"flattered\"],char:\"\\u{1f633}\",fitzpatrick_scale:!1,category:\"people\"},disappointed:{keywords:[\"face\",\"sad\",\"upset\",\"depressed\",\":(\"],char:\"\\u{1f61e}\",fitzpatrick_scale:!1,category:\"people\"},worried:{keywords:[\"face\",\"concern\",\"nervous\",\":(\"],char:\"\\u{1f61f}\",fitzpatrick_scale:!1,category:\"people\"},angry:{keywords:[\"mad\",\"face\",\"annoyed\",\"frustrated\"],char:\"\\u{1f620}\",fitzpatrick_scale:!1,category:\"people\"},rage:{keywords:[\"angry\",\"mad\",\"hate\",\"despise\"],char:\"\\u{1f621}\",fitzpatrick_scale:!1,category:\"people\"},pensive:{keywords:[\"face\",\"sad\",\"depressed\",\"upset\"],char:\"\\u{1f614}\",fitzpatrick_scale:!1,category:\"people\"},confused:{keywords:[\"face\",\"indifference\",\"huh\",\"weird\",\"hmmm\",\":/\"],char:\"\\u{1f615}\",fitzpatrick_scale:!1,category:\"people\"},slightly_frowning_face:{keywords:[\"face\",\"frowning\",\"disappointed\",\"sad\",\"upset\"],char:\"\\u{1f641}\",fitzpatrick_scale:!1,category:\"people\"},frowning_face:{keywords:[\"face\",\"sad\",\"upset\",\"frown\"],char:\"\\u2639\",fitzpatrick_scale:!1,category:\"people\"},persevere:{keywords:[\"face\",\"sick\",\"no\",\"upset\",\"oops\"],char:\"\\u{1f623}\",fitzpatrick_scale:!1,category:\"people\"},confounded:{keywords:[\"face\",\"confused\",\"sick\",\"unwell\",\"oops\",\":S\"],char:\"\\u{1f616}\",fitzpatrick_scale:!1,category:\"people\"},tired_face:{keywords:[\"sick\",\"whine\",\"upset\",\"frustrated\"],char:\"\\u{1f62b}\",fitzpatrick_scale:!1,category:\"people\"},weary:{keywords:[\"face\",\"tired\",\"sleepy\",\"sad\",\"frustrated\",\"upset\"],char:\"\\u{1f629}\",fitzpatrick_scale:!1,category:\"people\"},pleading:{keywords:[\"face\",\"begging\",\"mercy\"],char:\"\\u{1f97a}\",fitzpatrick_scale:!1,category:\"people\"},triumph:{keywords:[\"face\",\"gas\",\"phew\",\"proud\",\"pride\"],char:\"\\u{1f624}\",fitzpatrick_scale:!1,category:\"people\"},open_mouth:{keywords:[\"face\",\"surprise\",\"impressed\",\"wow\",\"whoa\",\":O\"],char:\"\\u{1f62e}\",fitzpatrick_scale:!1,category:\"people\"},scream:{keywords:[\"face\",\"munch\",\"scared\",\"omg\"],char:\"\\u{1f631}\",fitzpatrick_scale:!1,category:\"people\"},fearful:{keywords:[\"face\",\"scared\",\"terrified\",\"nervous\",\"oops\",\"huh\"],char:\"\\u{1f628}\",fitzpatrick_scale:!1,category:\"people\"},cold_sweat:{keywords:[\"face\",\"nervous\",\"sweat\"],char:\"\\u{1f630}\",fitzpatrick_scale:!1,category:\"people\"},hushed:{keywords:[\"face\",\"woo\",\"shh\"],char:\"\\u{1f62f}\",fitzpatrick_scale:!1,category:\"people\"},frowning:{keywords:[\"face\",\"aw\",\"what\"],char:\"\\u{1f626}\",fitzpatrick_scale:!1,category:\"people\"},anguished:{keywords:[\"face\",\"stunned\",\"nervous\"],char:\"\\u{1f627}\",fitzpatrick_scale:!1,category:\"people\"},cry:{keywords:[\"face\",\"tears\",\"sad\",\"depressed\",\"upset\",\":'(\"],char:\"\\u{1f622}\",fitzpatrick_scale:!1,category:\"people\"},disappointed_relieved:{keywords:[\"face\",\"phew\",\"sweat\",\"nervous\"],char:\"\\u{1f625}\",fitzpatrick_scale:!1,category:\"people\"},drooling_face:{keywords:[\"face\"],char:\"\\u{1f924}\",fitzpatrick_scale:!1,category:\"people\"},sleepy:{keywords:[\"face\",\"tired\",\"rest\",\"nap\"],char:\"\\u{1f62a}\",fitzpatrick_scale:!1,category:\"people\"},sweat:{keywords:[\"face\",\"hot\",\"sad\",\"tired\",\"exercise\"],char:\"\\u{1f613}\",fitzpatrick_scale:!1,category:\"people\"},hot:{keywords:[\"face\",\"feverish\",\"heat\",\"red\",\"sweating\"],char:\"\\u{1f975}\",fitzpatrick_scale:!1,category:\"people\"},cold:{keywords:[\"face\",\"blue\",\"freezing\",\"frozen\",\"frostbite\",\"icicles\"],char:\"\\u{1f976}\",fitzpatrick_scale:!1,category:\"people\"},sob:{keywords:[\"face\",\"cry\",\"tears\",\"sad\",\"upset\",\"depressed\"],char:\"\\u{1f62d}\",fitzpatrick_scale:!1,category:\"people\"},dizzy_face:{keywords:[\"spent\",\"unconscious\",\"xox\",\"dizzy\"],char:\"\\u{1f635}\",fitzpatrick_scale:!1,category:\"people\"},astonished:{keywords:[\"face\",\"xox\",\"surprised\",\"poisoned\"],char:\"\\u{1f632}\",fitzpatrick_scale:!1,category:\"people\"},zipper_mouth_face:{keywords:[\"face\",\"sealed\",\"zipper\",\"secret\"],char:\"\\u{1f910}\",fitzpatrick_scale:!1,category:\"people\"},nauseated_face:{keywords:[\"face\",\"vomit\",\"gross\",\"green\",\"sick\",\"throw up\",\"ill\"],char:\"\\u{1f922}\",fitzpatrick_scale:!1,category:\"people\"},sneezing_face:{keywords:[\"face\",\"gesundheit\",\"sneeze\",\"sick\",\"allergy\"],char:\"\\u{1f927}\",fitzpatrick_scale:!1,category:\"people\"},vomiting:{keywords:[\"face\",\"sick\"],char:\"\\u{1f92e}\",fitzpatrick_scale:!1,category:\"people\"},mask:{keywords:[\"face\",\"sick\",\"ill\",\"disease\"],char:\"\\u{1f637}\",fitzpatrick_scale:!1,category:\"people\"},face_with_thermometer:{keywords:[\"sick\",\"temperature\",\"thermometer\",\"cold\",\"fever\"],char:\"\\u{1f912}\",fitzpatrick_scale:!1,category:\"people\"},face_with_head_bandage:{keywords:[\"injured\",\"clumsy\",\"bandage\",\"hurt\"],char:\"\\u{1f915}\",fitzpatrick_scale:!1,category:\"people\"},woozy:{keywords:[\"face\",\"dizzy\",\"intoxicated\",\"tipsy\",\"wavy\"],char:\"\\u{1f974}\",fitzpatrick_scale:!1,category:\"people\"},sleeping:{keywords:[\"face\",\"tired\",\"sleepy\",\"night\",\"zzz\"],char:\"\\u{1f634}\",fitzpatrick_scale:!1,category:\"people\"},zzz:{keywords:[\"sleepy\",\"tired\",\"dream\"],char:\"\\u{1f4a4}\",fitzpatrick_scale:!1,category:\"people\"},poop:{keywords:[\"hankey\",\"shitface\",\"fail\",\"turd\",\"shit\"],char:\"\\u{1f4a9}\",fitzpatrick_scale:!1,category:\"people\"},smiling_imp:{keywords:[\"devil\",\"horns\"],char:\"\\u{1f608}\",fitzpatrick_scale:!1,category:\"people\"},imp:{keywords:[\"devil\",\"angry\",\"horns\"],char:\"\\u{1f47f}\",fitzpatrick_scale:!1,category:\"people\"},japanese_ogre:{keywords:[\"monster\",\"red\",\"mask\",\"halloween\",\"scary\",\"creepy\",\"devil\",\"demon\",\"japanese\",\"ogre\"],char:\"\\u{1f479}\",fitzpatrick_scale:!1,category:\"people\"},japanese_goblin:{keywords:[\"red\",\"evil\",\"mask\",\"monster\",\"scary\",\"creepy\",\"japanese\",\"goblin\"],char:\"\\u{1f47a}\",fitzpatrick_scale:!1,category:\"people\"},skull:{keywords:[\"dead\",\"skeleton\",\"creepy\",\"death\"],char:\"\\u{1f480}\",fitzpatrick_scale:!1,category:\"people\"},ghost:{keywords:[\"halloween\",\"spooky\",\"scary\"],char:\"\\u{1f47b}\",fitzpatrick_scale:!1,category:\"people\"},alien:{keywords:[\"UFO\",\"paul\",\"weird\",\"outer_space\"],char:\"\\u{1f47d}\",fitzpatrick_scale:!1,category:\"people\"},robot:{keywords:[\"computer\",\"machine\",\"bot\"],char:\"\\u{1f916}\",fitzpatrick_scale:!1,category:\"people\"},smiley_cat:{keywords:[\"animal\",\"cats\",\"happy\",\"smile\"],char:\"\\u{1f63a}\",fitzpatrick_scale:!1,category:\"people\"},smile_cat:{keywords:[\"animal\",\"cats\",\"smile\"],char:\"\\u{1f638}\",fitzpatrick_scale:!1,category:\"people\"},joy_cat:{keywords:[\"animal\",\"cats\",\"haha\",\"happy\",\"tears\"],char:\"\\u{1f639}\",fitzpatrick_scale:!1,category:\"people\"},heart_eyes_cat:{keywords:[\"animal\",\"love\",\"like\",\"affection\",\"cats\",\"valentines\",\"heart\"],char:\"\\u{1f63b}\",fitzpatrick_scale:!1,category:\"people\"},smirk_cat:{keywords:[\"animal\",\"cats\",\"smirk\"],char:\"\\u{1f63c}\",fitzpatrick_scale:!1,category:\"people\"},kissing_cat:{keywords:[\"animal\",\"cats\",\"kiss\"],char:\"\\u{1f63d}\",fitzpatrick_scale:!1,category:\"people\"},scream_cat:{keywords:[\"animal\",\"cats\",\"munch\",\"scared\",\"scream\"],char:\"\\u{1f640}\",fitzpatrick_scale:!1,category:\"people\"},crying_cat_face:{keywords:[\"animal\",\"tears\",\"weep\",\"sad\",\"cats\",\"upset\",\"cry\"],char:\"\\u{1f63f}\",fitzpatrick_scale:!1,category:\"people\"},pouting_cat:{keywords:[\"animal\",\"cats\"],char:\"\\u{1f63e}\",fitzpatrick_scale:!1,category:\"people\"},palms_up:{keywords:[\"hands\",\"gesture\",\"cupped\",\"prayer\"],char:\"\\u{1f932}\",fitzpatrick_scale:!0,category:\"people\"},raised_hands:{keywords:[\"gesture\",\"hooray\",\"yea\",\"celebration\",\"hands\"],char:\"\\u{1f64c}\",fitzpatrick_scale:!0,category:\"people\"},clap:{keywords:[\"hands\",\"praise\",\"applause\",\"congrats\",\"yay\"],char:\"\\u{1f44f}\",fitzpatrick_scale:!0,category:\"people\"},wave:{keywords:[\"hands\",\"gesture\",\"goodbye\",\"solong\",\"farewell\",\"hello\",\"hi\",\"palm\"],char:\"\\u{1f44b}\",fitzpatrick_scale:!0,category:\"people\"},call_me_hand:{keywords:[\"hands\",\"gesture\"],char:\"\\u{1f919}\",fitzpatrick_scale:!0,category:\"people\"},\"+1\":{keywords:[\"thumbsup\",\"yes\",\"awesome\",\"good\",\"agree\",\"accept\",\"cool\",\"hand\",\"like\"],char:\"\\u{1f44d}\",fitzpatrick_scale:!0,category:\"people\"},\"-1\":{keywords:[\"thumbsdown\",\"no\",\"dislike\",\"hand\"],char:\"\\u{1f44e}\",fitzpatrick_scale:!0,category:\"people\"},facepunch:{keywords:[\"angry\",\"violence\",\"fist\",\"hit\",\"attack\",\"hand\"],char:\"\\u{1f44a}\",fitzpatrick_scale:!0,category:\"people\"},fist:{keywords:[\"fingers\",\"hand\",\"grasp\"],char:\"\\u270a\",fitzpatrick_scale:!0,category:\"people\"},fist_left:{keywords:[\"hand\",\"fistbump\"],char:\"\\u{1f91b}\",fitzpatrick_scale:!0,category:\"people\"},fist_right:{keywords:[\"hand\",\"fistbump\"],char:\"\\u{1f91c}\",fitzpatrick_scale:!0,category:\"people\"},v:{keywords:[\"fingers\",\"ohyeah\",\"hand\",\"peace\",\"victory\",\"two\"],char:\"\\u270c\",fitzpatrick_scale:!0,category:\"people\"},ok_hand:{keywords:[\"fingers\",\"limbs\",\"perfect\",\"ok\",\"okay\"],char:\"\\u{1f44c}\",fitzpatrick_scale:!0,category:\"people\"},raised_hand:{keywords:[\"fingers\",\"stop\",\"highfive\",\"palm\",\"ban\"],char:\"\\u270b\",fitzpatrick_scale:!0,category:\"people\"},raised_back_of_hand:{keywords:[\"fingers\",\"raised\",\"backhand\"],char:\"\\u{1f91a}\",fitzpatrick_scale:!0,category:\"people\"},open_hands:{keywords:[\"fingers\",\"butterfly\",\"hands\",\"open\"],char:\"\\u{1f450}\",fitzpatrick_scale:!0,category:\"people\"},muscle:{keywords:[\"arm\",\"flex\",\"hand\",\"summer\",\"strong\",\"biceps\"],char:\"\\u{1f4aa}\",fitzpatrick_scale:!0,category:\"people\"},pray:{keywords:[\"please\",\"hope\",\"wish\",\"namaste\",\"highfive\"],char:\"\\u{1f64f}\",fitzpatrick_scale:!0,category:\"people\"},foot:{keywords:[\"kick\",\"stomp\"],char:\"\\u{1f9b6}\",fitzpatrick_scale:!0,category:\"people\"},leg:{keywords:[\"kick\",\"limb\"],char:\"\\u{1f9b5}\",fitzpatrick_scale:!0,category:\"people\"},handshake:{keywords:[\"agreement\",\"shake\"],char:\"\\u{1f91d}\",fitzpatrick_scale:!1,category:\"people\"},point_up:{keywords:[\"hand\",\"fingers\",\"direction\",\"up\"],char:\"\\u261d\",fitzpatrick_scale:!0,category:\"people\"},point_up_2:{keywords:[\"fingers\",\"hand\",\"direction\",\"up\"],char:\"\\u{1f446}\",fitzpatrick_scale:!0,category:\"people\"},point_down:{keywords:[\"fingers\",\"hand\",\"direction\",\"down\"],char:\"\\u{1f447}\",fitzpatrick_scale:!0,category:\"people\"},point_left:{keywords:[\"direction\",\"fingers\",\"hand\",\"left\"],char:\"\\u{1f448}\",fitzpatrick_scale:!0,category:\"people\"},point_right:{keywords:[\"fingers\",\"hand\",\"direction\",\"right\"],char:\"\\u{1f449}\",fitzpatrick_scale:!0,category:\"people\"},fu:{keywords:[\"hand\",\"fingers\",\"rude\",\"middle\",\"flipping\"],char:\"\\u{1f595}\",fitzpatrick_scale:!0,category:\"people\"},raised_hand_with_fingers_splayed:{keywords:[\"hand\",\"fingers\",\"palm\"],char:\"\\u{1f590}\",fitzpatrick_scale:!0,category:\"people\"},love_you:{keywords:[\"hand\",\"fingers\",\"gesture\"],char:\"\\u{1f91f}\",fitzpatrick_scale:!0,category:\"people\"},metal:{keywords:[\"hand\",\"fingers\",\"evil_eye\",\"sign_of_horns\",\"rock_on\"],char:\"\\u{1f918}\",fitzpatrick_scale:!0,category:\"people\"},crossed_fingers:{keywords:[\"good\",\"lucky\"],char:\"\\u{1f91e}\",fitzpatrick_scale:!0,category:\"people\"},vulcan_salute:{keywords:[\"hand\",\"fingers\",\"spock\",\"star trek\"],char:\"\\u{1f596}\",fitzpatrick_scale:!0,category:\"people\"},writing_hand:{keywords:[\"lower_left_ballpoint_pen\",\"stationery\",\"write\",\"compose\"],char:\"\\u270d\",fitzpatrick_scale:!0,category:\"people\"},selfie:{keywords:[\"camera\",\"phone\"],char:\"\\u{1f933}\",fitzpatrick_scale:!0,category:\"people\"},nail_care:{keywords:[\"beauty\",\"manicure\",\"finger\",\"fashion\",\"nail\"],char:\"\\u{1f485}\",fitzpatrick_scale:!0,category:\"people\"},lips:{keywords:[\"mouth\",\"kiss\"],char:\"\\u{1f444}\",fitzpatrick_scale:!1,category:\"people\"},tooth:{keywords:[\"teeth\",\"dentist\"],char:\"\\u{1f9b7}\",fitzpatrick_scale:!1,category:\"people\"},tongue:{keywords:[\"mouth\",\"playful\"],char:\"\\u{1f445}\",fitzpatrick_scale:!1,category:\"people\"},ear:{keywords:[\"face\",\"hear\",\"sound\",\"listen\"],char:\"\\u{1f442}\",fitzpatrick_scale:!0,category:\"people\"},nose:{keywords:[\"smell\",\"sniff\"],char:\"\\u{1f443}\",fitzpatrick_scale:!0,category:\"people\"},eye:{keywords:[\"face\",\"look\",\"see\",\"watch\",\"stare\"],char:\"\\u{1f441}\",fitzpatrick_scale:!1,category:\"people\"},eyes:{keywords:[\"look\",\"watch\",\"stalk\",\"peek\",\"see\"],char:\"\\u{1f440}\",fitzpatrick_scale:!1,category:\"people\"},brain:{keywords:[\"smart\",\"intelligent\"],char:\"\\u{1f9e0}\",fitzpatrick_scale:!1,category:\"people\"},bust_in_silhouette:{keywords:[\"user\",\"person\",\"human\"],char:\"\\u{1f464}\",fitzpatrick_scale:!1,category:\"people\"},busts_in_silhouette:{keywords:[\"user\",\"person\",\"human\",\"group\",\"team\"],char:\"\\u{1f465}\",fitzpatrick_scale:!1,category:\"people\"},speaking_head:{keywords:[\"user\",\"person\",\"human\",\"sing\",\"say\",\"talk\"],char:\"\\u{1f5e3}\",fitzpatrick_scale:!1,category:\"people\"},baby:{keywords:[\"child\",\"boy\",\"girl\",\"toddler\"],char:\"\\u{1f476}\",fitzpatrick_scale:!0,category:\"people\"},child:{keywords:[\"gender-neutral\",\"young\"],char:\"\\u{1f9d2}\",fitzpatrick_scale:!0,category:\"people\"},boy:{keywords:[\"man\",\"male\",\"guy\",\"teenager\"],char:\"\\u{1f466}\",fitzpatrick_scale:!0,category:\"people\"},girl:{keywords:[\"female\",\"woman\",\"teenager\"],char:\"\\u{1f467}\",fitzpatrick_scale:!0,category:\"people\"},adult:{keywords:[\"gender-neutral\",\"person\"],char:\"\\u{1f9d1}\",fitzpatrick_scale:!0,category:\"people\"},man:{keywords:[\"mustache\",\"father\",\"dad\",\"guy\",\"classy\",\"sir\",\"moustache\"],char:\"\\u{1f468}\",fitzpatrick_scale:!0,category:\"people\"},woman:{keywords:[\"female\",\"girls\",\"lady\"],char:\"\\u{1f469}\",fitzpatrick_scale:!0,category:\"people\"},blonde_woman:{keywords:[\"woman\",\"female\",\"girl\",\"blonde\",\"person\"],char:\"\\u{1f471}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},blonde_man:{keywords:[\"man\",\"male\",\"boy\",\"blonde\",\"guy\",\"person\"],char:\"\\u{1f471}\",fitzpatrick_scale:!0,category:\"people\"},bearded_person:{keywords:[\"person\",\"bewhiskered\"],char:\"\\u{1f9d4}\",fitzpatrick_scale:!0,category:\"people\"},older_adult:{keywords:[\"human\",\"elder\",\"senior\",\"gender-neutral\"],char:\"\\u{1f9d3}\",fitzpatrick_scale:!0,category:\"people\"},older_man:{keywords:[\"human\",\"male\",\"men\",\"old\",\"elder\",\"senior\"],char:\"\\u{1f474}\",fitzpatrick_scale:!0,category:\"people\"},older_woman:{keywords:[\"human\",\"female\",\"women\",\"lady\",\"old\",\"elder\",\"senior\"],char:\"\\u{1f475}\",fitzpatrick_scale:!0,category:\"people\"},man_with_gua_pi_mao:{keywords:[\"male\",\"boy\",\"chinese\"],char:\"\\u{1f472}\",fitzpatrick_scale:!0,category:\"people\"},woman_with_headscarf:{keywords:[\"female\",\"hijab\",\"mantilla\",\"tichel\"],char:\"\\u{1f9d5}\",fitzpatrick_scale:!0,category:\"people\"},woman_with_turban:{keywords:[\"female\",\"indian\",\"hinduism\",\"arabs\",\"woman\"],char:\"\\u{1f473}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_with_turban:{keywords:[\"male\",\"indian\",\"hinduism\",\"arabs\"],char:\"\\u{1f473}\",fitzpatrick_scale:!0,category:\"people\"},policewoman:{keywords:[\"woman\",\"police\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\",\"female\"],char:\"\\u{1f46e}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},policeman:{keywords:[\"man\",\"police\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\"],char:\"\\u{1f46e}\",fitzpatrick_scale:!0,category:\"people\"},construction_worker_woman:{keywords:[\"female\",\"human\",\"wip\",\"build\",\"construction\",\"worker\",\"labor\",\"woman\"],char:\"\\u{1f477}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},construction_worker_man:{keywords:[\"male\",\"human\",\"wip\",\"guy\",\"build\",\"construction\",\"worker\",\"labor\"],char:\"\\u{1f477}\",fitzpatrick_scale:!0,category:\"people\"},guardswoman:{keywords:[\"uk\",\"gb\",\"british\",\"female\",\"royal\",\"woman\"],char:\"\\u{1f482}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},guardsman:{keywords:[\"uk\",\"gb\",\"british\",\"male\",\"guy\",\"royal\"],char:\"\\u{1f482}\",fitzpatrick_scale:!0,category:\"people\"},female_detective:{keywords:[\"human\",\"spy\",\"detective\",\"female\",\"woman\"],char:\"\\u{1f575}\\ufe0f\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},male_detective:{keywords:[\"human\",\"spy\",\"detective\"],char:\"\\u{1f575}\",fitzpatrick_scale:!0,category:\"people\"},woman_health_worker:{keywords:[\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u2695\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_health_worker:{keywords:[\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u2695\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_farmer:{keywords:[\"rancher\",\"gardener\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f33e}\",fitzpatrick_scale:!0,category:\"people\"},man_farmer:{keywords:[\"rancher\",\"gardener\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f33e}\",fitzpatrick_scale:!0,category:\"people\"},woman_cook:{keywords:[\"chef\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f373}\",fitzpatrick_scale:!0,category:\"people\"},man_cook:{keywords:[\"chef\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f373}\",fitzpatrick_scale:!0,category:\"people\"},woman_student:{keywords:[\"graduate\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f393}\",fitzpatrick_scale:!0,category:\"people\"},man_student:{keywords:[\"graduate\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f393}\",fitzpatrick_scale:!0,category:\"people\"},woman_singer:{keywords:[\"rockstar\",\"entertainer\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f3a4}\",fitzpatrick_scale:!0,category:\"people\"},man_singer:{keywords:[\"rockstar\",\"entertainer\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f3a4}\",fitzpatrick_scale:!0,category:\"people\"},woman_teacher:{keywords:[\"instructor\",\"professor\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f3eb}\",fitzpatrick_scale:!0,category:\"people\"},man_teacher:{keywords:[\"instructor\",\"professor\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f3eb}\",fitzpatrick_scale:!0,category:\"people\"},woman_factory_worker:{keywords:[\"assembly\",\"industrial\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f3ed}\",fitzpatrick_scale:!0,category:\"people\"},man_factory_worker:{keywords:[\"assembly\",\"industrial\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f3ed}\",fitzpatrick_scale:!0,category:\"people\"},woman_technologist:{keywords:[\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"woman\",\"human\",\"laptop\",\"computer\"],char:\"\\u{1f469}\\u200d\\u{1f4bb}\",fitzpatrick_scale:!0,category:\"people\"},man_technologist:{keywords:[\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"man\",\"human\",\"laptop\",\"computer\"],char:\"\\u{1f468}\\u200d\\u{1f4bb}\",fitzpatrick_scale:!0,category:\"people\"},woman_office_worker:{keywords:[\"business\",\"manager\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f4bc}\",fitzpatrick_scale:!0,category:\"people\"},man_office_worker:{keywords:[\"business\",\"manager\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f4bc}\",fitzpatrick_scale:!0,category:\"people\"},woman_mechanic:{keywords:[\"plumber\",\"woman\",\"human\",\"wrench\"],char:\"\\u{1f469}\\u200d\\u{1f527}\",fitzpatrick_scale:!0,category:\"people\"},man_mechanic:{keywords:[\"plumber\",\"man\",\"human\",\"wrench\"],char:\"\\u{1f468}\\u200d\\u{1f527}\",fitzpatrick_scale:!0,category:\"people\"},woman_scientist:{keywords:[\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f52c}\",fitzpatrick_scale:!0,category:\"people\"},man_scientist:{keywords:[\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f52c}\",fitzpatrick_scale:!0,category:\"people\"},woman_artist:{keywords:[\"painter\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f3a8}\",fitzpatrick_scale:!0,category:\"people\"},man_artist:{keywords:[\"painter\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f3a8}\",fitzpatrick_scale:!0,category:\"people\"},woman_firefighter:{keywords:[\"fireman\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f692}\",fitzpatrick_scale:!0,category:\"people\"},man_firefighter:{keywords:[\"fireman\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f692}\",fitzpatrick_scale:!0,category:\"people\"},woman_pilot:{keywords:[\"aviator\",\"plane\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u2708\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_pilot:{keywords:[\"aviator\",\"plane\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u2708\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_astronaut:{keywords:[\"space\",\"rocket\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u{1f680}\",fitzpatrick_scale:!0,category:\"people\"},man_astronaut:{keywords:[\"space\",\"rocket\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u{1f680}\",fitzpatrick_scale:!0,category:\"people\"},woman_judge:{keywords:[\"justice\",\"court\",\"woman\",\"human\"],char:\"\\u{1f469}\\u200d\\u2696\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_judge:{keywords:[\"justice\",\"court\",\"man\",\"human\"],char:\"\\u{1f468}\\u200d\\u2696\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_superhero:{keywords:[\"woman\",\"female\",\"good\",\"heroine\",\"superpowers\"],char:\"\\u{1f9b8}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_superhero:{keywords:[\"man\",\"male\",\"good\",\"hero\",\"superpowers\"],char:\"\\u{1f9b8}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_supervillain:{keywords:[\"woman\",\"female\",\"evil\",\"bad\",\"criminal\",\"heroine\",\"superpowers\"],char:\"\\u{1f9b9}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_supervillain:{keywords:[\"man\",\"male\",\"evil\",\"bad\",\"criminal\",\"hero\",\"superpowers\"],char:\"\\u{1f9b9}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},mrs_claus:{keywords:[\"woman\",\"female\",\"xmas\",\"mother christmas\"],char:\"\\u{1f936}\",fitzpatrick_scale:!0,category:\"people\"},santa:{keywords:[\"festival\",\"man\",\"male\",\"xmas\",\"father christmas\"],char:\"\\u{1f385}\",fitzpatrick_scale:!0,category:\"people\"},sorceress:{keywords:[\"woman\",\"female\",\"mage\",\"witch\"],char:\"\\u{1f9d9}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},wizard:{keywords:[\"man\",\"male\",\"mage\",\"sorcerer\"],char:\"\\u{1f9d9}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_elf:{keywords:[\"woman\",\"female\"],char:\"\\u{1f9dd}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_elf:{keywords:[\"man\",\"male\"],char:\"\\u{1f9dd}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_vampire:{keywords:[\"woman\",\"female\"],char:\"\\u{1f9db}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_vampire:{keywords:[\"man\",\"male\",\"dracula\"],char:\"\\u{1f9db}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_zombie:{keywords:[\"woman\",\"female\",\"undead\",\"walking dead\"],char:\"\\u{1f9df}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!1,category:\"people\"},man_zombie:{keywords:[\"man\",\"male\",\"dracula\",\"undead\",\"walking dead\"],char:\"\\u{1f9df}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!1,category:\"people\"},woman_genie:{keywords:[\"woman\",\"female\"],char:\"\\u{1f9de}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!1,category:\"people\"},man_genie:{keywords:[\"man\",\"male\"],char:\"\\u{1f9de}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!1,category:\"people\"},mermaid:{keywords:[\"woman\",\"female\",\"merwoman\",\"ariel\"],char:\"\\u{1f9dc}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},merman:{keywords:[\"man\",\"male\",\"triton\"],char:\"\\u{1f9dc}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_fairy:{keywords:[\"woman\",\"female\"],char:\"\\u{1f9da}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_fairy:{keywords:[\"man\",\"male\"],char:\"\\u{1f9da}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},angel:{keywords:[\"heaven\",\"wings\",\"halo\"],char:\"\\u{1f47c}\",fitzpatrick_scale:!0,category:\"people\"},pregnant_woman:{keywords:[\"baby\"],char:\"\\u{1f930}\",fitzpatrick_scale:!0,category:\"people\"},breastfeeding:{keywords:[\"nursing\",\"baby\"],char:\"\\u{1f931}\",fitzpatrick_scale:!0,category:\"people\"},princess:{keywords:[\"girl\",\"woman\",\"female\",\"blond\",\"crown\",\"royal\",\"queen\"],char:\"\\u{1f478}\",fitzpatrick_scale:!0,category:\"people\"},prince:{keywords:[\"boy\",\"man\",\"male\",\"crown\",\"royal\",\"king\"],char:\"\\u{1f934}\",fitzpatrick_scale:!0,category:\"people\"},bride_with_veil:{keywords:[\"couple\",\"marriage\",\"wedding\",\"woman\",\"bride\"],char:\"\\u{1f470}\",fitzpatrick_scale:!0,category:\"people\"},man_in_tuxedo:{keywords:[\"couple\",\"marriage\",\"wedding\",\"groom\"],char:\"\\u{1f935}\",fitzpatrick_scale:!0,category:\"people\"},running_woman:{keywords:[\"woman\",\"walking\",\"exercise\",\"race\",\"running\",\"female\"],char:\"\\u{1f3c3}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},running_man:{keywords:[\"man\",\"walking\",\"exercise\",\"race\",\"running\"],char:\"\\u{1f3c3}\",fitzpatrick_scale:!0,category:\"people\"},walking_woman:{keywords:[\"human\",\"feet\",\"steps\",\"woman\",\"female\"],char:\"\\u{1f6b6}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},walking_man:{keywords:[\"human\",\"feet\",\"steps\"],char:\"\\u{1f6b6}\",fitzpatrick_scale:!0,category:\"people\"},dancer:{keywords:[\"female\",\"girl\",\"woman\",\"fun\"],char:\"\\u{1f483}\",fitzpatrick_scale:!0,category:\"people\"},man_dancing:{keywords:[\"male\",\"boy\",\"fun\",\"dancer\"],char:\"\\u{1f57a}\",fitzpatrick_scale:!0,category:\"people\"},dancing_women:{keywords:[\"female\",\"bunny\",\"women\",\"girls\"],char:\"\\u{1f46f}\",fitzpatrick_scale:!1,category:\"people\"},dancing_men:{keywords:[\"male\",\"bunny\",\"men\",\"boys\"],char:\"\\u{1f46f}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!1,category:\"people\"},couple:{keywords:[\"pair\",\"people\",\"human\",\"love\",\"date\",\"dating\",\"like\",\"affection\",\"valentines\",\"marriage\"],char:\"\\u{1f46b}\",fitzpatrick_scale:!1,category:\"people\"},two_men_holding_hands:{keywords:[\"pair\",\"couple\",\"love\",\"like\",\"bromance\",\"friendship\",\"people\",\"human\"],char:\"\\u{1f46c}\",fitzpatrick_scale:!1,category:\"people\"},two_women_holding_hands:{keywords:[\"pair\",\"friendship\",\"couple\",\"love\",\"like\",\"female\",\"people\",\"human\"],char:\"\\u{1f46d}\",fitzpatrick_scale:!1,category:\"people\"},bowing_woman:{keywords:[\"woman\",\"female\",\"girl\"],char:\"\\u{1f647}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},bowing_man:{keywords:[\"man\",\"male\",\"boy\"],char:\"\\u{1f647}\",fitzpatrick_scale:!0,category:\"people\"},man_facepalming:{keywords:[\"man\",\"male\",\"boy\",\"disbelief\"],char:\"\\u{1f926}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_facepalming:{keywords:[\"woman\",\"female\",\"girl\",\"disbelief\"],char:\"\\u{1f926}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_shrugging:{keywords:[\"woman\",\"female\",\"girl\",\"confused\",\"indifferent\",\"doubt\"],char:\"\\u{1f937}\",fitzpatrick_scale:!0,category:\"people\"},man_shrugging:{keywords:[\"man\",\"male\",\"boy\",\"confused\",\"indifferent\",\"doubt\"],char:\"\\u{1f937}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},tipping_hand_woman:{keywords:[\"female\",\"girl\",\"woman\",\"human\",\"information\"],char:\"\\u{1f481}\",fitzpatrick_scale:!0,category:\"people\"},tipping_hand_man:{keywords:[\"male\",\"boy\",\"man\",\"human\",\"information\"],char:\"\\u{1f481}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},no_good_woman:{keywords:[\"female\",\"girl\",\"woman\",\"nope\"],char:\"\\u{1f645}\",fitzpatrick_scale:!0,category:\"people\"},no_good_man:{keywords:[\"male\",\"boy\",\"man\",\"nope\"],char:\"\\u{1f645}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},ok_woman:{keywords:[\"women\",\"girl\",\"female\",\"pink\",\"human\",\"woman\"],char:\"\\u{1f646}\",fitzpatrick_scale:!0,category:\"people\"},ok_man:{keywords:[\"men\",\"boy\",\"male\",\"blue\",\"human\",\"man\"],char:\"\\u{1f646}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},raising_hand_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:\"\\u{1f64b}\",fitzpatrick_scale:!0,category:\"people\"},raising_hand_man:{keywords:[\"male\",\"boy\",\"man\"],char:\"\\u{1f64b}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},pouting_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:\"\\u{1f64e}\",fitzpatrick_scale:!0,category:\"people\"},pouting_man:{keywords:[\"male\",\"boy\",\"man\"],char:\"\\u{1f64e}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},frowning_woman:{keywords:[\"female\",\"girl\",\"woman\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],char:\"\\u{1f64d}\",fitzpatrick_scale:!0,category:\"people\"},frowning_man:{keywords:[\"male\",\"boy\",\"man\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],char:\"\\u{1f64d}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},haircut_woman:{keywords:[\"female\",\"girl\",\"woman\"],char:\"\\u{1f487}\",fitzpatrick_scale:!0,category:\"people\"},haircut_man:{keywords:[\"male\",\"boy\",\"man\"],char:\"\\u{1f487}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},massage_woman:{keywords:[\"female\",\"girl\",\"woman\",\"head\"],char:\"\\u{1f486}\",fitzpatrick_scale:!0,category:\"people\"},massage_man:{keywords:[\"male\",\"boy\",\"man\",\"head\"],char:\"\\u{1f486}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},woman_in_steamy_room:{keywords:[\"female\",\"woman\",\"spa\",\"steamroom\",\"sauna\"],char:\"\\u{1f9d6}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},man_in_steamy_room:{keywords:[\"male\",\"man\",\"spa\",\"steamroom\",\"sauna\"],char:\"\\u{1f9d6}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"people\"},couple_with_heart_woman_man:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:\"\\u{1f491}\",fitzpatrick_scale:!1,category:\"people\"},couple_with_heart_woman_woman:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:\"\\u{1f469}\\u200d\\u2764\\ufe0f\\u200d\\u{1f469}\",fitzpatrick_scale:!1,category:\"people\"},couple_with_heart_man_man:{keywords:[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],char:\"\\u{1f468}\\u200d\\u2764\\ufe0f\\u200d\\u{1f468}\",fitzpatrick_scale:!1,category:\"people\"},couplekiss_man_woman:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:\"\\u{1f48f}\",fitzpatrick_scale:!1,category:\"people\"},couplekiss_woman_woman:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:\"\\u{1f469}\\u200d\\u2764\\ufe0f\\u200d\\u{1f48b}\\u200d\\u{1f469}\",fitzpatrick_scale:!1,category:\"people\"},couplekiss_man_man:{keywords:[\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],char:\"\\u{1f468}\\u200d\\u2764\\ufe0f\\u200d\\u{1f48b}\\u200d\\u{1f468}\",fitzpatrick_scale:!1,category:\"people\"},family_man_woman_boy:{keywords:[\"home\",\"parents\",\"child\",\"mom\",\"dad\",\"father\",\"mother\",\"people\",\"human\"],char:\"\\u{1f46a}\",fitzpatrick_scale:!1,category:\"people\"},family_man_woman_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"child\"],char:\"\\u{1f468}\\u200d\\u{1f469}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_man_woman_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f469}\\u200d\\u{1f467}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_woman_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f469}\\u200d\\u{1f466}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_woman_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f469}\\u200d\\u{1f467}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_woman_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f469}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_woman_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f469}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_woman_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f469}\\u200d\\u{1f467}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_woman_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f469}\\u200d\\u{1f466}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_woman_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f469}\\u200d\\u{1f467}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_man_man_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f468}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_man_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f468}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_man_man_girl_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f468}\\u200d\\u{1f467}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_man_boy_boy:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f468}\\u200d\\u{1f466}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_man_girl_girl:{keywords:[\"home\",\"parents\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f468}\\u200d\\u{1f467}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"\\u{1f469}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"\\u{1f469}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_girl_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f467}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_boy_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f466}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_woman_girl_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"\\u{1f469}\\u200d\\u{1f467}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_man_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"\\u{1f468}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"child\"],char:\"\\u{1f468}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},family_man_girl_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f467}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_boy_boy:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f466}\\u200d\\u{1f466}\",fitzpatrick_scale:!1,category:\"people\"},family_man_girl_girl:{keywords:[\"home\",\"parent\",\"people\",\"human\",\"children\"],char:\"\\u{1f468}\\u200d\\u{1f467}\\u200d\\u{1f467}\",fitzpatrick_scale:!1,category:\"people\"},yarn:{keywords:[\"ball\",\"crochet\",\"knit\"],char:\"\\u{1f9f6}\",fitzpatrick_scale:!1,category:\"people\"},thread:{keywords:[\"needle\",\"sewing\",\"spool\",\"string\"],char:\"\\u{1f9f5}\",fitzpatrick_scale:!1,category:\"people\"},coat:{keywords:[\"jacket\"],char:\"\\u{1f9e5}\",fitzpatrick_scale:!1,category:\"people\"},labcoat:{keywords:[\"doctor\",\"experiment\",\"scientist\",\"chemist\"],char:\"\\u{1f97c}\",fitzpatrick_scale:!1,category:\"people\"},womans_clothes:{keywords:[\"fashion\",\"shopping_bags\",\"female\"],char:\"\\u{1f45a}\",fitzpatrick_scale:!1,category:\"people\"},tshirt:{keywords:[\"fashion\",\"cloth\",\"casual\",\"shirt\",\"tee\"],char:\"\\u{1f455}\",fitzpatrick_scale:!1,category:\"people\"},jeans:{keywords:[\"fashion\",\"shopping\"],char:\"\\u{1f456}\",fitzpatrick_scale:!1,category:\"people\"},necktie:{keywords:[\"shirt\",\"suitup\",\"formal\",\"fashion\",\"cloth\",\"business\"],char:\"\\u{1f454}\",fitzpatrick_scale:!1,category:\"people\"},dress:{keywords:[\"clothes\",\"fashion\",\"shopping\"],char:\"\\u{1f457}\",fitzpatrick_scale:!1,category:\"people\"},bikini:{keywords:[\"swimming\",\"female\",\"woman\",\"girl\",\"fashion\",\"beach\",\"summer\"],char:\"\\u{1f459}\",fitzpatrick_scale:!1,category:\"people\"},kimono:{keywords:[\"dress\",\"fashion\",\"women\",\"female\",\"japanese\"],char:\"\\u{1f458}\",fitzpatrick_scale:!1,category:\"people\"},lipstick:{keywords:[\"female\",\"girl\",\"fashion\",\"woman\"],char:\"\\u{1f484}\",fitzpatrick_scale:!1,category:\"people\"},kiss:{keywords:[\"face\",\"lips\",\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f48b}\",fitzpatrick_scale:!1,category:\"people\"},footprints:{keywords:[\"feet\",\"tracking\",\"walking\",\"beach\"],char:\"\\u{1f463}\",fitzpatrick_scale:!1,category:\"people\"},flat_shoe:{keywords:[\"ballet\",\"slip-on\",\"slipper\"],char:\"\\u{1f97f}\",fitzpatrick_scale:!1,category:\"people\"},high_heel:{keywords:[\"fashion\",\"shoes\",\"female\",\"pumps\",\"stiletto\"],char:\"\\u{1f460}\",fitzpatrick_scale:!1,category:\"people\"},sandal:{keywords:[\"shoes\",\"fashion\",\"flip flops\"],char:\"\\u{1f461}\",fitzpatrick_scale:!1,category:\"people\"},boot:{keywords:[\"shoes\",\"fashion\"],char:\"\\u{1f462}\",fitzpatrick_scale:!1,category:\"people\"},mans_shoe:{keywords:[\"fashion\",\"male\"],char:\"\\u{1f45e}\",fitzpatrick_scale:!1,category:\"people\"},athletic_shoe:{keywords:[\"shoes\",\"sports\",\"sneakers\"],char:\"\\u{1f45f}\",fitzpatrick_scale:!1,category:\"people\"},hiking_boot:{keywords:[\"backpacking\",\"camping\",\"hiking\"],char:\"\\u{1f97e}\",fitzpatrick_scale:!1,category:\"people\"},socks:{keywords:[\"stockings\",\"clothes\"],char:\"\\u{1f9e6}\",fitzpatrick_scale:!1,category:\"people\"},gloves:{keywords:[\"hands\",\"winter\",\"clothes\"],char:\"\\u{1f9e4}\",fitzpatrick_scale:!1,category:\"people\"},scarf:{keywords:[\"neck\",\"winter\",\"clothes\"],char:\"\\u{1f9e3}\",fitzpatrick_scale:!1,category:\"people\"},womans_hat:{keywords:[\"fashion\",\"accessories\",\"female\",\"lady\",\"spring\"],char:\"\\u{1f452}\",fitzpatrick_scale:!1,category:\"people\"},tophat:{keywords:[\"magic\",\"gentleman\",\"classy\",\"circus\"],char:\"\\u{1f3a9}\",fitzpatrick_scale:!1,category:\"people\"},billed_hat:{keywords:[\"cap\",\"baseball\"],char:\"\\u{1f9e2}\",fitzpatrick_scale:!1,category:\"people\"},rescue_worker_helmet:{keywords:[\"construction\",\"build\"],char:\"\\u26d1\",fitzpatrick_scale:!1,category:\"people\"},mortar_board:{keywords:[\"school\",\"college\",\"degree\",\"university\",\"graduation\",\"cap\",\"hat\",\"legal\",\"learn\",\"education\"],char:\"\\u{1f393}\",fitzpatrick_scale:!1,category:\"people\"},crown:{keywords:[\"king\",\"kod\",\"leader\",\"royalty\",\"lord\"],char:\"\\u{1f451}\",fitzpatrick_scale:!1,category:\"people\"},school_satchel:{keywords:[\"student\",\"education\",\"bag\",\"backpack\"],char:\"\\u{1f392}\",fitzpatrick_scale:!1,category:\"people\"},luggage:{keywords:[\"packing\",\"travel\"],char:\"\\u{1f9f3}\",fitzpatrick_scale:!1,category:\"people\"},pouch:{keywords:[\"bag\",\"accessories\",\"shopping\"],char:\"\\u{1f45d}\",fitzpatrick_scale:!1,category:\"people\"},purse:{keywords:[\"fashion\",\"accessories\",\"money\",\"sales\",\"shopping\"],char:\"\\u{1f45b}\",fitzpatrick_scale:!1,category:\"people\"},handbag:{keywords:[\"fashion\",\"accessory\",\"accessories\",\"shopping\"],char:\"\\u{1f45c}\",fitzpatrick_scale:!1,category:\"people\"},briefcase:{keywords:[\"business\",\"documents\",\"work\",\"law\",\"legal\",\"job\",\"career\"],char:\"\\u{1f4bc}\",fitzpatrick_scale:!1,category:\"people\"},eyeglasses:{keywords:[\"fashion\",\"accessories\",\"eyesight\",\"nerdy\",\"dork\",\"geek\"],char:\"\\u{1f453}\",fitzpatrick_scale:!1,category:\"people\"},dark_sunglasses:{keywords:[\"face\",\"cool\",\"accessories\"],char:\"\\u{1f576}\",fitzpatrick_scale:!1,category:\"people\"},goggles:{keywords:[\"eyes\",\"protection\",\"safety\"],char:\"\\u{1f97d}\",fitzpatrick_scale:!1,category:\"people\"},ring:{keywords:[\"wedding\",\"propose\",\"marriage\",\"valentines\",\"diamond\",\"fashion\",\"jewelry\",\"gem\",\"engagement\"],char:\"\\u{1f48d}\",fitzpatrick_scale:!1,category:\"people\"},closed_umbrella:{keywords:[\"weather\",\"rain\",\"drizzle\"],char:\"\\u{1f302}\",fitzpatrick_scale:!1,category:\"people\"},dog:{keywords:[\"animal\",\"friend\",\"nature\",\"woof\",\"puppy\",\"pet\",\"faithful\"],char:\"\\u{1f436}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cat:{keywords:[\"animal\",\"meow\",\"nature\",\"pet\",\"kitten\"],char:\"\\u{1f431}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},mouse:{keywords:[\"animal\",\"nature\",\"cheese_wedge\",\"rodent\"],char:\"\\u{1f42d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hamster:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f439}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},rabbit:{keywords:[\"animal\",\"nature\",\"pet\",\"spring\",\"magic\",\"bunny\"],char:\"\\u{1f430}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},fox_face:{keywords:[\"animal\",\"nature\",\"face\"],char:\"\\u{1f98a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},bear:{keywords:[\"animal\",\"nature\",\"wild\"],char:\"\\u{1f43b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},panda_face:{keywords:[\"animal\",\"nature\",\"panda\"],char:\"\\u{1f43c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},koala:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f428}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},tiger:{keywords:[\"animal\",\"cat\",\"danger\",\"wild\",\"nature\",\"roar\"],char:\"\\u{1f42f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},lion:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f981}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cow:{keywords:[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],char:\"\\u{1f42e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},pig:{keywords:[\"animal\",\"oink\",\"nature\"],char:\"\\u{1f437}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},pig_nose:{keywords:[\"animal\",\"oink\"],char:\"\\u{1f43d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},frog:{keywords:[\"animal\",\"nature\",\"croak\",\"toad\"],char:\"\\u{1f438}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},squid:{keywords:[\"animal\",\"nature\",\"ocean\",\"sea\"],char:\"\\u{1f991}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},octopus:{keywords:[\"animal\",\"creature\",\"ocean\",\"sea\",\"nature\",\"beach\"],char:\"\\u{1f419}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},shrimp:{keywords:[\"animal\",\"ocean\",\"nature\",\"seafood\"],char:\"\\u{1f990}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},monkey_face:{keywords:[\"animal\",\"nature\",\"circus\"],char:\"\\u{1f435}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},gorilla:{keywords:[\"animal\",\"nature\",\"circus\"],char:\"\\u{1f98d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},see_no_evil:{keywords:[\"monkey\",\"animal\",\"nature\",\"haha\"],char:\"\\u{1f648}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hear_no_evil:{keywords:[\"animal\",\"monkey\",\"nature\"],char:\"\\u{1f649}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},speak_no_evil:{keywords:[\"monkey\",\"animal\",\"nature\",\"omg\"],char:\"\\u{1f64a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},monkey:{keywords:[\"animal\",\"nature\",\"banana\",\"circus\"],char:\"\\u{1f412}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},chicken:{keywords:[\"animal\",\"cluck\",\"nature\",\"bird\"],char:\"\\u{1f414}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},penguin:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f427}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},bird:{keywords:[\"animal\",\"nature\",\"fly\",\"tweet\",\"spring\"],char:\"\\u{1f426}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},baby_chick:{keywords:[\"animal\",\"chicken\",\"bird\"],char:\"\\u{1f424}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hatching_chick:{keywords:[\"animal\",\"chicken\",\"egg\",\"born\",\"baby\",\"bird\"],char:\"\\u{1f423}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hatched_chick:{keywords:[\"animal\",\"chicken\",\"baby\",\"bird\"],char:\"\\u{1f425}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},duck:{keywords:[\"animal\",\"nature\",\"bird\",\"mallard\"],char:\"\\u{1f986}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},eagle:{keywords:[\"animal\",\"nature\",\"bird\"],char:\"\\u{1f985}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},owl:{keywords:[\"animal\",\"nature\",\"bird\",\"hoot\"],char:\"\\u{1f989}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},bat:{keywords:[\"animal\",\"nature\",\"blind\",\"vampire\"],char:\"\\u{1f987}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},wolf:{keywords:[\"animal\",\"nature\",\"wild\"],char:\"\\u{1f43a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},boar:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f417}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},horse:{keywords:[\"animal\",\"brown\",\"nature\"],char:\"\\u{1f434}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},unicorn:{keywords:[\"animal\",\"nature\",\"mystical\"],char:\"\\u{1f984}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},honeybee:{keywords:[\"animal\",\"insect\",\"nature\",\"bug\",\"spring\",\"honey\"],char:\"\\u{1f41d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},bug:{keywords:[\"animal\",\"insect\",\"nature\",\"worm\"],char:\"\\u{1f41b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},butterfly:{keywords:[\"animal\",\"insect\",\"nature\",\"caterpillar\"],char:\"\\u{1f98b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},snail:{keywords:[\"slow\",\"animal\",\"shell\"],char:\"\\u{1f40c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},beetle:{keywords:[\"animal\",\"insect\",\"nature\",\"ladybug\"],char:\"\\u{1f41e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},ant:{keywords:[\"animal\",\"insect\",\"nature\",\"bug\"],char:\"\\u{1f41c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},grasshopper:{keywords:[\"animal\",\"cricket\",\"chirp\"],char:\"\\u{1f997}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},spider:{keywords:[\"animal\",\"arachnid\"],char:\"\\u{1f577}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},scorpion:{keywords:[\"animal\",\"arachnid\"],char:\"\\u{1f982}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},crab:{keywords:[\"animal\",\"crustacean\"],char:\"\\u{1f980}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},snake:{keywords:[\"animal\",\"evil\",\"nature\",\"hiss\",\"python\"],char:\"\\u{1f40d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},lizard:{keywords:[\"animal\",\"nature\",\"reptile\"],char:\"\\u{1f98e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},\"t-rex\":{keywords:[\"animal\",\"nature\",\"dinosaur\",\"tyrannosaurus\",\"extinct\"],char:\"\\u{1f996}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sauropod:{keywords:[\"animal\",\"nature\",\"dinosaur\",\"brachiosaurus\",\"brontosaurus\",\"diplodocus\",\"extinct\"],char:\"\\u{1f995}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},turtle:{keywords:[\"animal\",\"slow\",\"nature\",\"tortoise\"],char:\"\\u{1f422}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},tropical_fish:{keywords:[\"animal\",\"swim\",\"ocean\",\"beach\",\"nemo\"],char:\"\\u{1f420}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},fish:{keywords:[\"animal\",\"food\",\"nature\"],char:\"\\u{1f41f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},blowfish:{keywords:[\"animal\",\"nature\",\"food\",\"sea\",\"ocean\"],char:\"\\u{1f421}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dolphin:{keywords:[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"flipper\",\"fins\",\"beach\"],char:\"\\u{1f42c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},shark:{keywords:[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"jaws\",\"fins\",\"beach\"],char:\"\\u{1f988}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},whale:{keywords:[\"animal\",\"nature\",\"sea\",\"ocean\"],char:\"\\u{1f433}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},whale2:{keywords:[\"animal\",\"nature\",\"sea\",\"ocean\"],char:\"\\u{1f40b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},crocodile:{keywords:[\"animal\",\"nature\",\"reptile\",\"lizard\",\"alligator\"],char:\"\\u{1f40a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},leopard:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f406}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},zebra:{keywords:[\"animal\",\"nature\",\"stripes\",\"safari\"],char:\"\\u{1f993}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},tiger2:{keywords:[\"animal\",\"nature\",\"roar\"],char:\"\\u{1f405}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},water_buffalo:{keywords:[\"animal\",\"nature\",\"ox\",\"cow\"],char:\"\\u{1f403}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},ox:{keywords:[\"animal\",\"cow\",\"beef\"],char:\"\\u{1f402}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cow2:{keywords:[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],char:\"\\u{1f404}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},deer:{keywords:[\"animal\",\"nature\",\"horns\",\"venison\"],char:\"\\u{1f98c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dromedary_camel:{keywords:[\"animal\",\"hot\",\"desert\",\"hump\"],char:\"\\u{1f42a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},camel:{keywords:[\"animal\",\"nature\",\"hot\",\"desert\",\"hump\"],char:\"\\u{1f42b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},giraffe:{keywords:[\"animal\",\"nature\",\"spots\",\"safari\"],char:\"\\u{1f992}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},elephant:{keywords:[\"animal\",\"nature\",\"nose\",\"th\",\"circus\"],char:\"\\u{1f418}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},rhinoceros:{keywords:[\"animal\",\"nature\",\"horn\"],char:\"\\u{1f98f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},goat:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f410}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},ram:{keywords:[\"animal\",\"sheep\",\"nature\"],char:\"\\u{1f40f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sheep:{keywords:[\"animal\",\"nature\",\"wool\",\"shipit\"],char:\"\\u{1f411}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},racehorse:{keywords:[\"animal\",\"gamble\",\"luck\"],char:\"\\u{1f40e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},pig2:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f416}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},rat:{keywords:[\"animal\",\"mouse\",\"rodent\"],char:\"\\u{1f400}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},mouse2:{keywords:[\"animal\",\"nature\",\"rodent\"],char:\"\\u{1f401}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},rooster:{keywords:[\"animal\",\"nature\",\"chicken\"],char:\"\\u{1f413}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},turkey:{keywords:[\"animal\",\"bird\"],char:\"\\u{1f983}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dove:{keywords:[\"animal\",\"bird\"],char:\"\\u{1f54a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dog2:{keywords:[\"animal\",\"nature\",\"friend\",\"doge\",\"pet\",\"faithful\"],char:\"\\u{1f415}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},poodle:{keywords:[\"dog\",\"animal\",\"101\",\"nature\",\"pet\"],char:\"\\u{1f429}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cat2:{keywords:[\"animal\",\"meow\",\"pet\",\"cats\"],char:\"\\u{1f408}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},rabbit2:{keywords:[\"animal\",\"nature\",\"pet\",\"magic\",\"spring\"],char:\"\\u{1f407}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},chipmunk:{keywords:[\"animal\",\"nature\",\"rodent\",\"squirrel\"],char:\"\\u{1f43f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hedgehog:{keywords:[\"animal\",\"nature\",\"spiny\"],char:\"\\u{1f994}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},raccoon:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f99d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},llama:{keywords:[\"animal\",\"nature\",\"alpaca\"],char:\"\\u{1f999}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hippopotamus:{keywords:[\"animal\",\"nature\"],char:\"\\u{1f99b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},kangaroo:{keywords:[\"animal\",\"nature\",\"australia\",\"joey\",\"hop\",\"marsupial\"],char:\"\\u{1f998}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},badger:{keywords:[\"animal\",\"nature\",\"honey\"],char:\"\\u{1f9a1}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},swan:{keywords:[\"animal\",\"nature\",\"bird\"],char:\"\\u{1f9a2}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},peacock:{keywords:[\"animal\",\"nature\",\"peahen\",\"bird\"],char:\"\\u{1f99a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},parrot:{keywords:[\"animal\",\"nature\",\"bird\",\"pirate\",\"talk\"],char:\"\\u{1f99c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},lobster:{keywords:[\"animal\",\"nature\",\"bisque\",\"claws\",\"seafood\"],char:\"\\u{1f99e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},mosquito:{keywords:[\"animal\",\"nature\",\"insect\",\"malaria\"],char:\"\\u{1f99f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},paw_prints:{keywords:[\"animal\",\"tracking\",\"footprints\",\"dog\",\"cat\",\"pet\",\"feet\"],char:\"\\u{1f43e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dragon:{keywords:[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],char:\"\\u{1f409}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dragon_face:{keywords:[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],char:\"\\u{1f432}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cactus:{keywords:[\"vegetable\",\"plant\",\"nature\"],char:\"\\u{1f335}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},christmas_tree:{keywords:[\"festival\",\"vacation\",\"december\",\"xmas\",\"celebration\"],char:\"\\u{1f384}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},evergreen_tree:{keywords:[\"plant\",\"nature\"],char:\"\\u{1f332}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},deciduous_tree:{keywords:[\"plant\",\"nature\"],char:\"\\u{1f333}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},palm_tree:{keywords:[\"plant\",\"vegetable\",\"nature\",\"summer\",\"beach\",\"mojito\",\"tropical\"],char:\"\\u{1f334}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},seedling:{keywords:[\"plant\",\"nature\",\"grass\",\"lawn\",\"spring\"],char:\"\\u{1f331}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},herb:{keywords:[\"vegetable\",\"plant\",\"medicine\",\"weed\",\"grass\",\"lawn\"],char:\"\\u{1f33f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},shamrock:{keywords:[\"vegetable\",\"plant\",\"nature\",\"irish\",\"clover\"],char:\"\\u2618\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},four_leaf_clover:{keywords:[\"vegetable\",\"plant\",\"nature\",\"lucky\",\"irish\"],char:\"\\u{1f340}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},bamboo:{keywords:[\"plant\",\"nature\",\"vegetable\",\"panda\",\"pine_decoration\"],char:\"\\u{1f38d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},tanabata_tree:{keywords:[\"plant\",\"nature\",\"branch\",\"summer\"],char:\"\\u{1f38b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},leaves:{keywords:[\"nature\",\"plant\",\"tree\",\"vegetable\",\"grass\",\"lawn\",\"spring\"],char:\"\\u{1f343}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},fallen_leaf:{keywords:[\"nature\",\"plant\",\"vegetable\",\"leaves\"],char:\"\\u{1f342}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},maple_leaf:{keywords:[\"nature\",\"plant\",\"vegetable\",\"ca\",\"fall\"],char:\"\\u{1f341}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},ear_of_rice:{keywords:[\"nature\",\"plant\"],char:\"\\u{1f33e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},hibiscus:{keywords:[\"plant\",\"vegetable\",\"flowers\",\"beach\"],char:\"\\u{1f33a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sunflower:{keywords:[\"nature\",\"plant\",\"fall\"],char:\"\\u{1f33b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},rose:{keywords:[\"flowers\",\"valentines\",\"love\",\"spring\"],char:\"\\u{1f339}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},wilted_flower:{keywords:[\"plant\",\"nature\",\"flower\"],char:\"\\u{1f940}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},tulip:{keywords:[\"flowers\",\"plant\",\"nature\",\"summer\",\"spring\"],char:\"\\u{1f337}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},blossom:{keywords:[\"nature\",\"flowers\",\"yellow\"],char:\"\\u{1f33c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cherry_blossom:{keywords:[\"nature\",\"plant\",\"spring\",\"flower\"],char:\"\\u{1f338}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},bouquet:{keywords:[\"flowers\",\"nature\",\"spring\"],char:\"\\u{1f490}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},mushroom:{keywords:[\"plant\",\"vegetable\"],char:\"\\u{1f344}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},chestnut:{keywords:[\"food\",\"squirrel\"],char:\"\\u{1f330}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},jack_o_lantern:{keywords:[\"halloween\",\"light\",\"pumpkin\",\"creepy\",\"fall\"],char:\"\\u{1f383}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},shell:{keywords:[\"nature\",\"sea\",\"beach\"],char:\"\\u{1f41a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},spider_web:{keywords:[\"animal\",\"insect\",\"arachnid\",\"silk\"],char:\"\\u{1f578}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},earth_americas:{keywords:[\"globe\",\"world\",\"USA\",\"international\"],char:\"\\u{1f30e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},earth_africa:{keywords:[\"globe\",\"world\",\"international\"],char:\"\\u{1f30d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},earth_asia:{keywords:[\"globe\",\"world\",\"east\",\"international\"],char:\"\\u{1f30f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},full_moon:{keywords:[\"nature\",\"yellow\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f315}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},waning_gibbous_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\",\"waxing_gibbous_moon\"],char:\"\\u{1f316}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},last_quarter_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f317}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},waning_crescent_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f318}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},new_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f311}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},waxing_crescent_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f312}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},first_quarter_moon:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f313}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},waxing_gibbous_moon:{keywords:[\"nature\",\"night\",\"sky\",\"gray\",\"twilight\",\"planet\",\"space\",\"evening\",\"sleep\"],char:\"\\u{1f314}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},new_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f31a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},full_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f31d}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},first_quarter_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f31b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},last_quarter_moon_with_face:{keywords:[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],char:\"\\u{1f31c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sun_with_face:{keywords:[\"nature\",\"morning\",\"sky\"],char:\"\\u{1f31e}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},crescent_moon:{keywords:[\"night\",\"sleep\",\"sky\",\"evening\",\"magic\"],char:\"\\u{1f319}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},star:{keywords:[\"night\",\"yellow\"],char:\"\\u2b50\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},star2:{keywords:[\"night\",\"sparkle\",\"awesome\",\"good\",\"magic\"],char:\"\\u{1f31f}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dizzy:{keywords:[\"star\",\"sparkle\",\"shoot\",\"magic\"],char:\"\\u{1f4ab}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sparkles:{keywords:[\"stars\",\"shine\",\"shiny\",\"cool\",\"awesome\",\"good\",\"magic\"],char:\"\\u2728\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},comet:{keywords:[\"space\"],char:\"\\u2604\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sunny:{keywords:[\"weather\",\"nature\",\"brightness\",\"summer\",\"beach\",\"spring\"],char:\"\\u2600\\ufe0f\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sun_behind_small_cloud:{keywords:[\"weather\"],char:\"\\u{1f324}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},partly_sunny:{keywords:[\"weather\",\"nature\",\"cloudy\",\"morning\",\"fall\",\"spring\"],char:\"\\u26c5\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sun_behind_large_cloud:{keywords:[\"weather\"],char:\"\\u{1f325}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sun_behind_rain_cloud:{keywords:[\"weather\"],char:\"\\u{1f326}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cloud:{keywords:[\"weather\",\"sky\"],char:\"\\u2601\\ufe0f\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cloud_with_rain:{keywords:[\"weather\"],char:\"\\u{1f327}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cloud_with_lightning_and_rain:{keywords:[\"weather\",\"lightning\"],char:\"\\u26c8\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cloud_with_lightning:{keywords:[\"weather\",\"thunder\"],char:\"\\u{1f329}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},zap:{keywords:[\"thunder\",\"weather\",\"lightning bolt\",\"fast\"],char:\"\\u26a1\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},fire:{keywords:[\"hot\",\"cook\",\"flame\"],char:\"\\u{1f525}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},boom:{keywords:[\"bomb\",\"explode\",\"explosion\",\"collision\",\"blown\"],char:\"\\u{1f4a5}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},snowflake:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\"],char:\"\\u2744\\ufe0f\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},cloud_with_snow:{keywords:[\"weather\"],char:\"\\u{1f328}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},snowman:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\",\"without_snow\"],char:\"\\u26c4\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},snowman_with_snow:{keywords:[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\"],char:\"\\u2603\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},wind_face:{keywords:[\"gust\",\"air\"],char:\"\\u{1f32c}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},dash:{keywords:[\"wind\",\"air\",\"fast\",\"shoo\",\"fart\",\"smoke\",\"puff\"],char:\"\\u{1f4a8}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},tornado:{keywords:[\"weather\",\"cyclone\",\"twister\"],char:\"\\u{1f32a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},fog:{keywords:[\"weather\"],char:\"\\u{1f32b}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},open_umbrella:{keywords:[\"weather\",\"spring\"],char:\"\\u2602\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},umbrella:{keywords:[\"rainy\",\"weather\",\"spring\"],char:\"\\u2614\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},droplet:{keywords:[\"water\",\"drip\",\"faucet\",\"spring\"],char:\"\\u{1f4a7}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},sweat_drops:{keywords:[\"water\",\"drip\",\"oops\"],char:\"\\u{1f4a6}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},ocean:{keywords:[\"sea\",\"water\",\"wave\",\"nature\",\"tsunami\",\"disaster\"],char:\"\\u{1f30a}\",fitzpatrick_scale:!1,category:\"animals_and_nature\"},green_apple:{keywords:[\"fruit\",\"nature\"],char:\"\\u{1f34f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},apple:{keywords:[\"fruit\",\"mac\",\"school\"],char:\"\\u{1f34e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},pear:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"\\u{1f350}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},tangerine:{keywords:[\"food\",\"fruit\",\"nature\",\"orange\"],char:\"\\u{1f34a}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},lemon:{keywords:[\"fruit\",\"nature\"],char:\"\\u{1f34b}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},banana:{keywords:[\"fruit\",\"food\",\"monkey\"],char:\"\\u{1f34c}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},watermelon:{keywords:[\"fruit\",\"food\",\"picnic\",\"summer\"],char:\"\\u{1f349}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},grapes:{keywords:[\"fruit\",\"food\",\"wine\"],char:\"\\u{1f347}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},strawberry:{keywords:[\"fruit\",\"food\",\"nature\"],char:\"\\u{1f353}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},melon:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"\\u{1f348}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cherries:{keywords:[\"food\",\"fruit\"],char:\"\\u{1f352}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},peach:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"\\u{1f351}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},pineapple:{keywords:[\"fruit\",\"nature\",\"food\"],char:\"\\u{1f34d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},coconut:{keywords:[\"fruit\",\"nature\",\"food\",\"palm\"],char:\"\\u{1f965}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},kiwi_fruit:{keywords:[\"fruit\",\"food\"],char:\"\\u{1f95d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},mango:{keywords:[\"fruit\",\"food\",\"tropical\"],char:\"\\u{1f96d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},avocado:{keywords:[\"fruit\",\"food\"],char:\"\\u{1f951}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},broccoli:{keywords:[\"fruit\",\"food\",\"vegetable\"],char:\"\\u{1f966}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},tomato:{keywords:[\"fruit\",\"vegetable\",\"nature\",\"food\"],char:\"\\u{1f345}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},eggplant:{keywords:[\"vegetable\",\"nature\",\"food\",\"aubergine\"],char:\"\\u{1f346}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cucumber:{keywords:[\"fruit\",\"food\",\"pickle\"],char:\"\\u{1f952}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},carrot:{keywords:[\"vegetable\",\"food\",\"orange\"],char:\"\\u{1f955}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},hot_pepper:{keywords:[\"food\",\"spicy\",\"chilli\",\"chili\"],char:\"\\u{1f336}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},potato:{keywords:[\"food\",\"tuber\",\"vegatable\",\"starch\"],char:\"\\u{1f954}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},corn:{keywords:[\"food\",\"vegetable\",\"plant\"],char:\"\\u{1f33d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},leafy_greens:{keywords:[\"food\",\"vegetable\",\"plant\",\"bok choy\",\"cabbage\",\"kale\",\"lettuce\"],char:\"\\u{1f96c}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},sweet_potato:{keywords:[\"food\",\"nature\"],char:\"\\u{1f360}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},peanuts:{keywords:[\"food\",\"nut\"],char:\"\\u{1f95c}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},honey_pot:{keywords:[\"bees\",\"sweet\",\"kitchen\"],char:\"\\u{1f36f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},croissant:{keywords:[\"food\",\"bread\",\"french\"],char:\"\\u{1f950}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},bread:{keywords:[\"food\",\"wheat\",\"breakfast\",\"toast\"],char:\"\\u{1f35e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},baguette_bread:{keywords:[\"food\",\"bread\",\"french\"],char:\"\\u{1f956}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},bagel:{keywords:[\"food\",\"bread\",\"bakery\",\"schmear\"],char:\"\\u{1f96f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},pretzel:{keywords:[\"food\",\"bread\",\"twisted\"],char:\"\\u{1f968}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cheese:{keywords:[\"food\",\"chadder\"],char:\"\\u{1f9c0}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},egg:{keywords:[\"food\",\"chicken\",\"breakfast\"],char:\"\\u{1f95a}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},bacon:{keywords:[\"food\",\"breakfast\",\"pork\",\"pig\",\"meat\"],char:\"\\u{1f953}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},steak:{keywords:[\"food\",\"cow\",\"meat\",\"cut\",\"chop\",\"lambchop\",\"porkchop\"],char:\"\\u{1f969}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},pancakes:{keywords:[\"food\",\"breakfast\",\"flapjacks\",\"hotcakes\"],char:\"\\u{1f95e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},poultry_leg:{keywords:[\"food\",\"meat\",\"drumstick\",\"bird\",\"chicken\",\"turkey\"],char:\"\\u{1f357}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},meat_on_bone:{keywords:[\"good\",\"food\",\"drumstick\"],char:\"\\u{1f356}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},bone:{keywords:[\"skeleton\"],char:\"\\u{1f9b4}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},fried_shrimp:{keywords:[\"food\",\"animal\",\"appetizer\",\"summer\"],char:\"\\u{1f364}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},fried_egg:{keywords:[\"food\",\"breakfast\",\"kitchen\",\"egg\"],char:\"\\u{1f373}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},hamburger:{keywords:[\"meat\",\"fast food\",\"beef\",\"cheeseburger\",\"mcdonalds\",\"burger king\"],char:\"\\u{1f354}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},fries:{keywords:[\"chips\",\"snack\",\"fast food\"],char:\"\\u{1f35f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},stuffed_flatbread:{keywords:[\"food\",\"flatbread\",\"stuffed\",\"gyro\"],char:\"\\u{1f959}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},hotdog:{keywords:[\"food\",\"frankfurter\"],char:\"\\u{1f32d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},pizza:{keywords:[\"food\",\"party\"],char:\"\\u{1f355}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},sandwich:{keywords:[\"food\",\"lunch\",\"bread\"],char:\"\\u{1f96a}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},canned_food:{keywords:[\"food\",\"soup\"],char:\"\\u{1f96b}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},spaghetti:{keywords:[\"food\",\"italian\",\"noodle\"],char:\"\\u{1f35d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},taco:{keywords:[\"food\",\"mexican\"],char:\"\\u{1f32e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},burrito:{keywords:[\"food\",\"mexican\"],char:\"\\u{1f32f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},green_salad:{keywords:[\"food\",\"healthy\",\"lettuce\"],char:\"\\u{1f957}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},shallow_pan_of_food:{keywords:[\"food\",\"cooking\",\"casserole\",\"paella\"],char:\"\\u{1f958}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},ramen:{keywords:[\"food\",\"japanese\",\"noodle\",\"chopsticks\"],char:\"\\u{1f35c}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},stew:{keywords:[\"food\",\"meat\",\"soup\"],char:\"\\u{1f372}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},fish_cake:{keywords:[\"food\",\"japan\",\"sea\",\"beach\",\"narutomaki\",\"pink\",\"swirl\",\"kamaboko\",\"surimi\",\"ramen\"],char:\"\\u{1f365}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},fortune_cookie:{keywords:[\"food\",\"prophecy\"],char:\"\\u{1f960}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},sushi:{keywords:[\"food\",\"fish\",\"japanese\",\"rice\"],char:\"\\u{1f363}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},bento:{keywords:[\"food\",\"japanese\",\"box\"],char:\"\\u{1f371}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},curry:{keywords:[\"food\",\"spicy\",\"hot\",\"indian\"],char:\"\\u{1f35b}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},rice_ball:{keywords:[\"food\",\"japanese\"],char:\"\\u{1f359}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},rice:{keywords:[\"food\",\"china\",\"asian\"],char:\"\\u{1f35a}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},rice_cracker:{keywords:[\"food\",\"japanese\"],char:\"\\u{1f358}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},oden:{keywords:[\"food\",\"japanese\"],char:\"\\u{1f362}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},dango:{keywords:[\"food\",\"dessert\",\"sweet\",\"japanese\",\"barbecue\",\"meat\"],char:\"\\u{1f361}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},shaved_ice:{keywords:[\"hot\",\"dessert\",\"summer\"],char:\"\\u{1f367}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},ice_cream:{keywords:[\"food\",\"hot\",\"dessert\"],char:\"\\u{1f368}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},icecream:{keywords:[\"food\",\"hot\",\"dessert\",\"summer\"],char:\"\\u{1f366}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},pie:{keywords:[\"food\",\"dessert\",\"pastry\"],char:\"\\u{1f967}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cake:{keywords:[\"food\",\"dessert\"],char:\"\\u{1f370}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cupcake:{keywords:[\"food\",\"dessert\",\"bakery\",\"sweet\"],char:\"\\u{1f9c1}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},moon_cake:{keywords:[\"food\",\"autumn\"],char:\"\\u{1f96e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},birthday:{keywords:[\"food\",\"dessert\",\"cake\"],char:\"\\u{1f382}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},custard:{keywords:[\"dessert\",\"food\"],char:\"\\u{1f36e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},candy:{keywords:[\"snack\",\"dessert\",\"sweet\",\"lolly\"],char:\"\\u{1f36c}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},lollipop:{keywords:[\"food\",\"snack\",\"candy\",\"sweet\"],char:\"\\u{1f36d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},chocolate_bar:{keywords:[\"food\",\"snack\",\"dessert\",\"sweet\"],char:\"\\u{1f36b}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},popcorn:{keywords:[\"food\",\"movie theater\",\"films\",\"snack\"],char:\"\\u{1f37f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},dumpling:{keywords:[\"food\",\"empanada\",\"pierogi\",\"potsticker\"],char:\"\\u{1f95f}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},doughnut:{keywords:[\"food\",\"dessert\",\"snack\",\"sweet\",\"donut\"],char:\"\\u{1f369}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cookie:{keywords:[\"food\",\"snack\",\"oreo\",\"chocolate\",\"sweet\",\"dessert\"],char:\"\\u{1f36a}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},milk_glass:{keywords:[\"beverage\",\"drink\",\"cow\"],char:\"\\u{1f95b}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},beer:{keywords:[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],char:\"\\u{1f37a}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},beers:{keywords:[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],char:\"\\u{1f37b}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},clinking_glasses:{keywords:[\"beverage\",\"drink\",\"party\",\"alcohol\",\"celebrate\",\"cheers\",\"wine\",\"champagne\",\"toast\"],char:\"\\u{1f942}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},wine_glass:{keywords:[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"booze\"],char:\"\\u{1f377}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},tumbler_glass:{keywords:[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"liquor\",\"booze\",\"bourbon\",\"scotch\",\"whisky\",\"glass\",\"shot\"],char:\"\\u{1f943}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cocktail:{keywords:[\"drink\",\"drunk\",\"alcohol\",\"beverage\",\"booze\",\"mojito\"],char:\"\\u{1f378}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},tropical_drink:{keywords:[\"beverage\",\"cocktail\",\"summer\",\"beach\",\"alcohol\",\"booze\",\"mojito\"],char:\"\\u{1f379}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},champagne:{keywords:[\"drink\",\"wine\",\"bottle\",\"celebration\"],char:\"\\u{1f37e}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},sake:{keywords:[\"wine\",\"drink\",\"drunk\",\"beverage\",\"japanese\",\"alcohol\",\"booze\"],char:\"\\u{1f376}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},tea:{keywords:[\"drink\",\"bowl\",\"breakfast\",\"green\",\"british\"],char:\"\\u{1f375}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},cup_with_straw:{keywords:[\"drink\",\"soda\"],char:\"\\u{1f964}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},coffee:{keywords:[\"beverage\",\"caffeine\",\"latte\",\"espresso\"],char:\"\\u2615\",fitzpatrick_scale:!1,category:\"food_and_drink\"},baby_bottle:{keywords:[\"food\",\"container\",\"milk\"],char:\"\\u{1f37c}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},salt:{keywords:[\"condiment\",\"shaker\"],char:\"\\u{1f9c2}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},spoon:{keywords:[\"cutlery\",\"kitchen\",\"tableware\"],char:\"\\u{1f944}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},fork_and_knife:{keywords:[\"cutlery\",\"kitchen\"],char:\"\\u{1f374}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},plate_with_cutlery:{keywords:[\"food\",\"eat\",\"meal\",\"lunch\",\"dinner\",\"restaurant\"],char:\"\\u{1f37d}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},bowl_with_spoon:{keywords:[\"food\",\"breakfast\",\"cereal\",\"oatmeal\",\"porridge\"],char:\"\\u{1f963}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},takeout_box:{keywords:[\"food\",\"leftovers\"],char:\"\\u{1f961}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},chopsticks:{keywords:[\"food\"],char:\"\\u{1f962}\",fitzpatrick_scale:!1,category:\"food_and_drink\"},soccer:{keywords:[\"sports\",\"football\"],char:\"\\u26bd\",fitzpatrick_scale:!1,category:\"activity\"},basketball:{keywords:[\"sports\",\"balls\",\"NBA\"],char:\"\\u{1f3c0}\",fitzpatrick_scale:!1,category:\"activity\"},football:{keywords:[\"sports\",\"balls\",\"NFL\"],char:\"\\u{1f3c8}\",fitzpatrick_scale:!1,category:\"activity\"},baseball:{keywords:[\"sports\",\"balls\"],char:\"\\u26be\",fitzpatrick_scale:!1,category:\"activity\"},softball:{keywords:[\"sports\",\"balls\"],char:\"\\u{1f94e}\",fitzpatrick_scale:!1,category:\"activity\"},tennis:{keywords:[\"sports\",\"balls\",\"green\"],char:\"\\u{1f3be}\",fitzpatrick_scale:!1,category:\"activity\"},volleyball:{keywords:[\"sports\",\"balls\"],char:\"\\u{1f3d0}\",fitzpatrick_scale:!1,category:\"activity\"},rugby_football:{keywords:[\"sports\",\"team\"],char:\"\\u{1f3c9}\",fitzpatrick_scale:!1,category:\"activity\"},flying_disc:{keywords:[\"sports\",\"frisbee\",\"ultimate\"],char:\"\\u{1f94f}\",fitzpatrick_scale:!1,category:\"activity\"},\"8ball\":{keywords:[\"pool\",\"hobby\",\"game\",\"luck\",\"magic\"],char:\"\\u{1f3b1}\",fitzpatrick_scale:!1,category:\"activity\"},golf:{keywords:[\"sports\",\"business\",\"flag\",\"hole\",\"summer\"],char:\"\\u26f3\",fitzpatrick_scale:!1,category:\"activity\"},golfing_woman:{keywords:[\"sports\",\"business\",\"woman\",\"female\"],char:\"\\u{1f3cc}\\ufe0f\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!1,category:\"activity\"},golfing_man:{keywords:[\"sports\",\"business\"],char:\"\\u{1f3cc}\",fitzpatrick_scale:!0,category:\"activity\"},ping_pong:{keywords:[\"sports\",\"pingpong\"],char:\"\\u{1f3d3}\",fitzpatrick_scale:!1,category:\"activity\"},badminton:{keywords:[\"sports\"],char:\"\\u{1f3f8}\",fitzpatrick_scale:!1,category:\"activity\"},goal_net:{keywords:[\"sports\"],char:\"\\u{1f945}\",fitzpatrick_scale:!1,category:\"activity\"},ice_hockey:{keywords:[\"sports\"],char:\"\\u{1f3d2}\",fitzpatrick_scale:!1,category:\"activity\"},field_hockey:{keywords:[\"sports\"],char:\"\\u{1f3d1}\",fitzpatrick_scale:!1,category:\"activity\"},lacrosse:{keywords:[\"sports\",\"ball\",\"stick\"],char:\"\\u{1f94d}\",fitzpatrick_scale:!1,category:\"activity\"},cricket:{keywords:[\"sports\"],char:\"\\u{1f3cf}\",fitzpatrick_scale:!1,category:\"activity\"},ski:{keywords:[\"sports\",\"winter\",\"cold\",\"snow\"],char:\"\\u{1f3bf}\",fitzpatrick_scale:!1,category:\"activity\"},skier:{keywords:[\"sports\",\"winter\",\"snow\"],char:\"\\u26f7\",fitzpatrick_scale:!1,category:\"activity\"},snowboarder:{keywords:[\"sports\",\"winter\"],char:\"\\u{1f3c2}\",fitzpatrick_scale:!0,category:\"activity\"},person_fencing:{keywords:[\"sports\",\"fencing\",\"sword\"],char:\"\\u{1f93a}\",fitzpatrick_scale:!1,category:\"activity\"},women_wrestling:{keywords:[\"sports\",\"wrestlers\"],char:\"\\u{1f93c}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!1,category:\"activity\"},men_wrestling:{keywords:[\"sports\",\"wrestlers\"],char:\"\\u{1f93c}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!1,category:\"activity\"},woman_cartwheeling:{keywords:[\"gymnastics\"],char:\"\\u{1f938}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},man_cartwheeling:{keywords:[\"gymnastics\"],char:\"\\u{1f938}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},woman_playing_handball:{keywords:[\"sports\"],char:\"\\u{1f93e}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},man_playing_handball:{keywords:[\"sports\"],char:\"\\u{1f93e}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},ice_skate:{keywords:[\"sports\"],char:\"\\u26f8\",fitzpatrick_scale:!1,category:\"activity\"},curling_stone:{keywords:[\"sports\"],char:\"\\u{1f94c}\",fitzpatrick_scale:!1,category:\"activity\"},skateboard:{keywords:[\"board\"],char:\"\\u{1f6f9}\",fitzpatrick_scale:!1,category:\"activity\"},sled:{keywords:[\"sleigh\",\"luge\",\"toboggan\"],char:\"\\u{1f6f7}\",fitzpatrick_scale:!1,category:\"activity\"},bow_and_arrow:{keywords:[\"sports\"],char:\"\\u{1f3f9}\",fitzpatrick_scale:!1,category:\"activity\"},fishing_pole_and_fish:{keywords:[\"food\",\"hobby\",\"summer\"],char:\"\\u{1f3a3}\",fitzpatrick_scale:!1,category:\"activity\"},boxing_glove:{keywords:[\"sports\",\"fighting\"],char:\"\\u{1f94a}\",fitzpatrick_scale:!1,category:\"activity\"},martial_arts_uniform:{keywords:[\"judo\",\"karate\",\"taekwondo\"],char:\"\\u{1f94b}\",fitzpatrick_scale:!1,category:\"activity\"},rowing_woman:{keywords:[\"sports\",\"hobby\",\"water\",\"ship\",\"woman\",\"female\"],char:\"\\u{1f6a3}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},rowing_man:{keywords:[\"sports\",\"hobby\",\"water\",\"ship\"],char:\"\\u{1f6a3}\",fitzpatrick_scale:!0,category:\"activity\"},climbing_woman:{keywords:[\"sports\",\"hobby\",\"woman\",\"female\",\"rock\"],char:\"\\u{1f9d7}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},climbing_man:{keywords:[\"sports\",\"hobby\",\"man\",\"male\",\"rock\"],char:\"\\u{1f9d7}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},swimming_woman:{keywords:[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\",\"woman\",\"female\"],char:\"\\u{1f3ca}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},swimming_man:{keywords:[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\"],char:\"\\u{1f3ca}\",fitzpatrick_scale:!0,category:\"activity\"},woman_playing_water_polo:{keywords:[\"sports\",\"pool\"],char:\"\\u{1f93d}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},man_playing_water_polo:{keywords:[\"sports\",\"pool\"],char:\"\\u{1f93d}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},woman_in_lotus_position:{keywords:[\"woman\",\"female\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],char:\"\\u{1f9d8}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},man_in_lotus_position:{keywords:[\"man\",\"male\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],char:\"\\u{1f9d8}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},surfing_woman:{keywords:[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\",\"woman\",\"female\"],char:\"\\u{1f3c4}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},surfing_man:{keywords:[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\"],char:\"\\u{1f3c4}\",fitzpatrick_scale:!0,category:\"activity\"},bath:{keywords:[\"clean\",\"shower\",\"bathroom\"],char:\"\\u{1f6c0}\",fitzpatrick_scale:!0,category:\"activity\"},basketball_woman:{keywords:[\"sports\",\"human\",\"woman\",\"female\"],char:\"\\u26f9\\ufe0f\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},basketball_man:{keywords:[\"sports\",\"human\"],char:\"\\u26f9\",fitzpatrick_scale:!0,category:\"activity\"},weight_lifting_woman:{keywords:[\"sports\",\"training\",\"exercise\",\"woman\",\"female\"],char:\"\\u{1f3cb}\\ufe0f\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},weight_lifting_man:{keywords:[\"sports\",\"training\",\"exercise\"],char:\"\\u{1f3cb}\",fitzpatrick_scale:!0,category:\"activity\"},biking_woman:{keywords:[\"sports\",\"bike\",\"exercise\",\"hipster\",\"woman\",\"female\"],char:\"\\u{1f6b4}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},biking_man:{keywords:[\"sports\",\"bike\",\"exercise\",\"hipster\"],char:\"\\u{1f6b4}\",fitzpatrick_scale:!0,category:\"activity\"},mountain_biking_woman:{keywords:[\"transportation\",\"sports\",\"human\",\"race\",\"bike\",\"woman\",\"female\"],char:\"\\u{1f6b5}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},mountain_biking_man:{keywords:[\"transportation\",\"sports\",\"human\",\"race\",\"bike\"],char:\"\\u{1f6b5}\",fitzpatrick_scale:!0,category:\"activity\"},horse_racing:{keywords:[\"animal\",\"betting\",\"competition\",\"gambling\",\"luck\"],char:\"\\u{1f3c7}\",fitzpatrick_scale:!0,category:\"activity\"},business_suit_levitating:{keywords:[\"suit\",\"business\",\"levitate\",\"hover\",\"jump\"],char:\"\\u{1f574}\",fitzpatrick_scale:!0,category:\"activity\"},trophy:{keywords:[\"win\",\"award\",\"contest\",\"place\",\"ftw\",\"ceremony\"],char:\"\\u{1f3c6}\",fitzpatrick_scale:!1,category:\"activity\"},running_shirt_with_sash:{keywords:[\"play\",\"pageant\"],char:\"\\u{1f3bd}\",fitzpatrick_scale:!1,category:\"activity\"},medal_sports:{keywords:[\"award\",\"winning\"],char:\"\\u{1f3c5}\",fitzpatrick_scale:!1,category:\"activity\"},medal_military:{keywords:[\"award\",\"winning\",\"army\"],char:\"\\u{1f396}\",fitzpatrick_scale:!1,category:\"activity\"},\"1st_place_medal\":{keywords:[\"award\",\"winning\",\"first\"],char:\"\\u{1f947}\",fitzpatrick_scale:!1,category:\"activity\"},\"2nd_place_medal\":{keywords:[\"award\",\"second\"],char:\"\\u{1f948}\",fitzpatrick_scale:!1,category:\"activity\"},\"3rd_place_medal\":{keywords:[\"award\",\"third\"],char:\"\\u{1f949}\",fitzpatrick_scale:!1,category:\"activity\"},reminder_ribbon:{keywords:[\"sports\",\"cause\",\"support\",\"awareness\"],char:\"\\u{1f397}\",fitzpatrick_scale:!1,category:\"activity\"},rosette:{keywords:[\"flower\",\"decoration\",\"military\"],char:\"\\u{1f3f5}\",fitzpatrick_scale:!1,category:\"activity\"},ticket:{keywords:[\"event\",\"concert\",\"pass\"],char:\"\\u{1f3ab}\",fitzpatrick_scale:!1,category:\"activity\"},tickets:{keywords:[\"sports\",\"concert\",\"entrance\"],char:\"\\u{1f39f}\",fitzpatrick_scale:!1,category:\"activity\"},performing_arts:{keywords:[\"acting\",\"theater\",\"drama\"],char:\"\\u{1f3ad}\",fitzpatrick_scale:!1,category:\"activity\"},art:{keywords:[\"design\",\"paint\",\"draw\",\"colors\"],char:\"\\u{1f3a8}\",fitzpatrick_scale:!1,category:\"activity\"},circus_tent:{keywords:[\"festival\",\"carnival\",\"party\"],char:\"\\u{1f3aa}\",fitzpatrick_scale:!1,category:\"activity\"},woman_juggling:{keywords:[\"juggle\",\"balance\",\"skill\",\"multitask\"],char:\"\\u{1f939}\\u200d\\u2640\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},man_juggling:{keywords:[\"juggle\",\"balance\",\"skill\",\"multitask\"],char:\"\\u{1f939}\\u200d\\u2642\\ufe0f\",fitzpatrick_scale:!0,category:\"activity\"},microphone:{keywords:[\"sound\",\"music\",\"PA\",\"sing\",\"talkshow\"],char:\"\\u{1f3a4}\",fitzpatrick_scale:!1,category:\"activity\"},headphones:{keywords:[\"music\",\"score\",\"gadgets\"],char:\"\\u{1f3a7}\",fitzpatrick_scale:!1,category:\"activity\"},musical_score:{keywords:[\"treble\",\"clef\",\"compose\"],char:\"\\u{1f3bc}\",fitzpatrick_scale:!1,category:\"activity\"},musical_keyboard:{keywords:[\"piano\",\"instrument\",\"compose\"],char:\"\\u{1f3b9}\",fitzpatrick_scale:!1,category:\"activity\"},drum:{keywords:[\"music\",\"instrument\",\"drumsticks\",\"snare\"],char:\"\\u{1f941}\",fitzpatrick_scale:!1,category:\"activity\"},saxophone:{keywords:[\"music\",\"instrument\",\"jazz\",\"blues\"],char:\"\\u{1f3b7}\",fitzpatrick_scale:!1,category:\"activity\"},trumpet:{keywords:[\"music\",\"brass\"],char:\"\\u{1f3ba}\",fitzpatrick_scale:!1,category:\"activity\"},guitar:{keywords:[\"music\",\"instrument\"],char:\"\\u{1f3b8}\",fitzpatrick_scale:!1,category:\"activity\"},violin:{keywords:[\"music\",\"instrument\",\"orchestra\",\"symphony\"],char:\"\\u{1f3bb}\",fitzpatrick_scale:!1,category:\"activity\"},clapper:{keywords:[\"movie\",\"film\",\"record\"],char:\"\\u{1f3ac}\",fitzpatrick_scale:!1,category:\"activity\"},video_game:{keywords:[\"play\",\"console\",\"PS4\",\"controller\"],char:\"\\u{1f3ae}\",fitzpatrick_scale:!1,category:\"activity\"},space_invader:{keywords:[\"game\",\"arcade\",\"play\"],char:\"\\u{1f47e}\",fitzpatrick_scale:!1,category:\"activity\"},dart:{keywords:[\"game\",\"play\",\"bar\",\"target\",\"bullseye\"],char:\"\\u{1f3af}\",fitzpatrick_scale:!1,category:\"activity\"},game_die:{keywords:[\"dice\",\"random\",\"tabletop\",\"play\",\"luck\"],char:\"\\u{1f3b2}\",fitzpatrick_scale:!1,category:\"activity\"},chess_pawn:{keywords:[\"expendable\"],char:\"\\u265f\",fitzpatrick_scale:!1,category:\"activity\"},slot_machine:{keywords:[\"bet\",\"gamble\",\"vegas\",\"fruit machine\",\"luck\",\"casino\"],char:\"\\u{1f3b0}\",fitzpatrick_scale:!1,category:\"activity\"},jigsaw:{keywords:[\"interlocking\",\"puzzle\",\"piece\"],char:\"\\u{1f9e9}\",fitzpatrick_scale:!1,category:\"activity\"},bowling:{keywords:[\"sports\",\"fun\",\"play\"],char:\"\\u{1f3b3}\",fitzpatrick_scale:!1,category:\"activity\"},red_car:{keywords:[\"red\",\"transportation\",\"vehicle\"],char:\"\\u{1f697}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},taxi:{keywords:[\"uber\",\"vehicle\",\"cars\",\"transportation\"],char:\"\\u{1f695}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},blue_car:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f699}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},bus:{keywords:[\"car\",\"vehicle\",\"transportation\"],char:\"\\u{1f68c}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},trolleybus:{keywords:[\"bart\",\"transportation\",\"vehicle\"],char:\"\\u{1f68e}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},racing_car:{keywords:[\"sports\",\"race\",\"fast\",\"formula\",\"f1\"],char:\"\\u{1f3ce}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},police_car:{keywords:[\"vehicle\",\"cars\",\"transportation\",\"law\",\"legal\",\"enforcement\"],char:\"\\u{1f693}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},ambulance:{keywords:[\"health\",\"911\",\"hospital\"],char:\"\\u{1f691}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},fire_engine:{keywords:[\"transportation\",\"cars\",\"vehicle\"],char:\"\\u{1f692}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},minibus:{keywords:[\"vehicle\",\"car\",\"transportation\"],char:\"\\u{1f690}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},truck:{keywords:[\"cars\",\"transportation\"],char:\"\\u{1f69a}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},articulated_lorry:{keywords:[\"vehicle\",\"cars\",\"transportation\",\"express\"],char:\"\\u{1f69b}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},tractor:{keywords:[\"vehicle\",\"car\",\"farming\",\"agriculture\"],char:\"\\u{1f69c}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},kick_scooter:{keywords:[\"vehicle\",\"kick\",\"razor\"],char:\"\\u{1f6f4}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},motorcycle:{keywords:[\"race\",\"sports\",\"fast\"],char:\"\\u{1f3cd}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},bike:{keywords:[\"sports\",\"bicycle\",\"exercise\",\"hipster\"],char:\"\\u{1f6b2}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},motor_scooter:{keywords:[\"vehicle\",\"vespa\",\"sasha\"],char:\"\\u{1f6f5}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},rotating_light:{keywords:[\"police\",\"ambulance\",\"911\",\"emergency\",\"alert\",\"error\",\"pinged\",\"law\",\"legal\"],char:\"\\u{1f6a8}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},oncoming_police_car:{keywords:[\"vehicle\",\"law\",\"legal\",\"enforcement\",\"911\"],char:\"\\u{1f694}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},oncoming_bus:{keywords:[\"vehicle\",\"transportation\"],char:\"\\u{1f68d}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},oncoming_automobile:{keywords:[\"car\",\"vehicle\",\"transportation\"],char:\"\\u{1f698}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},oncoming_taxi:{keywords:[\"vehicle\",\"cars\",\"uber\"],char:\"\\u{1f696}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},aerial_tramway:{keywords:[\"transportation\",\"vehicle\",\"ski\"],char:\"\\u{1f6a1}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},mountain_cableway:{keywords:[\"transportation\",\"vehicle\",\"ski\"],char:\"\\u{1f6a0}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},suspension_railway:{keywords:[\"vehicle\",\"transportation\"],char:\"\\u{1f69f}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},railway_car:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f683}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},train:{keywords:[\"transportation\",\"vehicle\",\"carriage\",\"public\",\"travel\"],char:\"\\u{1f68b}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},monorail:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f69d}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},bullettrain_side:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f684}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},bullettrain_front:{keywords:[\"transportation\",\"vehicle\",\"speed\",\"fast\",\"public\",\"travel\"],char:\"\\u{1f685}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},light_rail:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f688}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},mountain_railway:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f69e}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},steam_locomotive:{keywords:[\"transportation\",\"vehicle\",\"train\"],char:\"\\u{1f682}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},train2:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f686}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},metro:{keywords:[\"transportation\",\"blue-square\",\"mrt\",\"underground\",\"tube\"],char:\"\\u{1f687}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},tram:{keywords:[\"transportation\",\"vehicle\"],char:\"\\u{1f68a}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},station:{keywords:[\"transportation\",\"vehicle\",\"public\"],char:\"\\u{1f689}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},flying_saucer:{keywords:[\"transportation\",\"vehicle\",\"ufo\"],char:\"\\u{1f6f8}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},helicopter:{keywords:[\"transportation\",\"vehicle\",\"fly\"],char:\"\\u{1f681}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},small_airplane:{keywords:[\"flight\",\"transportation\",\"fly\",\"vehicle\"],char:\"\\u{1f6e9}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},airplane:{keywords:[\"vehicle\",\"transportation\",\"flight\",\"fly\"],char:\"\\u2708\\ufe0f\",fitzpatrick_scale:!1,category:\"travel_and_places\"},flight_departure:{keywords:[\"airport\",\"flight\",\"landing\"],char:\"\\u{1f6eb}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},flight_arrival:{keywords:[\"airport\",\"flight\",\"boarding\"],char:\"\\u{1f6ec}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},sailboat:{keywords:[\"ship\",\"summer\",\"transportation\",\"water\",\"sailing\"],char:\"\\u26f5\",fitzpatrick_scale:!1,category:\"travel_and_places\"},motor_boat:{keywords:[\"ship\"],char:\"\\u{1f6e5}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},speedboat:{keywords:[\"ship\",\"transportation\",\"vehicle\",\"summer\"],char:\"\\u{1f6a4}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},ferry:{keywords:[\"boat\",\"ship\",\"yacht\"],char:\"\\u26f4\",fitzpatrick_scale:!1,category:\"travel_and_places\"},passenger_ship:{keywords:[\"yacht\",\"cruise\",\"ferry\"],char:\"\\u{1f6f3}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},rocket:{keywords:[\"launch\",\"ship\",\"staffmode\",\"NASA\",\"outer space\",\"outer_space\",\"fly\"],char:\"\\u{1f680}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},artificial_satellite:{keywords:[\"communication\",\"gps\",\"orbit\",\"spaceflight\",\"NASA\",\"ISS\"],char:\"\\u{1f6f0}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},seat:{keywords:[\"sit\",\"airplane\",\"transport\",\"bus\",\"flight\",\"fly\"],char:\"\\u{1f4ba}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},canoe:{keywords:[\"boat\",\"paddle\",\"water\",\"ship\"],char:\"\\u{1f6f6}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},anchor:{keywords:[\"ship\",\"ferry\",\"sea\",\"boat\"],char:\"\\u2693\",fitzpatrick_scale:!1,category:\"travel_and_places\"},construction:{keywords:[\"wip\",\"progress\",\"caution\",\"warning\"],char:\"\\u{1f6a7}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},fuelpump:{keywords:[\"gas station\",\"petroleum\"],char:\"\\u26fd\",fitzpatrick_scale:!1,category:\"travel_and_places\"},busstop:{keywords:[\"transportation\",\"wait\"],char:\"\\u{1f68f}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},vertical_traffic_light:{keywords:[\"transportation\",\"driving\"],char:\"\\u{1f6a6}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},traffic_light:{keywords:[\"transportation\",\"signal\"],char:\"\\u{1f6a5}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},checkered_flag:{keywords:[\"contest\",\"finishline\",\"race\",\"gokart\"],char:\"\\u{1f3c1}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},ship:{keywords:[\"transportation\",\"titanic\",\"deploy\"],char:\"\\u{1f6a2}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},ferris_wheel:{keywords:[\"photo\",\"carnival\",\"londoneye\"],char:\"\\u{1f3a1}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},roller_coaster:{keywords:[\"carnival\",\"playground\",\"photo\",\"fun\"],char:\"\\u{1f3a2}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},carousel_horse:{keywords:[\"photo\",\"carnival\"],char:\"\\u{1f3a0}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},building_construction:{keywords:[\"wip\",\"working\",\"progress\"],char:\"\\u{1f3d7}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},foggy:{keywords:[\"photo\",\"mountain\"],char:\"\\u{1f301}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},tokyo_tower:{keywords:[\"photo\",\"japanese\"],char:\"\\u{1f5fc}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},factory:{keywords:[\"building\",\"industry\",\"pollution\",\"smoke\"],char:\"\\u{1f3ed}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},fountain:{keywords:[\"photo\",\"summer\",\"water\",\"fresh\"],char:\"\\u26f2\",fitzpatrick_scale:!1,category:\"travel_and_places\"},rice_scene:{keywords:[\"photo\",\"japan\",\"asia\",\"tsukimi\"],char:\"\\u{1f391}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},mountain:{keywords:[\"photo\",\"nature\",\"environment\"],char:\"\\u26f0\",fitzpatrick_scale:!1,category:\"travel_and_places\"},mountain_snow:{keywords:[\"photo\",\"nature\",\"environment\",\"winter\",\"cold\"],char:\"\\u{1f3d4}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},mount_fuji:{keywords:[\"photo\",\"mountain\",\"nature\",\"japanese\"],char:\"\\u{1f5fb}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},volcano:{keywords:[\"photo\",\"nature\",\"disaster\"],char:\"\\u{1f30b}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},japan:{keywords:[\"nation\",\"country\",\"japanese\",\"asia\"],char:\"\\u{1f5fe}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},camping:{keywords:[\"photo\",\"outdoors\",\"tent\"],char:\"\\u{1f3d5}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},tent:{keywords:[\"photo\",\"camping\",\"outdoors\"],char:\"\\u26fa\",fitzpatrick_scale:!1,category:\"travel_and_places\"},national_park:{keywords:[\"photo\",\"environment\",\"nature\"],char:\"\\u{1f3de}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},motorway:{keywords:[\"road\",\"cupertino\",\"interstate\",\"highway\"],char:\"\\u{1f6e3}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},railway_track:{keywords:[\"train\",\"transportation\"],char:\"\\u{1f6e4}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},sunrise:{keywords:[\"morning\",\"view\",\"vacation\",\"photo\"],char:\"\\u{1f305}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},sunrise_over_mountains:{keywords:[\"view\",\"vacation\",\"photo\"],char:\"\\u{1f304}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},desert:{keywords:[\"photo\",\"warm\",\"saharah\"],char:\"\\u{1f3dc}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},beach_umbrella:{keywords:[\"weather\",\"summer\",\"sunny\",\"sand\",\"mojito\"],char:\"\\u{1f3d6}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},desert_island:{keywords:[\"photo\",\"tropical\",\"mojito\"],char:\"\\u{1f3dd}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},city_sunrise:{keywords:[\"photo\",\"good morning\",\"dawn\"],char:\"\\u{1f307}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},city_sunset:{keywords:[\"photo\",\"evening\",\"sky\",\"buildings\"],char:\"\\u{1f306}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},cityscape:{keywords:[\"photo\",\"night life\",\"urban\"],char:\"\\u{1f3d9}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},night_with_stars:{keywords:[\"evening\",\"city\",\"downtown\"],char:\"\\u{1f303}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},bridge_at_night:{keywords:[\"photo\",\"sanfrancisco\"],char:\"\\u{1f309}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},milky_way:{keywords:[\"photo\",\"space\",\"stars\"],char:\"\\u{1f30c}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},stars:{keywords:[\"night\",\"photo\"],char:\"\\u{1f320}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},sparkler:{keywords:[\"stars\",\"night\",\"shine\"],char:\"\\u{1f387}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},fireworks:{keywords:[\"photo\",\"festival\",\"carnival\",\"congratulations\"],char:\"\\u{1f386}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},rainbow:{keywords:[\"nature\",\"happy\",\"unicorn_face\",\"photo\",\"sky\",\"spring\"],char:\"\\u{1f308}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},houses:{keywords:[\"buildings\",\"photo\"],char:\"\\u{1f3d8}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},european_castle:{keywords:[\"building\",\"royalty\",\"history\"],char:\"\\u{1f3f0}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},japanese_castle:{keywords:[\"photo\",\"building\"],char:\"\\u{1f3ef}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},stadium:{keywords:[\"photo\",\"place\",\"sports\",\"concert\",\"venue\"],char:\"\\u{1f3df}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},statue_of_liberty:{keywords:[\"american\",\"newyork\"],char:\"\\u{1f5fd}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},house:{keywords:[\"building\",\"home\"],char:\"\\u{1f3e0}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},house_with_garden:{keywords:[\"home\",\"plant\",\"nature\"],char:\"\\u{1f3e1}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},derelict_house:{keywords:[\"abandon\",\"evict\",\"broken\",\"building\"],char:\"\\u{1f3da}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},office:{keywords:[\"building\",\"bureau\",\"work\"],char:\"\\u{1f3e2}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},department_store:{keywords:[\"building\",\"shopping\",\"mall\"],char:\"\\u{1f3ec}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},post_office:{keywords:[\"building\",\"envelope\",\"communication\"],char:\"\\u{1f3e3}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},european_post_office:{keywords:[\"building\",\"email\"],char:\"\\u{1f3e4}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},hospital:{keywords:[\"building\",\"health\",\"surgery\",\"doctor\"],char:\"\\u{1f3e5}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},bank:{keywords:[\"building\",\"money\",\"sales\",\"cash\",\"business\",\"enterprise\"],char:\"\\u{1f3e6}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},hotel:{keywords:[\"building\",\"accomodation\",\"checkin\"],char:\"\\u{1f3e8}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},convenience_store:{keywords:[\"building\",\"shopping\",\"groceries\"],char:\"\\u{1f3ea}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},school:{keywords:[\"building\",\"student\",\"education\",\"learn\",\"teach\"],char:\"\\u{1f3eb}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},love_hotel:{keywords:[\"like\",\"affection\",\"dating\"],char:\"\\u{1f3e9}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},wedding:{keywords:[\"love\",\"like\",\"affection\",\"couple\",\"marriage\",\"bride\",\"groom\"],char:\"\\u{1f492}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},classical_building:{keywords:[\"art\",\"culture\",\"history\"],char:\"\\u{1f3db}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},church:{keywords:[\"building\",\"religion\",\"christ\"],char:\"\\u26ea\",fitzpatrick_scale:!1,category:\"travel_and_places\"},mosque:{keywords:[\"islam\",\"worship\",\"minaret\"],char:\"\\u{1f54c}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},synagogue:{keywords:[\"judaism\",\"worship\",\"temple\",\"jewish\"],char:\"\\u{1f54d}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},kaaba:{keywords:[\"mecca\",\"mosque\",\"islam\"],char:\"\\u{1f54b}\",fitzpatrick_scale:!1,category:\"travel_and_places\"},shinto_shrine:{keywords:[\"temple\",\"japan\",\"kyoto\"],char:\"\\u26e9\",fitzpatrick_scale:!1,category:\"travel_and_places\"},watch:{keywords:[\"time\",\"accessories\"],char:\"\\u231a\",fitzpatrick_scale:!1,category:\"objects\"},iphone:{keywords:[\"technology\",\"apple\",\"gadgets\",\"dial\"],char:\"\\u{1f4f1}\",fitzpatrick_scale:!1,category:\"objects\"},calling:{keywords:[\"iphone\",\"incoming\"],char:\"\\u{1f4f2}\",fitzpatrick_scale:!1,category:\"objects\"},computer:{keywords:[\"technology\",\"laptop\",\"screen\",\"display\",\"monitor\"],char:\"\\u{1f4bb}\",fitzpatrick_scale:!1,category:\"objects\"},keyboard:{keywords:[\"technology\",\"computer\",\"type\",\"input\",\"text\"],char:\"\\u2328\",fitzpatrick_scale:!1,category:\"objects\"},desktop_computer:{keywords:[\"technology\",\"computing\",\"screen\"],char:\"\\u{1f5a5}\",fitzpatrick_scale:!1,category:\"objects\"},printer:{keywords:[\"paper\",\"ink\"],char:\"\\u{1f5a8}\",fitzpatrick_scale:!1,category:\"objects\"},computer_mouse:{keywords:[\"click\"],char:\"\\u{1f5b1}\",fitzpatrick_scale:!1,category:\"objects\"},trackball:{keywords:[\"technology\",\"trackpad\"],char:\"\\u{1f5b2}\",fitzpatrick_scale:!1,category:\"objects\"},joystick:{keywords:[\"game\",\"play\"],char:\"\\u{1f579}\",fitzpatrick_scale:!1,category:\"objects\"},clamp:{keywords:[\"tool\"],char:\"\\u{1f5dc}\",fitzpatrick_scale:!1,category:\"objects\"},minidisc:{keywords:[\"technology\",\"record\",\"data\",\"disk\",\"90s\"],char:\"\\u{1f4bd}\",fitzpatrick_scale:!1,category:\"objects\"},floppy_disk:{keywords:[\"oldschool\",\"technology\",\"save\",\"90s\",\"80s\"],char:\"\\u{1f4be}\",fitzpatrick_scale:!1,category:\"objects\"},cd:{keywords:[\"technology\",\"dvd\",\"disk\",\"disc\",\"90s\"],char:\"\\u{1f4bf}\",fitzpatrick_scale:!1,category:\"objects\"},dvd:{keywords:[\"cd\",\"disk\",\"disc\"],char:\"\\u{1f4c0}\",fitzpatrick_scale:!1,category:\"objects\"},vhs:{keywords:[\"record\",\"video\",\"oldschool\",\"90s\",\"80s\"],char:\"\\u{1f4fc}\",fitzpatrick_scale:!1,category:\"objects\"},camera:{keywords:[\"gadgets\",\"photography\"],char:\"\\u{1f4f7}\",fitzpatrick_scale:!1,category:\"objects\"},camera_flash:{keywords:[\"photography\",\"gadgets\"],char:\"\\u{1f4f8}\",fitzpatrick_scale:!1,category:\"objects\"},video_camera:{keywords:[\"film\",\"record\"],char:\"\\u{1f4f9}\",fitzpatrick_scale:!1,category:\"objects\"},movie_camera:{keywords:[\"film\",\"record\"],char:\"\\u{1f3a5}\",fitzpatrick_scale:!1,category:\"objects\"},film_projector:{keywords:[\"video\",\"tape\",\"record\",\"movie\"],char:\"\\u{1f4fd}\",fitzpatrick_scale:!1,category:\"objects\"},film_strip:{keywords:[\"movie\"],char:\"\\u{1f39e}\",fitzpatrick_scale:!1,category:\"objects\"},telephone_receiver:{keywords:[\"technology\",\"communication\",\"dial\"],char:\"\\u{1f4de}\",fitzpatrick_scale:!1,category:\"objects\"},phone:{keywords:[\"technology\",\"communication\",\"dial\",\"telephone\"],char:\"\\u260e\\ufe0f\",fitzpatrick_scale:!1,category:\"objects\"},pager:{keywords:[\"bbcall\",\"oldschool\",\"90s\"],char:\"\\u{1f4df}\",fitzpatrick_scale:!1,category:\"objects\"},fax:{keywords:[\"communication\",\"technology\"],char:\"\\u{1f4e0}\",fitzpatrick_scale:!1,category:\"objects\"},tv:{keywords:[\"technology\",\"program\",\"oldschool\",\"show\",\"television\"],char:\"\\u{1f4fa}\",fitzpatrick_scale:!1,category:\"objects\"},radio:{keywords:[\"communication\",\"music\",\"podcast\",\"program\"],char:\"\\u{1f4fb}\",fitzpatrick_scale:!1,category:\"objects\"},studio_microphone:{keywords:[\"sing\",\"recording\",\"artist\",\"talkshow\"],char:\"\\u{1f399}\",fitzpatrick_scale:!1,category:\"objects\"},level_slider:{keywords:[\"scale\"],char:\"\\u{1f39a}\",fitzpatrick_scale:!1,category:\"objects\"},control_knobs:{keywords:[\"dial\"],char:\"\\u{1f39b}\",fitzpatrick_scale:!1,category:\"objects\"},compass:{keywords:[\"magnetic\",\"navigation\",\"orienteering\"],char:\"\\u{1f9ed}\",fitzpatrick_scale:!1,category:\"objects\"},stopwatch:{keywords:[\"time\",\"deadline\"],char:\"\\u23f1\",fitzpatrick_scale:!1,category:\"objects\"},timer_clock:{keywords:[\"alarm\"],char:\"\\u23f2\",fitzpatrick_scale:!1,category:\"objects\"},alarm_clock:{keywords:[\"time\",\"wake\"],char:\"\\u23f0\",fitzpatrick_scale:!1,category:\"objects\"},mantelpiece_clock:{keywords:[\"time\"],char:\"\\u{1f570}\",fitzpatrick_scale:!1,category:\"objects\"},hourglass_flowing_sand:{keywords:[\"oldschool\",\"time\",\"countdown\"],char:\"\\u23f3\",fitzpatrick_scale:!1,category:\"objects\"},hourglass:{keywords:[\"time\",\"clock\",\"oldschool\",\"limit\",\"exam\",\"quiz\",\"test\"],char:\"\\u231b\",fitzpatrick_scale:!1,category:\"objects\"},satellite:{keywords:[\"communication\",\"future\",\"radio\",\"space\"],char:\"\\u{1f4e1}\",fitzpatrick_scale:!1,category:\"objects\"},battery:{keywords:[\"power\",\"energy\",\"sustain\"],char:\"\\u{1f50b}\",fitzpatrick_scale:!1,category:\"objects\"},electric_plug:{keywords:[\"charger\",\"power\"],char:\"\\u{1f50c}\",fitzpatrick_scale:!1,category:\"objects\"},bulb:{keywords:[\"light\",\"electricity\",\"idea\"],char:\"\\u{1f4a1}\",fitzpatrick_scale:!1,category:\"objects\"},flashlight:{keywords:[\"dark\",\"camping\",\"sight\",\"night\"],char:\"\\u{1f526}\",fitzpatrick_scale:!1,category:\"objects\"},candle:{keywords:[\"fire\",\"wax\"],char:\"\\u{1f56f}\",fitzpatrick_scale:!1,category:\"objects\"},fire_extinguisher:{keywords:[\"quench\"],char:\"\\u{1f9ef}\",fitzpatrick_scale:!1,category:\"objects\"},wastebasket:{keywords:[\"bin\",\"trash\",\"rubbish\",\"garbage\",\"toss\"],char:\"\\u{1f5d1}\",fitzpatrick_scale:!1,category:\"objects\"},oil_drum:{keywords:[\"barrell\"],char:\"\\u{1f6e2}\",fitzpatrick_scale:!1,category:\"objects\"},money_with_wings:{keywords:[\"dollar\",\"bills\",\"payment\",\"sale\"],char:\"\\u{1f4b8}\",fitzpatrick_scale:!1,category:\"objects\"},dollar:{keywords:[\"money\",\"sales\",\"bill\",\"currency\"],char:\"\\u{1f4b5}\",fitzpatrick_scale:!1,category:\"objects\"},yen:{keywords:[\"money\",\"sales\",\"japanese\",\"dollar\",\"currency\"],char:\"\\u{1f4b4}\",fitzpatrick_scale:!1,category:\"objects\"},euro:{keywords:[\"money\",\"sales\",\"dollar\",\"currency\"],char:\"\\u{1f4b6}\",fitzpatrick_scale:!1,category:\"objects\"},pound:{keywords:[\"british\",\"sterling\",\"money\",\"sales\",\"bills\",\"uk\",\"england\",\"currency\"],char:\"\\u{1f4b7}\",fitzpatrick_scale:!1,category:\"objects\"},moneybag:{keywords:[\"dollar\",\"payment\",\"coins\",\"sale\"],char:\"\\u{1f4b0}\",fitzpatrick_scale:!1,category:\"objects\"},credit_card:{keywords:[\"money\",\"sales\",\"dollar\",\"bill\",\"payment\",\"shopping\"],char:\"\\u{1f4b3}\",fitzpatrick_scale:!1,category:\"objects\"},gem:{keywords:[\"blue\",\"ruby\",\"diamond\",\"jewelry\"],char:\"\\u{1f48e}\",fitzpatrick_scale:!1,category:\"objects\"},balance_scale:{keywords:[\"law\",\"fairness\",\"weight\"],char:\"\\u2696\",fitzpatrick_scale:!1,category:\"objects\"},toolbox:{keywords:[\"tools\",\"diy\",\"fix\",\"maintainer\",\"mechanic\"],char:\"\\u{1f9f0}\",fitzpatrick_scale:!1,category:\"objects\"},wrench:{keywords:[\"tools\",\"diy\",\"ikea\",\"fix\",\"maintainer\"],char:\"\\u{1f527}\",fitzpatrick_scale:!1,category:\"objects\"},hammer:{keywords:[\"tools\",\"build\",\"create\"],char:\"\\u{1f528}\",fitzpatrick_scale:!1,category:\"objects\"},hammer_and_pick:{keywords:[\"tools\",\"build\",\"create\"],char:\"\\u2692\",fitzpatrick_scale:!1,category:\"objects\"},hammer_and_wrench:{keywords:[\"tools\",\"build\",\"create\"],char:\"\\u{1f6e0}\",fitzpatrick_scale:!1,category:\"objects\"},pick:{keywords:[\"tools\",\"dig\"],char:\"\\u26cf\",fitzpatrick_scale:!1,category:\"objects\"},nut_and_bolt:{keywords:[\"handy\",\"tools\",\"fix\"],char:\"\\u{1f529}\",fitzpatrick_scale:!1,category:\"objects\"},gear:{keywords:[\"cog\"],char:\"\\u2699\",fitzpatrick_scale:!1,category:\"objects\"},brick:{keywords:[\"bricks\"],char:\"\\u{1f9f1}\",fitzpatrick_scale:!1,category:\"objects\"},chains:{keywords:[\"lock\",\"arrest\"],char:\"\\u26d3\",fitzpatrick_scale:!1,category:\"objects\"},magnet:{keywords:[\"attraction\",\"magnetic\"],char:\"\\u{1f9f2}\",fitzpatrick_scale:!1,category:\"objects\"},gun:{keywords:[\"violence\",\"weapon\",\"pistol\",\"revolver\"],char:\"\\u{1f52b}\",fitzpatrick_scale:!1,category:\"objects\"},bomb:{keywords:[\"boom\",\"explode\",\"explosion\",\"terrorism\"],char:\"\\u{1f4a3}\",fitzpatrick_scale:!1,category:\"objects\"},firecracker:{keywords:[\"dynamite\",\"boom\",\"explode\",\"explosion\",\"explosive\"],char:\"\\u{1f9e8}\",fitzpatrick_scale:!1,category:\"objects\"},hocho:{keywords:[\"knife\",\"blade\",\"cutlery\",\"kitchen\",\"weapon\"],char:\"\\u{1f52a}\",fitzpatrick_scale:!1,category:\"objects\"},dagger:{keywords:[\"weapon\"],char:\"\\u{1f5e1}\",fitzpatrick_scale:!1,category:\"objects\"},crossed_swords:{keywords:[\"weapon\"],char:\"\\u2694\",fitzpatrick_scale:!1,category:\"objects\"},shield:{keywords:[\"protection\",\"security\"],char:\"\\u{1f6e1}\",fitzpatrick_scale:!1,category:\"objects\"},smoking:{keywords:[\"kills\",\"tobacco\",\"cigarette\",\"joint\",\"smoke\"],char:\"\\u{1f6ac}\",fitzpatrick_scale:!1,category:\"objects\"},skull_and_crossbones:{keywords:[\"poison\",\"danger\",\"deadly\",\"scary\",\"death\",\"pirate\",\"evil\"],char:\"\\u2620\",fitzpatrick_scale:!1,category:\"objects\"},coffin:{keywords:[\"vampire\",\"dead\",\"die\",\"death\",\"rip\",\"graveyard\",\"cemetery\",\"casket\",\"funeral\",\"box\"],char:\"\\u26b0\",fitzpatrick_scale:!1,category:\"objects\"},funeral_urn:{keywords:[\"dead\",\"die\",\"death\",\"rip\",\"ashes\"],char:\"\\u26b1\",fitzpatrick_scale:!1,category:\"objects\"},amphora:{keywords:[\"vase\",\"jar\"],char:\"\\u{1f3fa}\",fitzpatrick_scale:!1,category:\"objects\"},crystal_ball:{keywords:[\"disco\",\"party\",\"magic\",\"circus\",\"fortune_teller\"],char:\"\\u{1f52e}\",fitzpatrick_scale:!1,category:\"objects\"},prayer_beads:{keywords:[\"dhikr\",\"religious\"],char:\"\\u{1f4ff}\",fitzpatrick_scale:!1,category:\"objects\"},nazar_amulet:{keywords:[\"bead\",\"charm\"],char:\"\\u{1f9ff}\",fitzpatrick_scale:!1,category:\"objects\"},barber:{keywords:[\"hair\",\"salon\",\"style\"],char:\"\\u{1f488}\",fitzpatrick_scale:!1,category:\"objects\"},alembic:{keywords:[\"distilling\",\"science\",\"experiment\",\"chemistry\"],char:\"\\u2697\",fitzpatrick_scale:!1,category:\"objects\"},telescope:{keywords:[\"stars\",\"space\",\"zoom\",\"science\",\"astronomy\"],char:\"\\u{1f52d}\",fitzpatrick_scale:!1,category:\"objects\"},microscope:{keywords:[\"laboratory\",\"experiment\",\"zoomin\",\"science\",\"study\"],char:\"\\u{1f52c}\",fitzpatrick_scale:!1,category:\"objects\"},hole:{keywords:[\"embarrassing\"],char:\"\\u{1f573}\",fitzpatrick_scale:!1,category:\"objects\"},pill:{keywords:[\"health\",\"medicine\",\"doctor\",\"pharmacy\",\"drug\"],char:\"\\u{1f48a}\",fitzpatrick_scale:!1,category:\"objects\"},syringe:{keywords:[\"health\",\"hospital\",\"drugs\",\"blood\",\"medicine\",\"needle\",\"doctor\",\"nurse\"],char:\"\\u{1f489}\",fitzpatrick_scale:!1,category:\"objects\"},dna:{keywords:[\"biologist\",\"genetics\",\"life\"],char:\"\\u{1f9ec}\",fitzpatrick_scale:!1,category:\"objects\"},microbe:{keywords:[\"amoeba\",\"bacteria\",\"germs\"],char:\"\\u{1f9a0}\",fitzpatrick_scale:!1,category:\"objects\"},petri_dish:{keywords:[\"bacteria\",\"biology\",\"culture\",\"lab\"],char:\"\\u{1f9eb}\",fitzpatrick_scale:!1,category:\"objects\"},test_tube:{keywords:[\"chemistry\",\"experiment\",\"lab\",\"science\"],char:\"\\u{1f9ea}\",fitzpatrick_scale:!1,category:\"objects\"},thermometer:{keywords:[\"weather\",\"temperature\",\"hot\",\"cold\"],char:\"\\u{1f321}\",fitzpatrick_scale:!1,category:\"objects\"},broom:{keywords:[\"cleaning\",\"sweeping\",\"witch\"],char:\"\\u{1f9f9}\",fitzpatrick_scale:!1,category:\"objects\"},basket:{keywords:[\"laundry\"],char:\"\\u{1f9fa}\",fitzpatrick_scale:!1,category:\"objects\"},toilet_paper:{keywords:[\"roll\"],char:\"\\u{1f9fb}\",fitzpatrick_scale:!1,category:\"objects\"},label:{keywords:[\"sale\",\"tag\"],char:\"\\u{1f3f7}\",fitzpatrick_scale:!1,category:\"objects\"},bookmark:{keywords:[\"favorite\",\"label\",\"save\"],char:\"\\u{1f516}\",fitzpatrick_scale:!1,category:\"objects\"},toilet:{keywords:[\"restroom\",\"wc\",\"washroom\",\"bathroom\",\"potty\"],char:\"\\u{1f6bd}\",fitzpatrick_scale:!1,category:\"objects\"},shower:{keywords:[\"clean\",\"water\",\"bathroom\"],char:\"\\u{1f6bf}\",fitzpatrick_scale:!1,category:\"objects\"},bathtub:{keywords:[\"clean\",\"shower\",\"bathroom\"],char:\"\\u{1f6c1}\",fitzpatrick_scale:!1,category:\"objects\"},soap:{keywords:[\"bar\",\"bathing\",\"cleaning\",\"lather\"],char:\"\\u{1f9fc}\",fitzpatrick_scale:!1,category:\"objects\"},sponge:{keywords:[\"absorbing\",\"cleaning\",\"porous\"],char:\"\\u{1f9fd}\",fitzpatrick_scale:!1,category:\"objects\"},lotion_bottle:{keywords:[\"moisturizer\",\"sunscreen\"],char:\"\\u{1f9f4}\",fitzpatrick_scale:!1,category:\"objects\"},key:{keywords:[\"lock\",\"door\",\"password\"],char:\"\\u{1f511}\",fitzpatrick_scale:!1,category:\"objects\"},old_key:{keywords:[\"lock\",\"door\",\"password\"],char:\"\\u{1f5dd}\",fitzpatrick_scale:!1,category:\"objects\"},couch_and_lamp:{keywords:[\"read\",\"chill\"],char:\"\\u{1f6cb}\",fitzpatrick_scale:!1,category:\"objects\"},sleeping_bed:{keywords:[\"bed\",\"rest\"],char:\"\\u{1f6cc}\",fitzpatrick_scale:!0,category:\"objects\"},bed:{keywords:[\"sleep\",\"rest\"],char:\"\\u{1f6cf}\",fitzpatrick_scale:!1,category:\"objects\"},door:{keywords:[\"house\",\"entry\",\"exit\"],char:\"\\u{1f6aa}\",fitzpatrick_scale:!1,category:\"objects\"},bellhop_bell:{keywords:[\"service\"],char:\"\\u{1f6ce}\",fitzpatrick_scale:!1,category:\"objects\"},teddy_bear:{keywords:[\"plush\",\"stuffed\"],char:\"\\u{1f9f8}\",fitzpatrick_scale:!1,category:\"objects\"},framed_picture:{keywords:[\"photography\"],char:\"\\u{1f5bc}\",fitzpatrick_scale:!1,category:\"objects\"},world_map:{keywords:[\"location\",\"direction\"],char:\"\\u{1f5fa}\",fitzpatrick_scale:!1,category:\"objects\"},parasol_on_ground:{keywords:[\"weather\",\"summer\"],char:\"\\u26f1\",fitzpatrick_scale:!1,category:\"objects\"},moyai:{keywords:[\"rock\",\"easter island\",\"moai\"],char:\"\\u{1f5ff}\",fitzpatrick_scale:!1,category:\"objects\"},shopping:{keywords:[\"mall\",\"buy\",\"purchase\"],char:\"\\u{1f6cd}\",fitzpatrick_scale:!1,category:\"objects\"},shopping_cart:{keywords:[\"trolley\"],char:\"\\u{1f6d2}\",fitzpatrick_scale:!1,category:\"objects\"},balloon:{keywords:[\"party\",\"celebration\",\"birthday\",\"circus\"],char:\"\\u{1f388}\",fitzpatrick_scale:!1,category:\"objects\"},flags:{keywords:[\"fish\",\"japanese\",\"koinobori\",\"carp\",\"banner\"],char:\"\\u{1f38f}\",fitzpatrick_scale:!1,category:\"objects\"},ribbon:{keywords:[\"decoration\",\"pink\",\"girl\",\"bowtie\"],char:\"\\u{1f380}\",fitzpatrick_scale:!1,category:\"objects\"},gift:{keywords:[\"present\",\"birthday\",\"christmas\",\"xmas\"],char:\"\\u{1f381}\",fitzpatrick_scale:!1,category:\"objects\"},confetti_ball:{keywords:[\"festival\",\"party\",\"birthday\",\"circus\"],char:\"\\u{1f38a}\",fitzpatrick_scale:!1,category:\"objects\"},tada:{keywords:[\"party\",\"congratulations\",\"birthday\",\"magic\",\"circus\",\"celebration\"],char:\"\\u{1f389}\",fitzpatrick_scale:!1,category:\"objects\"},dolls:{keywords:[\"japanese\",\"toy\",\"kimono\"],char:\"\\u{1f38e}\",fitzpatrick_scale:!1,category:\"objects\"},wind_chime:{keywords:[\"nature\",\"ding\",\"spring\",\"bell\"],char:\"\\u{1f390}\",fitzpatrick_scale:!1,category:\"objects\"},crossed_flags:{keywords:[\"japanese\",\"nation\",\"country\",\"border\"],char:\"\\u{1f38c}\",fitzpatrick_scale:!1,category:\"objects\"},izakaya_lantern:{keywords:[\"light\",\"paper\",\"halloween\",\"spooky\"],char:\"\\u{1f3ee}\",fitzpatrick_scale:!1,category:\"objects\"},red_envelope:{keywords:[\"gift\"],char:\"\\u{1f9e7}\",fitzpatrick_scale:!1,category:\"objects\"},email:{keywords:[\"letter\",\"postal\",\"inbox\",\"communication\"],char:\"\\u2709\\ufe0f\",fitzpatrick_scale:!1,category:\"objects\"},envelope_with_arrow:{keywords:[\"email\",\"communication\"],char:\"\\u{1f4e9}\",fitzpatrick_scale:!1,category:\"objects\"},incoming_envelope:{keywords:[\"email\",\"inbox\"],char:\"\\u{1f4e8}\",fitzpatrick_scale:!1,category:\"objects\"},\"e-mail\":{keywords:[\"communication\",\"inbox\"],char:\"\\u{1f4e7}\",fitzpatrick_scale:!1,category:\"objects\"},love_letter:{keywords:[\"email\",\"like\",\"affection\",\"envelope\",\"valentines\"],char:\"\\u{1f48c}\",fitzpatrick_scale:!1,category:\"objects\"},postbox:{keywords:[\"email\",\"letter\",\"envelope\"],char:\"\\u{1f4ee}\",fitzpatrick_scale:!1,category:\"objects\"},mailbox_closed:{keywords:[\"email\",\"communication\",\"inbox\"],char:\"\\u{1f4ea}\",fitzpatrick_scale:!1,category:\"objects\"},mailbox:{keywords:[\"email\",\"inbox\",\"communication\"],char:\"\\u{1f4eb}\",fitzpatrick_scale:!1,category:\"objects\"},mailbox_with_mail:{keywords:[\"email\",\"inbox\",\"communication\"],char:\"\\u{1f4ec}\",fitzpatrick_scale:!1,category:\"objects\"},mailbox_with_no_mail:{keywords:[\"email\",\"inbox\"],char:\"\\u{1f4ed}\",fitzpatrick_scale:!1,category:\"objects\"},package:{keywords:[\"mail\",\"gift\",\"cardboard\",\"box\",\"moving\"],char:\"\\u{1f4e6}\",fitzpatrick_scale:!1,category:\"objects\"},postal_horn:{keywords:[\"instrument\",\"music\"],char:\"\\u{1f4ef}\",fitzpatrick_scale:!1,category:\"objects\"},inbox_tray:{keywords:[\"email\",\"documents\"],char:\"\\u{1f4e5}\",fitzpatrick_scale:!1,category:\"objects\"},outbox_tray:{keywords:[\"inbox\",\"email\"],char:\"\\u{1f4e4}\",fitzpatrick_scale:!1,category:\"objects\"},scroll:{keywords:[\"documents\",\"ancient\",\"history\",\"paper\"],char:\"\\u{1f4dc}\",fitzpatrick_scale:!1,category:\"objects\"},page_with_curl:{keywords:[\"documents\",\"office\",\"paper\"],char:\"\\u{1f4c3}\",fitzpatrick_scale:!1,category:\"objects\"},bookmark_tabs:{keywords:[\"favorite\",\"save\",\"order\",\"tidy\"],char:\"\\u{1f4d1}\",fitzpatrick_scale:!1,category:\"objects\"},receipt:{keywords:[\"accounting\",\"expenses\"],char:\"\\u{1f9fe}\",fitzpatrick_scale:!1,category:\"objects\"},bar_chart:{keywords:[\"graph\",\"presentation\",\"stats\"],char:\"\\u{1f4ca}\",fitzpatrick_scale:!1,category:\"objects\"},chart_with_upwards_trend:{keywords:[\"graph\",\"presentation\",\"stats\",\"recovery\",\"business\",\"economics\",\"money\",\"sales\",\"good\",\"success\"],char:\"\\u{1f4c8}\",fitzpatrick_scale:!1,category:\"objects\"},chart_with_downwards_trend:{keywords:[\"graph\",\"presentation\",\"stats\",\"recession\",\"business\",\"economics\",\"money\",\"sales\",\"bad\",\"failure\"],char:\"\\u{1f4c9}\",fitzpatrick_scale:!1,category:\"objects\"},page_facing_up:{keywords:[\"documents\",\"office\",\"paper\",\"information\"],char:\"\\u{1f4c4}\",fitzpatrick_scale:!1,category:\"objects\"},date:{keywords:[\"calendar\",\"schedule\"],char:\"\\u{1f4c5}\",fitzpatrick_scale:!1,category:\"objects\"},calendar:{keywords:[\"schedule\",\"date\",\"planning\"],char:\"\\u{1f4c6}\",fitzpatrick_scale:!1,category:\"objects\"},spiral_calendar:{keywords:[\"date\",\"schedule\",\"planning\"],char:\"\\u{1f5d3}\",fitzpatrick_scale:!1,category:\"objects\"},card_index:{keywords:[\"business\",\"stationery\"],char:\"\\u{1f4c7}\",fitzpatrick_scale:!1,category:\"objects\"},card_file_box:{keywords:[\"business\",\"stationery\"],char:\"\\u{1f5c3}\",fitzpatrick_scale:!1,category:\"objects\"},ballot_box:{keywords:[\"election\",\"vote\"],char:\"\\u{1f5f3}\",fitzpatrick_scale:!1,category:\"objects\"},file_cabinet:{keywords:[\"filing\",\"organizing\"],char:\"\\u{1f5c4}\",fitzpatrick_scale:!1,category:\"objects\"},clipboard:{keywords:[\"stationery\",\"documents\"],char:\"\\u{1f4cb}\",fitzpatrick_scale:!1,category:\"objects\"},spiral_notepad:{keywords:[\"memo\",\"stationery\"],char:\"\\u{1f5d2}\",fitzpatrick_scale:!1,category:\"objects\"},file_folder:{keywords:[\"documents\",\"business\",\"office\"],char:\"\\u{1f4c1}\",fitzpatrick_scale:!1,category:\"objects\"},open_file_folder:{keywords:[\"documents\",\"load\"],char:\"\\u{1f4c2}\",fitzpatrick_scale:!1,category:\"objects\"},card_index_dividers:{keywords:[\"organizing\",\"business\",\"stationery\"],char:\"\\u{1f5c2}\",fitzpatrick_scale:!1,category:\"objects\"},newspaper_roll:{keywords:[\"press\",\"headline\"],char:\"\\u{1f5de}\",fitzpatrick_scale:!1,category:\"objects\"},newspaper:{keywords:[\"press\",\"headline\"],char:\"\\u{1f4f0}\",fitzpatrick_scale:!1,category:\"objects\"},notebook:{keywords:[\"stationery\",\"record\",\"notes\",\"paper\",\"study\"],char:\"\\u{1f4d3}\",fitzpatrick_scale:!1,category:\"objects\"},closed_book:{keywords:[\"read\",\"library\",\"knowledge\",\"textbook\",\"learn\"],char:\"\\u{1f4d5}\",fitzpatrick_scale:!1,category:\"objects\"},green_book:{keywords:[\"read\",\"library\",\"knowledge\",\"study\"],char:\"\\u{1f4d7}\",fitzpatrick_scale:!1,category:\"objects\"},blue_book:{keywords:[\"read\",\"library\",\"knowledge\",\"learn\",\"study\"],char:\"\\u{1f4d8}\",fitzpatrick_scale:!1,category:\"objects\"},orange_book:{keywords:[\"read\",\"library\",\"knowledge\",\"textbook\",\"study\"],char:\"\\u{1f4d9}\",fitzpatrick_scale:!1,category:\"objects\"},notebook_with_decorative_cover:{keywords:[\"classroom\",\"notes\",\"record\",\"paper\",\"study\"],char:\"\\u{1f4d4}\",fitzpatrick_scale:!1,category:\"objects\"},ledger:{keywords:[\"notes\",\"paper\"],char:\"\\u{1f4d2}\",fitzpatrick_scale:!1,category:\"objects\"},books:{keywords:[\"literature\",\"library\",\"study\"],char:\"\\u{1f4da}\",fitzpatrick_scale:!1,category:\"objects\"},open_book:{keywords:[\"book\",\"read\",\"library\",\"knowledge\",\"literature\",\"learn\",\"study\"],char:\"\\u{1f4d6}\",fitzpatrick_scale:!1,category:\"objects\"},safety_pin:{keywords:[\"diaper\"],char:\"\\u{1f9f7}\",fitzpatrick_scale:!1,category:\"objects\"},link:{keywords:[\"rings\",\"url\"],char:\"\\u{1f517}\",fitzpatrick_scale:!1,category:\"objects\"},paperclip:{keywords:[\"documents\",\"stationery\"],char:\"\\u{1f4ce}\",fitzpatrick_scale:!1,category:\"objects\"},paperclips:{keywords:[\"documents\",\"stationery\"],char:\"\\u{1f587}\",fitzpatrick_scale:!1,category:\"objects\"},scissors:{keywords:[\"stationery\",\"cut\"],char:\"\\u2702\\ufe0f\",fitzpatrick_scale:!1,category:\"objects\"},triangular_ruler:{keywords:[\"stationery\",\"math\",\"architect\",\"sketch\"],char:\"\\u{1f4d0}\",fitzpatrick_scale:!1,category:\"objects\"},straight_ruler:{keywords:[\"stationery\",\"calculate\",\"length\",\"math\",\"school\",\"drawing\",\"architect\",\"sketch\"],char:\"\\u{1f4cf}\",fitzpatrick_scale:!1,category:\"objects\"},abacus:{keywords:[\"calculation\"],char:\"\\u{1f9ee}\",fitzpatrick_scale:!1,category:\"objects\"},pushpin:{keywords:[\"stationery\",\"mark\",\"here\"],char:\"\\u{1f4cc}\",fitzpatrick_scale:!1,category:\"objects\"},round_pushpin:{keywords:[\"stationery\",\"location\",\"map\",\"here\"],char:\"\\u{1f4cd}\",fitzpatrick_scale:!1,category:\"objects\"},triangular_flag_on_post:{keywords:[\"mark\",\"milestone\",\"place\"],char:\"\\u{1f6a9}\",fitzpatrick_scale:!1,category:\"objects\"},white_flag:{keywords:[\"losing\",\"loser\",\"lost\",\"surrender\",\"give up\",\"fail\"],char:\"\\u{1f3f3}\",fitzpatrick_scale:!1,category:\"objects\"},black_flag:{keywords:[\"pirate\"],char:\"\\u{1f3f4}\",fitzpatrick_scale:!1,category:\"objects\"},rainbow_flag:{keywords:[\"flag\",\"rainbow\",\"pride\",\"gay\",\"lgbt\",\"glbt\",\"queer\",\"homosexual\",\"lesbian\",\"bisexual\",\"transgender\"],char:\"\\u{1f3f3}\\ufe0f\\u200d\\u{1f308}\",fitzpatrick_scale:!1,category:\"objects\"},closed_lock_with_key:{keywords:[\"security\",\"privacy\"],char:\"\\u{1f510}\",fitzpatrick_scale:!1,category:\"objects\"},lock:{keywords:[\"security\",\"password\",\"padlock\"],char:\"\\u{1f512}\",fitzpatrick_scale:!1,category:\"objects\"},unlock:{keywords:[\"privacy\",\"security\"],char:\"\\u{1f513}\",fitzpatrick_scale:!1,category:\"objects\"},lock_with_ink_pen:{keywords:[\"security\",\"secret\"],char:\"\\u{1f50f}\",fitzpatrick_scale:!1,category:\"objects\"},pen:{keywords:[\"stationery\",\"writing\",\"write\"],char:\"\\u{1f58a}\",fitzpatrick_scale:!1,category:\"objects\"},fountain_pen:{keywords:[\"stationery\",\"writing\",\"write\"],char:\"\\u{1f58b}\",fitzpatrick_scale:!1,category:\"objects\"},black_nib:{keywords:[\"pen\",\"stationery\",\"writing\",\"write\"],char:\"\\u2712\\ufe0f\",fitzpatrick_scale:!1,category:\"objects\"},memo:{keywords:[\"write\",\"documents\",\"stationery\",\"pencil\",\"paper\",\"writing\",\"legal\",\"exam\",\"quiz\",\"test\",\"study\",\"compose\"],char:\"\\u{1f4dd}\",fitzpatrick_scale:!1,category:\"objects\"},pencil2:{keywords:[\"stationery\",\"write\",\"paper\",\"writing\",\"school\",\"study\"],char:\"\\u270f\\ufe0f\",fitzpatrick_scale:!1,category:\"objects\"},crayon:{keywords:[\"drawing\",\"creativity\"],char:\"\\u{1f58d}\",fitzpatrick_scale:!1,category:\"objects\"},paintbrush:{keywords:[\"drawing\",\"creativity\",\"art\"],char:\"\\u{1f58c}\",fitzpatrick_scale:!1,category:\"objects\"},mag:{keywords:[\"search\",\"zoom\",\"find\",\"detective\"],char:\"\\u{1f50d}\",fitzpatrick_scale:!1,category:\"objects\"},mag_right:{keywords:[\"search\",\"zoom\",\"find\",\"detective\"],char:\"\\u{1f50e}\",fitzpatrick_scale:!1,category:\"objects\"},heart:{keywords:[\"love\",\"like\",\"valentines\"],char:\"\\u2764\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},orange_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f9e1}\",fitzpatrick_scale:!1,category:\"symbols\"},yellow_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f49b}\",fitzpatrick_scale:!1,category:\"symbols\"},green_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f49a}\",fitzpatrick_scale:!1,category:\"symbols\"},blue_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f499}\",fitzpatrick_scale:!1,category:\"symbols\"},purple_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f49c}\",fitzpatrick_scale:!1,category:\"symbols\"},black_heart:{keywords:[\"evil\"],char:\"\\u{1f5a4}\",fitzpatrick_scale:!1,category:\"symbols\"},broken_heart:{keywords:[\"sad\",\"sorry\",\"break\",\"heart\",\"heartbreak\"],char:\"\\u{1f494}\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_heart_exclamation:{keywords:[\"decoration\",\"love\"],char:\"\\u2763\",fitzpatrick_scale:!1,category:\"symbols\"},two_hearts:{keywords:[\"love\",\"like\",\"affection\",\"valentines\",\"heart\"],char:\"\\u{1f495}\",fitzpatrick_scale:!1,category:\"symbols\"},revolving_hearts:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f49e}\",fitzpatrick_scale:!1,category:\"symbols\"},heartbeat:{keywords:[\"love\",\"like\",\"affection\",\"valentines\",\"pink\",\"heart\"],char:\"\\u{1f493}\",fitzpatrick_scale:!1,category:\"symbols\"},heartpulse:{keywords:[\"like\",\"love\",\"affection\",\"valentines\",\"pink\"],char:\"\\u{1f497}\",fitzpatrick_scale:!1,category:\"symbols\"},sparkling_heart:{keywords:[\"love\",\"like\",\"affection\",\"valentines\"],char:\"\\u{1f496}\",fitzpatrick_scale:!1,category:\"symbols\"},cupid:{keywords:[\"love\",\"like\",\"heart\",\"affection\",\"valentines\"],char:\"\\u{1f498}\",fitzpatrick_scale:!1,category:\"symbols\"},gift_heart:{keywords:[\"love\",\"valentines\"],char:\"\\u{1f49d}\",fitzpatrick_scale:!1,category:\"symbols\"},heart_decoration:{keywords:[\"purple-square\",\"love\",\"like\"],char:\"\\u{1f49f}\",fitzpatrick_scale:!1,category:\"symbols\"},peace_symbol:{keywords:[\"hippie\"],char:\"\\u262e\",fitzpatrick_scale:!1,category:\"symbols\"},latin_cross:{keywords:[\"christianity\"],char:\"\\u271d\",fitzpatrick_scale:!1,category:\"symbols\"},star_and_crescent:{keywords:[\"islam\"],char:\"\\u262a\",fitzpatrick_scale:!1,category:\"symbols\"},om:{keywords:[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],char:\"\\u{1f549}\",fitzpatrick_scale:!1,category:\"symbols\"},wheel_of_dharma:{keywords:[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],char:\"\\u2638\",fitzpatrick_scale:!1,category:\"symbols\"},star_of_david:{keywords:[\"judaism\"],char:\"\\u2721\",fitzpatrick_scale:!1,category:\"symbols\"},six_pointed_star:{keywords:[\"purple-square\",\"religion\",\"jewish\",\"hexagram\"],char:\"\\u{1f52f}\",fitzpatrick_scale:!1,category:\"symbols\"},menorah:{keywords:[\"hanukkah\",\"candles\",\"jewish\"],char:\"\\u{1f54e}\",fitzpatrick_scale:!1,category:\"symbols\"},yin_yang:{keywords:[\"balance\"],char:\"\\u262f\",fitzpatrick_scale:!1,category:\"symbols\"},orthodox_cross:{keywords:[\"suppedaneum\",\"religion\"],char:\"\\u2626\",fitzpatrick_scale:!1,category:\"symbols\"},place_of_worship:{keywords:[\"religion\",\"church\",\"temple\",\"prayer\"],char:\"\\u{1f6d0}\",fitzpatrick_scale:!1,category:\"symbols\"},ophiuchus:{keywords:[\"sign\",\"purple-square\",\"constellation\",\"astrology\"],char:\"\\u26ce\",fitzpatrick_scale:!1,category:\"symbols\"},aries:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"\\u2648\",fitzpatrick_scale:!1,category:\"symbols\"},taurus:{keywords:[\"purple-square\",\"sign\",\"zodiac\",\"astrology\"],char:\"\\u2649\",fitzpatrick_scale:!1,category:\"symbols\"},gemini:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"\\u264a\",fitzpatrick_scale:!1,category:\"symbols\"},cancer:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"\\u264b\",fitzpatrick_scale:!1,category:\"symbols\"},leo:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"\\u264c\",fitzpatrick_scale:!1,category:\"symbols\"},virgo:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"\\u264d\",fitzpatrick_scale:!1,category:\"symbols\"},libra:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"\\u264e\",fitzpatrick_scale:!1,category:\"symbols\"},scorpius:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\",\"scorpio\"],char:\"\\u264f\",fitzpatrick_scale:!1,category:\"symbols\"},sagittarius:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"\\u2650\",fitzpatrick_scale:!1,category:\"symbols\"},capricorn:{keywords:[\"sign\",\"zodiac\",\"purple-square\",\"astrology\"],char:\"\\u2651\",fitzpatrick_scale:!1,category:\"symbols\"},aquarius:{keywords:[\"sign\",\"purple-square\",\"zodiac\",\"astrology\"],char:\"\\u2652\",fitzpatrick_scale:!1,category:\"symbols\"},pisces:{keywords:[\"purple-square\",\"sign\",\"zodiac\",\"astrology\"],char:\"\\u2653\",fitzpatrick_scale:!1,category:\"symbols\"},id:{keywords:[\"purple-square\",\"words\"],char:\"\\u{1f194}\",fitzpatrick_scale:!1,category:\"symbols\"},atom_symbol:{keywords:[\"science\",\"physics\",\"chemistry\"],char:\"\\u269b\",fitzpatrick_scale:!1,category:\"symbols\"},u7a7a:{keywords:[\"kanji\",\"japanese\",\"chinese\",\"empty\",\"sky\",\"blue-square\"],char:\"\\u{1f233}\",fitzpatrick_scale:!1,category:\"symbols\"},u5272:{keywords:[\"cut\",\"divide\",\"chinese\",\"kanji\",\"pink-square\"],char:\"\\u{1f239}\",fitzpatrick_scale:!1,category:\"symbols\"},radioactive:{keywords:[\"nuclear\",\"danger\"],char:\"\\u2622\",fitzpatrick_scale:!1,category:\"symbols\"},biohazard:{keywords:[\"danger\"],char:\"\\u2623\",fitzpatrick_scale:!1,category:\"symbols\"},mobile_phone_off:{keywords:[\"mute\",\"orange-square\",\"silence\",\"quiet\"],char:\"\\u{1f4f4}\",fitzpatrick_scale:!1,category:\"symbols\"},vibration_mode:{keywords:[\"orange-square\",\"phone\"],char:\"\\u{1f4f3}\",fitzpatrick_scale:!1,category:\"symbols\"},u6709:{keywords:[\"orange-square\",\"chinese\",\"have\",\"kanji\"],char:\"\\u{1f236}\",fitzpatrick_scale:!1,category:\"symbols\"},u7121:{keywords:[\"nothing\",\"chinese\",\"kanji\",\"japanese\",\"orange-square\"],char:\"\\u{1f21a}\",fitzpatrick_scale:!1,category:\"symbols\"},u7533:{keywords:[\"chinese\",\"japanese\",\"kanji\",\"orange-square\"],char:\"\\u{1f238}\",fitzpatrick_scale:!1,category:\"symbols\"},u55b6:{keywords:[\"japanese\",\"opening hours\",\"orange-square\"],char:\"\\u{1f23a}\",fitzpatrick_scale:!1,category:\"symbols\"},u6708:{keywords:[\"chinese\",\"month\",\"moon\",\"japanese\",\"orange-square\",\"kanji\"],char:\"\\u{1f237}\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},eight_pointed_black_star:{keywords:[\"orange-square\",\"shape\",\"polygon\"],char:\"\\u2734\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},vs:{keywords:[\"words\",\"orange-square\"],char:\"\\u{1f19a}\",fitzpatrick_scale:!1,category:\"symbols\"},accept:{keywords:[\"ok\",\"good\",\"chinese\",\"kanji\",\"agree\",\"yes\",\"orange-circle\"],char:\"\\u{1f251}\",fitzpatrick_scale:!1,category:\"symbols\"},white_flower:{keywords:[\"japanese\",\"spring\"],char:\"\\u{1f4ae}\",fitzpatrick_scale:!1,category:\"symbols\"},ideograph_advantage:{keywords:[\"chinese\",\"kanji\",\"obtain\",\"get\",\"circle\"],char:\"\\u{1f250}\",fitzpatrick_scale:!1,category:\"symbols\"},secret:{keywords:[\"privacy\",\"chinese\",\"sshh\",\"kanji\",\"red-circle\"],char:\"\\u3299\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},congratulations:{keywords:[\"chinese\",\"kanji\",\"japanese\",\"red-circle\"],char:\"\\u3297\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},u5408:{keywords:[\"japanese\",\"chinese\",\"join\",\"kanji\",\"red-square\"],char:\"\\u{1f234}\",fitzpatrick_scale:!1,category:\"symbols\"},u6e80:{keywords:[\"full\",\"chinese\",\"japanese\",\"red-square\",\"kanji\"],char:\"\\u{1f235}\",fitzpatrick_scale:!1,category:\"symbols\"},u7981:{keywords:[\"kanji\",\"japanese\",\"chinese\",\"forbidden\",\"limit\",\"restricted\",\"red-square\"],char:\"\\u{1f232}\",fitzpatrick_scale:!1,category:\"symbols\"},a:{keywords:[\"red-square\",\"alphabet\",\"letter\"],char:\"\\u{1f170}\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},b:{keywords:[\"red-square\",\"alphabet\",\"letter\"],char:\"\\u{1f171}\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},ab:{keywords:[\"red-square\",\"alphabet\"],char:\"\\u{1f18e}\",fitzpatrick_scale:!1,category:\"symbols\"},cl:{keywords:[\"alphabet\",\"words\",\"red-square\"],char:\"\\u{1f191}\",fitzpatrick_scale:!1,category:\"symbols\"},o2:{keywords:[\"alphabet\",\"red-square\",\"letter\"],char:\"\\u{1f17e}\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},sos:{keywords:[\"help\",\"red-square\",\"words\",\"emergency\",\"911\"],char:\"\\u{1f198}\",fitzpatrick_scale:!1,category:\"symbols\"},no_entry:{keywords:[\"limit\",\"security\",\"privacy\",\"bad\",\"denied\",\"stop\",\"circle\"],char:\"\\u26d4\",fitzpatrick_scale:!1,category:\"symbols\"},name_badge:{keywords:[\"fire\",\"forbid\"],char:\"\\u{1f4db}\",fitzpatrick_scale:!1,category:\"symbols\"},no_entry_sign:{keywords:[\"forbid\",\"stop\",\"limit\",\"denied\",\"disallow\",\"circle\"],char:\"\\u{1f6ab}\",fitzpatrick_scale:!1,category:\"symbols\"},x:{keywords:[\"no\",\"delete\",\"remove\",\"cancel\",\"red\"],char:\"\\u274c\",fitzpatrick_scale:!1,category:\"symbols\"},o:{keywords:[\"circle\",\"round\"],char:\"\\u2b55\",fitzpatrick_scale:!1,category:\"symbols\"},stop_sign:{keywords:[\"stop\"],char:\"\\u{1f6d1}\",fitzpatrick_scale:!1,category:\"symbols\"},anger:{keywords:[\"angry\",\"mad\"],char:\"\\u{1f4a2}\",fitzpatrick_scale:!1,category:\"symbols\"},hotsprings:{keywords:[\"bath\",\"warm\",\"relax\"],char:\"\\u2668\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},no_pedestrians:{keywords:[\"rules\",\"crossing\",\"walking\",\"circle\"],char:\"\\u{1f6b7}\",fitzpatrick_scale:!1,category:\"symbols\"},do_not_litter:{keywords:[\"trash\",\"bin\",\"garbage\",\"circle\"],char:\"\\u{1f6af}\",fitzpatrick_scale:!1,category:\"symbols\"},no_bicycles:{keywords:[\"cyclist\",\"prohibited\",\"circle\"],char:\"\\u{1f6b3}\",fitzpatrick_scale:!1,category:\"symbols\"},\"non-potable_water\":{keywords:[\"drink\",\"faucet\",\"tap\",\"circle\"],char:\"\\u{1f6b1}\",fitzpatrick_scale:!1,category:\"symbols\"},underage:{keywords:[\"18\",\"drink\",\"pub\",\"night\",\"minor\",\"circle\"],char:\"\\u{1f51e}\",fitzpatrick_scale:!1,category:\"symbols\"},no_mobile_phones:{keywords:[\"iphone\",\"mute\",\"circle\"],char:\"\\u{1f4f5}\",fitzpatrick_scale:!1,category:\"symbols\"},exclamation:{keywords:[\"heavy_exclamation_mark\",\"danger\",\"surprise\",\"punctuation\",\"wow\",\"warning\"],char:\"\\u2757\",fitzpatrick_scale:!1,category:\"symbols\"},grey_exclamation:{keywords:[\"surprise\",\"punctuation\",\"gray\",\"wow\",\"warning\"],char:\"\\u2755\",fitzpatrick_scale:!1,category:\"symbols\"},question:{keywords:[\"doubt\",\"confused\"],char:\"\\u2753\",fitzpatrick_scale:!1,category:\"symbols\"},grey_question:{keywords:[\"doubts\",\"gray\",\"huh\",\"confused\"],char:\"\\u2754\",fitzpatrick_scale:!1,category:\"symbols\"},bangbang:{keywords:[\"exclamation\",\"surprise\"],char:\"\\u203c\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},interrobang:{keywords:[\"wat\",\"punctuation\",\"surprise\"],char:\"\\u2049\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},100:{keywords:[\"score\",\"perfect\",\"numbers\",\"century\",\"exam\",\"quiz\",\"test\",\"pass\",\"hundred\"],char:\"\\u{1f4af}\",fitzpatrick_scale:!1,category:\"symbols\"},low_brightness:{keywords:[\"sun\",\"afternoon\",\"warm\",\"summer\"],char:\"\\u{1f505}\",fitzpatrick_scale:!1,category:\"symbols\"},high_brightness:{keywords:[\"sun\",\"light\"],char:\"\\u{1f506}\",fitzpatrick_scale:!1,category:\"symbols\"},trident:{keywords:[\"weapon\",\"spear\"],char:\"\\u{1f531}\",fitzpatrick_scale:!1,category:\"symbols\"},fleur_de_lis:{keywords:[\"decorative\",\"scout\"],char:\"\\u269c\",fitzpatrick_scale:!1,category:\"symbols\"},part_alternation_mark:{keywords:[\"graph\",\"presentation\",\"stats\",\"business\",\"economics\",\"bad\"],char:\"\\u303d\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},warning:{keywords:[\"exclamation\",\"wip\",\"alert\",\"error\",\"problem\",\"issue\"],char:\"\\u26a0\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},children_crossing:{keywords:[\"school\",\"warning\",\"danger\",\"sign\",\"driving\",\"yellow-diamond\"],char:\"\\u{1f6b8}\",fitzpatrick_scale:!1,category:\"symbols\"},beginner:{keywords:[\"badge\",\"shield\"],char:\"\\u{1f530}\",fitzpatrick_scale:!1,category:\"symbols\"},recycle:{keywords:[\"arrow\",\"environment\",\"garbage\",\"trash\"],char:\"\\u267b\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},u6307:{keywords:[\"chinese\",\"point\",\"green-square\",\"kanji\"],char:\"\\u{1f22f}\",fitzpatrick_scale:!1,category:\"symbols\"},chart:{keywords:[\"green-square\",\"graph\",\"presentation\",\"stats\"],char:\"\\u{1f4b9}\",fitzpatrick_scale:!1,category:\"symbols\"},sparkle:{keywords:[\"stars\",\"green-square\",\"awesome\",\"good\",\"fireworks\"],char:\"\\u2747\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},eight_spoked_asterisk:{keywords:[\"star\",\"sparkle\",\"green-square\"],char:\"\\u2733\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},negative_squared_cross_mark:{keywords:[\"x\",\"green-square\",\"no\",\"deny\"],char:\"\\u274e\",fitzpatrick_scale:!1,category:\"symbols\"},white_check_mark:{keywords:[\"green-square\",\"ok\",\"agree\",\"vote\",\"election\",\"answer\",\"tick\"],char:\"\\u2705\",fitzpatrick_scale:!1,category:\"symbols\"},diamond_shape_with_a_dot_inside:{keywords:[\"jewel\",\"blue\",\"gem\",\"crystal\",\"fancy\"],char:\"\\u{1f4a0}\",fitzpatrick_scale:!1,category:\"symbols\"},cyclone:{keywords:[\"weather\",\"swirl\",\"blue\",\"cloud\",\"vortex\",\"spiral\",\"whirlpool\",\"spin\",\"tornado\",\"hurricane\",\"typhoon\"],char:\"\\u{1f300}\",fitzpatrick_scale:!1,category:\"symbols\"},loop:{keywords:[\"tape\",\"cassette\"],char:\"\\u27bf\",fitzpatrick_scale:!1,category:\"symbols\"},globe_with_meridians:{keywords:[\"earth\",\"international\",\"world\",\"internet\",\"interweb\",\"i18n\"],char:\"\\u{1f310}\",fitzpatrick_scale:!1,category:\"symbols\"},m:{keywords:[\"alphabet\",\"blue-circle\",\"letter\"],char:\"\\u24c2\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},atm:{keywords:[\"money\",\"sales\",\"cash\",\"blue-square\",\"payment\",\"bank\"],char:\"\\u{1f3e7}\",fitzpatrick_scale:!1,category:\"symbols\"},sa:{keywords:[\"japanese\",\"blue-square\",\"katakana\"],char:\"\\u{1f202}\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},passport_control:{keywords:[\"custom\",\"blue-square\"],char:\"\\u{1f6c2}\",fitzpatrick_scale:!1,category:\"symbols\"},customs:{keywords:[\"passport\",\"border\",\"blue-square\"],char:\"\\u{1f6c3}\",fitzpatrick_scale:!1,category:\"symbols\"},baggage_claim:{keywords:[\"blue-square\",\"airport\",\"transport\"],char:\"\\u{1f6c4}\",fitzpatrick_scale:!1,category:\"symbols\"},left_luggage:{keywords:[\"blue-square\",\"travel\"],char:\"\\u{1f6c5}\",fitzpatrick_scale:!1,category:\"symbols\"},wheelchair:{keywords:[\"blue-square\",\"disabled\",\"a11y\",\"accessibility\"],char:\"\\u267f\",fitzpatrick_scale:!1,category:\"symbols\"},no_smoking:{keywords:[\"cigarette\",\"blue-square\",\"smell\",\"smoke\"],char:\"\\u{1f6ad}\",fitzpatrick_scale:!1,category:\"symbols\"},wc:{keywords:[\"toilet\",\"restroom\",\"blue-square\"],char:\"\\u{1f6be}\",fitzpatrick_scale:!1,category:\"symbols\"},parking:{keywords:[\"cars\",\"blue-square\",\"alphabet\",\"letter\"],char:\"\\u{1f17f}\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},potable_water:{keywords:[\"blue-square\",\"liquid\",\"restroom\",\"cleaning\",\"faucet\"],char:\"\\u{1f6b0}\",fitzpatrick_scale:!1,category:\"symbols\"},mens:{keywords:[\"toilet\",\"restroom\",\"wc\",\"blue-square\",\"gender\",\"male\"],char:\"\\u{1f6b9}\",fitzpatrick_scale:!1,category:\"symbols\"},womens:{keywords:[\"purple-square\",\"woman\",\"female\",\"toilet\",\"loo\",\"restroom\",\"gender\"],char:\"\\u{1f6ba}\",fitzpatrick_scale:!1,category:\"symbols\"},baby_symbol:{keywords:[\"orange-square\",\"child\"],char:\"\\u{1f6bc}\",fitzpatrick_scale:!1,category:\"symbols\"},restroom:{keywords:[\"blue-square\",\"toilet\",\"refresh\",\"wc\",\"gender\"],char:\"\\u{1f6bb}\",fitzpatrick_scale:!1,category:\"symbols\"},put_litter_in_its_place:{keywords:[\"blue-square\",\"sign\",\"human\",\"info\"],char:\"\\u{1f6ae}\",fitzpatrick_scale:!1,category:\"symbols\"},cinema:{keywords:[\"blue-square\",\"record\",\"film\",\"movie\",\"curtain\",\"stage\",\"theater\"],char:\"\\u{1f3a6}\",fitzpatrick_scale:!1,category:\"symbols\"},signal_strength:{keywords:[\"blue-square\",\"reception\",\"phone\",\"internet\",\"connection\",\"wifi\",\"bluetooth\",\"bars\"],char:\"\\u{1f4f6}\",fitzpatrick_scale:!1,category:\"symbols\"},koko:{keywords:[\"blue-square\",\"here\",\"katakana\",\"japanese\",\"destination\"],char:\"\\u{1f201}\",fitzpatrick_scale:!1,category:\"symbols\"},ng:{keywords:[\"blue-square\",\"words\",\"shape\",\"icon\"],char:\"\\u{1f196}\",fitzpatrick_scale:!1,category:\"symbols\"},ok:{keywords:[\"good\",\"agree\",\"yes\",\"blue-square\"],char:\"\\u{1f197}\",fitzpatrick_scale:!1,category:\"symbols\"},up:{keywords:[\"blue-square\",\"above\",\"high\"],char:\"\\u{1f199}\",fitzpatrick_scale:!1,category:\"symbols\"},cool:{keywords:[\"words\",\"blue-square\"],char:\"\\u{1f192}\",fitzpatrick_scale:!1,category:\"symbols\"},new:{keywords:[\"blue-square\",\"words\",\"start\"],char:\"\\u{1f195}\",fitzpatrick_scale:!1,category:\"symbols\"},free:{keywords:[\"blue-square\",\"words\"],char:\"\\u{1f193}\",fitzpatrick_scale:!1,category:\"symbols\"},zero:{keywords:[\"0\",\"numbers\",\"blue-square\",\"null\"],char:\"0\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},one:{keywords:[\"blue-square\",\"numbers\",\"1\"],char:\"1\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},two:{keywords:[\"numbers\",\"2\",\"prime\",\"blue-square\"],char:\"2\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},three:{keywords:[\"3\",\"numbers\",\"prime\",\"blue-square\"],char:\"3\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},four:{keywords:[\"4\",\"numbers\",\"blue-square\"],char:\"4\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},five:{keywords:[\"5\",\"numbers\",\"blue-square\",\"prime\"],char:\"5\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},six:{keywords:[\"6\",\"numbers\",\"blue-square\"],char:\"6\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},seven:{keywords:[\"7\",\"numbers\",\"blue-square\",\"prime\"],char:\"7\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},eight:{keywords:[\"8\",\"blue-square\",\"numbers\"],char:\"8\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},nine:{keywords:[\"blue-square\",\"numbers\",\"9\"],char:\"9\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},keycap_ten:{keywords:[\"numbers\",\"10\",\"blue-square\"],char:\"\\u{1f51f}\",fitzpatrick_scale:!1,category:\"symbols\"},asterisk:{keywords:[\"star\",\"keycap\"],char:\"*\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},1234:{keywords:[\"numbers\",\"blue-square\"],char:\"\\u{1f522}\",fitzpatrick_scale:!1,category:\"symbols\"},eject_button:{keywords:[\"blue-square\"],char:\"\\u23cf\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_forward:{keywords:[\"blue-square\",\"right\",\"direction\",\"play\"],char:\"\\u25b6\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},pause_button:{keywords:[\"pause\",\"blue-square\"],char:\"\\u23f8\",fitzpatrick_scale:!1,category:\"symbols\"},next_track_button:{keywords:[\"forward\",\"next\",\"blue-square\"],char:\"\\u23ed\",fitzpatrick_scale:!1,category:\"symbols\"},stop_button:{keywords:[\"blue-square\"],char:\"\\u23f9\",fitzpatrick_scale:!1,category:\"symbols\"},record_button:{keywords:[\"blue-square\"],char:\"\\u23fa\",fitzpatrick_scale:!1,category:\"symbols\"},play_or_pause_button:{keywords:[\"blue-square\",\"play\",\"pause\"],char:\"\\u23ef\",fitzpatrick_scale:!1,category:\"symbols\"},previous_track_button:{keywords:[\"backward\"],char:\"\\u23ee\",fitzpatrick_scale:!1,category:\"symbols\"},fast_forward:{keywords:[\"blue-square\",\"play\",\"speed\",\"continue\"],char:\"\\u23e9\",fitzpatrick_scale:!1,category:\"symbols\"},rewind:{keywords:[\"play\",\"blue-square\"],char:\"\\u23ea\",fitzpatrick_scale:!1,category:\"symbols\"},twisted_rightwards_arrows:{keywords:[\"blue-square\",\"shuffle\",\"music\",\"random\"],char:\"\\u{1f500}\",fitzpatrick_scale:!1,category:\"symbols\"},repeat:{keywords:[\"loop\",\"record\"],char:\"\\u{1f501}\",fitzpatrick_scale:!1,category:\"symbols\"},repeat_one:{keywords:[\"blue-square\",\"loop\"],char:\"\\u{1f502}\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_backward:{keywords:[\"blue-square\",\"left\",\"direction\"],char:\"\\u25c0\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_up_small:{keywords:[\"blue-square\",\"triangle\",\"direction\",\"point\",\"forward\",\"top\"],char:\"\\u{1f53c}\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_down_small:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"\\u{1f53d}\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_double_up:{keywords:[\"blue-square\",\"direction\",\"top\"],char:\"\\u23eb\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_double_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"\\u23ec\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_right:{keywords:[\"blue-square\",\"next\"],char:\"\\u27a1\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_left:{keywords:[\"blue-square\",\"previous\",\"back\"],char:\"\\u2b05\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_up:{keywords:[\"blue-square\",\"continue\",\"top\",\"direction\"],char:\"\\u2b06\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"\\u2b07\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_upper_right:{keywords:[\"blue-square\",\"point\",\"direction\",\"diagonal\",\"northeast\"],char:\"\\u2197\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_lower_right:{keywords:[\"blue-square\",\"direction\",\"diagonal\",\"southeast\"],char:\"\\u2198\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_lower_left:{keywords:[\"blue-square\",\"direction\",\"diagonal\",\"southwest\"],char:\"\\u2199\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_upper_left:{keywords:[\"blue-square\",\"point\",\"direction\",\"diagonal\",\"northwest\"],char:\"\\u2196\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_up_down:{keywords:[\"blue-square\",\"direction\",\"way\",\"vertical\"],char:\"\\u2195\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},left_right_arrow:{keywords:[\"shape\",\"direction\",\"horizontal\",\"sideways\"],char:\"\\u2194\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrows_counterclockwise:{keywords:[\"blue-square\",\"sync\",\"cycle\"],char:\"\\u{1f504}\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_right_hook:{keywords:[\"blue-square\",\"return\",\"rotate\",\"direction\"],char:\"\\u21aa\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},leftwards_arrow_with_hook:{keywords:[\"back\",\"return\",\"blue-square\",\"undo\",\"enter\"],char:\"\\u21a9\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_heading_up:{keywords:[\"blue-square\",\"direction\",\"top\"],char:\"\\u2934\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrow_heading_down:{keywords:[\"blue-square\",\"direction\",\"bottom\"],char:\"\\u2935\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},hash:{keywords:[\"symbol\",\"blue-square\",\"twitter\"],char:\"#\\ufe0f\\u20e3\",fitzpatrick_scale:!1,category:\"symbols\"},information_source:{keywords:[\"blue-square\",\"alphabet\",\"letter\"],char:\"\\u2139\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},abc:{keywords:[\"blue-square\",\"alphabet\"],char:\"\\u{1f524}\",fitzpatrick_scale:!1,category:\"symbols\"},abcd:{keywords:[\"blue-square\",\"alphabet\"],char:\"\\u{1f521}\",fitzpatrick_scale:!1,category:\"symbols\"},capital_abcd:{keywords:[\"alphabet\",\"words\",\"blue-square\"],char:\"\\u{1f520}\",fitzpatrick_scale:!1,category:\"symbols\"},symbols:{keywords:[\"blue-square\",\"music\",\"note\",\"ampersand\",\"percent\",\"glyphs\",\"characters\"],char:\"\\u{1f523}\",fitzpatrick_scale:!1,category:\"symbols\"},musical_note:{keywords:[\"score\",\"tone\",\"sound\"],char:\"\\u{1f3b5}\",fitzpatrick_scale:!1,category:\"symbols\"},notes:{keywords:[\"music\",\"score\"],char:\"\\u{1f3b6}\",fitzpatrick_scale:!1,category:\"symbols\"},wavy_dash:{keywords:[\"draw\",\"line\",\"moustache\",\"mustache\",\"squiggle\",\"scribble\"],char:\"\\u3030\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},curly_loop:{keywords:[\"scribble\",\"draw\",\"shape\",\"squiggle\"],char:\"\\u27b0\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_check_mark:{keywords:[\"ok\",\"nike\",\"answer\",\"yes\",\"tick\"],char:\"\\u2714\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},arrows_clockwise:{keywords:[\"sync\",\"cycle\",\"round\",\"repeat\"],char:\"\\u{1f503}\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_plus_sign:{keywords:[\"math\",\"calculation\",\"addition\",\"more\",\"increase\"],char:\"\\u2795\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_minus_sign:{keywords:[\"math\",\"calculation\",\"subtract\",\"less\"],char:\"\\u2796\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_division_sign:{keywords:[\"divide\",\"math\",\"calculation\"],char:\"\\u2797\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_multiplication_x:{keywords:[\"math\",\"calculation\"],char:\"\\u2716\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},infinity:{keywords:[\"forever\"],char:\"\\u267e\",fitzpatrick_scale:!1,category:\"symbols\"},heavy_dollar_sign:{keywords:[\"money\",\"sales\",\"payment\",\"currency\",\"buck\"],char:\"\\u{1f4b2}\",fitzpatrick_scale:!1,category:\"symbols\"},currency_exchange:{keywords:[\"money\",\"sales\",\"dollar\",\"travel\"],char:\"\\u{1f4b1}\",fitzpatrick_scale:!1,category:\"symbols\"},copyright:{keywords:[\"ip\",\"license\",\"circle\",\"law\",\"legal\"],char:\"\\xa9\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},registered:{keywords:[\"alphabet\",\"circle\"],char:\"\\xae\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},tm:{keywords:[\"trademark\",\"brand\",\"law\",\"legal\"],char:\"\\u2122\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},end:{keywords:[\"words\",\"arrow\"],char:\"\\u{1f51a}\",fitzpatrick_scale:!1,category:\"symbols\"},back:{keywords:[\"arrow\",\"words\",\"return\"],char:\"\\u{1f519}\",fitzpatrick_scale:!1,category:\"symbols\"},on:{keywords:[\"arrow\",\"words\"],char:\"\\u{1f51b}\",fitzpatrick_scale:!1,category:\"symbols\"},top:{keywords:[\"words\",\"blue-square\"],char:\"\\u{1f51d}\",fitzpatrick_scale:!1,category:\"symbols\"},soon:{keywords:[\"arrow\",\"words\"],char:\"\\u{1f51c}\",fitzpatrick_scale:!1,category:\"symbols\"},ballot_box_with_check:{keywords:[\"ok\",\"agree\",\"confirm\",\"black-square\",\"vote\",\"election\",\"yes\",\"tick\"],char:\"\\u2611\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},radio_button:{keywords:[\"input\",\"old\",\"music\",\"circle\"],char:\"\\u{1f518}\",fitzpatrick_scale:!1,category:\"symbols\"},white_circle:{keywords:[\"shape\",\"round\"],char:\"\\u26aa\",fitzpatrick_scale:!1,category:\"symbols\"},black_circle:{keywords:[\"shape\",\"button\",\"round\"],char:\"\\u26ab\",fitzpatrick_scale:!1,category:\"symbols\"},red_circle:{keywords:[\"shape\",\"error\",\"danger\"],char:\"\\u{1f534}\",fitzpatrick_scale:!1,category:\"symbols\"},large_blue_circle:{keywords:[\"shape\",\"icon\",\"button\"],char:\"\\u{1f535}\",fitzpatrick_scale:!1,category:\"symbols\"},small_orange_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"\\u{1f538}\",fitzpatrick_scale:!1,category:\"symbols\"},small_blue_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"\\u{1f539}\",fitzpatrick_scale:!1,category:\"symbols\"},large_orange_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"\\u{1f536}\",fitzpatrick_scale:!1,category:\"symbols\"},large_blue_diamond:{keywords:[\"shape\",\"jewel\",\"gem\"],char:\"\\u{1f537}\",fitzpatrick_scale:!1,category:\"symbols\"},small_red_triangle:{keywords:[\"shape\",\"direction\",\"up\",\"top\"],char:\"\\u{1f53a}\",fitzpatrick_scale:!1,category:\"symbols\"},black_small_square:{keywords:[\"shape\",\"icon\"],char:\"\\u25aa\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},white_small_square:{keywords:[\"shape\",\"icon\"],char:\"\\u25ab\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},black_large_square:{keywords:[\"shape\",\"icon\",\"button\"],char:\"\\u2b1b\",fitzpatrick_scale:!1,category:\"symbols\"},white_large_square:{keywords:[\"shape\",\"icon\",\"stone\",\"button\"],char:\"\\u2b1c\",fitzpatrick_scale:!1,category:\"symbols\"},small_red_triangle_down:{keywords:[\"shape\",\"direction\",\"bottom\"],char:\"\\u{1f53b}\",fitzpatrick_scale:!1,category:\"symbols\"},black_medium_square:{keywords:[\"shape\",\"button\",\"icon\"],char:\"\\u25fc\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},white_medium_square:{keywords:[\"shape\",\"stone\",\"icon\"],char:\"\\u25fb\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},black_medium_small_square:{keywords:[\"icon\",\"shape\",\"button\"],char:\"\\u25fe\",fitzpatrick_scale:!1,category:\"symbols\"},white_medium_small_square:{keywords:[\"shape\",\"stone\",\"icon\",\"button\"],char:\"\\u25fd\",fitzpatrick_scale:!1,category:\"symbols\"},black_square_button:{keywords:[\"shape\",\"input\",\"frame\"],char:\"\\u{1f532}\",fitzpatrick_scale:!1,category:\"symbols\"},white_square_button:{keywords:[\"shape\",\"input\"],char:\"\\u{1f533}\",fitzpatrick_scale:!1,category:\"symbols\"},speaker:{keywords:[\"sound\",\"volume\",\"silence\",\"broadcast\"],char:\"\\u{1f508}\",fitzpatrick_scale:!1,category:\"symbols\"},sound:{keywords:[\"volume\",\"speaker\",\"broadcast\"],char:\"\\u{1f509}\",fitzpatrick_scale:!1,category:\"symbols\"},loud_sound:{keywords:[\"volume\",\"noise\",\"noisy\",\"speaker\",\"broadcast\"],char:\"\\u{1f50a}\",fitzpatrick_scale:!1,category:\"symbols\"},mute:{keywords:[\"sound\",\"volume\",\"silence\",\"quiet\"],char:\"\\u{1f507}\",fitzpatrick_scale:!1,category:\"symbols\"},mega:{keywords:[\"sound\",\"speaker\",\"volume\"],char:\"\\u{1f4e3}\",fitzpatrick_scale:!1,category:\"symbols\"},loudspeaker:{keywords:[\"volume\",\"sound\"],char:\"\\u{1f4e2}\",fitzpatrick_scale:!1,category:\"symbols\"},bell:{keywords:[\"sound\",\"notification\",\"christmas\",\"xmas\",\"chime\"],char:\"\\u{1f514}\",fitzpatrick_scale:!1,category:\"symbols\"},no_bell:{keywords:[\"sound\",\"volume\",\"mute\",\"quiet\",\"silent\"],char:\"\\u{1f515}\",fitzpatrick_scale:!1,category:\"symbols\"},black_joker:{keywords:[\"poker\",\"cards\",\"game\",\"play\",\"magic\"],char:\"\\u{1f0cf}\",fitzpatrick_scale:!1,category:\"symbols\"},mahjong:{keywords:[\"game\",\"play\",\"chinese\",\"kanji\"],char:\"\\u{1f004}\",fitzpatrick_scale:!1,category:\"symbols\"},spades:{keywords:[\"poker\",\"cards\",\"suits\",\"magic\"],char:\"\\u2660\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},clubs:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:\"\\u2663\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},hearts:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:\"\\u2665\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},diamonds:{keywords:[\"poker\",\"cards\",\"magic\",\"suits\"],char:\"\\u2666\\ufe0f\",fitzpatrick_scale:!1,category:\"symbols\"},flower_playing_cards:{keywords:[\"game\",\"sunset\",\"red\"],char:\"\\u{1f3b4}\",fitzpatrick_scale:!1,category:\"symbols\"},thought_balloon:{keywords:[\"bubble\",\"cloud\",\"speech\",\"thinking\",\"dream\"],char:\"\\u{1f4ad}\",fitzpatrick_scale:!1,category:\"symbols\"},right_anger_bubble:{keywords:[\"caption\",\"speech\",\"thinking\",\"mad\"],char:\"\\u{1f5ef}\",fitzpatrick_scale:!1,category:\"symbols\"},speech_balloon:{keywords:[\"bubble\",\"words\",\"message\",\"talk\",\"chatting\"],char:\"\\u{1f4ac}\",fitzpatrick_scale:!1,category:\"symbols\"},left_speech_bubble:{keywords:[\"words\",\"message\",\"talk\",\"chatting\"],char:\"\\u{1f5e8}\",fitzpatrick_scale:!1,category:\"symbols\"},clock1:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f550}\",fitzpatrick_scale:!1,category:\"symbols\"},clock2:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f551}\",fitzpatrick_scale:!1,category:\"symbols\"},clock3:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f552}\",fitzpatrick_scale:!1,category:\"symbols\"},clock4:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f553}\",fitzpatrick_scale:!1,category:\"symbols\"},clock5:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f554}\",fitzpatrick_scale:!1,category:\"symbols\"},clock6:{keywords:[\"time\",\"late\",\"early\",\"schedule\",\"dawn\",\"dusk\"],char:\"\\u{1f555}\",fitzpatrick_scale:!1,category:\"symbols\"},clock7:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f556}\",fitzpatrick_scale:!1,category:\"symbols\"},clock8:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f557}\",fitzpatrick_scale:!1,category:\"symbols\"},clock9:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f558}\",fitzpatrick_scale:!1,category:\"symbols\"},clock10:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f559}\",fitzpatrick_scale:!1,category:\"symbols\"},clock11:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f55a}\",fitzpatrick_scale:!1,category:\"symbols\"},clock12:{keywords:[\"time\",\"noon\",\"midnight\",\"midday\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f55b}\",fitzpatrick_scale:!1,category:\"symbols\"},clock130:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f55c}\",fitzpatrick_scale:!1,category:\"symbols\"},clock230:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f55d}\",fitzpatrick_scale:!1,category:\"symbols\"},clock330:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f55e}\",fitzpatrick_scale:!1,category:\"symbols\"},clock430:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f55f}\",fitzpatrick_scale:!1,category:\"symbols\"},clock530:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f560}\",fitzpatrick_scale:!1,category:\"symbols\"},clock630:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f561}\",fitzpatrick_scale:!1,category:\"symbols\"},clock730:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f562}\",fitzpatrick_scale:!1,category:\"symbols\"},clock830:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f563}\",fitzpatrick_scale:!1,category:\"symbols\"},clock930:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f564}\",fitzpatrick_scale:!1,category:\"symbols\"},clock1030:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f565}\",fitzpatrick_scale:!1,category:\"symbols\"},clock1130:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f566}\",fitzpatrick_scale:!1,category:\"symbols\"},clock1230:{keywords:[\"time\",\"late\",\"early\",\"schedule\"],char:\"\\u{1f567}\",fitzpatrick_scale:!1,category:\"symbols\"},afghanistan:{keywords:[\"af\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},aland_islands:{keywords:[\"\\xc5land\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1fd}\",fitzpatrick_scale:!1,category:\"flags\"},albania:{keywords:[\"al\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},algeria:{keywords:[\"dz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e9}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},american_samoa:{keywords:[\"american\",\"ws\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},andorra:{keywords:[\"ad\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},angola:{keywords:[\"ao\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},anguilla:{keywords:[\"ai\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},antarctica:{keywords:[\"aq\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f6}\",fitzpatrick_scale:!1,category:\"flags\"},antigua_barbuda:{keywords:[\"antigua\",\"barbuda\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},argentina:{keywords:[\"ar\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},armenia:{keywords:[\"am\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},aruba:{keywords:[\"aw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},australia:{keywords:[\"au\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},austria:{keywords:[\"at\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},azerbaijan:{keywords:[\"az\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},bahamas:{keywords:[\"bs\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},bahrain:{keywords:[\"bh\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},bangladesh:{keywords:[\"bd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},barbados:{keywords:[\"bb\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1e7}\",fitzpatrick_scale:!1,category:\"flags\"},belarus:{keywords:[\"by\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},belgium:{keywords:[\"be\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},belize:{keywords:[\"bz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},benin:{keywords:[\"bj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1ef}\",fitzpatrick_scale:!1,category:\"flags\"},bermuda:{keywords:[\"bm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},bhutan:{keywords:[\"bt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},bolivia:{keywords:[\"bo\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},caribbean_netherlands:{keywords:[\"bonaire\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f6}\",fitzpatrick_scale:!1,category:\"flags\"},bosnia_herzegovina:{keywords:[\"bosnia\",\"herzegovina\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},botswana:{keywords:[\"bw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},brazil:{keywords:[\"br\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},british_indian_ocean_territory:{keywords:[\"british\",\"indian\",\"ocean\",\"territory\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},british_virgin_islands:{keywords:[\"british\",\"virgin\",\"islands\",\"bvi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},brunei:{keywords:[\"bn\",\"darussalam\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},bulgaria:{keywords:[\"bg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},burkina_faso:{keywords:[\"burkina\",\"faso\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},burundi:{keywords:[\"bi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},cape_verde:{keywords:[\"cabo\",\"verde\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1fb}\",fitzpatrick_scale:!1,category:\"flags\"},cambodia:{keywords:[\"kh\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},cameroon:{keywords:[\"cm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},canada:{keywords:[\"ca\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},canary_islands:{keywords:[\"canary\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},cayman_islands:{keywords:[\"cayman\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},central_african_republic:{keywords:[\"central\",\"african\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},chad:{keywords:[\"td\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},chile:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},cn:{keywords:[\"china\",\"chinese\",\"prc\",\"flag\",\"country\",\"nation\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},christmas_island:{keywords:[\"christmas\",\"island\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1fd}\",fitzpatrick_scale:!1,category:\"flags\"},cocos_islands:{keywords:[\"cocos\",\"keeling\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},colombia:{keywords:[\"co\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},comoros:{keywords:[\"km\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},congo_brazzaville:{keywords:[\"congo\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},congo_kinshasa:{keywords:[\"congo\",\"democratic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},cook_islands:{keywords:[\"cook\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},costa_rica:{keywords:[\"costa\",\"rica\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},croatia:{keywords:[\"hr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ed}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},cuba:{keywords:[\"cu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},curacao:{keywords:[\"cura\\xe7ao\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},cyprus:{keywords:[\"cy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},czech_republic:{keywords:[\"cz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},denmark:{keywords:[\"dk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e9}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},djibouti:{keywords:[\"dj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e9}\\u{1f1ef}\",fitzpatrick_scale:!1,category:\"flags\"},dominica:{keywords:[\"dm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e9}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},dominican_republic:{keywords:[\"dominican\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e9}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},ecuador:{keywords:[\"ec\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},egypt:{keywords:[\"eg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},el_salvador:{keywords:[\"el\",\"salvador\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1fb}\",fitzpatrick_scale:!1,category:\"flags\"},equatorial_guinea:{keywords:[\"equatorial\",\"gn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f6}\",fitzpatrick_scale:!1,category:\"flags\"},eritrea:{keywords:[\"er\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},estonia:{keywords:[\"ee\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},ethiopia:{keywords:[\"et\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},eu:{keywords:[\"european\",\"union\",\"flag\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},falkland_islands:{keywords:[\"falkland\",\"islands\",\"malvinas\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1eb}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},faroe_islands:{keywords:[\"faroe\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1eb}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},fiji:{keywords:[\"fj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1eb}\\u{1f1ef}\",fitzpatrick_scale:!1,category:\"flags\"},finland:{keywords:[\"fi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1eb}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},fr:{keywords:[\"banner\",\"flag\",\"nation\",\"france\",\"french\",\"country\"],char:\"\\u{1f1eb}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},french_guiana:{keywords:[\"french\",\"guiana\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},french_polynesia:{keywords:[\"french\",\"polynesia\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},french_southern_territories:{keywords:[\"french\",\"southern\",\"territories\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},gabon:{keywords:[\"ga\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},gambia:{keywords:[\"gm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},georgia:{keywords:[\"ge\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},de:{keywords:[\"german\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"\\u{1f1e9}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},ghana:{keywords:[\"gh\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},gibraltar:{keywords:[\"gi\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},greece:{keywords:[\"gr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},greenland:{keywords:[\"gl\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},grenada:{keywords:[\"gd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},guadeloupe:{keywords:[\"gp\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f5}\",fitzpatrick_scale:!1,category:\"flags\"},guam:{keywords:[\"gu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},guatemala:{keywords:[\"gt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},guernsey:{keywords:[\"gg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},guinea:{keywords:[\"gn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},guinea_bissau:{keywords:[\"gw\",\"bissau\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},guyana:{keywords:[\"gy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},haiti:{keywords:[\"ht\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ed}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},honduras:{keywords:[\"hn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ed}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},hong_kong:{keywords:[\"hong\",\"kong\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ed}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},hungary:{keywords:[\"hu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ed}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},iceland:{keywords:[\"is\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},india:{keywords:[\"in\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},indonesia:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},iran:{keywords:[\"iran,\",\"islamic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},iraq:{keywords:[\"iq\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f6}\",fitzpatrick_scale:!1,category:\"flags\"},ireland:{keywords:[\"ie\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},isle_of_man:{keywords:[\"isle\",\"man\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},israel:{keywords:[\"il\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},it:{keywords:[\"italy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ee}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},cote_divoire:{keywords:[\"ivory\",\"coast\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},jamaica:{keywords:[\"jm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ef}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},jp:{keywords:[\"japanese\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"\\u{1f1ef}\\u{1f1f5}\",fitzpatrick_scale:!1,category:\"flags\"},jersey:{keywords:[\"je\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ef}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},jordan:{keywords:[\"jo\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ef}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},kazakhstan:{keywords:[\"kz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},kenya:{keywords:[\"ke\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},kiribati:{keywords:[\"ki\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},kosovo:{keywords:[\"xk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fd}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},kuwait:{keywords:[\"kw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},kyrgyzstan:{keywords:[\"kg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},laos:{keywords:[\"lao\",\"democratic\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},latvia:{keywords:[\"lv\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1fb}\",fitzpatrick_scale:!1,category:\"flags\"},lebanon:{keywords:[\"lb\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1e7}\",fitzpatrick_scale:!1,category:\"flags\"},lesotho:{keywords:[\"ls\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},liberia:{keywords:[\"lr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},libya:{keywords:[\"ly\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},liechtenstein:{keywords:[\"li\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},lithuania:{keywords:[\"lt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},luxembourg:{keywords:[\"lu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},macau:{keywords:[\"macao\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},macedonia:{keywords:[\"macedonia,\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},madagascar:{keywords:[\"mg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},malawi:{keywords:[\"mw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},malaysia:{keywords:[\"my\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},maldives:{keywords:[\"mv\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1fb}\",fitzpatrick_scale:!1,category:\"flags\"},mali:{keywords:[\"ml\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},malta:{keywords:[\"mt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},marshall_islands:{keywords:[\"marshall\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},martinique:{keywords:[\"mq\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f6}\",fitzpatrick_scale:!1,category:\"flags\"},mauritania:{keywords:[\"mr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},mauritius:{keywords:[\"mu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},mayotte:{keywords:[\"yt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fe}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},mexico:{keywords:[\"mx\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1fd}\",fitzpatrick_scale:!1,category:\"flags\"},micronesia:{keywords:[\"micronesia,\",\"federated\",\"states\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1eb}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},moldova:{keywords:[\"moldova,\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},monaco:{keywords:[\"mc\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},mongolia:{keywords:[\"mn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},montenegro:{keywords:[\"me\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},montserrat:{keywords:[\"ms\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},morocco:{keywords:[\"ma\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},mozambique:{keywords:[\"mz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},myanmar:{keywords:[\"mm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},namibia:{keywords:[\"na\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},nauru:{keywords:[\"nr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},nepal:{keywords:[\"np\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1f5}\",fitzpatrick_scale:!1,category:\"flags\"},netherlands:{keywords:[\"nl\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},new_caledonia:{keywords:[\"new\",\"caledonia\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},new_zealand:{keywords:[\"new\",\"zealand\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},nicaragua:{keywords:[\"ni\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},niger:{keywords:[\"ne\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},nigeria:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},niue:{keywords:[\"nu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},norfolk_island:{keywords:[\"norfolk\",\"island\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},northern_mariana_islands:{keywords:[\"northern\",\"mariana\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f2}\\u{1f1f5}\",fitzpatrick_scale:!1,category:\"flags\"},north_korea:{keywords:[\"north\",\"korea\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1f5}\",fitzpatrick_scale:!1,category:\"flags\"},norway:{keywords:[\"no\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f3}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},oman:{keywords:[\"om_symbol\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f4}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},pakistan:{keywords:[\"pk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},palau:{keywords:[\"pw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},palestinian_territories:{keywords:[\"palestine\",\"palestinian\",\"territories\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},panama:{keywords:[\"pa\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},papua_new_guinea:{keywords:[\"papua\",\"new\",\"guinea\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},paraguay:{keywords:[\"py\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},peru:{keywords:[\"pe\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},philippines:{keywords:[\"ph\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},pitcairn_islands:{keywords:[\"pitcairn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},poland:{keywords:[\"pl\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},portugal:{keywords:[\"pt\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},puerto_rico:{keywords:[\"puerto\",\"rico\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},qatar:{keywords:[\"qa\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f6}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},reunion:{keywords:[\"r\\xe9union\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f7}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},romania:{keywords:[\"ro\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f7}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},ru:{keywords:[\"russian\",\"federation\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f7}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},rwanda:{keywords:[\"rw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f7}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},st_barthelemy:{keywords:[\"saint\",\"barth\\xe9lemy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e7}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},st_helena:{keywords:[\"saint\",\"helena\",\"ascension\",\"tristan\",\"cunha\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},st_kitts_nevis:{keywords:[\"saint\",\"kitts\",\"nevis\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},st_lucia:{keywords:[\"saint\",\"lucia\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},st_pierre_miquelon:{keywords:[\"saint\",\"pierre\",\"miquelon\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f5}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},st_vincent_grenadines:{keywords:[\"saint\",\"vincent\",\"grenadines\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},samoa:{keywords:[\"ws\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fc}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},san_marino:{keywords:[\"san\",\"marino\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},sao_tome_principe:{keywords:[\"sao\",\"tome\",\"principe\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},saudi_arabia:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},senegal:{keywords:[\"sn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},serbia:{keywords:[\"rs\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f7}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},seychelles:{keywords:[\"sc\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},sierra_leone:{keywords:[\"sierra\",\"leone\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},singapore:{keywords:[\"sg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},sint_maarten:{keywords:[\"sint\",\"maarten\",\"dutch\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1fd}\",fitzpatrick_scale:!1,category:\"flags\"},slovakia:{keywords:[\"sk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},slovenia:{keywords:[\"si\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},solomon_islands:{keywords:[\"solomon\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1e7}\",fitzpatrick_scale:!1,category:\"flags\"},somalia:{keywords:[\"so\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},south_africa:{keywords:[\"south\",\"africa\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ff}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},south_georgia_south_sandwich_islands:{keywords:[\"south\",\"georgia\",\"sandwich\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ec}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},kr:{keywords:[\"south\",\"korea\",\"nation\",\"flag\",\"country\",\"banner\"],char:\"\\u{1f1f0}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},south_sudan:{keywords:[\"south\",\"sd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},es:{keywords:[\"spain\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},sri_lanka:{keywords:[\"sri\",\"lanka\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f1}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},sudan:{keywords:[\"sd\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1e9}\",fitzpatrick_scale:!1,category:\"flags\"},suriname:{keywords:[\"sr\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},swaziland:{keywords:[\"sz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},sweden:{keywords:[\"se\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},switzerland:{keywords:[\"ch\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e8}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},syria:{keywords:[\"syrian\",\"arab\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f8}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},taiwan:{keywords:[\"tw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},tajikistan:{keywords:[\"tj\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1ef}\",fitzpatrick_scale:!1,category:\"flags\"},tanzania:{keywords:[\"tanzania,\",\"united\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},thailand:{keywords:[\"th\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},timor_leste:{keywords:[\"timor\",\"leste\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f1}\",fitzpatrick_scale:!1,category:\"flags\"},togo:{keywords:[\"tg\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},tokelau:{keywords:[\"tk\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f0}\",fitzpatrick_scale:!1,category:\"flags\"},tonga:{keywords:[\"to\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f4}\",fitzpatrick_scale:!1,category:\"flags\"},trinidad_tobago:{keywords:[\"trinidad\",\"tobago\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f9}\",fitzpatrick_scale:!1,category:\"flags\"},tunisia:{keywords:[\"tn\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},tr:{keywords:[\"turkey\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f7}\",fitzpatrick_scale:!1,category:\"flags\"},turkmenistan:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},turks_caicos_islands:{keywords:[\"turks\",\"caicos\",\"islands\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1e8}\",fitzpatrick_scale:!1,category:\"flags\"},tuvalu:{keywords:[\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1f9}\\u{1f1fb}\",fitzpatrick_scale:!1,category:\"flags\"},uganda:{keywords:[\"ug\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fa}\\u{1f1ec}\",fitzpatrick_scale:!1,category:\"flags\"},ukraine:{keywords:[\"ua\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fa}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},united_arab_emirates:{keywords:[\"united\",\"arab\",\"emirates\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1e6}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},uk:{keywords:[\"united\",\"kingdom\",\"great\",\"britain\",\"northern\",\"ireland\",\"flag\",\"nation\",\"country\",\"banner\",\"british\",\"UK\",\"english\",\"england\",\"union jack\"],char:\"\\u{1f1ec}\\u{1f1e7}\",fitzpatrick_scale:!1,category:\"flags\"},england:{keywords:[\"flag\",\"english\"],char:\"\\u{1f3f4}\\u{e0067}\\u{e0062}\\u{e0065}\\u{e006e}\\u{e0067}\\u{e007f}\",fitzpatrick_scale:!1,category:\"flags\"},scotland:{keywords:[\"flag\",\"scottish\"],char:\"\\u{1f3f4}\\u{e0067}\\u{e0062}\\u{e0073}\\u{e0063}\\u{e0074}\\u{e007f}\",fitzpatrick_scale:!1,category:\"flags\"},wales:{keywords:[\"flag\",\"welsh\"],char:\"\\u{1f3f4}\\u{e0067}\\u{e0062}\\u{e0077}\\u{e006c}\\u{e0073}\\u{e007f}\",fitzpatrick_scale:!1,category:\"flags\"},us:{keywords:[\"united\",\"states\",\"america\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fa}\\u{1f1f8}\",fitzpatrick_scale:!1,category:\"flags\"},us_virgin_islands:{keywords:[\"virgin\",\"islands\",\"us\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1ee}\",fitzpatrick_scale:!1,category:\"flags\"},uruguay:{keywords:[\"uy\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fa}\\u{1f1fe}\",fitzpatrick_scale:!1,category:\"flags\"},uzbekistan:{keywords:[\"uz\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fa}\\u{1f1ff}\",fitzpatrick_scale:!1,category:\"flags\"},vanuatu:{keywords:[\"vu\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1fa}\",fitzpatrick_scale:!1,category:\"flags\"},vatican_city:{keywords:[\"vatican\",\"city\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1e6}\",fitzpatrick_scale:!1,category:\"flags\"},venezuela:{keywords:[\"ve\",\"bolivarian\",\"republic\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},vietnam:{keywords:[\"viet\",\"nam\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fb}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},wallis_futuna:{keywords:[\"wallis\",\"futuna\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fc}\\u{1f1eb}\",fitzpatrick_scale:!1,category:\"flags\"},western_sahara:{keywords:[\"western\",\"sahara\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ea}\\u{1f1ed}\",fitzpatrick_scale:!1,category:\"flags\"},yemen:{keywords:[\"ye\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1fe}\\u{1f1ea}\",fitzpatrick_scale:!1,category:\"flags\"},zambia:{keywords:[\"zm\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ff}\\u{1f1f2}\",fitzpatrick_scale:!1,category:\"flags\"},zimbabwe:{keywords:[\"zw\",\"flag\",\"nation\",\"country\",\"banner\"],char:\"\\u{1f1ff}\\u{1f1fc}\",fitzpatrick_scale:!1,category:\"flags\"},united_nations:{keywords:[\"un\",\"flag\",\"banner\"],char:\"\\u{1f1fa}\\u{1f1f3}\",fitzpatrick_scale:!1,category:\"flags\"},pirate_flag:{keywords:[\"skull\",\"crossbones\",\"flag\",\"banner\"],char:\"\\u{1f3f4}\\u200d\\u2620\\ufe0f\",fitzpatrick_scale:!1,category:\"flags\"}});","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const get$5 = fullscreenState => ({ isFullscreen: () => fullscreenState.get() !== null });\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$1 = t => a => t === a;\n    const isString = isType$1('string');\n    const isArray = isType$1('array');\n    const isNull = eq$1(null);\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$1(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n\n    const noop = () => {\n    };\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const never = constant(false);\n    const always = constant(true);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const unbindable = () => singleton(s => s.unbind());\n    const value = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const first = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const nativePush = Array.prototype.push;\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const filter$1 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$1 = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind$3 = (xs, f) => flatten(map(xs, f));\n    const get$4 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$4(xs, 0);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    const keys = Object.keys;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n\n    const contains = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n\n    const isSupported$1 = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isElement = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n\n    const is = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all$1 = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n\n    const eq = (e1, e2) => e1.dom === e2.dom;\n\n    const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parents = (element, isRoot) => {\n      const stop = isFunction(isRoot) ? isRoot : never;\n      let dom = element.dom;\n      const ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        const rawParent = dom.parentNode;\n        const p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    const siblings$2 = element => {\n      const filterSelf = elements => filter$1(elements, x => !eq(element, x));\n      return parent(element).map(children).map(filterSelf).getOr([]);\n    };\n    const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const isSupported = constant(supported);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n    const getOriginalEventTarget = event => {\n      if (isSupported() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n    const getBody = doc => {\n      const b = doc.dom.body;\n      if (b === null || b === undefined) {\n        throw new Error('Body is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const get$3 = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const remove = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported$1(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const setAll = (element, css) => {\n      const dom = element.dom;\n      each(css, (v, k) => {\n        internalSet(dom, k, v);\n      });\n    };\n    const get$2 = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n\n    const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n      target,\n      x,\n      y,\n      stop,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent = rawEvent => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n    };\n    const handle = (filter, handler) => rawEvent => {\n      if (filter(rawEvent)) {\n        handler(fromRawEvent(rawEvent));\n      }\n    };\n    const binder = (element, event, filter, handler, useCapture) => {\n      const wrapped = handle(filter, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n\n    const filter = always;\n    const bind$1 = (element, event, handler) => bind$2(element, event, filter, handler);\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const DeviceType = (os, browser, userAgent, mediaMatch) => {\n      const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      const isiPhone = os.isiOS() && !isiPad;\n      const isMobile = os.isiOS() || os.isAndroid();\n      const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview),\n        isDesktop: constant(isDesktop)\n      };\n    };\n\n    const firstMatch = (regexes, s) => {\n      for (let i = 0; i < regexes.length; i++) {\n        const x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    const find = (regexes, agent) => {\n      const r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = i => {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$2(group(1), group(2));\n    };\n    const detect$3 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$2();\n      }\n      return find(versionRegexes, cleanedAgent);\n    };\n    const unknown$2 = () => {\n      return nu$2(0, 0);\n    };\n    const nu$2 = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$2,\n      detect: detect$3,\n      unknown: unknown$2\n    };\n\n    const detectBrowser$1 = (browsers, userAgentData) => {\n      return findMap(userAgentData.brands, uaBrand => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$1(browsers, browser => {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(info => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n\n    const detect$2 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$1(candidates, candidate => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers, userAgent) => {\n      return detect$2(browsers, userAgent).map(browser => {\n        const version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version\n        };\n      });\n    };\n    const detectOs = (oses, userAgent) => {\n      return detect$2(oses, userAgent).map(os => {\n        const version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version\n        };\n      });\n    };\n\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = target => {\n      return uastring => {\n        return contains(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: uastring => {\n          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chromium',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: uastring => {\n          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: uastring => {\n          return contains(uastring, 'msie') || contains(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: uastring => {\n          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: uastring => {\n          return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'macOS',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    const edge = 'Edge';\n    const chromium = 'Chromium';\n    const ie = 'IE';\n    const opera = 'Opera';\n    const firefox = 'Firefox';\n    const safari = 'Safari';\n    const unknown$1 = () => {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$1 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isBrowser = name => () => current === name;\n      return {\n        current,\n        version,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$1,\n      nu: nu$1,\n      edge: constant(edge),\n      chromium: constant(chromium),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    const windows = 'Windows';\n    const ios = 'iOS';\n    const android = 'Android';\n    const linux = 'Linux';\n    const macos = 'macOS';\n    const solaris = 'Solaris';\n    const freebsd = 'FreeBSD';\n    const chromeos = 'ChromeOS';\n    const unknown = () => {\n      return nu({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu = info => {\n      const current = info.current;\n      const version = info.version;\n      const isOS = name => () => current === name;\n      return {\n        current,\n        version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown,\n      nu,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      macos: constant(macos),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd),\n      chromeos: constant(chromeos)\n    };\n\n    const detect$1 = (userAgent, userAgentDataOpt, mediaMatch) => {\n      const browsers = PlatformInfo.browsers();\n      const oses = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$1 };\n\n    const mediaMatch = query => window.matchMedia(query).matches;\n    let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect = () => platform();\n\n    const r = (left, top) => {\n      const translate = (x, y) => r(left + x, top + y);\n      return {\n        left,\n        top,\n        translate\n      };\n    };\n    const SugarPosition = r;\n\n    const get$1 = _DOC => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n\n    const get = _win => {\n      const win = _win === undefined ? window : _win;\n      if (detect().browser.isFirefox()) {\n        return Optional.none();\n      } else {\n        return Optional.from(win.visualViewport);\n      }\n    };\n    const bounds = (x, y, width, height) => ({\n      x,\n      y,\n      width,\n      height,\n      right: x + width,\n      bottom: y + height\n    });\n    const getBounds = _win => {\n      const win = _win === undefined ? window : _win;\n      const doc = win.document;\n      const scroll = get$1(SugarElement.fromDom(doc));\n      return get(win).fold(() => {\n        const html = win.document.documentElement;\n        const width = html.clientWidth;\n        const height = html.clientHeight;\n        return bounds(scroll.left, scroll.top, width, height);\n      }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n    };\n    const bind = (name, callback, _win) => get(_win).map(visualViewport => {\n      const handler = e => callback(fromRawEvent(e));\n      visualViewport.addEventListener(name, handler);\n      return { unbind: () => visualViewport.removeEventListener(name, handler) };\n    }).getOrThunk(() => ({ unbind: noop }));\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n    const fireFullscreenStateChanged = (editor, state) => {\n      editor.dispatch('FullscreenStateChanged', { state });\n      editor.dispatch('ResizeEditor');\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('fullscreen_native', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const getFullscreenNative = option('fullscreen_native');\n\n    const getFullscreenRoot = editor => {\n      const elem = SugarElement.fromDom(editor.getElement());\n      return getShadowRoot(elem).map(getShadowHost).getOrThunk(() => getBody(owner(elem)));\n    };\n    const getFullscreenElement = root => {\n      if (root.fullscreenElement !== undefined) {\n        return root.fullscreenElement;\n      } else if (root.msFullscreenElement !== undefined) {\n        return root.msFullscreenElement;\n      } else if (root.webkitFullscreenElement !== undefined) {\n        return root.webkitFullscreenElement;\n      } else {\n        return null;\n      }\n    };\n    const getFullscreenchangeEventName = () => {\n      if (document.fullscreenElement !== undefined) {\n        return 'fullscreenchange';\n      } else if (document.msFullscreenElement !== undefined) {\n        return 'MSFullscreenChange';\n      } else if (document.webkitFullscreenElement !== undefined) {\n        return 'webkitfullscreenchange';\n      } else {\n        return 'fullscreenchange';\n      }\n    };\n    const requestFullscreen = sugarElem => {\n      const elem = sugarElem.dom;\n      if (elem.requestFullscreen) {\n        elem.requestFullscreen();\n      } else if (elem.msRequestFullscreen) {\n        elem.msRequestFullscreen();\n      } else if (elem.webkitRequestFullScreen) {\n        elem.webkitRequestFullScreen();\n      }\n    };\n    const exitFullscreen = sugarDoc => {\n      const doc = sugarDoc.dom;\n      if (doc.exitFullscreen) {\n        doc.exitFullscreen();\n      } else if (doc.msExitFullscreen) {\n        doc.msExitFullscreen();\n      } else if (doc.webkitCancelFullScreen) {\n        doc.webkitCancelFullScreen();\n      }\n    };\n    const isFullscreenElement = elem => elem.dom === getFullscreenElement(owner(elem).dom);\n\n    const ancestors$1 = (scope, predicate, isRoot) => filter$1(parents(scope, isRoot), predicate);\n    const siblings$1 = (scope, predicate) => filter$1(siblings$2(scope), predicate);\n\n    const all = selector => all$1(selector);\n    const ancestors = (scope, selector, isRoot) => ancestors$1(scope, e => is(e, selector), isRoot);\n    const siblings = (scope, selector) => siblings$1(scope, e => is(e, selector));\n\n    const attr = 'data-ephox-mobile-fullscreen-style';\n    const siblingStyles = 'display:none!important;';\n    const ancestorPosition = 'position:absolute!important;';\n    const ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;';\n    const bgFallback = 'background-color:rgb(255,255,255)!important;';\n    const isAndroid = global.os.isAndroid();\n    const matchColor = editorBody => {\n      const color = get$2(editorBody, 'background-color');\n      return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback;\n    };\n    const clobberStyles = (dom, container, editorBody) => {\n      const gatherSiblings = element => {\n        return siblings(element, '*:not(.tox-silver-sink)');\n      };\n      const clobber = clobberStyle => element => {\n        const styles = get$3(element, 'style');\n        const backup = styles === undefined ? 'no-styles' : styles.trim();\n        if (backup === clobberStyle) {\n          return;\n        } else {\n          set(element, attr, backup);\n          setAll(element, dom.parseStyle(clobberStyle));\n        }\n      };\n      const ancestors$1 = ancestors(container, '*');\n      const siblings$1 = bind$3(ancestors$1, gatherSiblings);\n      const bgColor = matchColor(editorBody);\n      each$1(siblings$1, clobber(siblingStyles));\n      each$1(ancestors$1, clobber(ancestorPosition + ancestorStyles + bgColor));\n      const containerStyles = isAndroid === true ? '' : ancestorPosition;\n      clobber(containerStyles + ancestorStyles + bgColor)(container);\n    };\n    const restoreStyles = dom => {\n      const clobberedEls = all('[' + attr + ']');\n      each$1(clobberedEls, element => {\n        const restore = get$3(element, attr);\n        if (restore && restore !== 'no-styles') {\n          setAll(element, dom.parseStyle(restore));\n        } else {\n          remove(element, 'style');\n        }\n        remove(element, attr);\n      });\n    };\n\n    const DOM = global$1.DOM;\n    const getScrollPos = () => getBounds(window);\n    const setScrollPos = pos => window.scrollTo(pos.x, pos.y);\n    const viewportUpdate = get().fold(() => ({\n      bind: noop,\n      unbind: noop\n    }), visualViewport => {\n      const editorContainer = value();\n      const resizeBinder = unbindable();\n      const scrollBinder = unbindable();\n      const refreshScroll = () => {\n        document.body.scrollTop = 0;\n        document.documentElement.scrollTop = 0;\n      };\n      const refreshVisualViewport = () => {\n        window.requestAnimationFrame(() => {\n          editorContainer.on(container => setAll(container, {\n            top: visualViewport.offsetTop + 'px',\n            left: visualViewport.offsetLeft + 'px',\n            height: visualViewport.height + 'px',\n            width: visualViewport.width + 'px'\n          }));\n        });\n      };\n      const update = first(() => {\n        refreshScroll();\n        refreshVisualViewport();\n      }, 50);\n      const bind$1 = element => {\n        editorContainer.set(element);\n        update.throttle();\n        resizeBinder.set(bind('resize', update.throttle));\n        scrollBinder.set(bind('scroll', update.throttle));\n      };\n      const unbind = () => {\n        editorContainer.on(() => {\n          resizeBinder.clear();\n          scrollBinder.clear();\n        });\n        editorContainer.clear();\n      };\n      return {\n        bind: bind$1,\n        unbind\n      };\n    });\n    const toggleFullscreen = (editor, fullscreenState) => {\n      const body = document.body;\n      const documentElement = document.documentElement;\n      const editorContainer = editor.getContainer();\n      const editorContainerS = SugarElement.fromDom(editorContainer);\n      const fullscreenRoot = getFullscreenRoot(editor);\n      const fullscreenInfo = fullscreenState.get();\n      const editorBody = SugarElement.fromDom(editor.getBody());\n      const isTouch = global.deviceType.isTouch();\n      const editorContainerStyle = editorContainer.style;\n      const iframe = editor.iframeElement;\n      const iframeStyle = iframe === null || iframe === void 0 ? void 0 : iframe.style;\n      const handleClasses = handler => {\n        handler(body, 'tox-fullscreen');\n        handler(documentElement, 'tox-fullscreen');\n        handler(editorContainer, 'tox-fullscreen');\n        getShadowRoot(editorContainerS).map(root => getShadowHost(root).dom).each(host => {\n          handler(host, 'tox-fullscreen');\n          handler(host, 'tox-shadowhost');\n        });\n      };\n      const cleanup = () => {\n        if (isTouch) {\n          restoreStyles(editor.dom);\n        }\n        handleClasses(DOM.removeClass);\n        viewportUpdate.unbind();\n        Optional.from(fullscreenState.get()).each(info => info.fullscreenChangeHandler.unbind());\n      };\n      if (!fullscreenInfo) {\n        const fullscreenChangeHandler = bind$1(owner(fullscreenRoot), getFullscreenchangeEventName(), _evt => {\n          if (getFullscreenNative(editor)) {\n            if (!isFullscreenElement(fullscreenRoot) && fullscreenState.get() !== null) {\n              toggleFullscreen(editor, fullscreenState);\n            }\n          }\n        });\n        const newFullScreenInfo = {\n          scrollPos: getScrollPos(),\n          containerWidth: editorContainerStyle.width,\n          containerHeight: editorContainerStyle.height,\n          containerTop: editorContainerStyle.top,\n          containerLeft: editorContainerStyle.left,\n          iframeWidth: iframeStyle.width,\n          iframeHeight: iframeStyle.height,\n          fullscreenChangeHandler\n        };\n        if (isTouch) {\n          clobberStyles(editor.dom, editorContainerS, editorBody);\n        }\n        iframeStyle.width = iframeStyle.height = '100%';\n        editorContainerStyle.width = editorContainerStyle.height = '';\n        handleClasses(DOM.addClass);\n        viewportUpdate.bind(editorContainerS);\n        editor.on('remove', cleanup);\n        fullscreenState.set(newFullScreenInfo);\n        if (getFullscreenNative(editor)) {\n          requestFullscreen(fullscreenRoot);\n        }\n        fireFullscreenStateChanged(editor, true);\n      } else {\n        fullscreenInfo.fullscreenChangeHandler.unbind();\n        if (getFullscreenNative(editor) && isFullscreenElement(fullscreenRoot)) {\n          exitFullscreen(owner(fullscreenRoot));\n        }\n        iframeStyle.width = fullscreenInfo.iframeWidth;\n        iframeStyle.height = fullscreenInfo.iframeHeight;\n        editorContainerStyle.width = fullscreenInfo.containerWidth;\n        editorContainerStyle.height = fullscreenInfo.containerHeight;\n        editorContainerStyle.top = fullscreenInfo.containerTop;\n        editorContainerStyle.left = fullscreenInfo.containerLeft;\n        cleanup();\n        setScrollPos(fullscreenInfo.scrollPos);\n        fullscreenState.set(null);\n        fireFullscreenStateChanged(editor, false);\n        editor.off('remove', cleanup);\n      }\n    };\n\n    const register$1 = (editor, fullscreenState) => {\n      editor.addCommand('mceFullScreen', () => {\n        toggleFullscreen(editor, fullscreenState);\n      });\n    };\n\n    const makeSetupHandler = (editor, fullscreenState) => api => {\n      api.setActive(fullscreenState.get() !== null);\n      const editorEventCallback = e => api.setActive(e.state);\n      editor.on('FullscreenStateChanged', editorEventCallback);\n      return () => editor.off('FullscreenStateChanged', editorEventCallback);\n    };\n    const register = (editor, fullscreenState) => {\n      const onAction = () => editor.execCommand('mceFullScreen');\n      editor.ui.registry.addToggleMenuItem('fullscreen', {\n        text: 'Fullscreen',\n        icon: 'fullscreen',\n        shortcut: 'Meta+Shift+F',\n        onAction,\n        onSetup: makeSetupHandler(editor, fullscreenState)\n      });\n      editor.ui.registry.addToggleButton('fullscreen', {\n        tooltip: 'Fullscreen',\n        icon: 'fullscreen',\n        onAction,\n        onSetup: makeSetupHandler(editor, fullscreenState)\n      });\n    };\n\n    var Plugin = () => {\n      global$2.add('fullscreen', editor => {\n        const fullscreenState = Cell(null);\n        if (editor.inline) {\n          return get$5(fullscreenState);\n        }\n        register$2(editor);\n        register$1(editor, fullscreenState);\n        register(editor, fullscreenState);\n        editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');\n        return get$5(fullscreenState);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    let unique = 0;\n    const generate = prefix => {\n      const date = new Date();\n      const time = date.getTime();\n      const random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    const get$1 = customTabs => {\n      const addTab = spec => {\n        var _a;\n        const name = (_a = spec.name) !== null && _a !== void 0 ? _a : generate('tab-name');\n        const currentCustomTabs = customTabs.get();\n        currentCustomTabs[name] = spec;\n        customTabs.set(currentCustomTabs);\n      };\n      return { addTab };\n    };\n\n    const register$2 = (editor, dialogOpener) => {\n      editor.addCommand('mceHelp', dialogOpener);\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const register$1 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('help_tabs', { processor: 'array' });\n    };\n    const getHelpTabs = option('help_tabs');\n    const getForcedPlugins = option('forced_plugins');\n\n    const register = (editor, dialogOpener) => {\n      editor.ui.registry.addButton('help', {\n        icon: 'help',\n        tooltip: 'Help',\n        onAction: dialogOpener\n      });\n      editor.ui.registry.addMenuItem('help', {\n        text: 'Help',\n        icon: 'help',\n        shortcut: 'Alt+0',\n        onAction: dialogOpener\n      });\n    };\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq = t => a => t === a;\n    const isString = isType('string');\n    const isUndefined = eq(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const never = constant(false);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const filter = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const sort = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const get = (obj, key) => {\n      return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n    const pLoadHtmlByLangCode = (baseUrl, langCode) => global$3.load(`tinymce.html-i18n.help-keynav.${ langCode }`, `${ baseUrl }/js/i18n/keynav/${ langCode }.js`);\n    const pLoadI18nHtml = baseUrl => pLoadHtmlByLangCode(baseUrl, global$2.getCode()).catch(() => pLoadHtmlByLangCode(baseUrl, 'en'));\n    const initI18nLoad = (editor, baseUrl) => {\n      editor.on('init', () => {\n        pLoadI18nHtml(baseUrl);\n      });\n    };\n\n    const pTab = async pluginUrl => {\n      const body = {\n        type: 'htmlpanel',\n        presets: 'document',\n        html: await pLoadI18nHtml(pluginUrl)\n      };\n      return {\n        name: 'keyboardnav',\n        title: 'Keyboard Navigation',\n        items: [body]\n      };\n    };\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    const convertText = source => {\n      const isMac = global$1.os.isMacOS() || global$1.os.isiOS();\n      const mac = {\n        alt: '&#x2325;',\n        ctrl: '&#x2303;',\n        shift: '&#x21E7;',\n        meta: '&#x2318;',\n        access: '&#x2303;&#x2325;'\n      };\n      const other = {\n        meta: 'Ctrl ',\n        access: 'Shift + Alt '\n      };\n      const replace = isMac ? mac : other;\n      const shortcut = source.split('+');\n      const updated = map(shortcut, segment => {\n        const search = segment.toLowerCase().trim();\n        return has(replace, search) ? replace[search] : segment;\n      });\n      return isMac ? updated.join('').replace(/\\s/, '') : updated.join('+');\n    };\n\n    const shortcuts = [\n      {\n        shortcuts: ['Meta + B'],\n        action: 'Bold'\n      },\n      {\n        shortcuts: ['Meta + I'],\n        action: 'Italic'\n      },\n      {\n        shortcuts: ['Meta + U'],\n        action: 'Underline'\n      },\n      {\n        shortcuts: ['Meta + A'],\n        action: 'Select all'\n      },\n      {\n        shortcuts: [\n          'Meta + Y',\n          'Meta + Shift + Z'\n        ],\n        action: 'Redo'\n      },\n      {\n        shortcuts: ['Meta + Z'],\n        action: 'Undo'\n      },\n      {\n        shortcuts: ['Access + 1'],\n        action: 'Heading 1'\n      },\n      {\n        shortcuts: ['Access + 2'],\n        action: 'Heading 2'\n      },\n      {\n        shortcuts: ['Access + 3'],\n        action: 'Heading 3'\n      },\n      {\n        shortcuts: ['Access + 4'],\n        action: 'Heading 4'\n      },\n      {\n        shortcuts: ['Access + 5'],\n        action: 'Heading 5'\n      },\n      {\n        shortcuts: ['Access + 6'],\n        action: 'Heading 6'\n      },\n      {\n        shortcuts: ['Access + 7'],\n        action: 'Paragraph'\n      },\n      {\n        shortcuts: ['Access + 8'],\n        action: 'Div'\n      },\n      {\n        shortcuts: ['Access + 9'],\n        action: 'Address'\n      },\n      {\n        shortcuts: ['Alt + 0'],\n        action: 'Open help dialog'\n      },\n      {\n        shortcuts: ['Alt + F9'],\n        action: 'Focus to menubar'\n      },\n      {\n        shortcuts: ['Alt + F10'],\n        action: 'Focus to toolbar'\n      },\n      {\n        shortcuts: ['Alt + F11'],\n        action: 'Focus to element path'\n      },\n      {\n        shortcuts: ['Ctrl + F9'],\n        action: 'Focus to contextual toolbar'\n      },\n      {\n        shortcuts: ['Shift + Enter'],\n        action: 'Open popup menu for split buttons'\n      },\n      {\n        shortcuts: ['Meta + K'],\n        action: 'Insert link (if link plugin activated)'\n      },\n      {\n        shortcuts: ['Meta + S'],\n        action: 'Save (if save plugin activated)'\n      },\n      {\n        shortcuts: ['Meta + F'],\n        action: 'Find (if searchreplace plugin activated)'\n      },\n      {\n        shortcuts: ['Meta + Shift + F'],\n        action: 'Switch to or from fullscreen mode'\n      }\n    ];\n\n    const tab$2 = () => {\n      const shortcutList = map(shortcuts, shortcut => {\n        const shortcutText = map(shortcut.shortcuts, convertText).join(' or ');\n        return [\n          shortcut.action,\n          shortcutText\n        ];\n      });\n      const tablePanel = {\n        type: 'table',\n        header: [\n          'Action',\n          'Shortcut'\n        ],\n        cells: shortcutList\n      };\n      return {\n        name: 'shortcuts',\n        title: 'Handy Shortcuts',\n        items: [tablePanel]\n      };\n    };\n\n    const urls = map([\n      {\n        key: 'accordion',\n        name: 'Accordion'\n      },\n      {\n        key: 'advlist',\n        name: 'Advanced List'\n      },\n      {\n        key: 'anchor',\n        name: 'Anchor'\n      },\n      {\n        key: 'autolink',\n        name: 'Autolink'\n      },\n      {\n        key: 'autoresize',\n        name: 'Autoresize'\n      },\n      {\n        key: 'autosave',\n        name: 'Autosave'\n      },\n      {\n        key: 'charmap',\n        name: 'Character Map'\n      },\n      {\n        key: 'code',\n        name: 'Code'\n      },\n      {\n        key: 'codesample',\n        name: 'Code Sample'\n      },\n      {\n        key: 'colorpicker',\n        name: 'Color Picker'\n      },\n      {\n        key: 'directionality',\n        name: 'Directionality'\n      },\n      {\n        key: 'emoticons',\n        name: 'Emoticons'\n      },\n      {\n        key: 'fullscreen',\n        name: 'Full Screen'\n      },\n      {\n        key: 'help',\n        name: 'Help'\n      },\n      {\n        key: 'image',\n        name: 'Image'\n      },\n      {\n        key: 'importcss',\n        name: 'Import CSS'\n      },\n      {\n        key: 'insertdatetime',\n        name: 'Insert Date/Time'\n      },\n      {\n        key: 'link',\n        name: 'Link'\n      },\n      {\n        key: 'lists',\n        name: 'Lists'\n      },\n      {\n        key: 'media',\n        name: 'Media'\n      },\n      {\n        key: 'nonbreaking',\n        name: 'Nonbreaking'\n      },\n      {\n        key: 'pagebreak',\n        name: 'Page Break'\n      },\n      {\n        key: 'preview',\n        name: 'Preview'\n      },\n      {\n        key: 'quickbars',\n        name: 'Quick Toolbars'\n      },\n      {\n        key: 'save',\n        name: 'Save'\n      },\n      {\n        key: 'searchreplace',\n        name: 'Search and Replace'\n      },\n      {\n        key: 'table',\n        name: 'Table'\n      },\n      {\n        key: 'template',\n        name: 'Template'\n      },\n      {\n        key: 'textcolor',\n        name: 'Text Color'\n      },\n      {\n        key: 'visualblocks',\n        name: 'Visual Blocks'\n      },\n      {\n        key: 'visualchars',\n        name: 'Visual Characters'\n      },\n      {\n        key: 'wordcount',\n        name: 'Word Count'\n      },\n      {\n        key: 'a11ychecker',\n        name: 'Accessibility Checker',\n        type: 'premium'\n      },\n      {\n        key: 'advcode',\n        name: 'Advanced Code Editor',\n        type: 'premium'\n      },\n      {\n        key: 'advtable',\n        name: 'Advanced Tables',\n        type: 'premium'\n      },\n      {\n        key: 'advtemplate',\n        name: 'Advanced Templates',\n        type: 'premium',\n        slug: 'advanced-templates'\n      },\n      {\n        key: 'ai',\n        name: 'AI Assistant',\n        type: 'premium'\n      },\n      {\n        key: 'casechange',\n        name: 'Case Change',\n        type: 'premium'\n      },\n      {\n        key: 'checklist',\n        name: 'Checklist',\n        type: 'premium'\n      },\n      {\n        key: 'editimage',\n        name: 'Enhanced Image Editing',\n        type: 'premium'\n      },\n      {\n        key: 'footnotes',\n        name: 'Footnotes',\n        type: 'premium'\n      },\n      {\n        key: 'typography',\n        name: 'Advanced Typography',\n        type: 'premium',\n        slug: 'advanced-typography'\n      },\n      {\n        key: 'mediaembed',\n        name: 'Enhanced Media Embed',\n        type: 'premium',\n        slug: 'introduction-to-mediaembed'\n      },\n      {\n        key: 'export',\n        name: 'Export',\n        type: 'premium'\n      },\n      {\n        key: 'formatpainter',\n        name: 'Format Painter',\n        type: 'premium'\n      },\n      {\n        key: 'inlinecss',\n        name: 'Inline CSS',\n        type: 'premium',\n        slug: 'inline-css'\n      },\n      {\n        key: 'linkchecker',\n        name: 'Link Checker',\n        type: 'premium'\n      },\n      {\n        key: 'mentions',\n        name: 'Mentions',\n        type: 'premium'\n      },\n      {\n        key: 'mergetags',\n        name: 'Merge Tags',\n        type: 'premium'\n      },\n      {\n        key: 'pageembed',\n        name: 'Page Embed',\n        type: 'premium'\n      },\n      {\n        key: 'permanentpen',\n        name: 'Permanent Pen',\n        type: 'premium'\n      },\n      {\n        key: 'powerpaste',\n        name: 'PowerPaste',\n        type: 'premium',\n        slug: 'introduction-to-powerpaste'\n      },\n      {\n        key: 'rtc',\n        name: 'Real-Time Collaboration',\n        type: 'premium',\n        slug: 'rtc-introduction'\n      },\n      {\n        key: 'tinymcespellchecker',\n        name: 'Spell Checker Pro',\n        type: 'premium',\n        slug: 'introduction-to-tiny-spellchecker'\n      },\n      {\n        key: 'autocorrect',\n        name: 'Spelling Autocorrect',\n        type: 'premium'\n      },\n      {\n        key: 'tableofcontents',\n        name: 'Table of Contents',\n        type: 'premium'\n      },\n      {\n        key: 'tinycomments',\n        name: 'Tiny Comments',\n        type: 'premium',\n        slug: 'introduction-to-tiny-comments'\n      },\n      {\n        key: 'tinydrive',\n        name: 'Tiny Drive',\n        type: 'premium',\n        slug: 'tinydrive-introduction'\n      }\n    ], item => ({\n      ...item,\n      type: item.type || 'opensource',\n      slug: item.slug || item.key\n    }));\n\n    const tab$1 = editor => {\n      const availablePlugins = () => {\n        const premiumPlugins = filter(urls, ({type}) => {\n          return type === 'premium';\n        });\n        const sortedPremiumPlugins = sort(map(premiumPlugins, p => p.name), (s1, s2) => s1.localeCompare(s2));\n        const premiumPluginList = map(sortedPremiumPlugins, pluginName => `<li>${ pluginName }</li>`).join('');\n        return '<div>' + '<p><b>' + global$2.translate('Premium plugins:') + '</b></p>' + '<ul>' + premiumPluginList + '<li class=\"tox-help__more-link\" \">' + '<a href=\"https://www.tiny.cloud/pricing/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce\" rel=\"noopener\" target=\"_blank\"' + ' data-alloy-tabstop=\"true\" tabindex=\"-1\">' + global$2.translate('Learn more...') + '</a></li>' + '</ul>' + '</div>';\n      };\n      const makeLink = p => `<a data-alloy-tabstop=\"true\" tabindex=\"-1\" href=\"${ p.url }\" target=\"_blank\" rel=\"noopener\">${ p.name }</a>`;\n      const identifyUnknownPlugin = (editor, key) => {\n        const getMetadata = editor.plugins[key].getMetadata;\n        if (isFunction(getMetadata)) {\n          const metadata = getMetadata();\n          return {\n            name: metadata.name,\n            html: makeLink(metadata)\n          };\n        } else {\n          return {\n            name: key,\n            html: key\n          };\n        }\n      };\n      const getPluginData = (editor, key) => find(urls, x => {\n        return x.key === key;\n      }).fold(() => {\n        return identifyUnknownPlugin(editor, key);\n      }, x => {\n        const name = x.type === 'premium' ? `${ x.name }*` : x.name;\n        const html = makeLink({\n          name,\n          url: `https://www.tiny.cloud/docs/tinymce/6/${ x.slug }/`\n        });\n        return {\n          name,\n          html\n        };\n      });\n      const getPluginKeys = editor => {\n        const keys$1 = keys(editor.plugins);\n        const forcedPlugins = getForcedPlugins(editor);\n        return isUndefined(forcedPlugins) ? keys$1 : filter(keys$1, k => !contains(forcedPlugins, k));\n      };\n      const pluginLister = editor => {\n        const pluginKeys = getPluginKeys(editor);\n        const sortedPluginData = sort(map(pluginKeys, k => getPluginData(editor, k)), (pd1, pd2) => pd1.name.localeCompare(pd2.name));\n        const pluginLis = map(sortedPluginData, key => {\n          return '<li>' + key.html + '</li>';\n        });\n        const count = pluginLis.length;\n        const pluginsString = pluginLis.join('');\n        const html = '<p><b>' + global$2.translate([\n          'Plugins installed ({0}):',\n          count\n        ]) + '</b></p>' + '<ul>' + pluginsString + '</ul>';\n        return html;\n      };\n      const installedPlugins = editor => {\n        if (editor == null) {\n          return '';\n        }\n        return '<div>' + pluginLister(editor) + '</div>';\n      };\n      const htmlPanel = {\n        type: 'htmlpanel',\n        presets: 'document',\n        html: [\n          installedPlugins(editor),\n          availablePlugins()\n        ].join('')\n      };\n      return {\n        name: 'plugins',\n        title: 'Plugins',\n        items: [htmlPanel]\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n    const tab = () => {\n      const getVersion = (major, minor) => major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor;\n      const version = getVersion(global.majorVersion, global.minorVersion);\n      const changeLogLink = '<a data-alloy-tabstop=\"true\" tabindex=\"-1\" href=\"https://www.tiny.cloud/docs/tinymce/6/changelog/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce\" rel=\"noopener\" target=\"_blank\">TinyMCE ' + version + '</a>';\n      const htmlPanel = {\n        type: 'htmlpanel',\n        html: '<p>' + global$2.translate([\n          'You are using {0}',\n          changeLogLink\n        ]) + '</p>',\n        presets: 'document'\n      };\n      return {\n        name: 'versions',\n        title: 'Version',\n        items: [htmlPanel]\n      };\n    };\n\n    const parseHelpTabsSetting = (tabsFromSettings, tabs) => {\n      const newTabs = {};\n      const names = map(tabsFromSettings, t => {\n        var _a;\n        if (isString(t)) {\n          if (has(tabs, t)) {\n            newTabs[t] = tabs[t];\n          }\n          return t;\n        } else {\n          const name = (_a = t.name) !== null && _a !== void 0 ? _a : generate('tab-name');\n          newTabs[name] = t;\n          return name;\n        }\n      });\n      return {\n        tabs: newTabs,\n        names\n      };\n    };\n    const getNamesFromTabs = tabs => {\n      const names = keys(tabs);\n      const idx = names.indexOf('versions');\n      if (idx !== -1) {\n        names.splice(idx, 1);\n        names.push('versions');\n      }\n      return {\n        tabs,\n        names\n      };\n    };\n    const pParseCustomTabs = async (editor, customTabs, pluginUrl) => {\n      const shortcuts = tab$2();\n      const nav = await pTab(pluginUrl);\n      const plugins = tab$1(editor);\n      const versions = tab();\n      const tabs = {\n        [shortcuts.name]: shortcuts,\n        [nav.name]: nav,\n        [plugins.name]: plugins,\n        [versions.name]: versions,\n        ...customTabs.get()\n      };\n      return Optional.from(getHelpTabs(editor)).fold(() => getNamesFromTabs(tabs), tabsFromSettings => parseHelpTabsSetting(tabsFromSettings, tabs));\n    };\n    const init = (editor, customTabs, pluginUrl) => () => {\n      pParseCustomTabs(editor, customTabs, pluginUrl).then(({tabs, names}) => {\n        const foundTabs = map(names, name => get(tabs, name));\n        const dialogTabs = cat(foundTabs);\n        const body = {\n          type: 'tabpanel',\n          tabs: dialogTabs\n        };\n        editor.windowManager.open({\n          title: 'Help',\n          size: 'medium',\n          body,\n          buttons: [{\n              type: 'cancel',\n              name: 'close',\n              text: 'Close',\n              primary: true\n            }],\n          initialData: {}\n        });\n      });\n    };\n\n    var Plugin = () => {\n      global$4.add('help', (editor, pluginUrl) => {\n        const customTabs = Cell({});\n        const api = get$1(customTabs);\n        register$1(editor);\n        const dialogOpener = init(editor, customTabs, pluginUrl);\n        register(editor, dialogOpener);\n        register$2(editor, dialogOpener);\n        editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');\n        initI18nLoad(editor, pluginUrl);\n        return api;\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const getPrototypeOf = Object.getPrototypeOf;\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq = t => a => t === a;\n    const is = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf(o) === proto);\n    const isString = isType('string');\n    const isObject = isType('object');\n    const isPlainObject = value => is(value, Object);\n    const isArray = isType('array');\n    const isNull = eq(null);\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n    const isArrayOf = (value, pred) => {\n      if (isArray(value)) {\n        for (let i = 0, len = value.length; i < len; ++i) {\n          if (!pred(value[i])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n\n    const noop = () => {\n    };\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const filter = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n    const nativePush = Array.prototype.push;\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const get = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get(xs, 0);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const remove = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n    const isNotEmpty = s => s.length > 0;\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('image_dimensions', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('image_advtab', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('image_uploadtab', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('image_prepend_url', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('image_class_list', { processor: 'object[]' });\n      registerOption('image_description', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('image_title', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('image_caption', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('image_list', {\n        processor: value => {\n          const valid = value === false || isString(value) || isArrayOf(value, isObject) || isFunction(value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be false, a string, an array or a function.'\n          };\n        },\n        default: false\n      });\n    };\n    const hasDimensions = option('image_dimensions');\n    const hasAdvTab = option('image_advtab');\n    const hasUploadTab = option('image_uploadtab');\n    const getPrependUrl = option('image_prepend_url');\n    const getClassList = option('image_class_list');\n    const hasDescription = option('image_description');\n    const hasImageTitle = option('image_title');\n    const hasImageCaption = option('image_caption');\n    const getImageList = option('image_list');\n    const showAccessibilityOptions = option('a11y_advanced_options');\n    const isAutomaticUploadsEnabled = option('automatic_uploads');\n    const hasUploadUrl = editor => isNotEmpty(editor.options.get('images_upload_url'));\n    const hasUploadHandler = editor => isNonNullable(editor.options.get('images_upload_handler'));\n\n    const parseIntAndGetMax = (val1, val2) => Math.max(parseInt(val1, 10), parseInt(val2, 10));\n    const getImageSize = url => new Promise(callback => {\n      const img = document.createElement('img');\n      const done = dimensions => {\n        img.onload = img.onerror = null;\n        if (img.parentNode) {\n          img.parentNode.removeChild(img);\n        }\n        callback(dimensions);\n      };\n      img.onload = () => {\n        const width = parseIntAndGetMax(img.width, img.clientWidth);\n        const height = parseIntAndGetMax(img.height, img.clientHeight);\n        const dimensions = {\n          width,\n          height\n        };\n        done(Promise.resolve(dimensions));\n      };\n      img.onerror = () => {\n        done(Promise.reject(`Failed to get image dimensions for: ${ url }`));\n      };\n      const style = img.style;\n      style.visibility = 'hidden';\n      style.position = 'fixed';\n      style.bottom = style.left = '0px';\n      style.width = style.height = 'auto';\n      document.body.appendChild(img);\n      img.src = url;\n    });\n    const removePixelSuffix = value => {\n      if (value) {\n        value = value.replace(/px$/, '');\n      }\n      return value;\n    };\n    const addPixelSuffix = value => {\n      if (value.length > 0 && /^[0-9]+$/.test(value)) {\n        value += 'px';\n      }\n      return value;\n    };\n    const mergeMargins = css => {\n      if (css.margin) {\n        const splitMargin = String(css.margin).split(' ');\n        switch (splitMargin.length) {\n        case 1:\n          css['margin-top'] = css['margin-top'] || splitMargin[0];\n          css['margin-right'] = css['margin-right'] || splitMargin[0];\n          css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n          css['margin-left'] = css['margin-left'] || splitMargin[0];\n          break;\n        case 2:\n          css['margin-top'] = css['margin-top'] || splitMargin[0];\n          css['margin-right'] = css['margin-right'] || splitMargin[1];\n          css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n          css['margin-left'] = css['margin-left'] || splitMargin[1];\n          break;\n        case 3:\n          css['margin-top'] = css['margin-top'] || splitMargin[0];\n          css['margin-right'] = css['margin-right'] || splitMargin[1];\n          css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n          css['margin-left'] = css['margin-left'] || splitMargin[1];\n          break;\n        case 4:\n          css['margin-top'] = css['margin-top'] || splitMargin[0];\n          css['margin-right'] = css['margin-right'] || splitMargin[1];\n          css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n          css['margin-left'] = css['margin-left'] || splitMargin[3];\n        }\n        delete css.margin;\n      }\n      return css;\n    };\n    const createImageList = (editor, callback) => {\n      const imageList = getImageList(editor);\n      if (isString(imageList)) {\n        fetch(imageList).then(res => {\n          if (res.ok) {\n            res.json().then(callback);\n          }\n        });\n      } else if (isFunction(imageList)) {\n        imageList(callback);\n      } else {\n        callback(imageList);\n      }\n    };\n    const waitLoadImage = (editor, data, imgElm) => {\n      const selectImage = () => {\n        imgElm.onload = imgElm.onerror = null;\n        if (editor.selection) {\n          editor.selection.select(imgElm);\n          editor.nodeChanged();\n        }\n      };\n      imgElm.onload = () => {\n        if (!data.width && !data.height && hasDimensions(editor)) {\n          editor.dom.setAttribs(imgElm, {\n            width: String(imgElm.clientWidth),\n            height: String(imgElm.clientHeight)\n          });\n        }\n        selectImage();\n      };\n      imgElm.onerror = selectImage;\n    };\n    const blobToDataUri = blob => new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => {\n        resolve(reader.result);\n      };\n      reader.onerror = () => {\n        var _a;\n        reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n      };\n      reader.readAsDataURL(blob);\n    });\n    const isPlaceholderImage = imgElm => imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));\n    const isSafeImageUrl = (editor, src) => {\n      const getOption = editor.options.get;\n      return global$2.isDomSafe(src, 'img', {\n        allow_html_data_urls: getOption('allow_html_data_urls'),\n        allow_script_urls: getOption('allow_script_urls'),\n        allow_svg_data_urls: getOption('allow_svg_data_urls')\n      });\n    };\n\n    const DOM = global$3.DOM;\n    const getHspace = image => {\n      if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n        return removePixelSuffix(image.style.marginLeft);\n      } else {\n        return '';\n      }\n    };\n    const getVspace = image => {\n      if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n        return removePixelSuffix(image.style.marginTop);\n      } else {\n        return '';\n      }\n    };\n    const getBorder = image => {\n      if (image.style.borderWidth) {\n        return removePixelSuffix(image.style.borderWidth);\n      } else {\n        return '';\n      }\n    };\n    const getAttrib = (image, name) => {\n      var _a;\n      if (image.hasAttribute(name)) {\n        return (_a = image.getAttribute(name)) !== null && _a !== void 0 ? _a : '';\n      } else {\n        return '';\n      }\n    };\n    const hasCaption = image => image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n    const updateAttrib = (image, name, value) => {\n      if (value === '' || value === null) {\n        image.removeAttribute(name);\n      } else {\n        image.setAttribute(name, value);\n      }\n    };\n    const wrapInFigure = image => {\n      const figureElm = DOM.create('figure', { class: 'image' });\n      DOM.insertAfter(figureElm, image);\n      figureElm.appendChild(image);\n      figureElm.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n      figureElm.contentEditable = 'false';\n    };\n    const removeFigure = image => {\n      const figureElm = image.parentNode;\n      if (isNonNullable(figureElm)) {\n        DOM.insertAfter(image, figureElm);\n        DOM.remove(figureElm);\n      }\n    };\n    const toggleCaption = image => {\n      if (hasCaption(image)) {\n        removeFigure(image);\n      } else {\n        wrapInFigure(image);\n      }\n    };\n    const normalizeStyle = (image, normalizeCss) => {\n      const attrValue = image.getAttribute('style');\n      const value = normalizeCss(attrValue !== null ? attrValue : '');\n      if (value.length > 0) {\n        image.setAttribute('style', value);\n        image.setAttribute('data-mce-style', value);\n      } else {\n        image.removeAttribute('style');\n      }\n    };\n    const setSize = (name, normalizeCss) => (image, name, value) => {\n      const styles = image.style;\n      if (styles[name]) {\n        styles[name] = addPixelSuffix(value);\n        normalizeStyle(image, normalizeCss);\n      } else {\n        updateAttrib(image, name, value);\n      }\n    };\n    const getSize = (image, name) => {\n      if (image.style[name]) {\n        return removePixelSuffix(image.style[name]);\n      } else {\n        return getAttrib(image, name);\n      }\n    };\n    const setHspace = (image, value) => {\n      const pxValue = addPixelSuffix(value);\n      image.style.marginLeft = pxValue;\n      image.style.marginRight = pxValue;\n    };\n    const setVspace = (image, value) => {\n      const pxValue = addPixelSuffix(value);\n      image.style.marginTop = pxValue;\n      image.style.marginBottom = pxValue;\n    };\n    const setBorder = (image, value) => {\n      const pxValue = addPixelSuffix(value);\n      image.style.borderWidth = pxValue;\n    };\n    const setBorderStyle = (image, value) => {\n      image.style.borderStyle = value;\n    };\n    const getBorderStyle = image => {\n      var _a;\n      return (_a = image.style.borderStyle) !== null && _a !== void 0 ? _a : '';\n    };\n    const isFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE';\n    const isImage = elm => elm.nodeName === 'IMG';\n    const getIsDecorative = image => DOM.getAttrib(image, 'alt').length === 0 && DOM.getAttrib(image, 'role') === 'presentation';\n    const getAlt = image => {\n      if (getIsDecorative(image)) {\n        return '';\n      } else {\n        return getAttrib(image, 'alt');\n      }\n    };\n    const defaultData = () => ({\n      src: '',\n      alt: '',\n      title: '',\n      width: '',\n      height: '',\n      class: '',\n      style: '',\n      caption: false,\n      hspace: '',\n      vspace: '',\n      border: '',\n      borderStyle: '',\n      isDecorative: false\n    });\n    const getStyleValue = (normalizeCss, data) => {\n      var _a;\n      const image = document.createElement('img');\n      updateAttrib(image, 'style', data.style);\n      if (getHspace(image) || data.hspace !== '') {\n        setHspace(image, data.hspace);\n      }\n      if (getVspace(image) || data.vspace !== '') {\n        setVspace(image, data.vspace);\n      }\n      if (getBorder(image) || data.border !== '') {\n        setBorder(image, data.border);\n      }\n      if (getBorderStyle(image) || data.borderStyle !== '') {\n        setBorderStyle(image, data.borderStyle);\n      }\n      return normalizeCss((_a = image.getAttribute('style')) !== null && _a !== void 0 ? _a : '');\n    };\n    const create = (normalizeCss, data) => {\n      const image = document.createElement('img');\n      write(normalizeCss, {\n        ...data,\n        caption: false\n      }, image);\n      setAlt(image, data.alt, data.isDecorative);\n      if (data.caption) {\n        const figure = DOM.create('figure', { class: 'image' });\n        figure.appendChild(image);\n        figure.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n        figure.contentEditable = 'false';\n        return figure;\n      } else {\n        return image;\n      }\n    };\n    const read = (normalizeCss, image) => ({\n      src: getAttrib(image, 'src'),\n      alt: getAlt(image),\n      title: getAttrib(image, 'title'),\n      width: getSize(image, 'width'),\n      height: getSize(image, 'height'),\n      class: getAttrib(image, 'class'),\n      style: normalizeCss(getAttrib(image, 'style')),\n      caption: hasCaption(image),\n      hspace: getHspace(image),\n      vspace: getVspace(image),\n      border: getBorder(image),\n      borderStyle: getBorderStyle(image),\n      isDecorative: getIsDecorative(image)\n    });\n    const updateProp = (image, oldData, newData, name, set) => {\n      if (newData[name] !== oldData[name]) {\n        set(image, name, String(newData[name]));\n      }\n    };\n    const setAlt = (image, alt, isDecorative) => {\n      if (isDecorative) {\n        DOM.setAttrib(image, 'role', 'presentation');\n        const sugarImage = SugarElement.fromDom(image);\n        set(sugarImage, 'alt', '');\n      } else {\n        if (isNull(alt)) {\n          const sugarImage = SugarElement.fromDom(image);\n          remove(sugarImage, 'alt');\n        } else {\n          const sugarImage = SugarElement.fromDom(image);\n          set(sugarImage, 'alt', alt);\n        }\n        if (DOM.getAttrib(image, 'role') === 'presentation') {\n          DOM.setAttrib(image, 'role', '');\n        }\n      }\n    };\n    const updateAlt = (image, oldData, newData) => {\n      if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) {\n        setAlt(image, newData.alt, newData.isDecorative);\n      }\n    };\n    const normalized = (set, normalizeCss) => (image, name, value) => {\n      set(image, value);\n      normalizeStyle(image, normalizeCss);\n    };\n    const write = (normalizeCss, newData, image) => {\n      const oldData = read(normalizeCss, image);\n      updateProp(image, oldData, newData, 'caption', (image, _name, _value) => toggleCaption(image));\n      updateProp(image, oldData, newData, 'src', updateAttrib);\n      updateProp(image, oldData, newData, 'title', updateAttrib);\n      updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n      updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n      updateProp(image, oldData, newData, 'class', updateAttrib);\n      updateProp(image, oldData, newData, 'style', normalized((image, value) => updateAttrib(image, 'style', value), normalizeCss));\n      updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n      updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n      updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n      updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n      updateAlt(image, oldData, newData);\n    };\n\n    const normalizeCss$1 = (editor, cssText) => {\n      const css = editor.dom.styles.parse(cssText);\n      const mergedCss = mergeMargins(css);\n      const compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n      return editor.dom.styles.serialize(compressed);\n    };\n    const getSelectedImage = editor => {\n      const imgElm = editor.selection.getNode();\n      const figureElm = editor.dom.getParent(imgElm, 'figure.image');\n      if (figureElm) {\n        return editor.dom.select('img', figureElm)[0];\n      }\n      if (imgElm && (imgElm.nodeName !== 'IMG' || isPlaceholderImage(imgElm))) {\n        return null;\n      }\n      return imgElm;\n    };\n    const splitTextBlock = (editor, figure) => {\n      var _a;\n      const dom = editor.dom;\n      const textBlockElements = filter(editor.schema.getTextBlockElements(), (_, parentElm) => !editor.schema.isValidChild(parentElm, 'figure'));\n      const textBlock = dom.getParent(figure.parentNode, node => hasNonNullableKey(textBlockElements, node.nodeName), editor.getBody());\n      if (textBlock) {\n        return (_a = dom.split(textBlock, figure)) !== null && _a !== void 0 ? _a : figure;\n      } else {\n        return figure;\n      }\n    };\n    const readImageDataFromSelection = editor => {\n      const image = getSelectedImage(editor);\n      return image ? read(css => normalizeCss$1(editor, css), image) : defaultData();\n    };\n    const insertImageAtCaret = (editor, data) => {\n      const elm = create(css => normalizeCss$1(editor, css), data);\n      editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n      editor.focus();\n      editor.selection.setContent(elm.outerHTML);\n      const insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n      editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n      if (isFigure(insertedElm)) {\n        const figure = splitTextBlock(editor, insertedElm);\n        editor.selection.select(figure);\n      } else {\n        editor.selection.select(insertedElm);\n      }\n    };\n    const syncSrcAttr = (editor, image) => {\n      editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n    };\n    const deleteImage = (editor, image) => {\n      if (image) {\n        const elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n        editor.dom.remove(elm);\n        editor.focus();\n        editor.nodeChanged();\n        if (editor.dom.isEmpty(editor.getBody())) {\n          editor.setContent('');\n          editor.selection.setCursorLocation();\n        }\n      }\n    };\n    const writeImageDataToSelection = (editor, data) => {\n      const image = getSelectedImage(editor);\n      if (image) {\n        write(css => normalizeCss$1(editor, css), data, image);\n        syncSrcAttr(editor, image);\n        if (isFigure(image.parentNode)) {\n          const figure = image.parentNode;\n          splitTextBlock(editor, figure);\n          editor.selection.select(image.parentNode);\n        } else {\n          editor.selection.select(image);\n          waitLoadImage(editor, data, image);\n        }\n      }\n    };\n    const sanitizeImageData = (editor, data) => {\n      const src = data.src;\n      return {\n        ...data,\n        src: isSafeImageUrl(editor, src) ? src : ''\n      };\n    };\n    const insertOrUpdateImage = (editor, partialData) => {\n      const image = getSelectedImage(editor);\n      if (image) {\n        const selectedImageData = read(css => normalizeCss$1(editor, css), image);\n        const data = {\n          ...selectedImageData,\n          ...partialData\n        };\n        const sanitizedData = sanitizeImageData(editor, data);\n        if (data.src) {\n          writeImageDataToSelection(editor, sanitizedData);\n        } else {\n          deleteImage(editor, image);\n        }\n      } else if (partialData.src) {\n        insertImageAtCaret(editor, {\n          ...defaultData(),\n          ...partialData\n        });\n      }\n    };\n\n    const deep = (old, nu) => {\n      const bothObjects = isPlainObject(old) && isPlainObject(nu);\n      return bothObjects ? deepMerge(old, nu) : nu;\n    };\n    const baseMerge = merger => {\n      return (...objects) => {\n        if (objects.length === 0) {\n          throw new Error(`Can't merge zero objects`);\n        }\n        const ret = {};\n        for (let j = 0; j < objects.length; j++) {\n          const curObject = objects[j];\n          for (const key in curObject) {\n            if (has(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    const deepMerge = baseMerge(deep);\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.ImageUploader');\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const getValue = item => isString(item.value) ? item.value : '';\n    const getText = item => {\n      if (isString(item.text)) {\n        return item.text;\n      } else if (isString(item.title)) {\n        return item.title;\n      } else {\n        return '';\n      }\n    };\n    const sanitizeList = (list, extractValue) => {\n      const out = [];\n      global.each(list, item => {\n        const text = getText(item);\n        if (item.menu !== undefined) {\n          const items = sanitizeList(item.menu, extractValue);\n          out.push({\n            text,\n            items\n          });\n        } else {\n          const value = extractValue(item);\n          out.push({\n            text,\n            value\n          });\n        }\n      });\n      return out;\n    };\n    const sanitizer = (extractor = getValue) => list => {\n      if (list) {\n        return Optional.from(list).map(list => sanitizeList(list, extractor));\n      } else {\n        return Optional.none();\n      }\n    };\n    const sanitize = list => sanitizer(getValue)(list);\n    const isGroup = item => has(item, 'items');\n    const findEntryDelegate = (list, value) => findMap(list, item => {\n      if (isGroup(item)) {\n        return findEntryDelegate(item.items, value);\n      } else if (item.value === value) {\n        return Optional.some(item);\n      } else {\n        return Optional.none();\n      }\n    });\n    const findEntry = (optList, value) => optList.bind(list => findEntryDelegate(list, value));\n    const ListUtils = {\n      sanitizer,\n      sanitize,\n      findEntry\n    };\n\n    const makeTab$2 = _info => ({\n      title: 'Advanced',\n      name: 'advanced',\n      items: [{\n          type: 'grid',\n          columns: 2,\n          items: [\n            {\n              type: 'input',\n              label: 'Vertical space',\n              name: 'vspace',\n              inputMode: 'numeric'\n            },\n            {\n              type: 'input',\n              label: 'Horizontal space',\n              name: 'hspace',\n              inputMode: 'numeric'\n            },\n            {\n              type: 'input',\n              label: 'Border width',\n              name: 'border',\n              inputMode: 'numeric'\n            },\n            {\n              type: 'listbox',\n              name: 'borderstyle',\n              label: 'Border style',\n              items: [\n                {\n                  text: 'Select...',\n                  value: ''\n                },\n                {\n                  text: 'Solid',\n                  value: 'solid'\n                },\n                {\n                  text: 'Dotted',\n                  value: 'dotted'\n                },\n                {\n                  text: 'Dashed',\n                  value: 'dashed'\n                },\n                {\n                  text: 'Double',\n                  value: 'double'\n                },\n                {\n                  text: 'Groove',\n                  value: 'groove'\n                },\n                {\n                  text: 'Ridge',\n                  value: 'ridge'\n                },\n                {\n                  text: 'Inset',\n                  value: 'inset'\n                },\n                {\n                  text: 'Outset',\n                  value: 'outset'\n                },\n                {\n                  text: 'None',\n                  value: 'none'\n                },\n                {\n                  text: 'Hidden',\n                  value: 'hidden'\n                }\n              ]\n            }\n          ]\n        }]\n    });\n    const AdvTab = { makeTab: makeTab$2 };\n\n    const collect = editor => {\n      const urlListSanitizer = ListUtils.sanitizer(item => editor.convertURL(item.value || item.url || '', 'src'));\n      const futureImageList = new Promise(completer => {\n        createImageList(editor, imageList => {\n          completer(urlListSanitizer(imageList).map(items => flatten([\n            [{\n                text: 'None',\n                value: ''\n              }],\n            items\n          ])));\n        });\n      });\n      const classList = ListUtils.sanitize(getClassList(editor));\n      const hasAdvTab$1 = hasAdvTab(editor);\n      const hasUploadTab$1 = hasUploadTab(editor);\n      const hasUploadUrl$1 = hasUploadUrl(editor);\n      const hasUploadHandler$1 = hasUploadHandler(editor);\n      const image = readImageDataFromSelection(editor);\n      const hasDescription$1 = hasDescription(editor);\n      const hasImageTitle$1 = hasImageTitle(editor);\n      const hasDimensions$1 = hasDimensions(editor);\n      const hasImageCaption$1 = hasImageCaption(editor);\n      const hasAccessibilityOptions = showAccessibilityOptions(editor);\n      const automaticUploads = isAutomaticUploadsEnabled(editor);\n      const prependURL = Optional.some(getPrependUrl(editor)).filter(preUrl => isString(preUrl) && preUrl.length > 0);\n      return futureImageList.then(imageList => ({\n        image,\n        imageList,\n        classList,\n        hasAdvTab: hasAdvTab$1,\n        hasUploadTab: hasUploadTab$1,\n        hasUploadUrl: hasUploadUrl$1,\n        hasUploadHandler: hasUploadHandler$1,\n        hasDescription: hasDescription$1,\n        hasImageTitle: hasImageTitle$1,\n        hasDimensions: hasDimensions$1,\n        hasImageCaption: hasImageCaption$1,\n        prependURL,\n        hasAccessibilityOptions,\n        automaticUploads\n      }));\n    };\n\n    const makeItems = info => {\n      const imageUrl = {\n        name: 'src',\n        type: 'urlinput',\n        filetype: 'image',\n        label: 'Source',\n        picker_text: 'Browse files'\n      };\n      const imageList = info.imageList.map(items => ({\n        name: 'images',\n        type: 'listbox',\n        label: 'Image list',\n        items\n      }));\n      const imageDescription = {\n        name: 'alt',\n        type: 'input',\n        label: 'Alternative description',\n        enabled: !(info.hasAccessibilityOptions && info.image.isDecorative)\n      };\n      const imageTitle = {\n        name: 'title',\n        type: 'input',\n        label: 'Image title'\n      };\n      const imageDimensions = {\n        name: 'dimensions',\n        type: 'sizeinput'\n      };\n      const isDecorative = {\n        type: 'label',\n        label: 'Accessibility',\n        items: [{\n            name: 'isDecorative',\n            type: 'checkbox',\n            label: 'Image is decorative'\n          }]\n      };\n      const classList = info.classList.map(items => ({\n        name: 'classes',\n        type: 'listbox',\n        label: 'Class',\n        items\n      }));\n      const caption = {\n        type: 'label',\n        label: 'Caption',\n        items: [{\n            type: 'checkbox',\n            name: 'caption',\n            label: 'Show caption'\n          }]\n      };\n      const getDialogContainerType = useColumns => useColumns ? {\n        type: 'grid',\n        columns: 2\n      } : { type: 'panel' };\n      return flatten([\n        [imageUrl],\n        imageList.toArray(),\n        info.hasAccessibilityOptions && info.hasDescription ? [isDecorative] : [],\n        info.hasDescription ? [imageDescription] : [],\n        info.hasImageTitle ? [imageTitle] : [],\n        info.hasDimensions ? [imageDimensions] : [],\n        [{\n            ...getDialogContainerType(info.classList.isSome() && info.hasImageCaption),\n            items: flatten([\n              classList.toArray(),\n              info.hasImageCaption ? [caption] : []\n            ])\n          }]\n      ]);\n    };\n    const makeTab$1 = info => ({\n      title: 'General',\n      name: 'general',\n      items: makeItems(info)\n    });\n    const MainTab = {\n      makeTab: makeTab$1,\n      makeItems\n    };\n\n    const makeTab = _info => {\n      const items = [{\n          type: 'dropzone',\n          name: 'fileinput'\n        }];\n      return {\n        title: 'Upload',\n        name: 'upload',\n        items\n      };\n    };\n    const UploadTab = { makeTab };\n\n    const createState = info => ({\n      prevImage: ListUtils.findEntry(info.imageList, info.image.src),\n      prevAlt: info.image.alt,\n      open: true\n    });\n    const fromImageData = image => ({\n      src: {\n        value: image.src,\n        meta: {}\n      },\n      images: image.src,\n      alt: image.alt,\n      title: image.title,\n      dimensions: {\n        width: image.width,\n        height: image.height\n      },\n      classes: image.class,\n      caption: image.caption,\n      style: image.style,\n      vspace: image.vspace,\n      border: image.border,\n      hspace: image.hspace,\n      borderstyle: image.borderStyle,\n      fileinput: [],\n      isDecorative: image.isDecorative\n    });\n    const toImageData = (data, removeEmptyAlt) => ({\n      src: data.src.value,\n      alt: (data.alt === null || data.alt.length === 0) && removeEmptyAlt ? null : data.alt,\n      title: data.title,\n      width: data.dimensions.width,\n      height: data.dimensions.height,\n      class: data.classes,\n      style: data.style,\n      caption: data.caption,\n      hspace: data.hspace,\n      vspace: data.vspace,\n      border: data.border,\n      borderStyle: data.borderstyle,\n      isDecorative: data.isDecorative\n    });\n    const addPrependUrl2 = (info, srcURL) => {\n      if (!/^(?:[a-zA-Z]+:)?\\/\\//.test(srcURL)) {\n        return info.prependURL.bind(prependUrl => {\n          if (srcURL.substring(0, prependUrl.length) !== prependUrl) {\n            return Optional.some(prependUrl + srcURL);\n          }\n          return Optional.none();\n        });\n      }\n      return Optional.none();\n    };\n    const addPrependUrl = (info, api) => {\n      const data = api.getData();\n      addPrependUrl2(info, data.src.value).each(srcURL => {\n        api.setData({\n          src: {\n            value: srcURL,\n            meta: data.src.meta\n          }\n        });\n      });\n    };\n    const formFillFromMeta2 = (info, data, meta) => {\n      if (info.hasDescription && isString(meta.alt)) {\n        data.alt = meta.alt;\n      }\n      if (info.hasAccessibilityOptions) {\n        data.isDecorative = meta.isDecorative || data.isDecorative || false;\n      }\n      if (info.hasImageTitle && isString(meta.title)) {\n        data.title = meta.title;\n      }\n      if (info.hasDimensions) {\n        if (isString(meta.width)) {\n          data.dimensions.width = meta.width;\n        }\n        if (isString(meta.height)) {\n          data.dimensions.height = meta.height;\n        }\n      }\n      if (isString(meta.class)) {\n        ListUtils.findEntry(info.classList, meta.class).each(entry => {\n          data.classes = entry.value;\n        });\n      }\n      if (info.hasImageCaption) {\n        if (isBoolean(meta.caption)) {\n          data.caption = meta.caption;\n        }\n      }\n      if (info.hasAdvTab) {\n        if (isString(meta.style)) {\n          data.style = meta.style;\n        }\n        if (isString(meta.vspace)) {\n          data.vspace = meta.vspace;\n        }\n        if (isString(meta.border)) {\n          data.border = meta.border;\n        }\n        if (isString(meta.hspace)) {\n          data.hspace = meta.hspace;\n        }\n        if (isString(meta.borderstyle)) {\n          data.borderstyle = meta.borderstyle;\n        }\n      }\n    };\n    const formFillFromMeta = (info, api) => {\n      const data = api.getData();\n      const meta = data.src.meta;\n      if (meta !== undefined) {\n        const newData = deepMerge({}, data);\n        formFillFromMeta2(info, newData, meta);\n        api.setData(newData);\n      }\n    };\n    const calculateImageSize = (helpers, info, state, api) => {\n      const data = api.getData();\n      const url = data.src.value;\n      const meta = data.src.meta || {};\n      if (!meta.width && !meta.height && info.hasDimensions) {\n        if (isNotEmpty(url)) {\n          helpers.imageSize(url).then(size => {\n            if (state.open) {\n              api.setData({ dimensions: size });\n            }\n          }).catch(e => console.error(e));\n        } else {\n          api.setData({\n            dimensions: {\n              width: '',\n              height: ''\n            }\n          });\n        }\n      }\n    };\n    const updateImagesDropdown = (info, state, api) => {\n      const data = api.getData();\n      const image = ListUtils.findEntry(info.imageList, data.src.value);\n      state.prevImage = image;\n      api.setData({ images: image.map(entry => entry.value).getOr('') });\n    };\n    const changeSrc = (helpers, info, state, api) => {\n      addPrependUrl(info, api);\n      formFillFromMeta(info, api);\n      calculateImageSize(helpers, info, state, api);\n      updateImagesDropdown(info, state, api);\n    };\n    const changeImages = (helpers, info, state, api) => {\n      const data = api.getData();\n      const image = ListUtils.findEntry(info.imageList, data.images);\n      image.each(img => {\n        const updateAlt = data.alt === '' || state.prevImage.map(image => image.text === data.alt).getOr(false);\n        if (updateAlt) {\n          if (img.value === '') {\n            api.setData({\n              src: img,\n              alt: state.prevAlt\n            });\n          } else {\n            api.setData({\n              src: img,\n              alt: img.text\n            });\n          }\n        } else {\n          api.setData({ src: img });\n        }\n      });\n      state.prevImage = image;\n      changeSrc(helpers, info, state, api);\n    };\n    const changeFileInput = (helpers, info, state, api) => {\n      const data = api.getData();\n      api.block('Uploading image');\n      head(data.fileinput).fold(() => {\n        api.unblock();\n      }, file => {\n        const blobUri = URL.createObjectURL(file);\n        const finalize = () => {\n          api.unblock();\n          URL.revokeObjectURL(blobUri);\n        };\n        const updateSrcAndSwitchTab = url => {\n          api.setData({\n            src: {\n              value: url,\n              meta: {}\n            }\n          });\n          api.showTab('general');\n          changeSrc(helpers, info, state, api);\n        };\n        blobToDataUri(file).then(dataUrl => {\n          const blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);\n          if (info.automaticUploads) {\n            helpers.uploadImage(blobInfo).then(result => {\n              updateSrcAndSwitchTab(result.url);\n              finalize();\n            }).catch(err => {\n              finalize();\n              helpers.alertErr(err);\n            });\n          } else {\n            helpers.addToBlobCache(blobInfo);\n            updateSrcAndSwitchTab(blobInfo.blobUri());\n            api.unblock();\n          }\n        });\n      });\n    };\n    const changeHandler = (helpers, info, state) => (api, evt) => {\n      if (evt.name === 'src') {\n        changeSrc(helpers, info, state, api);\n      } else if (evt.name === 'images') {\n        changeImages(helpers, info, state, api);\n      } else if (evt.name === 'alt') {\n        state.prevAlt = api.getData().alt;\n      } else if (evt.name === 'fileinput') {\n        changeFileInput(helpers, info, state, api);\n      } else if (evt.name === 'isDecorative') {\n        api.setEnabled('alt', !api.getData().isDecorative);\n      }\n    };\n    const closeHandler = state => () => {\n      state.open = false;\n    };\n    const makeDialogBody = info => {\n      if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) {\n        const tabPanel = {\n          type: 'tabpanel',\n          tabs: flatten([\n            [MainTab.makeTab(info)],\n            info.hasAdvTab ? [AdvTab.makeTab(info)] : [],\n            info.hasUploadTab && (info.hasUploadUrl || info.hasUploadHandler) ? [UploadTab.makeTab(info)] : []\n          ])\n        };\n        return tabPanel;\n      } else {\n        const panel = {\n          type: 'panel',\n          items: MainTab.makeItems(info)\n        };\n        return panel;\n      }\n    };\n    const submitHandler = (editor, info, helpers) => api => {\n      const data = deepMerge(fromImageData(info.image), api.getData());\n      const finalData = {\n        ...data,\n        style: getStyleValue(helpers.normalizeCss, toImageData(data, false))\n      };\n      editor.execCommand('mceUpdateImage', false, toImageData(finalData, info.hasAccessibilityOptions));\n      editor.editorUpload.uploadImagesAuto();\n      api.close();\n    };\n    const imageSize = editor => url => {\n      if (!isSafeImageUrl(editor, url)) {\n        return Promise.resolve({\n          width: '',\n          height: ''\n        });\n      } else {\n        return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(dimensions => ({\n          width: String(dimensions.width),\n          height: String(dimensions.height)\n        }));\n      }\n    };\n    const createBlobCache = editor => (file, blobUri, dataUrl) => {\n      var _a;\n      return editor.editorUpload.blobCache.create({\n        blob: file,\n        blobUri,\n        name: (_a = file.name) === null || _a === void 0 ? void 0 : _a.replace(/\\.[^\\.]+$/, ''),\n        filename: file.name,\n        base64: dataUrl.split(',')[1]\n      });\n    };\n    const addToBlobCache = editor => blobInfo => {\n      editor.editorUpload.blobCache.add(blobInfo);\n    };\n    const alertErr = editor => message => {\n      editor.windowManager.alert(message);\n    };\n    const normalizeCss = editor => cssText => normalizeCss$1(editor, cssText);\n    const parseStyle = editor => cssText => editor.dom.parseStyle(cssText);\n    const serializeStyle = editor => (stylesArg, name) => editor.dom.serializeStyle(stylesArg, name);\n    const uploadImage = editor => blobInfo => global$1(editor).upload([blobInfo], false).then(results => {\n      var _a;\n      if (results.length === 0) {\n        return Promise.reject('Failed to upload image');\n      } else if (results[0].status === false) {\n        return Promise.reject((_a = results[0].error) === null || _a === void 0 ? void 0 : _a.message);\n      } else {\n        return results[0];\n      }\n    });\n    const Dialog = editor => {\n      const helpers = {\n        imageSize: imageSize(editor),\n        addToBlobCache: addToBlobCache(editor),\n        createBlobCache: createBlobCache(editor),\n        alertErr: alertErr(editor),\n        normalizeCss: normalizeCss(editor),\n        parseStyle: parseStyle(editor),\n        serializeStyle: serializeStyle(editor),\n        uploadImage: uploadImage(editor)\n      };\n      const open = () => {\n        collect(editor).then(info => {\n          const state = createState(info);\n          return {\n            title: 'Insert/Edit Image',\n            size: 'normal',\n            body: makeDialogBody(info),\n            buttons: [\n              {\n                type: 'cancel',\n                name: 'cancel',\n                text: 'Cancel'\n              },\n              {\n                type: 'submit',\n                name: 'save',\n                text: 'Save',\n                primary: true\n              }\n            ],\n            initialData: fromImageData(info.image),\n            onSubmit: submitHandler(editor, info, helpers),\n            onChange: changeHandler(helpers, info, state),\n            onClose: closeHandler(state)\n          };\n        }).then(editor.windowManager.open);\n      };\n      return { open };\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mceImage', Dialog(editor).open);\n      editor.addCommand('mceUpdateImage', (_ui, data) => {\n        editor.undoManager.transact(() => insertOrUpdateImage(editor, data));\n      });\n    };\n\n    const hasImageClass = node => {\n      const className = node.attr('class');\n      return isNonNullable(className) && /\\bimage\\b/.test(className);\n    };\n    const toggleContentEditableState = state => nodes => {\n      let i = nodes.length;\n      const toggleContentEditable = node => {\n        node.attr('contenteditable', state ? 'true' : null);\n      };\n      while (i--) {\n        const node = nodes[i];\n        if (hasImageClass(node)) {\n          node.attr('contenteditable', state ? 'false' : null);\n          global.each(node.getAll('figcaption'), toggleContentEditable);\n        }\n      }\n    };\n    const setup = editor => {\n      editor.on('PreInit', () => {\n        editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n        editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n      });\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      editor.ui.registry.addToggleButton('image', {\n        icon: 'image',\n        tooltip: 'Insert/edit image',\n        onAction: Dialog(editor).open,\n        onSetup: buttonApi => {\n          buttonApi.setActive(isNonNullable(getSelectedImage(editor)));\n          const unbindSelectorChanged = editor.selection.selectorChangedWithUnbind('img:not([data-mce-object]):not([data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;\n          const unbindEditable = onSetupEditable(editor)(buttonApi);\n          return () => {\n            unbindSelectorChanged();\n            unbindEditable();\n          };\n        }\n      });\n      editor.ui.registry.addMenuItem('image', {\n        icon: 'image',\n        text: 'Image...',\n        onAction: Dialog(editor).open,\n        onSetup: onSetupEditable(editor)\n      });\n      editor.ui.registry.addContextMenu('image', { update: element => editor.selection.isEditable() && (isFigure(element) || isImage(element) && !isPlaceholderImage(element)) ? ['image'] : [] });\n    };\n\n    var Plugin = () => {\n      global$4.add('image', editor => {\n        register$2(editor);\n        setup(editor);\n        register(editor);\n        register$1(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const isString = isType('string');\n    const isObject = isType('object');\n    const isArray = isType('array');\n    const isFunction = isSimpleType('function');\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const option = name => editor => editor.options.get(name);\n    const register = editor => {\n      const registerOption = editor.options.register;\n      const filterProcessor = value => isString(value) || isFunction(value) || isObject(value);\n      registerOption('importcss_merge_classes', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('importcss_exclusive', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('importcss_selector_converter', { processor: 'function' });\n      registerOption('importcss_selector_filter', { processor: filterProcessor });\n      registerOption('importcss_file_filter', { processor: filterProcessor });\n      registerOption('importcss_groups', { processor: 'object[]' });\n      registerOption('importcss_append', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const shouldMergeClasses = option('importcss_merge_classes');\n    const shouldImportExclusive = option('importcss_exclusive');\n    const getSelectorConverter = option('importcss_selector_converter');\n    const getSelectorFilter = option('importcss_selector_filter');\n    const getCssGroups = option('importcss_groups');\n    const shouldAppend = option('importcss_append');\n    const getFileFilter = option('importcss_file_filter');\n    const getSkin = option('skin');\n    const getSkinUrl = option('skin_url');\n\n    const nativePush = Array.prototype.push;\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind = (xs, f) => flatten(map(xs, f));\n\n    const generate = () => {\n      const ungroupedOrder = [];\n      const groupOrder = [];\n      const groups = {};\n      const addItemToGroup = (groupTitle, itemInfo) => {\n        if (groups[groupTitle]) {\n          groups[groupTitle].push(itemInfo);\n        } else {\n          groupOrder.push(groupTitle);\n          groups[groupTitle] = [itemInfo];\n        }\n      };\n      const addItem = itemInfo => {\n        ungroupedOrder.push(itemInfo);\n      };\n      const toFormats = () => {\n        const groupItems = bind(groupOrder, g => {\n          const items = groups[g];\n          return items.length === 0 ? [] : [{\n              title: g,\n              items\n            }];\n        });\n        return groupItems.concat(ungroupedOrder);\n      };\n      return {\n        addItemToGroup,\n        addItem,\n        toFormats\n      };\n    };\n\n    const internalEditorStyle = /^\\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\\w+)+$/;\n    const removeCacheSuffix = url => {\n      const cacheSuffix = global$1.cacheSuffix;\n      if (isString(url)) {\n        url = url.replace('?' + cacheSuffix, '').replace('&' + cacheSuffix, '');\n      }\n      return url;\n    };\n    const isSkinContentCss = (editor, href) => {\n      const skin = getSkin(editor);\n      if (skin) {\n        const skinUrlBase = getSkinUrl(editor);\n        const skinUrl = skinUrlBase ? editor.documentBaseURI.toAbsolute(skinUrlBase) : global$2.baseURL + '/skins/ui/' + skin;\n        const contentSkinUrlPart = global$2.baseURL + '/skins/content/';\n        return href === skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css' || href.indexOf(contentSkinUrlPart) !== -1;\n      }\n      return false;\n    };\n    const compileFilter = filter => {\n      if (isString(filter)) {\n        return value => {\n          return value.indexOf(filter) !== -1;\n        };\n      } else if (filter instanceof RegExp) {\n        return value => {\n          return filter.test(value);\n        };\n      }\n      return filter;\n    };\n    const isCssImportRule = rule => rule.styleSheet;\n    const isCssPageRule = rule => rule.selectorText;\n    const getSelectors = (editor, doc, fileFilter) => {\n      const selectors = [];\n      const contentCSSUrls = {};\n      const append = (styleSheet, imported) => {\n        let href = styleSheet.href;\n        let rules;\n        href = removeCacheSuffix(href);\n        if (!href || fileFilter && !fileFilter(href, imported) || isSkinContentCss(editor, href)) {\n          return;\n        }\n        global.each(styleSheet.imports, styleSheet => {\n          append(styleSheet, true);\n        });\n        try {\n          rules = styleSheet.cssRules || styleSheet.rules;\n        } catch (e) {\n        }\n        global.each(rules, cssRule => {\n          if (isCssImportRule(cssRule) && cssRule.styleSheet) {\n            append(cssRule.styleSheet, true);\n          } else if (isCssPageRule(cssRule)) {\n            global.each(cssRule.selectorText.split(','), selector => {\n              selectors.push(global.trim(selector));\n            });\n          }\n        });\n      };\n      global.each(editor.contentCSS, url => {\n        contentCSSUrls[url] = true;\n      });\n      if (!fileFilter) {\n        fileFilter = (href, imported) => {\n          return imported || contentCSSUrls[href];\n        };\n      }\n      try {\n        global.each(doc.styleSheets, styleSheet => {\n          append(styleSheet);\n        });\n      } catch (e) {\n      }\n      return selectors;\n    };\n    const defaultConvertSelectorToFormat = (editor, selectorText) => {\n      let format = {};\n      const selector = /^(?:([a-z0-9\\-_]+))?(\\.[a-z0-9_\\-\\.]+)$/i.exec(selectorText);\n      if (!selector) {\n        return;\n      }\n      const elementName = selector[1];\n      const classes = selector[2].substr(1).split('.').join(' ');\n      const inlineSelectorElements = global.makeMap('a,img');\n      if (selector[1]) {\n        format = { title: selectorText };\n        if (editor.schema.getTextBlockElements()[elementName]) {\n          format.block = elementName;\n        } else if (editor.schema.getBlockElements()[elementName] || inlineSelectorElements[elementName.toLowerCase()]) {\n          format.selector = elementName;\n        } else {\n          format.inline = elementName;\n        }\n      } else if (selector[2]) {\n        format = {\n          inline: 'span',\n          title: selectorText.substr(1),\n          classes\n        };\n      }\n      if (shouldMergeClasses(editor)) {\n        format.classes = classes;\n      } else {\n        format.attributes = { class: classes };\n      }\n      return format;\n    };\n    const getGroupsBySelector = (groups, selector) => {\n      return global.grep(groups, group => {\n        return !group.filter || group.filter(selector);\n      });\n    };\n    const compileUserDefinedGroups = groups => {\n      return global.map(groups, group => {\n        return global.extend({}, group, {\n          original: group,\n          selectors: {},\n          filter: compileFilter(group.filter)\n        });\n      });\n    };\n    const isExclusiveMode = (editor, group) => {\n      return group === null || shouldImportExclusive(editor);\n    };\n    const isUniqueSelector = (editor, selector, group, globallyUniqueSelectors) => {\n      return !(isExclusiveMode(editor, group) ? selector in globallyUniqueSelectors : selector in group.selectors);\n    };\n    const markUniqueSelector = (editor, selector, group, globallyUniqueSelectors) => {\n      if (isExclusiveMode(editor, group)) {\n        globallyUniqueSelectors[selector] = true;\n      } else {\n        group.selectors[selector] = true;\n      }\n    };\n    const convertSelectorToFormat = (editor, plugin, selector, group) => {\n      let selectorConverter;\n      const converter = getSelectorConverter(editor);\n      if (group && group.selector_converter) {\n        selectorConverter = group.selector_converter;\n      } else if (converter) {\n        selectorConverter = converter;\n      } else {\n        selectorConverter = () => {\n          return defaultConvertSelectorToFormat(editor, selector);\n        };\n      }\n      return selectorConverter.call(plugin, selector, group);\n    };\n    const setup = editor => {\n      editor.on('init', () => {\n        const model = generate();\n        const globallyUniqueSelectors = {};\n        const selectorFilter = compileFilter(getSelectorFilter(editor));\n        const groups = compileUserDefinedGroups(getCssGroups(editor));\n        const processSelector = (selector, group) => {\n          if (isUniqueSelector(editor, selector, group, globallyUniqueSelectors)) {\n            markUniqueSelector(editor, selector, group, globallyUniqueSelectors);\n            const format = convertSelectorToFormat(editor, editor.plugins.importcss, selector, group);\n            if (format) {\n              const formatName = format.name || global$3.DOM.uniqueId();\n              editor.formatter.register(formatName, format);\n              return {\n                title: format.title,\n                format: formatName\n              };\n            }\n          }\n          return null;\n        };\n        global.each(getSelectors(editor, editor.getDoc(), compileFilter(getFileFilter(editor))), selector => {\n          if (!internalEditorStyle.test(selector)) {\n            if (!selectorFilter || selectorFilter(selector)) {\n              const selectorGroups = getGroupsBySelector(groups, selector);\n              if (selectorGroups.length > 0) {\n                global.each(selectorGroups, group => {\n                  const menuItem = processSelector(selector, group);\n                  if (menuItem) {\n                    model.addItemToGroup(group.title, menuItem);\n                  }\n                });\n              } else {\n                const menuItem = processSelector(selector, null);\n                if (menuItem) {\n                  model.addItem(menuItem);\n                }\n              }\n            }\n          }\n        });\n        const items = model.toFormats();\n        editor.dispatch('addStyleModifications', {\n          items,\n          replace: !shouldAppend(editor)\n        });\n      });\n    };\n\n    const get = editor => {\n      const convertSelectorToFormat = selectorText => {\n        return defaultConvertSelectorToFormat(editor, selectorText);\n      };\n      return { convertSelectorToFormat };\n    };\n\n    var Plugin = () => {\n      global$4.add('importcss', editor => {\n        register(editor);\n        setup(editor);\n        return get(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('insertdatetime_dateformat', {\n        processor: 'string',\n        default: editor.translate('%Y-%m-%d')\n      });\n      registerOption('insertdatetime_timeformat', {\n        processor: 'string',\n        default: editor.translate('%H:%M:%S')\n      });\n      registerOption('insertdatetime_formats', {\n        processor: 'string[]',\n        default: [\n          '%H:%M:%S',\n          '%Y-%m-%d',\n          '%I:%M:%S %p',\n          '%D'\n        ]\n      });\n      registerOption('insertdatetime_element', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const getDateFormat = option('insertdatetime_dateformat');\n    const getTimeFormat = option('insertdatetime_timeformat');\n    const getFormats = option('insertdatetime_formats');\n    const shouldInsertTimeElement = option('insertdatetime_element');\n    const getDefaultDateTime = editor => {\n      const formats = getFormats(editor);\n      return formats.length > 0 ? formats[0] : getTimeFormat(editor);\n    };\n\n    const daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n    const daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n    const monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n    const monthsLong = 'January February March April May June July August September October November December'.split(' ');\n    const addZeros = (value, len) => {\n      value = '' + value;\n      if (value.length < len) {\n        for (let i = 0; i < len - value.length; i++) {\n          value = '0' + value;\n        }\n      }\n      return value;\n    };\n    const getDateTime = (editor, fmt, date = new Date()) => {\n      fmt = fmt.replace('%D', '%m/%d/%Y');\n      fmt = fmt.replace('%r', '%I:%M:%S %p');\n      fmt = fmt.replace('%Y', '' + date.getFullYear());\n      fmt = fmt.replace('%y', '' + date.getYear());\n      fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n      fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n      fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n      fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n      fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n      fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n      fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n      fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n      fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n      fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n      fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n      fmt = fmt.replace('%%', '%');\n      return fmt;\n    };\n    const updateElement = (editor, timeElm, computerTime, userTime) => {\n      const newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);\n      editor.dom.replace(newTimeElm, timeElm);\n      editor.selection.select(newTimeElm, true);\n      editor.selection.collapse(false);\n    };\n    const insertDateTime = (editor, format) => {\n      if (shouldInsertTimeElement(editor)) {\n        const userTime = getDateTime(editor, format);\n        let computerTime;\n        if (/%[HMSIp]/.test(format)) {\n          computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M');\n        } else {\n          computerTime = getDateTime(editor, '%Y-%m-%d');\n        }\n        const timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');\n        if (timeElm) {\n          updateElement(editor, timeElm, computerTime, userTime);\n        } else {\n          editor.insertContent('<time datetime=\"' + computerTime + '\">' + userTime + '</time>');\n        }\n      } else {\n        editor.insertContent(getDateTime(editor, format));\n      }\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mceInsertDate', (_ui, value) => {\n        insertDateTime(editor, value !== null && value !== void 0 ? value : getDateFormat(editor));\n      });\n      editor.addCommand('mceInsertTime', (_ui, value) => {\n        insertDateTime(editor, value !== null && value !== void 0 ? value : getTimeFormat(editor));\n      });\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const formats = getFormats(editor);\n      const defaultFormat = Cell(getDefaultDateTime(editor));\n      const insertDateTime = format => editor.execCommand('mceInsertDate', false, format);\n      editor.ui.registry.addSplitButton('insertdatetime', {\n        icon: 'insert-time',\n        tooltip: 'Insert date/time',\n        select: value => value === defaultFormat.get(),\n        fetch: done => {\n          done(global.map(formats, format => ({\n            type: 'choiceitem',\n            text: getDateTime(editor, format),\n            value: format\n          })));\n        },\n        onAction: _api => {\n          insertDateTime(defaultFormat.get());\n        },\n        onItemAction: (_api, value) => {\n          defaultFormat.set(value);\n          insertDateTime(value);\n        },\n        onSetup: onSetupEditable(editor)\n      });\n      const makeMenuItemHandler = format => () => {\n        defaultFormat.set(format);\n        insertDateTime(format);\n      };\n      editor.ui.registry.addNestedMenuItem('insertdatetime', {\n        icon: 'insert-time',\n        text: 'Date/time',\n        getSubmenuItems: () => global.map(formats, format => ({\n          type: 'menuitem',\n          text: getDateTime(editor, format),\n          onAction: makeMenuItemHandler(format)\n        })),\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$1.add('insertdatetime', editor => {\n        register$2(editor);\n        register$1(editor);\n        register(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$5 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq = t => a => t === a;\n    const isString = isType('string');\n    const isObject = isType('object');\n    const isArray = isType('array');\n    const isNull = eq(null);\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isArrayOf = (value, pred) => {\n      if (isArray(value)) {\n        for (let i = 0, len = value.length; i < len; ++i) {\n          if (!pred(value[i])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n\n    const noop = () => {\n    };\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const foldl = (xs, f, acc) => {\n      each$1(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind = (xs, f) => flatten(map(xs, f));\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const option = name => editor => editor.options.get(name);\n    const register$1 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('link_assume_external_targets', {\n        processor: value => {\n          const valid = isString(value) || isBoolean(value);\n          if (valid) {\n            if (value === true) {\n              return {\n                value: 1,\n                valid\n              };\n            } else if (value === 'http' || value === 'https') {\n              return {\n                value,\n                valid\n              };\n            } else {\n              return {\n                value: 0,\n                valid\n              };\n            }\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a string or a boolean.'\n            };\n          }\n        },\n        default: false\n      });\n      registerOption('link_context_toolbar', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('link_list', { processor: value => isString(value) || isFunction(value) || isArrayOf(value, isObject) });\n      registerOption('link_default_target', { processor: 'string' });\n      registerOption('link_default_protocol', {\n        processor: 'string',\n        default: 'https'\n      });\n      registerOption('link_target_list', {\n        processor: value => isBoolean(value) || isArrayOf(value, isObject),\n        default: true\n      });\n      registerOption('link_rel_list', {\n        processor: 'object[]',\n        default: []\n      });\n      registerOption('link_class_list', {\n        processor: 'object[]',\n        default: []\n      });\n      registerOption('link_title', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('allow_unsafe_link_target', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('link_quicklink', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const assumeExternalTargets = option('link_assume_external_targets');\n    const hasContextToolbar = option('link_context_toolbar');\n    const getLinkList = option('link_list');\n    const getDefaultLinkTarget = option('link_default_target');\n    const getDefaultLinkProtocol = option('link_default_protocol');\n    const getTargetList = option('link_target_list');\n    const getRelList = option('link_rel_list');\n    const getLinkClassList = option('link_class_list');\n    const shouldShowLinkTitle = option('link_title');\n    const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n    const useQuickLink = option('link_quicklink');\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const getValue = item => isString(item.value) ? item.value : '';\n    const getText = item => {\n      if (isString(item.text)) {\n        return item.text;\n      } else if (isString(item.title)) {\n        return item.title;\n      } else {\n        return '';\n      }\n    };\n    const sanitizeList = (list, extractValue) => {\n      const out = [];\n      global$4.each(list, item => {\n        const text = getText(item);\n        if (item.menu !== undefined) {\n          const items = sanitizeList(item.menu, extractValue);\n          out.push({\n            text,\n            items\n          });\n        } else {\n          const value = extractValue(item);\n          out.push({\n            text,\n            value\n          });\n        }\n      });\n      return out;\n    };\n    const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));\n    const sanitize = list => sanitizeWith(getValue)(list);\n    const createUi = (name, label) => items => ({\n      name,\n      type: 'listbox',\n      label,\n      items\n    });\n    const ListOptions = {\n      sanitize,\n      sanitizeWith,\n      createUi,\n      getValue\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const filter = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n    const isAnchor = elm => isNonNullable(elm) && elm.nodeName.toLowerCase() === 'a';\n    const isLink = elm => isAnchor(elm) && !!getHref(elm);\n    const collectNodesInRange = (rng, predicate) => {\n      if (rng.collapsed) {\n        return [];\n      } else {\n        const contents = rng.cloneContents();\n        const firstChild = contents.firstChild;\n        const walker = new global$3(firstChild, contents);\n        const elements = [];\n        let current = firstChild;\n        do {\n          if (predicate(current)) {\n            elements.push(current);\n          }\n        } while (current = walker.next());\n        return elements;\n      }\n    };\n    const hasProtocol = url => /^\\w+:/i.test(url);\n    const getHref = elm => {\n      var _a, _b;\n      return (_b = (_a = elm.getAttribute('data-mce-href')) !== null && _a !== void 0 ? _a : elm.getAttribute('href')) !== null && _b !== void 0 ? _b : '';\n    };\n    const applyRelTargetRules = (rel, isUnsafe) => {\n      const rules = ['noopener'];\n      const rels = rel ? rel.split(/\\s+/) : [];\n      const toString = rels => global$4.trim(rels.sort().join(' '));\n      const addTargetRules = rels => {\n        rels = removeTargetRules(rels);\n        return rels.length > 0 ? rels.concat(rules) : rules;\n      };\n      const removeTargetRules = rels => rels.filter(val => global$4.inArray(rules, val) === -1);\n      const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n      return newRels.length > 0 ? toString(newRels) : '';\n    };\n    const trimCaretContainers = text => text.replace(/\\uFEFF/g, '');\n    const getAnchorElement = (editor, selectedElm) => {\n      selectedElm = selectedElm || getLinksInSelection(editor.selection.getRng())[0] || editor.selection.getNode();\n      if (isImageFigure(selectedElm)) {\n        return Optional.from(editor.dom.select('a[href]', selectedElm)[0]);\n      } else {\n        return Optional.from(editor.dom.getParent(selectedElm, 'a[href]'));\n      }\n    };\n    const isInAnchor = (editor, selectedElm) => getAnchorElement(editor, selectedElm).isSome();\n    const getAnchorText = (selection, anchorElm) => {\n      const text = anchorElm.fold(() => selection.getContent({ format: 'text' }), anchorElm => anchorElm.innerText || anchorElm.textContent || '');\n      return trimCaretContainers(text);\n    };\n    const getLinksInSelection = rng => collectNodesInRange(rng, isLink);\n    const getLinks$1 = elements => global$4.grep(elements, isLink);\n    const hasLinks = elements => getLinks$1(elements).length > 0;\n    const hasLinksInSelection = rng => getLinksInSelection(rng).length > 0;\n    const isOnlyTextSelected = editor => {\n      const inlineTextElements = editor.schema.getTextInlineElements();\n      const isElement = elm => elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n      const isInBlockAnchor = getAnchorElement(editor).exists(anchor => anchor.hasAttribute('data-mce-block'));\n      if (isInBlockAnchor) {\n        return false;\n      }\n      const rng = editor.selection.getRng();\n      if (!rng.collapsed) {\n        const elements = collectNodesInRange(rng, isElement);\n        return elements.length === 0;\n      } else {\n        return true;\n      }\n    };\n    const isImageFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n    const getLinkAttrs = data => {\n      const attrs = [\n        'title',\n        'rel',\n        'class',\n        'target'\n      ];\n      return foldl(attrs, (acc, key) => {\n        data[key].each(value => {\n          acc[key] = value.length > 0 ? value : null;\n        });\n        return acc;\n      }, { href: data.href });\n    };\n    const handleExternalTargets = (href, assumeExternalTargets) => {\n      if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n        return assumeExternalTargets + '://' + href;\n      }\n      return href;\n    };\n    const applyLinkOverrides = (editor, linkAttrs) => {\n      const newLinkAttrs = { ...linkAttrs };\n      if (getRelList(editor).length === 0 && !allowUnsafeLinkTarget(editor)) {\n        const newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n        newLinkAttrs.rel = newRel ? newRel : null;\n      }\n      if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n        newLinkAttrs.target = getDefaultLinkTarget(editor);\n      }\n      newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n      return newLinkAttrs;\n    };\n    const updateLink = (editor, anchorElm, text, linkAttrs) => {\n      text.each(text => {\n        if (has(anchorElm, 'innerText')) {\n          anchorElm.innerText = text;\n        } else {\n          anchorElm.textContent = text;\n        }\n      });\n      editor.dom.setAttribs(anchorElm, linkAttrs);\n      editor.selection.select(anchorElm);\n    };\n    const createLink = (editor, selectedElm, text, linkAttrs) => {\n      const dom = editor.dom;\n      if (isImageFigure(selectedElm)) {\n        linkImageFigure(dom, selectedElm, linkAttrs);\n      } else {\n        text.fold(() => {\n          editor.execCommand('mceInsertLink', false, linkAttrs);\n        }, text => {\n          editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(text)));\n        });\n      }\n    };\n    const linkDomMutation = (editor, attachState, data) => {\n      const selectedElm = editor.selection.getNode();\n      const anchorElm = getAnchorElement(editor, selectedElm);\n      const linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n      editor.undoManager.transact(() => {\n        if (data.href === attachState.href) {\n          attachState.attach();\n        }\n        anchorElm.fold(() => {\n          createLink(editor, selectedElm, data.text, linkAttrs);\n        }, elm => {\n          editor.focus();\n          updateLink(editor, elm, data.text, linkAttrs);\n        });\n      });\n    };\n    const unlinkSelection = editor => {\n      const dom = editor.dom, selection = editor.selection;\n      const bookmark = selection.getBookmark();\n      const rng = selection.getRng().cloneRange();\n      const startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n      const endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody());\n      if (startAnchorElm) {\n        rng.setStartBefore(startAnchorElm);\n      }\n      if (endAnchorElm) {\n        rng.setEndAfter(endAnchorElm);\n      }\n      selection.setRng(rng);\n      editor.execCommand('unlink');\n      selection.moveToBookmark(bookmark);\n    };\n    const unlinkDomMutation = editor => {\n      editor.undoManager.transact(() => {\n        const node = editor.selection.getNode();\n        if (isImageFigure(node)) {\n          unlinkImageFigure(editor, node);\n        } else {\n          unlinkSelection(editor);\n        }\n        editor.focus();\n      });\n    };\n    const unwrapOptions = data => {\n      const {\n        class: cls,\n        href,\n        rel,\n        target,\n        text,\n        title\n      } = data;\n      return filter({\n        class: cls.getOrNull(),\n        href,\n        rel: rel.getOrNull(),\n        target: target.getOrNull(),\n        text: text.getOrNull(),\n        title: title.getOrNull()\n      }, (v, _k) => isNull(v) === false);\n    };\n    const sanitizeData = (editor, data) => {\n      const getOption = editor.options.get;\n      const uriOptions = {\n        allow_html_data_urls: getOption('allow_html_data_urls'),\n        allow_script_urls: getOption('allow_script_urls'),\n        allow_svg_data_urls: getOption('allow_svg_data_urls')\n      };\n      const href = data.href;\n      return {\n        ...data,\n        href: global$2.isDomSafe(href, 'a', uriOptions) ? href : ''\n      };\n    };\n    const link = (editor, attachState, data) => {\n      const sanitizedData = sanitizeData(editor, data);\n      editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData);\n    };\n    const unlink = editor => {\n      editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n    };\n    const unlinkImageFigure = (editor, fig) => {\n      var _a;\n      const img = editor.dom.select('img', fig)[0];\n      if (img) {\n        const a = editor.dom.getParents(img, 'a[href]', fig)[0];\n        if (a) {\n          (_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(img, a);\n          editor.dom.remove(a);\n        }\n      }\n    };\n    const linkImageFigure = (dom, fig, attrs) => {\n      var _a;\n      const img = dom.select('img', fig)[0];\n      if (img) {\n        const a = dom.create('a', attrs);\n        (_a = img.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(a, img);\n        a.appendChild(img);\n      }\n    };\n\n    const isListGroup = item => hasNonNullableKey(item, 'items');\n    const findTextByValue = (value, catalog) => findMap(catalog, item => {\n      if (isListGroup(item)) {\n        return findTextByValue(value, item.items);\n      } else {\n        return someIf(item.value === value, item);\n      }\n    });\n    const getDelta = (persistentText, fieldName, catalog, data) => {\n      const value = data[fieldName];\n      const hasPersistentText = persistentText.length > 0;\n      return value !== undefined ? findTextByValue(value, catalog).map(i => ({\n        url: {\n          value: i.value,\n          meta: {\n            text: hasPersistentText ? persistentText : i.text,\n            attach: noop\n          }\n        },\n        text: hasPersistentText ? persistentText : i.text\n      })) : Optional.none();\n    };\n    const findCatalog = (catalogs, fieldName) => {\n      if (fieldName === 'link') {\n        return catalogs.link;\n      } else if (fieldName === 'anchor') {\n        return catalogs.anchor;\n      } else {\n        return Optional.none();\n      }\n    };\n    const init = (initialData, linkCatalog) => {\n      const persistentData = {\n        text: initialData.text,\n        title: initialData.title\n      };\n      const getTitleFromUrlChange = url => {\n        var _a;\n        return someIf(persistentData.title.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.title).getOr(''));\n      };\n      const getTextFromUrlChange = url => {\n        var _a;\n        return someIf(persistentData.text.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.text).getOr(url.value));\n      };\n      const onUrlChange = data => {\n        const text = getTextFromUrlChange(data.url);\n        const title = getTitleFromUrlChange(data.url);\n        if (text.isSome() || title.isSome()) {\n          return Optional.some({\n            ...text.map(text => ({ text })).getOr({}),\n            ...title.map(title => ({ title })).getOr({})\n          });\n        } else {\n          return Optional.none();\n        }\n      };\n      const onCatalogChange = (data, change) => {\n        const catalog = findCatalog(linkCatalog, change).getOr([]);\n        return getDelta(persistentData.text, change, catalog, data);\n      };\n      const onChange = (getData, change) => {\n        const name = change.name;\n        if (name === 'url') {\n          return onUrlChange(getData());\n        } else if (contains([\n            'anchor',\n            'link'\n          ], name)) {\n          return onCatalogChange(getData(), name);\n        } else if (name === 'text' || name === 'title') {\n          persistentData[name] = getData()[name];\n          return Optional.none();\n        } else {\n          return Optional.none();\n        }\n      };\n      return { onChange };\n    };\n    const DialogChanges = {\n      init,\n      getDelta\n    };\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n    const delayedConfirm = (editor, message, callback) => {\n      const rng = editor.selection.getRng();\n      global$1.setEditorTimeout(editor, () => {\n        editor.windowManager.confirm(message, state => {\n          editor.selection.setRng(rng);\n          callback(state);\n        });\n      });\n    };\n    const tryEmailTransform = data => {\n      const url = data.href;\n      const suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1;\n      return suggestMailTo ? Optional.some({\n        message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n        preprocess: oldData => ({\n          ...oldData,\n          href: 'mailto:' + url\n        })\n      }) : Optional.none();\n    };\n    const tryProtocolTransform = (assumeExternalTargets, defaultLinkProtocol) => data => {\n      const url = data.href;\n      const suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url);\n      return suggestProtocol ? Optional.some({\n        message: `The URL you entered seems to be an external link. Do you want to add the required ${ defaultLinkProtocol }:// prefix?`,\n        preprocess: oldData => ({\n          ...oldData,\n          href: defaultLinkProtocol + '://' + url\n        })\n      }) : Optional.none();\n    };\n    const preprocess = (editor, data) => findMap([\n      tryEmailTransform,\n      tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n    ], f => f(data)).fold(() => Promise.resolve(data), transform => new Promise(callback => {\n      delayedConfirm(editor, transform.message, state => {\n        callback(state ? transform.preprocess(data) : data);\n      });\n    }));\n    const DialogConfirms = { preprocess };\n\n    const getAnchors = editor => {\n      const anchorNodes = editor.dom.select('a:not([href])');\n      const anchors = bind(anchorNodes, anchor => {\n        const id = anchor.name || anchor.id;\n        return id ? [{\n            text: id,\n            value: '#' + id\n          }] : [];\n      });\n      return anchors.length > 0 ? Optional.some([{\n          text: 'None',\n          value: ''\n        }].concat(anchors)) : Optional.none();\n    };\n    const AnchorListOptions = { getAnchors };\n\n    const getClasses = editor => {\n      const list = getLinkClassList(editor);\n      if (list.length > 0) {\n        return ListOptions.sanitize(list);\n      }\n      return Optional.none();\n    };\n    const ClassListOptions = { getClasses };\n\n    const parseJson = text => {\n      try {\n        return Optional.some(JSON.parse(text));\n      } catch (err) {\n        return Optional.none();\n      }\n    };\n    const getLinks = editor => {\n      const extractor = item => editor.convertURL(item.value || item.url || '', 'href');\n      const linkList = getLinkList(editor);\n      return new Promise(resolve => {\n        if (isString(linkList)) {\n          fetch(linkList).then(res => res.ok ? res.text().then(parseJson) : Promise.reject()).then(resolve, () => resolve(Optional.none()));\n        } else if (isFunction(linkList)) {\n          linkList(output => resolve(Optional.some(output)));\n        } else {\n          resolve(Optional.from(linkList));\n        }\n      }).then(optItems => optItems.bind(ListOptions.sanitizeWith(extractor)).map(items => {\n        if (items.length > 0) {\n          const noneItem = [{\n              text: 'None',\n              value: ''\n            }];\n          return noneItem.concat(items);\n        } else {\n          return items;\n        }\n      }));\n    };\n    const LinkListOptions = { getLinks };\n\n    const getRels = (editor, initialTarget) => {\n      const list = getRelList(editor);\n      if (list.length > 0) {\n        const isTargetBlank = is(initialTarget, '_blank');\n        const enforceSafe = allowUnsafeLinkTarget(editor) === false;\n        const safeRelExtractor = item => applyRelTargetRules(ListOptions.getValue(item), isTargetBlank);\n        const sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n        return sanitizer(list);\n      }\n      return Optional.none();\n    };\n    const RelOptions = { getRels };\n\n    const fallbacks = [\n      {\n        text: 'Current window',\n        value: ''\n      },\n      {\n        text: 'New window',\n        value: '_blank'\n      }\n    ];\n    const getTargets = editor => {\n      const list = getTargetList(editor);\n      if (isArray(list)) {\n        return ListOptions.sanitize(list).orThunk(() => Optional.some(fallbacks));\n      } else if (list === false) {\n        return Optional.none();\n      }\n      return Optional.some(fallbacks);\n    };\n    const TargetOptions = { getTargets };\n\n    const nonEmptyAttr = (dom, elem, name) => {\n      const val = dom.getAttrib(elem, name);\n      return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n    };\n    const extractFromAnchor = (editor, anchor) => {\n      const dom = editor.dom;\n      const onlyText = isOnlyTextSelected(editor);\n      const text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n      const url = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'href')));\n      const target = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'target')));\n      const rel = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'rel'));\n      const linkClass = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'class'));\n      const title = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'title'));\n      return {\n        url,\n        text,\n        title,\n        target,\n        rel,\n        linkClass\n      };\n    };\n    const collect = (editor, linkNode) => LinkListOptions.getLinks(editor).then(links => {\n      const anchor = extractFromAnchor(editor, linkNode);\n      return {\n        anchor,\n        catalogs: {\n          targets: TargetOptions.getTargets(editor),\n          rels: RelOptions.getRels(editor, anchor.target),\n          classes: ClassListOptions.getClasses(editor),\n          anchor: AnchorListOptions.getAnchors(editor),\n          link: links\n        },\n        optNode: linkNode,\n        flags: { titleEnabled: shouldShowLinkTitle(editor) }\n      };\n    });\n    const DialogInfo = { collect };\n\n    const handleSubmit = (editor, info) => api => {\n      const data = api.getData();\n      if (!data.url.value) {\n        unlink(editor);\n        api.close();\n        return;\n      }\n      const getChangedValue = key => Optional.from(data[key]).filter(value => !is(info.anchor[key], value));\n      const changedData = {\n        href: data.url.value,\n        text: getChangedValue('text'),\n        target: getChangedValue('target'),\n        rel: getChangedValue('rel'),\n        class: getChangedValue('linkClass'),\n        title: getChangedValue('title')\n      };\n      const attachState = {\n        href: data.url.value,\n        attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : noop\n      };\n      DialogConfirms.preprocess(editor, changedData).then(pData => {\n        link(editor, attachState, pData);\n      });\n      api.close();\n    };\n    const collectData = editor => {\n      const anchorNode = getAnchorElement(editor);\n      return DialogInfo.collect(editor, anchorNode);\n    };\n    const getInitialData = (info, defaultTarget) => {\n      const anchor = info.anchor;\n      const url = anchor.url.getOr('');\n      return {\n        url: {\n          value: url,\n          meta: { original: { value: url } }\n        },\n        text: anchor.text.getOr(''),\n        title: anchor.title.getOr(''),\n        anchor: url,\n        link: url,\n        rel: anchor.rel.getOr(''),\n        target: anchor.target.or(defaultTarget).getOr(''),\n        linkClass: anchor.linkClass.getOr('')\n      };\n    };\n    const makeDialog = (settings, onSubmit, editor) => {\n      const urlInput = [{\n          name: 'url',\n          type: 'urlinput',\n          filetype: 'file',\n          label: 'URL',\n          picker_text: 'Browse links'\n        }];\n      const displayText = settings.anchor.text.map(() => ({\n        name: 'text',\n        type: 'input',\n        label: 'Text to display'\n      })).toArray();\n      const titleText = settings.flags.titleEnabled ? [{\n          name: 'title',\n          type: 'input',\n          label: 'Title'\n        }] : [];\n      const defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n      const initialData = getInitialData(settings, defaultTarget);\n      const catalogs = settings.catalogs;\n      const dialogDelta = DialogChanges.init(initialData, catalogs);\n      const body = {\n        type: 'panel',\n        items: flatten([\n          urlInput,\n          displayText,\n          titleText,\n          cat([\n            catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n            catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n            catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n            catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n            catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n          ])\n        ])\n      };\n      return {\n        title: 'Insert/Edit Link',\n        size: 'normal',\n        body,\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        initialData,\n        onChange: (api, {name}) => {\n          dialogDelta.onChange(api.getData, { name }).each(newData => {\n            api.setData(newData);\n          });\n        },\n        onSubmit\n      };\n    };\n    const open$1 = editor => {\n      const data = collectData(editor);\n      data.then(info => {\n        const onSubmit = handleSubmit(editor, info);\n        return makeDialog(info, onSubmit, editor);\n      }).then(spec => {\n        editor.windowManager.open(spec);\n      });\n    };\n\n    const register = editor => {\n      editor.addCommand('mceLink', (_ui, value) => {\n        if ((value === null || value === void 0 ? void 0 : value.dialog) === true || !useQuickLink(editor)) {\n          open$1(editor);\n        } else {\n          editor.dispatch('contexttoolbar-show', { toolbarKey: 'quicklink' });\n        }\n      });\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n    const appendClickRemove = (link, evt) => {\n      document.body.appendChild(link);\n      link.dispatchEvent(evt);\n      document.body.removeChild(link);\n    };\n    const open = url => {\n      const link = document.createElement('a');\n      link.target = '_blank';\n      link.href = url;\n      link.rel = 'noreferrer noopener';\n      const evt = document.createEvent('MouseEvents');\n      evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n      appendClickRemove(link, evt);\n    };\n\n    const getLink = (editor, elm) => editor.dom.getParent(elm, 'a[href]');\n    const getSelectedLink = editor => getLink(editor, editor.selection.getStart());\n    const hasOnlyAltModifier = e => {\n      return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n    };\n    const gotoLink = (editor, a) => {\n      if (a) {\n        const href = getHref(a);\n        if (/^#/.test(href)) {\n          const targetEl = editor.dom.select(href);\n          if (targetEl.length) {\n            editor.selection.scrollIntoView(targetEl[0], true);\n          }\n        } else {\n          open(a.href);\n        }\n      }\n    };\n    const openDialog = editor => () => {\n      editor.execCommand('mceLink', false, { dialog: true });\n    };\n    const gotoSelectedLink = editor => () => {\n      gotoLink(editor, getSelectedLink(editor));\n    };\n    const setupGotoLinks = editor => {\n      editor.on('click', e => {\n        const link = getLink(editor, e.target);\n        if (link && global.metaKeyPressed(e)) {\n          e.preventDefault();\n          gotoLink(editor, link);\n        }\n      });\n      editor.on('keydown', e => {\n        if (!e.isDefaultPrevented() && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n          const link = getSelectedLink(editor);\n          if (link) {\n            e.preventDefault();\n            gotoLink(editor, link);\n          }\n        }\n      });\n    };\n    const toggleState = (editor, toggler) => {\n      editor.on('NodeChange', toggler);\n      return () => editor.off('NodeChange', toggler);\n    };\n    const toggleLinkState = editor => api => {\n      const updateState = () => {\n        api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));\n        api.setEnabled(editor.selection.isEditable());\n      };\n      updateState();\n      return toggleState(editor, updateState);\n    };\n    const toggleLinkMenuState = editor => api => {\n      const updateState = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      updateState();\n      return toggleState(editor, updateState);\n    };\n    const hasExactlyOneLinkInSelection = editor => {\n      const links = editor.selection.isCollapsed() ? getLinks$1(editor.dom.getParents(editor.selection.getStart())) : getLinksInSelection(editor.selection.getRng());\n      return links.length === 1;\n    };\n    const toggleGotoLinkState = editor => api => {\n      const updateState = () => api.setEnabled(hasExactlyOneLinkInSelection(editor));\n      updateState();\n      return toggleState(editor, updateState);\n    };\n    const toggleUnlinkState = editor => api => {\n      const hasLinks$1 = parents => hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n      const parents = editor.dom.getParents(editor.selection.getStart());\n      const updateEnabled = parents => {\n        api.setEnabled(hasLinks$1(parents) && editor.selection.isEditable());\n      };\n      updateEnabled(parents);\n      return toggleState(editor, e => updateEnabled(e.parents));\n    };\n\n    const setup = editor => {\n      editor.addShortcut('Meta+K', '', () => {\n        editor.execCommand('mceLink');\n      });\n    };\n\n    const setupButtons = editor => {\n      editor.ui.registry.addToggleButton('link', {\n        icon: 'link',\n        tooltip: 'Insert/edit link',\n        onAction: openDialog(editor),\n        onSetup: toggleLinkState(editor)\n      });\n      editor.ui.registry.addButton('openlink', {\n        icon: 'new-tab',\n        tooltip: 'Open link',\n        onAction: gotoSelectedLink(editor),\n        onSetup: toggleGotoLinkState(editor)\n      });\n      editor.ui.registry.addButton('unlink', {\n        icon: 'unlink',\n        tooltip: 'Remove link',\n        onAction: () => unlink(editor),\n        onSetup: toggleUnlinkState(editor)\n      });\n    };\n    const setupMenuItems = editor => {\n      editor.ui.registry.addMenuItem('openlink', {\n        text: 'Open link',\n        icon: 'new-tab',\n        onAction: gotoSelectedLink(editor),\n        onSetup: toggleGotoLinkState(editor)\n      });\n      editor.ui.registry.addMenuItem('link', {\n        icon: 'link',\n        text: 'Link...',\n        shortcut: 'Meta+K',\n        onSetup: toggleLinkMenuState(editor),\n        onAction: openDialog(editor)\n      });\n      editor.ui.registry.addMenuItem('unlink', {\n        icon: 'unlink',\n        text: 'Remove link',\n        onAction: () => unlink(editor),\n        onSetup: toggleUnlinkState(editor)\n      });\n    };\n    const setupContextMenu = editor => {\n      const inLink = 'link unlink openlink';\n      const noLink = 'link';\n      editor.ui.registry.addContextMenu('link', {\n        update: element => {\n          const isEditable = editor.dom.isEditable(element);\n          if (!isEditable) {\n            return '';\n          }\n          return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n        }\n      });\n    };\n    const setupContextToolbars = editor => {\n      const collapseSelectionToEnd = editor => {\n        editor.selection.collapse(false);\n      };\n      const onSetupLink = buttonApi => {\n        const node = editor.selection.getNode();\n        buttonApi.setEnabled(isInAnchor(editor, node));\n        return noop;\n      };\n      const getLinkText = value => {\n        const anchor = getAnchorElement(editor);\n        const onlyText = isOnlyTextSelected(editor);\n        if (anchor.isNone() && onlyText) {\n          const text = getAnchorText(editor.selection, anchor);\n          return someIf(text.length === 0, value);\n        } else {\n          return Optional.none();\n        }\n      };\n      editor.ui.registry.addContextForm('quicklink', {\n        launch: {\n          type: 'contextformtogglebutton',\n          icon: 'link',\n          tooltip: 'Link',\n          onSetup: toggleLinkState(editor)\n        },\n        label: 'Link',\n        predicate: node => hasContextToolbar(editor) && isInAnchor(editor, node),\n        initValue: () => {\n          const elm = getAnchorElement(editor);\n          return elm.fold(constant(''), getHref);\n        },\n        commands: [\n          {\n            type: 'contextformtogglebutton',\n            icon: 'link',\n            tooltip: 'Link',\n            primary: true,\n            onSetup: buttonApi => {\n              const node = editor.selection.getNode();\n              buttonApi.setActive(isInAnchor(editor, node));\n              return toggleLinkState(editor)(buttonApi);\n            },\n            onAction: formApi => {\n              const value = formApi.getValue();\n              const text = getLinkText(value);\n              const attachState = {\n                href: value,\n                attach: noop\n              };\n              link(editor, attachState, {\n                href: value,\n                text,\n                title: Optional.none(),\n                rel: Optional.none(),\n                target: Optional.none(),\n                class: Optional.none()\n              });\n              collapseSelectionToEnd(editor);\n              formApi.hide();\n            }\n          },\n          {\n            type: 'contextformbutton',\n            icon: 'unlink',\n            tooltip: 'Remove link',\n            onSetup: onSetupLink,\n            onAction: formApi => {\n              unlink(editor);\n              formApi.hide();\n            }\n          },\n          {\n            type: 'contextformbutton',\n            icon: 'new-tab',\n            tooltip: 'Open link',\n            onSetup: onSetupLink,\n            onAction: formApi => {\n              gotoSelectedLink(editor)();\n              formApi.hide();\n            }\n          }\n        ]\n      });\n    };\n\n    var Plugin = () => {\n      global$5.add('link', editor => {\n        register$1(editor);\n        setupButtons(editor);\n        setupMenuItems(editor);\n        setupContextMenu(editor);\n        setupContextToolbars(editor);\n        setupGotoLinks(editor);\n        register(editor);\n        setup(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$7 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isArray = isType$1('array');\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n\n    const noop = () => {\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const not = f => t => !f(t);\n    const never = constant(false);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const contains$1 = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const filter$1 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const groupBy = (xs, f) => {\n      if (xs.length === 0) {\n        return [];\n      } else {\n        let wasType = f(xs[0]);\n        const r = [];\n        let group = [];\n        for (let i = 0, len = xs.length; i < len; i++) {\n          const x = xs[i];\n          const type = f(x);\n          if (type !== wasType) {\n            r.push(group);\n            group = [];\n          }\n          wasType = type;\n          group.push(x);\n        }\n        if (group.length !== 0) {\n          r.push(group);\n        }\n        return r;\n      }\n    };\n    const foldl = (xs, f, acc) => {\n      each$1(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind = (xs, f) => flatten(map(xs, f));\n    const reverse = xs => {\n      const r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$1(xs, 0);\n    const last = xs => get$1(xs, xs.length - 1);\n    const unique = (xs, comparator) => {\n      const r = [];\n      const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$1(r, x);\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (!isDuplicated(x)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n\n    const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n    const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom$1(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom$1(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom$1(node);\n    };\n    const fromDom$1 = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom: fromDom$1,\n      fromPoint\n    };\n\n    const is$1 = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n\n    const eq = (e1, e2) => e1.dom === e2.dom;\n    const contains = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    const is = is$1;\n\n    const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const path = (parts, scope) => {\n      let o = scope !== undefined && scope !== null ? scope : Global;\n      for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    const resolve = (p, scope) => {\n      const parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    const unsafe = (name, scope) => {\n      return resolve(name, scope);\n    };\n    const getOrDie = (name, scope) => {\n      const actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n\n    const getPrototypeOf = Object.getPrototypeOf;\n    const sandHTMLElement = scope => {\n      return getOrDie('HTMLElement', scope);\n    };\n    const isPrototypeOf = x => {\n      const scope = resolve('ownerDocument.defaultView', x);\n      return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n    };\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n    const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n    const isElement$1 = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement$1(e) && name(e) === tag;\n\n    const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n    const child = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child(element, 0);\n    const lastChild = element => child(element, element.dom.childNodes.length - 1);\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$3 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$2 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n    };\n\n    const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is = (element, selector) => is$1(element, selector);\n      return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n    };\n\n    const closest = target => closest$1(target, '[contenteditable]');\n    const isEditable = (element, assumeEditable = false) => {\n      if (inBody(element)) {\n        return element.dom.isContentEditable;\n      } else {\n        return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n      }\n    };\n    const getRaw = element => element.dom.contentEditable;\n\n    const before$1 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$1(v, element);\n        });\n      }, v => {\n        before$1(v, element);\n      });\n    };\n    const prepend = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$1(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$1 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n\n    const before = (marker, elements) => {\n      each$1(elements, x => {\n        before$1(marker, x);\n      });\n    };\n    const append = (parent, elements) => {\n      each$1(elements, x => {\n        append$1(parent, x);\n      });\n    };\n\n    const empty = element => {\n      element.dom.textContent = '';\n      each$1(children(element), rogue => {\n        remove(rogue);\n      });\n    };\n    const remove = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n\n    var global$6 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n    var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n    const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n    const keys = Object.keys;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const filter = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const setAll = (element, attrs) => {\n      const dom = element.dom;\n      each(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const deep = original => clone(original, true);\n    const shallowAs = (original, tag) => {\n      const nu = SugarElement.fromTag(tag);\n      const attributes = clone$1(original);\n      setAll(nu, attributes);\n      return nu;\n    };\n    const mutate = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      after(original, nu);\n      const children$1 = children(original);\n      append(nu, children$1);\n      remove(original);\n      return nu;\n    };\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const matchNodeName = name => node => isNonNullable(node) && node.nodeName.toLowerCase() === name;\n    const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n    const isTextNode$1 = node => isNonNullable(node) && node.nodeType === 3;\n    const isElement = node => isNonNullable(node) && node.nodeType === 1;\n    const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n    const isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n    const isOlNode = matchNodeName('ol');\n    const isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n    const isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n    const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n    const isBr = matchNodeName('br');\n    const isFirstChild = node => {\n      var _a;\n      return ((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === node;\n    };\n    const isTextBlock = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getTextBlockElements();\n    const isBlock = (node, blockElements) => isNonNullable(node) && node.nodeName in blockElements;\n    const isVoid = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getVoidElements();\n    const isBogusBr = (dom, node) => {\n      if (!isBr(node)) {\n        return false;\n      }\n      return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n    };\n    const isEmpty$2 = (dom, elm, keepBookmarks) => {\n      const empty = dom.isEmpty(elm);\n      if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n        return false;\n      }\n      return empty;\n    };\n    const isChildOfBody = (dom, elm) => dom.isChildOf(elm, dom.getRoot());\n\n    const option = name => editor => editor.options.get(name);\n    const register$3 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('lists_indent_on_tab', {\n        processor: 'boolean',\n        default: true\n      });\n    };\n    const shouldIndentOnTab = option('lists_indent_on_tab');\n    const getForcedRootBlock = option('forced_root_block');\n    const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n\n    const createTextBlock = (editor, contentNode) => {\n      const dom = editor.dom;\n      const blockElements = editor.schema.getBlockElements();\n      const fragment = dom.createFragment();\n      const blockName = getForcedRootBlock(editor);\n      const blockAttrs = getForcedRootBlockAttrs(editor);\n      let node;\n      let textBlock;\n      let hasContentNode = false;\n      textBlock = dom.create(blockName, blockAttrs);\n      if (!isBlock(contentNode.firstChild, blockElements)) {\n        fragment.appendChild(textBlock);\n      }\n      while (node = contentNode.firstChild) {\n        const nodeName = node.nodeName;\n        if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n          hasContentNode = true;\n        }\n        if (isBlock(node, blockElements)) {\n          fragment.appendChild(node);\n          textBlock = null;\n        } else {\n          if (!textBlock) {\n            textBlock = dom.create(blockName, blockAttrs);\n            fragment.appendChild(textBlock);\n          }\n          textBlock.appendChild(node);\n        }\n      }\n      if (!hasContentNode && textBlock) {\n        textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n      }\n      return fragment;\n    };\n\n    const DOM$2 = global$3.DOM;\n    const splitList = (editor, list, li) => {\n      const removeAndKeepBookmarks = targetNode => {\n        const parent = targetNode.parentNode;\n        if (parent) {\n          global$2.each(bookmarks, node => {\n            parent.insertBefore(node, li.parentNode);\n          });\n        }\n        DOM$2.remove(targetNode);\n      };\n      const bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list);\n      const newBlock = createTextBlock(editor, li);\n      const tmpRng = DOM$2.createRng();\n      tmpRng.setStartAfter(li);\n      tmpRng.setEndAfter(list);\n      const fragment = tmpRng.extractContents();\n      for (let node = fragment.firstChild; node; node = node.firstChild) {\n        if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n          DOM$2.remove(node);\n          break;\n        }\n      }\n      if (!editor.dom.isEmpty(fragment)) {\n        DOM$2.insertAfter(fragment, list);\n      }\n      DOM$2.insertAfter(newBlock, list);\n      const parent = li.parentElement;\n      if (parent && isEmpty$2(editor.dom, parent)) {\n        removeAndKeepBookmarks(parent);\n      }\n      DOM$2.remove(li);\n      if (isEmpty$2(editor.dom, list)) {\n        DOM$2.remove(list);\n      }\n    };\n\n    const isDescriptionDetail = isTag('dd');\n    const isDescriptionTerm = isTag('dt');\n    const outdentDlItem = (editor, item) => {\n      if (isDescriptionDetail(item)) {\n        mutate(item, 'dt');\n      } else if (isDescriptionTerm(item)) {\n        parentElement(item).each(dl => splitList(editor, dl.dom, item.dom));\n      }\n    };\n    const indentDlItem = item => {\n      if (isDescriptionTerm(item)) {\n        mutate(item, 'dd');\n      }\n    };\n    const dlIndentation = (editor, indentation, dlItems) => {\n      if (indentation === 'Indent') {\n        each$1(dlItems, indentDlItem);\n      } else {\n        each$1(dlItems, item => outdentDlItem(editor, item));\n      }\n    };\n\n    const getNormalizedPoint = (container, offset) => {\n      if (isTextNode$1(container)) {\n        return {\n          container,\n          offset\n        };\n      }\n      const node = global$6.getNode(container, offset);\n      if (isTextNode$1(node)) {\n        return {\n          container: node,\n          offset: offset >= container.childNodes.length ? node.data.length : 0\n        };\n      } else if (node.previousSibling && isTextNode$1(node.previousSibling)) {\n        return {\n          container: node.previousSibling,\n          offset: node.previousSibling.data.length\n        };\n      } else if (node.nextSibling && isTextNode$1(node.nextSibling)) {\n        return {\n          container: node.nextSibling,\n          offset: 0\n        };\n      }\n      return {\n        container,\n        offset\n      };\n    };\n    const normalizeRange = rng => {\n      const outRng = rng.cloneRange();\n      const rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n      outRng.setStart(rangeStart.container, rangeStart.offset);\n      const rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n      outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n      return outRng;\n    };\n\n    const listNames = [\n      'OL',\n      'UL',\n      'DL'\n    ];\n    const listSelector = listNames.join(',');\n    const getParentList = (editor, node) => {\n      const selectionStart = node || editor.selection.getStart(true);\n      return editor.dom.getParent(selectionStart, listSelector, getClosestListHost(editor, selectionStart));\n    };\n    const isParentListSelected = (parentList, selectedBlocks) => isNonNullable(parentList) && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n    const findSubLists = parentList => filter$1(parentList.querySelectorAll(listSelector), isListNode);\n    const getSelectedSubLists = editor => {\n      const parentList = getParentList(editor);\n      const selectedBlocks = editor.selection.getSelectedBlocks();\n      if (isParentListSelected(parentList, selectedBlocks)) {\n        return findSubLists(parentList);\n      } else {\n        return filter$1(selectedBlocks, elm => {\n          return isListNode(elm) && parentList !== elm;\n        });\n      }\n    };\n    const findParentListItemsNodes = (editor, elms) => {\n      const listItemsElms = global$2.map(elms, elm => {\n        const parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListHost(editor, elm));\n        return parentLi ? parentLi : elm;\n      });\n      return unique(listItemsElms);\n    };\n    const getSelectedListItems = editor => {\n      const selectedBlocks = editor.selection.getSelectedBlocks();\n      return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n    };\n    const getSelectedDlItems = editor => filter$1(getSelectedListItems(editor), isDlItemNode);\n    const getClosestEditingHost = (editor, elm) => {\n      const parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n      return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n    };\n    const isListHost = (schema, node) => !isListNode(node) && !isListItemNode(node) && exists(listNames, listName => schema.isValidChild(node.nodeName, listName));\n    const getClosestListHost = (editor, elm) => {\n      const parentBlocks = editor.dom.getParents(elm, editor.dom.isBlock);\n      const parentBlock = find(parentBlocks, elm => isListHost(editor.schema, elm));\n      return parentBlock.getOr(editor.getBody());\n    };\n    const isListInsideAnLiWithFirstAndLastNotListElement = list => parent(list).exists(parent => isListItemNode(parent.dom) && firstChild(parent).exists(firstChild => !isListNode(firstChild.dom)) && lastChild(parent).exists(lastChild => !isListNode(lastChild.dom)));\n    const findLastParentListNode = (editor, elm) => {\n      const parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n      return last(parentLists);\n    };\n    const getSelectedLists = editor => {\n      const firstList = findLastParentListNode(editor, editor.selection.getStart());\n      const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);\n      return firstList.toArray().concat(subsequentLists);\n    };\n    const getParentLists = editor => {\n      const elm = editor.selection.getStart();\n      return editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n    };\n    const getSelectedListRoots = editor => {\n      const selectedLists = getSelectedLists(editor);\n      const parentLists = getParentLists(editor);\n      return find(parentLists, p => isListInsideAnLiWithFirstAndLastNotListElement(SugarElement.fromDom(p))).fold(() => getUniqueListRoots(editor, selectedLists), l => [l]);\n    };\n    const getUniqueListRoots = (editor, lists) => {\n      const listRoots = map(lists, list => findLastParentListNode(editor, list).getOr(list));\n      return unique(listRoots);\n    };\n\n    const isCustomList = list => /\\btox\\-/.test(list.className);\n    const inList = (parents, listName) => findUntil(parents, isListNode, isTableCellNode).exists(list => list.nodeName === listName && !isCustomList(list));\n    const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n    const selectionIsWithinNonEditableList = editor => {\n      const parentList = getParentList(editor);\n      return isWithinNonEditable(editor, parentList);\n    };\n    const isWithinNonEditableList = (editor, element) => {\n      const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n      return isWithinNonEditable(editor, parentList);\n    };\n    const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n      const initialNode = editor.selection.getNode();\n      nodeChangeHandler({\n        parents: editor.dom.getParents(initialNode),\n        element: initialNode\n      });\n      editor.on('NodeChange', nodeChangeHandler);\n      return () => editor.off('NodeChange', nodeChangeHandler);\n    };\n\n    const fromElements = (elements, scope) => {\n      const doc = scope || document;\n      const fragment = doc.createDocumentFragment();\n      each$1(elements, element => {\n        fragment.appendChild(element.dom);\n      });\n      return SugarElement.fromDom(fragment);\n    };\n\n    const fireListEvent = (editor, action, element) => editor.dispatch('ListMutation', {\n      action,\n      element\n    });\n\n    const blank = r => s => s.replace(r, '');\n    const trim = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const isEmpty$1 = s => !isNotEmpty(s);\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const set = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n\n    const isList = el => is(el, 'OL,UL');\n    const hasFirstChildList = el => firstChild(el).exists(isList);\n    const hasLastChildList = el => lastChild(el).exists(isList);\n\n    const isEntryList = entry => 'listAttributes' in entry;\n    const isEntryNoList = entry => 'isInPreviousLi' in entry;\n    const isEntryComment = entry => 'isComment' in entry;\n    const isIndented = entry => entry.depth > 0;\n    const isSelected = entry => entry.isSelected;\n    const cloneItemContent = li => {\n      const children$1 = children(li);\n      const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n      return map(content, deep);\n    };\n    const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({\n      depth,\n      dirty: false,\n      isSelected,\n      content: cloneItemContent(li),\n      itemAttributes: clone$1(li),\n      listAttributes: clone$1(list),\n      listType: name(list),\n      isInPreviousLi: false\n    }));\n\n    const joinSegment = (parent, child) => {\n      append$1(parent.item, child.list);\n    };\n    const joinSegments = segments => {\n      for (let i = 1; i < segments.length; i++) {\n        joinSegment(segments[i - 1], segments[i]);\n      }\n    };\n    const appendSegments = (head$1, tail) => {\n      lift2(last(head$1), head(tail), joinSegment);\n    };\n    const createSegment = (scope, listType) => {\n      const segment = {\n        list: SugarElement.fromTag(listType, scope),\n        item: SugarElement.fromTag('li', scope)\n      };\n      append$1(segment.list, segment.item);\n      return segment;\n    };\n    const createSegments = (scope, entry, size) => {\n      const segments = [];\n      for (let i = 0; i < size; i++) {\n        segments.push(createSegment(scope, entry.listType));\n      }\n      return segments;\n    };\n    const populateSegments = (segments, entry) => {\n      for (let i = 0; i < segments.length - 1; i++) {\n        set(segments[i].item, 'list-style-type', 'none');\n      }\n      last(segments).each(segment => {\n        setAll(segment.list, entry.listAttributes);\n        setAll(segment.item, entry.itemAttributes);\n        append(segment.item, entry.content);\n      });\n    };\n    const normalizeSegment = (segment, entry) => {\n      if (name(segment.list) !== entry.listType) {\n        segment.list = mutate(segment.list, entry.listType);\n      }\n      setAll(segment.list, entry.listAttributes);\n    };\n    const createItem = (scope, attr, content) => {\n      const item = SugarElement.fromTag('li', scope);\n      setAll(item, attr);\n      append(item, content);\n      return item;\n    };\n    const appendItem = (segment, item) => {\n      append$1(segment.list, item);\n      segment.item = item;\n    };\n    const createInPreviousLiItem = (scope, attr, content, tag) => {\n      const item = SugarElement.fromTag(tag, scope);\n      setAll(item, attr);\n      append(item, content);\n      return item;\n    };\n    const writeShallow = (scope, cast, entry) => {\n      const newCast = cast.slice(0, entry.depth);\n      last(newCast).each(segment => {\n        if (isEntryList(entry)) {\n          const item = createItem(scope, entry.itemAttributes, entry.content);\n          appendItem(segment, item);\n          normalizeSegment(segment, entry);\n        } else if (isEntryNoList(entry)) {\n          if (entry.isInPreviousLi) {\n            const item = createInPreviousLiItem(scope, entry.attributes, entry.content, entry.type);\n            append$1(segment.item, item);\n          }\n        } else {\n          const item = SugarElement.fromHtml(`<!--${ entry.content }-->`);\n          append$1(segment.list, item);\n        }\n      });\n      return newCast;\n    };\n    const writeDeep = (scope, cast, entry) => {\n      const segments = createSegments(scope, entry, entry.depth - cast.length);\n      joinSegments(segments);\n      populateSegments(segments, entry);\n      appendSegments(cast, segments);\n      return cast.concat(segments);\n    };\n    const composeList = (scope, entries) => {\n      let firstCommentEntryOpt = Optional.none();\n      const cast = foldl(entries, (cast, entry, i) => {\n        if (isEntryList(entry)) {\n          return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n        } else {\n          if (i === 0 && isEntryComment(entry)) {\n            firstCommentEntryOpt = Optional.some(entry);\n            return cast;\n          }\n          return writeShallow(scope, cast, entry);\n        }\n      }, []);\n      firstCommentEntryOpt.each(firstCommentEntry => {\n        const item = SugarElement.fromHtml(`<!--${ firstCommentEntry.content }-->`);\n        head(cast).each(fistCast => {\n          prepend(fistCast.list, item);\n        });\n      });\n      return head(cast).map(segment => segment.list);\n    };\n\n    const indentEntry = (indentation, entry) => {\n      switch (indentation) {\n      case 'Indent':\n        entry.depth++;\n        break;\n      case 'Outdent':\n        entry.depth--;\n        break;\n      case 'Flatten':\n        entry.depth = 0;\n      }\n      entry.dirty = true;\n    };\n\n    const cloneListProperties = (target, source) => {\n      if (isEntryList(target) && isEntryList(source)) {\n        target.listType = source.listType;\n        target.listAttributes = { ...source.listAttributes };\n      }\n    };\n    const cleanListProperties = entry => {\n      entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== 'start');\n    };\n    const closestSiblingEntry = (entries, start) => {\n      const depth = entries[start].depth;\n      const matches = entry => entry.depth === depth && !entry.dirty;\n      const until = entry => entry.depth < depth;\n      return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(() => findUntil(entries.slice(start + 1), matches, until));\n    };\n    const normalizeEntries = entries => {\n      each$1(entries, (entry, i) => {\n        closestSiblingEntry(entries, i).fold(() => {\n          if (entry.dirty && isEntryList(entry)) {\n            cleanListProperties(entry);\n          }\n        }, matchingEntry => cloneListProperties(entry, matchingEntry));\n      });\n      return entries;\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const entryToEntryNoList = (entry, type, isInPreviousLi) => {\n      if (isEntryList(entry)) {\n        return {\n          depth: entry.depth,\n          dirty: entry.dirty,\n          content: entry.content,\n          isSelected: entry.isSelected,\n          type,\n          attributes: entry.itemAttributes,\n          isInPreviousLi\n        };\n      } else {\n        return entry;\n      }\n    };\n    const parseSingleItem = (depth, itemSelection, selectionState, item) => {\n      var _a;\n      if (isComment(item)) {\n        return [{\n            depth: depth + 1,\n            content: (_a = item.dom.nodeValue) !== null && _a !== void 0 ? _a : '',\n            dirty: false,\n            isSelected: false,\n            isComment: true\n          }];\n      }\n      itemSelection.each(selection => {\n        if (eq(selection.start, item)) {\n          selectionState.set(true);\n        }\n      });\n      const currentItemEntry = createEntry(item, depth, selectionState.get());\n      itemSelection.each(selection => {\n        if (eq(selection.end, item)) {\n          selectionState.set(false);\n        }\n      });\n      const childListEntries = lastChild(item).filter(isList).map(list => parseList(depth, itemSelection, selectionState, list)).getOr([]);\n      return currentItemEntry.toArray().concat(childListEntries);\n    };\n    const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => parseSingleItem(depth, itemSelection, selectionState, item), list => {\n      const parsedSiblings = foldl(children(item), (acc, s, i) => {\n        if (i === 0) {\n          return acc;\n        } else {\n          const parsedSibling = parseSingleItem(depth, itemSelection, selectionState, s).map(e => entryToEntryNoList(e, s.dom.nodeName.toLowerCase(), true));\n          return acc.concat(parsedSibling);\n        }\n      }, []);\n      return parseList(depth, itemSelection, selectionState, list).concat(parsedSiblings);\n    });\n    const parseList = (depth, itemSelection, selectionState, list) => bind(children(list), element => {\n      const parser = isList(element) ? parseList : parseItem;\n      const newDepth = depth + 1;\n      return parser(newDepth, itemSelection, selectionState, element);\n    });\n    const parseLists = (lists, itemSelection) => {\n      const selectionState = Cell(false);\n      const initialDepth = 0;\n      return map(lists, list => ({\n        sourceList: list,\n        entries: parseList(initialDepth, itemSelection, selectionState, list)\n      }));\n    };\n\n    const outdentedComposer = (editor, entries) => {\n      const normalizedEntries = normalizeEntries(entries);\n      return map(normalizedEntries, entry => {\n        const content = !isEntryComment(entry) ? fromElements(entry.content) : fromElements([SugarElement.fromHtml(`<!--${ entry.content }-->`)]);\n        return SugarElement.fromDom(createTextBlock(editor, content.dom));\n      });\n    };\n    const indentedComposer = (editor, entries) => {\n      const normalizedEntries = normalizeEntries(entries);\n      return composeList(editor.contentDocument, normalizedEntries).toArray();\n    };\n    const composeEntries = (editor, entries) => bind(groupBy(entries, isIndented), entries => {\n      const groupIsIndented = head(entries).exists(isIndented);\n      return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n    });\n    const indentSelectedEntries = (entries, indentation) => {\n      each$1(filter$1(entries, isSelected), entry => indentEntry(indentation, entry));\n    };\n    const getItemSelection = editor => {\n      const selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n      return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), (start, end) => ({\n        start,\n        end\n      }));\n    };\n    const listIndentation = (editor, lists, indentation) => {\n      const entrySets = parseLists(lists, getItemSelection(editor));\n      each$1(entrySets, entrySet => {\n        indentSelectedEntries(entrySet.entries, indentation);\n        const composedLists = composeEntries(editor, entrySet.entries);\n        each$1(composedLists, composedList => {\n          fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n        });\n        before(entrySet.sourceList, composedLists);\n        remove(entrySet.sourceList);\n      });\n    };\n\n    const selectionIndentation = (editor, indentation) => {\n      const lists = fromDom(getSelectedListRoots(editor));\n      const dlItems = fromDom(getSelectedDlItems(editor));\n      let isHandled = false;\n      if (lists.length || dlItems.length) {\n        const bookmark = editor.selection.getBookmark();\n        listIndentation(editor, lists, indentation);\n        dlIndentation(editor, indentation, dlItems);\n        editor.selection.moveToBookmark(bookmark);\n        editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n        editor.nodeChanged();\n        isHandled = true;\n      }\n      return isHandled;\n    };\n    const handleIndentation = (editor, indentation) => !selectionIsWithinNonEditableList(editor) && selectionIndentation(editor, indentation);\n    const indentListSelection = editor => handleIndentation(editor, 'Indent');\n    const outdentListSelection = editor => handleIndentation(editor, 'Outdent');\n    const flattenListSelection = editor => handleIndentation(editor, 'Flatten');\n\n    const zeroWidth = '\\uFEFF';\n    const isZwsp = char => char === zeroWidth;\n\n    const ancestor$1 = (scope, predicate, isRoot) => ancestor$3(scope, predicate, isRoot).isSome();\n\n    const ancestor = (element, target) => ancestor$1(element, curry(eq, target));\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n    const DOM$1 = global$3.DOM;\n    const createBookmark = rng => {\n      const bookmark = {};\n      const setupEndPoint = start => {\n        let container = rng[start ? 'startContainer' : 'endContainer'];\n        let offset = rng[start ? 'startOffset' : 'endOffset'];\n        if (isElement(container)) {\n          const offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' });\n          if (container.hasChildNodes()) {\n            offset = Math.min(offset, container.childNodes.length - 1);\n            if (start) {\n              container.insertBefore(offsetNode, container.childNodes[offset]);\n            } else {\n              DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n            }\n          } else {\n            container.appendChild(offsetNode);\n          }\n          container = offsetNode;\n          offset = 0;\n        }\n        bookmark[start ? 'startContainer' : 'endContainer'] = container;\n        bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n      };\n      setupEndPoint(true);\n      if (!rng.collapsed) {\n        setupEndPoint();\n      }\n      return bookmark;\n    };\n    const resolveBookmark = bookmark => {\n      const restoreEndPoint = start => {\n        const nodeIndex = container => {\n          var _a;\n          let node = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild;\n          let idx = 0;\n          while (node) {\n            if (node === container) {\n              return idx;\n            }\n            if (!isElement(node) || node.getAttribute('data-mce-type') !== 'bookmark') {\n              idx++;\n            }\n            node = node.nextSibling;\n          }\n          return -1;\n        };\n        let container = bookmark[start ? 'startContainer' : 'endContainer'];\n        let offset = bookmark[start ? 'startOffset' : 'endOffset'];\n        if (!container) {\n          return;\n        }\n        if (isElement(container) && container.parentNode) {\n          const node = container;\n          offset = nodeIndex(container);\n          container = container.parentNode;\n          DOM$1.remove(node);\n          if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n            container.appendChild(DOM$1.create('br'));\n          }\n        }\n        bookmark[start ? 'startContainer' : 'endContainer'] = container;\n        bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n      };\n      restoreEndPoint(true);\n      restoreEndPoint();\n      const rng = DOM$1.createRng();\n      rng.setStart(bookmark.startContainer, bookmark.startOffset);\n      if (bookmark.endContainer) {\n        rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n      }\n      return normalizeRange(rng);\n    };\n\n    const listToggleActionFromListName = listName => {\n      switch (listName) {\n      case 'UL':\n        return 'ToggleUlList';\n      case 'OL':\n        return 'ToggleOlList';\n      case 'DL':\n        return 'ToggleDLList';\n      }\n    };\n\n    const updateListStyle = (dom, el, detail) => {\n      const type = detail['list-style-type'] ? detail['list-style-type'] : null;\n      dom.setStyle(el, 'list-style-type', type);\n    };\n    const setAttribs = (elm, attrs) => {\n      global$2.each(attrs, (value, key) => {\n        elm.setAttribute(key, value);\n      });\n    };\n    const updateListAttrs = (dom, el, detail) => {\n      setAttribs(el, detail['list-attributes']);\n      global$2.each(dom.select('li', el), li => {\n        setAttribs(li, detail['list-item-attributes']);\n      });\n    };\n    const updateListWithDetails = (dom, el, detail) => {\n      updateListStyle(dom, el, detail);\n      updateListAttrs(dom, el, detail);\n    };\n    const removeStyles = (dom, element, styles) => {\n      global$2.each(styles, style => dom.setStyle(element, style, ''));\n    };\n    const isInline = (editor, node) => isNonNullable(node) && !isBlock(node, editor.schema.getBlockElements());\n    const getEndPointNode = (editor, rng, start, root) => {\n      let container = rng[start ? 'startContainer' : 'endContainer'];\n      const offset = rng[start ? 'startOffset' : 'endOffset'];\n      if (isElement(container)) {\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n      }\n      if (!start && isBr(container.nextSibling)) {\n        container = container.nextSibling;\n      }\n      const findBlockAncestor = node => {\n        while (!editor.dom.isBlock(node) && node.parentNode && root !== node) {\n          node = node.parentNode;\n        }\n        return node;\n      };\n      const findBetterContainer = (container, forward) => {\n        var _a;\n        const walker = new global$5(container, findBlockAncestor(container));\n        const dir = forward ? 'next' : 'prev';\n        let node;\n        while (node = walker[dir]()) {\n          if (!(isVoid(editor, node) || isZwsp(node.textContent) || ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length) === 0)) {\n            return Optional.some(node);\n          }\n        }\n        return Optional.none();\n      };\n      if (start && isTextNode$1(container)) {\n        if (isZwsp(container.textContent)) {\n          container = findBetterContainer(container, false).getOr(container);\n        } else {\n          if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n            container = container.parentNode;\n          }\n          while (container.previousSibling !== null && (isInline(editor, container.previousSibling) || isTextNode$1(container.previousSibling))) {\n            container = container.previousSibling;\n          }\n        }\n      }\n      if (!start && isTextNode$1(container)) {\n        if (isZwsp(container.textContent)) {\n          container = findBetterContainer(container, true).getOr(container);\n        } else {\n          if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n            container = container.parentNode;\n          }\n          while (container.nextSibling !== null && (isInline(editor, container.nextSibling) || isTextNode$1(container.nextSibling))) {\n            container = container.nextSibling;\n          }\n        }\n      }\n      while (container.parentNode !== root) {\n        const parent = container.parentNode;\n        if (isTextBlock(editor, container)) {\n          return container;\n        }\n        if (/^(TD|TH)$/.test(parent.nodeName)) {\n          return container;\n        }\n        container = parent;\n      }\n      return container;\n    };\n    const getSelectedTextBlocks = (editor, rng, root) => {\n      const textBlocks = [];\n      const dom = editor.dom;\n      const startNode = getEndPointNode(editor, rng, true, root);\n      const endNode = getEndPointNode(editor, rng, false, root);\n      let block;\n      const siblings = [];\n      for (let node = startNode; node; node = node.nextSibling) {\n        siblings.push(node);\n        if (node === endNode) {\n          break;\n        }\n      }\n      global$2.each(siblings, node => {\n        var _a;\n        if (isTextBlock(editor, node)) {\n          textBlocks.push(node);\n          block = null;\n          return;\n        }\n        if (dom.isBlock(node) || isBr(node)) {\n          if (isBr(node)) {\n            dom.remove(node);\n          }\n          block = null;\n          return;\n        }\n        const nextSibling = node.nextSibling;\n        if (global$1.isBookmarkNode(node)) {\n          if (isListNode(nextSibling) || isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n            block = null;\n            return;\n          }\n        }\n        if (!block) {\n          block = dom.create('p');\n          (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(block, node);\n          textBlocks.push(block);\n        }\n        block.appendChild(node);\n      });\n      return textBlocks;\n    };\n    const hasCompatibleStyle = (dom, sib, detail) => {\n      const sibStyle = dom.getStyle(sib, 'list-style-type');\n      let detailStyle = detail ? detail['list-style-type'] : '';\n      detailStyle = detailStyle === null ? '' : detailStyle;\n      return sibStyle === detailStyle;\n    };\n    const getRootSearchStart = (editor, range) => {\n      const start = editor.selection.getStart(true);\n      const startPoint = getEndPointNode(editor, range, true, editor.getBody());\n      if (ancestor(SugarElement.fromDom(startPoint), SugarElement.fromDom(range.commonAncestorContainer))) {\n        return range.commonAncestorContainer;\n      } else {\n        return start;\n      }\n    };\n    const applyList = (editor, listName, detail) => {\n      const rng = editor.selection.getRng();\n      let listItemName = 'LI';\n      const root = getClosestListHost(editor, getRootSearchStart(editor, rng));\n      const dom = editor.dom;\n      if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n        return;\n      }\n      listName = listName.toUpperCase();\n      if (listName === 'DL') {\n        listItemName = 'DT';\n      }\n      const bookmark = createBookmark(rng);\n      const selectedTextBlocks = filter$1(getSelectedTextBlocks(editor, rng, root), editor.dom.isEditable);\n      global$2.each(selectedTextBlocks, block => {\n        let listBlock;\n        const sibling = block.previousSibling;\n        const parent = block.parentNode;\n        if (!isListItemNode(parent)) {\n          if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n            listBlock = sibling;\n            block = dom.rename(block, listItemName);\n            sibling.appendChild(block);\n          } else {\n            listBlock = dom.create(listName);\n            parent.insertBefore(listBlock, block);\n            listBlock.appendChild(block);\n            block = dom.rename(block, listItemName);\n          }\n          removeStyles(dom, block, [\n            'margin',\n            'margin-right',\n            'margin-bottom',\n            'margin-left',\n            'margin-top',\n            'padding',\n            'padding-right',\n            'padding-bottom',\n            'padding-left',\n            'padding-top'\n          ]);\n          updateListWithDetails(dom, listBlock, detail);\n          mergeWithAdjacentLists(editor.dom, listBlock);\n        }\n      });\n      editor.selection.setRng(resolveBookmark(bookmark));\n    };\n    const isValidLists = (list1, list2) => {\n      return isListNode(list1) && list1.nodeName === (list2 === null || list2 === void 0 ? void 0 : list2.nodeName);\n    };\n    const hasSameListStyle = (dom, list1, list2) => {\n      const targetStyle = dom.getStyle(list1, 'list-style-type', true);\n      const style = dom.getStyle(list2, 'list-style-type', true);\n      return targetStyle === style;\n    };\n    const hasSameClasses = (elm1, elm2) => {\n      return elm1.className === elm2.className;\n    };\n    const shouldMerge = (dom, list1, list2) => {\n      return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n    };\n    const mergeWithAdjacentLists = (dom, listBlock) => {\n      let node;\n      let sibling = listBlock.nextSibling;\n      if (shouldMerge(dom, listBlock, sibling)) {\n        const liSibling = sibling;\n        while (node = liSibling.firstChild) {\n          listBlock.appendChild(node);\n        }\n        dom.remove(liSibling);\n      }\n      sibling = listBlock.previousSibling;\n      if (shouldMerge(dom, listBlock, sibling)) {\n        const liSibling = sibling;\n        while (node = liSibling.lastChild) {\n          listBlock.insertBefore(node, listBlock.firstChild);\n        }\n        dom.remove(liSibling);\n      }\n    };\n    const updateList$1 = (editor, list, listName, detail) => {\n      if (list.nodeName !== listName) {\n        const newList = editor.dom.rename(list, listName);\n        updateListWithDetails(editor.dom, newList, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), newList);\n      } else {\n        updateListWithDetails(editor.dom, list, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), list);\n      }\n    };\n    const updateCustomList = (editor, list, listName, detail) => {\n      list.classList.forEach((cls, _, classList) => {\n        if (cls.startsWith('tox-')) {\n          classList.remove(cls);\n          if (classList.length === 0) {\n            list.removeAttribute('class');\n          }\n        }\n      });\n      if (list.nodeName !== listName) {\n        const newList = editor.dom.rename(list, listName);\n        updateListWithDetails(editor.dom, newList, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), newList);\n      } else {\n        updateListWithDetails(editor.dom, list, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), list);\n      }\n    };\n    const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {\n      const parentIsList = isListNode(parentList);\n      if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n        flattenListSelection(editor);\n      } else {\n        applyList(editor, listName, detail);\n        const bookmark = createBookmark(editor.selection.getRng());\n        const allLists = parentIsList ? [\n          parentList,\n          ...lists\n        ] : lists;\n        const updateFunction = parentIsList && isCustomList(parentList) ? updateCustomList : updateList$1;\n        global$2.each(allLists, elm => {\n          updateFunction(editor, elm, listName, detail);\n        });\n        editor.selection.setRng(resolveBookmark(bookmark));\n      }\n    };\n    const hasListStyleDetail = detail => {\n      return 'list-style-type' in detail;\n    };\n    const toggleSingleList = (editor, parentList, listName, detail) => {\n      if (parentList === editor.getBody()) {\n        return;\n      }\n      if (parentList) {\n        if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n          flattenListSelection(editor);\n        } else {\n          const bookmark = createBookmark(editor.selection.getRng());\n          if (isCustomList(parentList)) {\n            parentList.classList.forEach((cls, _, classList) => {\n              if (cls.startsWith('tox-')) {\n                classList.remove(cls);\n                if (classList.length === 0) {\n                  parentList.removeAttribute('class');\n                }\n              }\n            });\n          }\n          updateListWithDetails(editor.dom, parentList, detail);\n          const newList = editor.dom.rename(parentList, listName);\n          mergeWithAdjacentLists(editor.dom, newList);\n          editor.selection.setRng(resolveBookmark(bookmark));\n          applyList(editor, listName, detail);\n          fireListEvent(editor, listToggleActionFromListName(listName), newList);\n        }\n      } else {\n        applyList(editor, listName, detail);\n        fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n      }\n    };\n    const toggleList = (editor, listName, _detail) => {\n      const parentList = getParentList(editor);\n      if (isWithinNonEditableList(editor, parentList)) {\n        return;\n      }\n      const selectedSubLists = getSelectedSubLists(editor);\n      const detail = isObject(_detail) ? _detail : {};\n      if (selectedSubLists.length > 0) {\n        toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n      } else {\n        toggleSingleList(editor, parentList, listName, detail);\n      }\n    };\n\n    const DOM = global$3.DOM;\n    const normalizeList = (dom, list) => {\n      const parentNode = list.parentElement;\n      if (parentNode && parentNode.nodeName === 'LI' && parentNode.firstChild === list) {\n        const sibling = parentNode.previousSibling;\n        if (sibling && sibling.nodeName === 'LI') {\n          sibling.appendChild(list);\n          if (isEmpty$2(dom, parentNode)) {\n            DOM.remove(parentNode);\n          }\n        } else {\n          DOM.setStyle(parentNode, 'listStyleType', 'none');\n        }\n      }\n      if (isListNode(parentNode)) {\n        const sibling = parentNode.previousSibling;\n        if (sibling && sibling.nodeName === 'LI') {\n          sibling.appendChild(list);\n        }\n      }\n    };\n    const normalizeLists = (dom, element) => {\n      const lists = global$2.grep(dom.select('ol,ul', element));\n      global$2.each(lists, list => {\n        normalizeList(dom, list);\n      });\n    };\n\n    const findNextCaretContainer = (editor, rng, isForward, root) => {\n      let node = rng.startContainer;\n      const offset = rng.startOffset;\n      if (isTextNode$1(node) && (isForward ? offset < node.data.length : offset > 0)) {\n        return node;\n      }\n      const nonEmptyBlocks = editor.schema.getNonEmptyElements();\n      if (isElement(node)) {\n        node = global$6.getNode(node, offset);\n      }\n      const walker = new global$5(node, root);\n      if (isForward) {\n        if (isBogusBr(editor.dom, node)) {\n          walker.next();\n        }\n      }\n      const walkFn = isForward ? walker.next.bind(walker) : walker.prev2.bind(walker);\n      while (node = walkFn()) {\n        if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n          return node;\n        }\n        if (nonEmptyBlocks[node.nodeName]) {\n          return node;\n        }\n        if (isTextNode$1(node) && node.data.length > 0) {\n          return node;\n        }\n      }\n      return null;\n    };\n    const hasOnlyOneBlockChild = (dom, elm) => {\n      const childNodes = elm.childNodes;\n      return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n    };\n    const isUnwrappable = node => Optional.from(node).map(SugarElement.fromDom).filter(isHTMLElement).exists(el => isEditable(el) && !contains$1(['details'], name(el)));\n    const unwrapSingleBlockChild = (dom, elm) => {\n      if (hasOnlyOneBlockChild(dom, elm) && isUnwrappable(elm.firstChild)) {\n        dom.remove(elm.firstChild, true);\n      }\n    };\n    const moveChildren = (dom, fromElm, toElm) => {\n      let node;\n      const targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n      unwrapSingleBlockChild(dom, fromElm);\n      if (!isEmpty$2(dom, fromElm, true)) {\n        while (node = fromElm.firstChild) {\n          targetElm.appendChild(node);\n        }\n      }\n    };\n    const mergeLiElements = (dom, fromElm, toElm) => {\n      let listNode;\n      const ul = fromElm.parentNode;\n      if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) {\n        return;\n      }\n      if (isListNode(toElm.lastChild)) {\n        listNode = toElm.lastChild;\n      }\n      if (ul === toElm.lastChild) {\n        if (isBr(ul.previousSibling)) {\n          dom.remove(ul.previousSibling);\n        }\n      }\n      const node = toElm.lastChild;\n      if (node && isBr(node) && fromElm.hasChildNodes()) {\n        dom.remove(node);\n      }\n      if (isEmpty$2(dom, toElm, true)) {\n        empty(SugarElement.fromDom(toElm));\n      }\n      moveChildren(dom, fromElm, toElm);\n      if (listNode) {\n        toElm.appendChild(listNode);\n      }\n      const contains$1 = contains(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n      const nestedLists = contains$1 ? dom.getParents(fromElm, isListNode, toElm) : [];\n      dom.remove(fromElm);\n      each$1(nestedLists, list => {\n        if (isEmpty$2(dom, list) && list !== dom.getRoot()) {\n          dom.remove(list);\n        }\n      });\n    };\n    const mergeIntoEmptyLi = (editor, fromLi, toLi) => {\n      empty(SugarElement.fromDom(toLi));\n      mergeLiElements(editor.dom, fromLi, toLi);\n      editor.selection.setCursorLocation(toLi, 0);\n    };\n    const mergeForward = (editor, rng, fromLi, toLi) => {\n      const dom = editor.dom;\n      if (dom.isEmpty(toLi)) {\n        mergeIntoEmptyLi(editor, fromLi, toLi);\n      } else {\n        const bookmark = createBookmark(rng);\n        mergeLiElements(dom, fromLi, toLi);\n        editor.selection.setRng(resolveBookmark(bookmark));\n      }\n    };\n    const mergeBackward = (editor, rng, fromLi, toLi) => {\n      const bookmark = createBookmark(rng);\n      mergeLiElements(editor.dom, fromLi, toLi);\n      const resolvedBookmark = resolveBookmark(bookmark);\n      editor.selection.setRng(resolvedBookmark);\n    };\n    const backspaceDeleteFromListToListCaret = (editor, isForward) => {\n      const dom = editor.dom, selection = editor.selection;\n      const selectionStartElm = selection.getStart();\n      const root = getClosestEditingHost(editor, selectionStartElm);\n      const li = dom.getParent(selection.getStart(), 'LI', root);\n      if (li) {\n        const ul = li.parentElement;\n        if (ul === editor.getBody() && isEmpty$2(dom, ul)) {\n          return true;\n        }\n        const rng = normalizeRange(selection.getRng());\n        const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n        const willMergeParentIntoChild = otherLi && (isForward ? dom.isChildOf(li, otherLi) : dom.isChildOf(otherLi, li));\n        if (otherLi && otherLi !== li && !willMergeParentIntoChild) {\n          editor.undoManager.transact(() => {\n            if (isForward) {\n              mergeForward(editor, rng, otherLi, li);\n            } else {\n              if (isFirstChild(li)) {\n                outdentListSelection(editor);\n              } else {\n                mergeBackward(editor, rng, li, otherLi);\n              }\n            }\n          });\n          return true;\n        } else if (willMergeParentIntoChild && !isForward && otherLi !== li) {\n          editor.undoManager.transact(() => {\n            if (rng.commonAncestorContainer.parentElement) {\n              const bookmark = createBookmark(rng);\n              const oldParentElRef = rng.commonAncestorContainer.parentElement;\n              moveChildren(dom, rng.commonAncestorContainer.parentElement, otherLi);\n              oldParentElRef.remove();\n              const resolvedBookmark = resolveBookmark(bookmark);\n              editor.selection.setRng(resolvedBookmark);\n            }\n          });\n          return true;\n        } else if (!otherLi) {\n          if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {\n            editor.undoManager.transact(() => {\n              flattenListSelection(editor);\n            });\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    const removeBlock = (dom, block, root) => {\n      const parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n      dom.remove(block);\n      if (parentBlock && dom.isEmpty(parentBlock)) {\n        dom.remove(parentBlock);\n      }\n    };\n    const backspaceDeleteIntoListCaret = (editor, isForward) => {\n      const dom = editor.dom;\n      const selectionStartElm = editor.selection.getStart();\n      const root = getClosestEditingHost(editor, selectionStartElm);\n      const block = dom.getParent(selectionStartElm, dom.isBlock, root);\n      if (block && dom.isEmpty(block)) {\n        const rng = normalizeRange(editor.selection.getRng());\n        const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n        if (otherLi) {\n          const findValidElement = element => contains$1([\n            'td',\n            'th',\n            'caption'\n          ], name(element));\n          const findRoot = node => node.dom === root;\n          const otherLiCell = closest$2(SugarElement.fromDom(otherLi), findValidElement, findRoot);\n          const caretCell = closest$2(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);\n          if (!equals(otherLiCell, caretCell, eq)) {\n            return false;\n          }\n          editor.undoManager.transact(() => {\n            const parentNode = otherLi.parentNode;\n            removeBlock(dom, block, root);\n            mergeWithAdjacentLists(dom, parentNode);\n            editor.selection.select(otherLi, true);\n            editor.selection.collapse(isForward);\n          });\n          return true;\n        }\n      }\n      return false;\n    };\n    const backspaceDeleteCaret = (editor, isForward) => {\n      return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n    };\n    const hasListSelection = editor => {\n      const selectionStartElm = editor.selection.getStart();\n      const root = getClosestEditingHost(editor, selectionStartElm);\n      const startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n      return startListParent || getSelectedListItems(editor).length > 0;\n    };\n    const backspaceDeleteRange = editor => {\n      if (hasListSelection(editor)) {\n        editor.undoManager.transact(() => {\n          editor.execCommand('Delete');\n          normalizeLists(editor.dom, editor.getBody());\n        });\n        return true;\n      }\n      return false;\n    };\n    const backspaceDelete = (editor, isForward) => {\n      const selection = editor.selection;\n      return !isWithinNonEditableList(editor, selection.getNode()) && (selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor));\n    };\n    const setup$2 = editor => {\n      editor.on('ExecCommand', e => {\n        const cmd = e.command.toLowerCase();\n        if ((cmd === 'delete' || cmd === 'forwarddelete') && hasListSelection(editor)) {\n          normalizeLists(editor.dom, editor.getBody());\n        }\n      });\n      editor.on('keydown', e => {\n        if (e.keyCode === global$4.BACKSPACE) {\n          if (backspaceDelete(editor, false)) {\n            e.preventDefault();\n          }\n        } else if (e.keyCode === global$4.DELETE) {\n          if (backspaceDelete(editor, true)) {\n            e.preventDefault();\n          }\n        }\n      });\n    };\n\n    const get = editor => ({\n      backspaceDelete: isForward => {\n        backspaceDelete(editor, isForward);\n      }\n    });\n\n    const updateList = (editor, update) => {\n      const parentList = getParentList(editor);\n      if (parentList === null || isWithinNonEditableList(editor, parentList)) {\n        return;\n      }\n      editor.undoManager.transact(() => {\n        if (isObject(update.styles)) {\n          editor.dom.setStyles(parentList, update.styles);\n        }\n        if (isObject(update.attrs)) {\n          each(update.attrs, (v, k) => editor.dom.setAttrib(parentList, k, v));\n        }\n      });\n    };\n\n    const parseAlphabeticBase26 = str => {\n      const chars = reverse(trim(str).split(''));\n      const values = map(chars, (char, i) => {\n        const charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n        return Math.pow(26, i) * charValue;\n      });\n      return foldl(values, (sum, v) => sum + v, 0);\n    };\n    const composeAlphabeticBase26 = value => {\n      value--;\n      if (value < 0) {\n        return '';\n      } else {\n        const remainder = value % 26;\n        const quotient = Math.floor(value / 26);\n        const rest = composeAlphabeticBase26(quotient);\n        const char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n        return rest + char;\n      }\n    };\n    const isUppercase = str => /^[A-Z]+$/.test(str);\n    const isLowercase = str => /^[a-z]+$/.test(str);\n    const isNumeric = str => /^[0-9]+$/.test(str);\n    const deduceListType = start => {\n      if (isNumeric(start)) {\n        return 2;\n      } else if (isUppercase(start)) {\n        return 0;\n      } else if (isLowercase(start)) {\n        return 1;\n      } else if (isEmpty$1(start)) {\n        return 3;\n      } else {\n        return 4;\n      }\n    };\n    const parseStartValue = start => {\n      switch (deduceListType(start)) {\n      case 2:\n        return Optional.some({\n          listStyleType: Optional.none(),\n          start\n        });\n      case 0:\n        return Optional.some({\n          listStyleType: Optional.some('upper-alpha'),\n          start: parseAlphabeticBase26(start).toString()\n        });\n      case 1:\n        return Optional.some({\n          listStyleType: Optional.some('lower-alpha'),\n          start: parseAlphabeticBase26(start).toString()\n        });\n      case 3:\n        return Optional.some({\n          listStyleType: Optional.none(),\n          start: ''\n        });\n      case 4:\n        return Optional.none();\n      }\n    };\n    const parseDetail = detail => {\n      const start = parseInt(detail.start, 10);\n      if (is$2(detail.listStyleType, 'upper-alpha')) {\n        return composeAlphabeticBase26(start);\n      } else if (is$2(detail.listStyleType, 'lower-alpha')) {\n        return composeAlphabeticBase26(start).toLowerCase();\n      } else {\n        return detail.start;\n      }\n    };\n\n    const open = editor => {\n      const currentList = getParentList(editor);\n      if (!isOlNode(currentList) || isWithinNonEditableList(editor, currentList)) {\n        return;\n      }\n      editor.windowManager.open({\n        title: 'List Properties',\n        body: {\n          type: 'panel',\n          items: [{\n              type: 'input',\n              name: 'start',\n              label: 'Start list at number',\n              inputMode: 'numeric'\n            }]\n        },\n        initialData: {\n          start: parseDetail({\n            start: editor.dom.getAttrib(currentList, 'start', '1'),\n            listStyleType: Optional.from(editor.dom.getStyle(currentList, 'list-style-type'))\n          })\n        },\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        onSubmit: api => {\n          const data = api.getData();\n          parseStartValue(data.start).each(detail => {\n            editor.execCommand('mceListUpdate', false, {\n              attrs: { start: detail.start === '1' ? '' : detail.start },\n              styles: { 'list-style-type': detail.listStyleType.getOr('') }\n            });\n          });\n          api.close();\n        }\n      });\n    };\n\n    const queryListCommandState = (editor, listName) => () => {\n      const parentList = getParentList(editor);\n      return isNonNullable(parentList) && parentList.nodeName === listName;\n    };\n    const registerDialog = editor => {\n      editor.addCommand('mceListProps', () => {\n        open(editor);\n      });\n    };\n    const register$2 = editor => {\n      editor.on('BeforeExecCommand', e => {\n        const cmd = e.command.toLowerCase();\n        if (cmd === 'indent') {\n          indentListSelection(editor);\n        } else if (cmd === 'outdent') {\n          outdentListSelection(editor);\n        }\n      });\n      editor.addCommand('InsertUnorderedList', (ui, detail) => {\n        toggleList(editor, 'UL', detail);\n      });\n      editor.addCommand('InsertOrderedList', (ui, detail) => {\n        toggleList(editor, 'OL', detail);\n      });\n      editor.addCommand('InsertDefinitionList', (ui, detail) => {\n        toggleList(editor, 'DL', detail);\n      });\n      editor.addCommand('RemoveList', () => {\n        flattenListSelection(editor);\n      });\n      registerDialog(editor);\n      editor.addCommand('mceListUpdate', (ui, detail) => {\n        if (isObject(detail)) {\n          updateList(editor, detail);\n        }\n      });\n      editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n      editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n      editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n    const isTextNode = node => node.type === 3;\n    const isEmpty = nodeBuffer => nodeBuffer.length === 0;\n    const wrapInvalidChildren = list => {\n      const insertListItem = (buffer, refNode) => {\n        const li = global.create('li');\n        each$1(buffer, node => li.append(node));\n        if (refNode) {\n          list.insert(li, refNode, true);\n        } else {\n          list.append(li);\n        }\n      };\n      const reducer = (buffer, node) => {\n        if (isTextNode(node)) {\n          return [\n            ...buffer,\n            node\n          ];\n        } else if (!isEmpty(buffer) && !isTextNode(node)) {\n          insertListItem(buffer, node);\n          return [];\n        } else {\n          return buffer;\n        }\n      };\n      const restBuffer = foldl(list.children(), reducer, []);\n      if (!isEmpty(restBuffer)) {\n        insertListItem(restBuffer);\n      }\n    };\n    const setup$1 = editor => {\n      editor.on('PreInit', () => {\n        const {parser} = editor;\n        parser.addNodeFilter('ul,ol', nodes => each$1(nodes, wrapInvalidChildren));\n      });\n    };\n\n    const setupTabKey = editor => {\n      editor.on('keydown', e => {\n        if (e.keyCode !== global$4.TAB || global$4.metaKeyPressed(e)) {\n          return;\n        }\n        editor.undoManager.transact(() => {\n          if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n            e.preventDefault();\n          }\n        });\n      });\n    };\n    const setup = editor => {\n      if (shouldIndentOnTab(editor)) {\n        setupTabKey(editor);\n      }\n      setup$2(editor);\n    };\n\n    const setupToggleButtonHandler = (editor, listName) => api => {\n      const toggleButtonHandler = e => {\n        api.setActive(inList(e.parents, listName));\n        api.setEnabled(!isWithinNonEditableList(editor, e.element) && editor.selection.isEditable());\n      };\n      api.setEnabled(editor.selection.isEditable());\n      return setNodeChangeHandler(editor, toggleButtonHandler);\n    };\n    const register$1 = editor => {\n      const exec = command => () => editor.execCommand(command);\n      if (!editor.hasPlugin('advlist')) {\n        editor.ui.registry.addToggleButton('numlist', {\n          icon: 'ordered-list',\n          active: false,\n          tooltip: 'Numbered list',\n          onAction: exec('InsertOrderedList'),\n          onSetup: setupToggleButtonHandler(editor, 'OL')\n        });\n        editor.ui.registry.addToggleButton('bullist', {\n          icon: 'unordered-list',\n          active: false,\n          tooltip: 'Bullet list',\n          onAction: exec('InsertUnorderedList'),\n          onSetup: setupToggleButtonHandler(editor, 'UL')\n        });\n      }\n    };\n\n    const setupMenuButtonHandler = (editor, listName) => api => {\n      const menuButtonHandler = e => api.setEnabled(inList(e.parents, listName) && !isWithinNonEditableList(editor, e.element));\n      return setNodeChangeHandler(editor, menuButtonHandler);\n    };\n    const register = editor => {\n      const listProperties = {\n        text: 'List properties...',\n        icon: 'ordered-list',\n        onAction: () => editor.execCommand('mceListProps'),\n        onSetup: setupMenuButtonHandler(editor, 'OL')\n      };\n      editor.ui.registry.addMenuItem('listprops', listProperties);\n      editor.ui.registry.addContextMenu('lists', {\n        update: node => {\n          const parentList = getParentList(editor, node);\n          return isOlNode(parentList) ? ['listprops'] : [];\n        }\n      });\n    };\n\n    var Plugin = () => {\n      global$7.add('lists', editor => {\n        register$3(editor);\n        setup$1(editor);\n        if (!editor.hasPlugin('rtc', true)) {\n          setup(editor);\n          register$2(editor);\n        } else {\n          registerDialog(editor);\n        }\n        register$1(editor);\n        register(editor);\n        return get(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isString = isType('string');\n    const isObject = isType('object');\n    const isArray = isType('array');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativePush = Array.prototype.push;\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const get$1 = (obj, key) => {\n      return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('audio_template_callback', { processor: 'function' });\n      registerOption('video_template_callback', { processor: 'function' });\n      registerOption('iframe_template_callback', { processor: 'function' });\n      registerOption('media_live_embeds', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('media_filter_html', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('media_url_resolver', { processor: 'function' });\n      registerOption('media_alt_source', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('media_poster', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('media_dimensions', {\n        processor: 'boolean',\n        default: true\n      });\n    };\n    const getAudioTemplateCallback = option('audio_template_callback');\n    const getVideoTemplateCallback = option('video_template_callback');\n    const getIframeTemplateCallback = option('iframe_template_callback');\n    const hasLiveEmbeds = option('media_live_embeds');\n    const shouldFilterHtml = option('media_filter_html');\n    const getUrlResolver = option('media_url_resolver');\n    const hasAltSource = option('media_alt_source');\n    const hasPoster = option('media_poster');\n    const hasDimensions = option('media_dimensions');\n\n    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n    const DOM$1 = global$4.DOM;\n    const trimPx = value => value.replace(/px$/, '');\n    const getEphoxEmbedData = node => {\n      const style = node.attr('style');\n      const styles = style ? DOM$1.parseStyle(style) : {};\n      return {\n        type: 'ephox-embed-iri',\n        source: node.attr('data-ephox-embed-iri'),\n        altsource: '',\n        poster: '',\n        width: get$1(styles, 'max-width').map(trimPx).getOr(''),\n        height: get$1(styles, 'max-height').map(trimPx).getOr('')\n      };\n    };\n    const htmlToData = (html, schema) => {\n      let data = {};\n      const parser = global$3({\n        validate: false,\n        forced_root_block: false\n      }, schema);\n      const rootNode = parser.parse(html);\n      for (let node = rootNode; node; node = node.walk()) {\n        if (node.type === 1) {\n          const name = node.name;\n          if (node.attr('data-ephox-embed-iri')) {\n            data = getEphoxEmbedData(node);\n            break;\n          } else {\n            if (!data.source && name === 'param') {\n              data.source = node.attr('movie');\n            }\n            if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n              if (!data.type) {\n                data.type = name;\n              }\n              data = global$5.extend(node.attributes.map, data);\n            }\n            if (name === 'source') {\n              if (!data.source) {\n                data.source = node.attr('src');\n              } else if (!data.altsource) {\n                data.altsource = node.attr('src');\n              }\n            }\n            if (name === 'img' && !data.poster) {\n              data.poster = node.attr('src');\n            }\n          }\n        }\n      }\n      data.source = data.source || data.src || '';\n      data.altsource = data.altsource || '';\n      data.poster = data.poster || '';\n      return data;\n    };\n\n    const guess = url => {\n      var _a;\n      const mimes = {\n        mp3: 'audio/mpeg',\n        m4a: 'audio/x-m4a',\n        wav: 'audio/wav',\n        mp4: 'video/mp4',\n        webm: 'video/webm',\n        ogg: 'video/ogg',\n        swf: 'application/x-shockwave-flash'\n      };\n      const fileEnd = (_a = url.toLowerCase().split('.').pop()) !== null && _a !== void 0 ? _a : '';\n      return get$1(mimes, fileEnd).getOr('');\n    };\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n    const Parser = (schema, settings = {}) => global$3({\n      forced_root_block: false,\n      validate: false,\n      allow_conditional_comments: true,\n      ...settings\n    }, schema);\n\n    const DOM = global$4.DOM;\n    const addPx = value => /^[0-9.]+$/.test(value) ? value + 'px' : value;\n    const updateEphoxEmbed = (data, node) => {\n      const style = node.attr('style');\n      const styleMap = style ? DOM.parseStyle(style) : {};\n      if (isNonNullable(data.width)) {\n        styleMap['max-width'] = addPx(data.width);\n      }\n      if (isNonNullable(data.height)) {\n        styleMap['max-height'] = addPx(data.height);\n      }\n      node.attr('style', DOM.serializeStyle(styleMap));\n    };\n    const sources = [\n      'source',\n      'altsource'\n    ];\n    const updateHtml = (html, data, updateAll, schema) => {\n      let numSources = 0;\n      let sourceCount = 0;\n      const parser = Parser(schema);\n      parser.addNodeFilter('source', nodes => numSources = nodes.length);\n      const rootNode = parser.parse(html);\n      for (let node = rootNode; node; node = node.walk()) {\n        if (node.type === 1) {\n          const name = node.name;\n          if (node.attr('data-ephox-embed-iri')) {\n            updateEphoxEmbed(data, node);\n            break;\n          } else {\n            switch (name) {\n            case 'video':\n            case 'object':\n            case 'embed':\n            case 'img':\n            case 'iframe':\n              if (data.height !== undefined && data.width !== undefined) {\n                node.attr('width', data.width);\n                node.attr('height', data.height);\n              }\n              break;\n            }\n            if (updateAll) {\n              switch (name) {\n              case 'video':\n                node.attr('poster', data.poster);\n                node.attr('src', null);\n                for (let index = numSources; index < 2; index++) {\n                  if (data[sources[index]]) {\n                    const source = new global$2('source', 1);\n                    source.attr('src', data[sources[index]]);\n                    source.attr('type', data[sources[index] + 'mime'] || null);\n                    node.append(source);\n                  }\n                }\n                break;\n              case 'iframe':\n                node.attr('src', data.source);\n                break;\n              case 'object':\n                const hasImage = node.getAll('img').length > 0;\n                if (data.poster && !hasImage) {\n                  node.attr('src', data.poster);\n                  const img = new global$2('img', 1);\n                  img.attr('src', data.poster);\n                  img.attr('width', data.width);\n                  img.attr('height', data.height);\n                  node.append(img);\n                }\n                break;\n              case 'source':\n                if (sourceCount < 2) {\n                  node.attr('src', data[sources[sourceCount]]);\n                  node.attr('type', data[sources[sourceCount] + 'mime'] || null);\n                  if (!data[sources[sourceCount]]) {\n                    node.remove();\n                    continue;\n                  }\n                }\n                sourceCount++;\n                break;\n              case 'img':\n                if (!data.poster) {\n                  node.remove();\n                }\n                break;\n              }\n            }\n          }\n        }\n      }\n      return global$1({}, schema).serialize(rootNode);\n    };\n\n    const urlPatterns = [\n      {\n        regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n        type: 'iframe',\n        w: 560,\n        h: 314,\n        url: 'www.youtube.com/embed/$1',\n        allowFullscreen: true\n      },\n      {\n        regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n        type: 'iframe',\n        w: 560,\n        h: 314,\n        url: 'www.youtube.com/embed/$2?$4',\n        allowFullscreen: true\n      },\n      {\n        regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n        type: 'iframe',\n        w: 560,\n        h: 314,\n        url: 'www.youtube.com/embed/$1',\n        allowFullscreen: true\n      },\n      {\n        regex: /vimeo\\.com\\/([0-9]+)\\?h=(\\w+)/,\n        type: 'iframe',\n        w: 425,\n        h: 350,\n        url: 'player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc',\n        allowFullscreen: true\n      },\n      {\n        regex: /vimeo\\.com\\/(.*)\\/([0-9]+)\\?h=(\\w+)/,\n        type: 'iframe',\n        w: 425,\n        h: 350,\n        url: 'player.vimeo.com/video/$2?h=$3&title=0&amp;byline=0',\n        allowFullscreen: true\n      },\n      {\n        regex: /vimeo\\.com\\/([0-9]+)/,\n        type: 'iframe',\n        w: 425,\n        h: 350,\n        url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n        allowFullscreen: true\n      },\n      {\n        regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n        type: 'iframe',\n        w: 425,\n        h: 350,\n        url: 'player.vimeo.com/video/$2?title=0&amp;byline=0',\n        allowFullscreen: true\n      },\n      {\n        regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n        type: 'iframe',\n        w: 425,\n        h: 350,\n        url: 'maps.google.com/maps/ms?msid=$2&output=embed\"',\n        allowFullscreen: false\n      },\n      {\n        regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n        type: 'iframe',\n        w: 480,\n        h: 270,\n        url: 'www.dailymotion.com/embed/video/$1',\n        allowFullscreen: true\n      },\n      {\n        regex: /dai\\.ly\\/([^_]+)/,\n        type: 'iframe',\n        w: 480,\n        h: 270,\n        url: 'www.dailymotion.com/embed/video/$1',\n        allowFullscreen: true\n      }\n    ];\n    const getProtocol = url => {\n      const protocolMatches = url.match(/^(https?:\\/\\/|www\\.)(.+)$/i);\n      if (protocolMatches && protocolMatches.length > 1) {\n        return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1];\n      } else {\n        return 'https://';\n      }\n    };\n    const getUrl = (pattern, url) => {\n      const protocol = getProtocol(url);\n      const match = pattern.regex.exec(url);\n      let newUrl = protocol + pattern.url;\n      if (isNonNullable(match)) {\n        for (let i = 0; i < match.length; i++) {\n          newUrl = newUrl.replace('$' + i, () => match[i] ? match[i] : '');\n        }\n      }\n      return newUrl.replace(/\\?$/, '');\n    };\n    const matchPattern = url => {\n      const patterns = urlPatterns.filter(pattern => pattern.regex.test(url));\n      if (patterns.length > 0) {\n        return global$5.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n      } else {\n        return null;\n      }\n    };\n\n    const getIframeHtml = (data, iframeTemplateCallback) => {\n      if (iframeTemplateCallback) {\n        return iframeTemplateCallback(data);\n      } else {\n        const allowFullscreen = data.allowfullscreen ? ' allowFullscreen=\"1\"' : '';\n        return '<iframe src=\"' + data.source + '\" width=\"' + data.width + '\" height=\"' + data.height + '\"' + allowFullscreen + '></iframe>';\n      }\n    };\n    const getFlashHtml = data => {\n      let html = '<object data=\"' + data.source + '\" width=\"' + data.width + '\" height=\"' + data.height + '\" type=\"application/x-shockwave-flash\">';\n      if (data.poster) {\n        html += '<img src=\"' + data.poster + '\" width=\"' + data.width + '\" height=\"' + data.height + '\" />';\n      }\n      html += '</object>';\n      return html;\n    };\n    const getAudioHtml = (data, audioTemplateCallback) => {\n      if (audioTemplateCallback) {\n        return audioTemplateCallback(data);\n      } else {\n        return '<audio controls=\"controls\" src=\"' + data.source + '\">' + (data.altsource ? '\\n<source src=\"' + data.altsource + '\"' + (data.altsourcemime ? ' type=\"' + data.altsourcemime + '\"' : '') + ' />\\n' : '') + '</audio>';\n      }\n    };\n    const getVideoHtml = (data, videoTemplateCallback) => {\n      if (videoTemplateCallback) {\n        return videoTemplateCallback(data);\n      } else {\n        return '<video width=\"' + data.width + '\" height=\"' + data.height + '\"' + (data.poster ? ' poster=\"' + data.poster + '\"' : '') + ' controls=\"controls\">\\n' + '<source src=\"' + data.source + '\"' + (data.sourcemime ? ' type=\"' + data.sourcemime + '\"' : '') + ' />\\n' + (data.altsource ? '<source src=\"' + data.altsource + '\"' + (data.altsourcemime ? ' type=\"' + data.altsourcemime + '\"' : '') + ' />\\n' : '') + '</video>';\n      }\n    };\n    const dataToHtml = (editor, dataIn) => {\n      var _a;\n      const data = global$5.extend({}, dataIn);\n      if (!data.source) {\n        global$5.extend(data, htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema));\n        if (!data.source) {\n          return '';\n        }\n      }\n      if (!data.altsource) {\n        data.altsource = '';\n      }\n      if (!data.poster) {\n        data.poster = '';\n      }\n      data.source = editor.convertURL(data.source, 'source');\n      data.altsource = editor.convertURL(data.altsource, 'source');\n      data.sourcemime = guess(data.source);\n      data.altsourcemime = guess(data.altsource);\n      data.poster = editor.convertURL(data.poster, 'poster');\n      const pattern = matchPattern(data.source);\n      if (pattern) {\n        data.source = pattern.url;\n        data.type = pattern.type;\n        data.allowfullscreen = pattern.allowFullscreen;\n        data.width = data.width || String(pattern.w);\n        data.height = data.height || String(pattern.h);\n      }\n      if (data.embed) {\n        return updateHtml(data.embed, data, true, editor.schema);\n      } else {\n        const audioTemplateCallback = getAudioTemplateCallback(editor);\n        const videoTemplateCallback = getVideoTemplateCallback(editor);\n        const iframeTemplateCallback = getIframeTemplateCallback(editor);\n        data.width = data.width || '300';\n        data.height = data.height || '150';\n        global$5.each(data, (value, key) => {\n          data[key] = editor.dom.encode('' + value);\n        });\n        if (data.type === 'iframe') {\n          return getIframeHtml(data, iframeTemplateCallback);\n        } else if (data.sourcemime === 'application/x-shockwave-flash') {\n          return getFlashHtml(data);\n        } else if (data.sourcemime.indexOf('audio') !== -1) {\n          return getAudioHtml(data, audioTemplateCallback);\n        } else {\n          return getVideoHtml(data, videoTemplateCallback);\n        }\n      }\n    };\n\n    const isMediaElement = element => element.hasAttribute('data-mce-object') || element.hasAttribute('data-ephox-embed-iri');\n    const setup$2 = editor => {\n      editor.on('click keyup touchend', () => {\n        const selectedNode = editor.selection.getNode();\n        if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n          if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n            selectedNode.setAttribute('data-mce-selected', '2');\n          }\n        }\n      });\n      editor.on('ObjectResized', e => {\n        const target = e.target;\n        if (target.getAttribute('data-mce-object')) {\n          let html = target.getAttribute('data-mce-html');\n          if (html) {\n            html = unescape(html);\n            target.setAttribute('data-mce-html', escape(updateHtml(html, {\n              width: String(e.width),\n              height: String(e.height)\n            }, false, editor.schema)));\n          }\n        }\n      });\n    };\n\n    const cache = {};\n    const embedPromise = (data, dataToHtml, handler) => {\n      return new Promise((res, rej) => {\n        const wrappedResolve = response => {\n          if (response.html) {\n            cache[data.source] = response;\n          }\n          return res({\n            url: data.source,\n            html: response.html ? response.html : dataToHtml(data)\n          });\n        };\n        if (cache[data.source]) {\n          wrappedResolve(cache[data.source]);\n        } else {\n          handler({ url: data.source }, wrappedResolve, rej);\n        }\n      });\n    };\n    const defaultPromise = (data, dataToHtml) => Promise.resolve({\n      html: dataToHtml(data),\n      url: data.source\n    });\n    const loadedData = editor => data => dataToHtml(editor, data);\n    const getEmbedHtml = (editor, data) => {\n      const embedHandler = getUrlResolver(editor);\n      return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n    };\n    const isCached = url => has(cache, url);\n\n    const extractMeta = (sourceInput, data) => get$1(data, sourceInput).bind(mainData => get$1(mainData, 'meta'));\n    const getValue = (data, metaData, sourceInput) => prop => {\n      const getFromData = () => get$1(data, prop);\n      const getFromMetaData = () => get$1(metaData, prop);\n      const getNonEmptyValue = c => get$1(c, 'value').bind(v => v.length > 0 ? Optional.some(v) : Optional.none());\n      const getFromValueFirst = () => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(() => Optional.from(child)));\n      const getFromMetaFirst = () => getFromMetaData().orThunk(() => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child) : Optional.from(child)));\n      return { [prop]: (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr('') };\n    };\n    const getDimensions = (data, metaData) => {\n      const dimensions = {};\n      get$1(data, 'dimensions').each(dims => {\n        each$1([\n          'width',\n          'height'\n        ], prop => {\n          get$1(metaData, prop).orThunk(() => get$1(dims, prop)).each(value => dimensions[prop] = value);\n        });\n      });\n      return dimensions;\n    };\n    const unwrap = (data, sourceInput) => {\n      const metaData = sourceInput && sourceInput !== 'dimensions' ? extractMeta(sourceInput, data).getOr({}) : {};\n      const get = getValue(data, metaData, sourceInput);\n      return {\n        ...get('source'),\n        ...get('altsource'),\n        ...get('poster'),\n        ...get('embed'),\n        ...getDimensions(data, metaData)\n      };\n    };\n    const wrap = data => {\n      const wrapped = {\n        ...data,\n        source: { value: get$1(data, 'source').getOr('') },\n        altsource: { value: get$1(data, 'altsource').getOr('') },\n        poster: { value: get$1(data, 'poster').getOr('') }\n      };\n      each$1([\n        'width',\n        'height'\n      ], prop => {\n        get$1(data, prop).each(value => {\n          const dimensions = wrapped.dimensions || {};\n          dimensions[prop] = value;\n          wrapped.dimensions = dimensions;\n        });\n      });\n      return wrapped;\n    };\n    const handleError = editor => error => {\n      const errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n      editor.notificationManager.open({\n        type: 'error',\n        text: errorMessage\n      });\n    };\n    const getEditorData = editor => {\n      const element = editor.selection.getNode();\n      const snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n      const data = htmlToData(snippet, editor.schema);\n      const getDimensionsOfElement = () => {\n        if (isEmbedIframe(data.source, data.type)) {\n          const rect = editor.dom.getRect(element);\n          return {\n            width: rect.w.toString().replace(/px$/, ''),\n            height: rect.h.toString().replace(/px$/, '')\n          };\n        } else {\n          return {};\n        }\n      };\n      const dimensions = getDimensionsOfElement();\n      return {\n        embed: snippet,\n        ...data,\n        ...dimensions\n      };\n    };\n    const addEmbedHtml = (api, editor) => response => {\n      if (isString(response.url) && response.url.trim().length > 0) {\n        const html = response.html;\n        const snippetData = htmlToData(html, editor.schema);\n        const nuData = {\n          ...snippetData,\n          source: response.url,\n          embed: html\n        };\n        api.setData(wrap(nuData));\n      }\n    };\n    const selectPlaceholder = (editor, beforeObjects) => {\n      const afterObjects = editor.dom.select('*[data-mce-object]');\n      for (let i = 0; i < beforeObjects.length; i++) {\n        for (let y = afterObjects.length - 1; y >= 0; y--) {\n          if (beforeObjects[i] === afterObjects[y]) {\n            afterObjects.splice(y, 1);\n          }\n        }\n      }\n      editor.selection.select(afterObjects[0]);\n    };\n    const handleInsert = (editor, html) => {\n      const beforeObjects = editor.dom.select('*[data-mce-object]');\n      editor.insertContent(html);\n      selectPlaceholder(editor, beforeObjects);\n      editor.nodeChanged();\n    };\n    const isEmbedIframe = (url, mediaDataType) => isNonNullable(mediaDataType) && mediaDataType === 'ephox-embed-iri' && isNonNullable(matchPattern(url));\n    const shouldInsertAsNewIframe = (prevData, newData) => {\n      const hasDimensionsChanged = (prevData, newData) => prevData.width !== newData.width || prevData.height !== newData.height;\n      return hasDimensionsChanged(prevData, newData) && isEmbedIframe(newData.source, prevData.type);\n    };\n    const submitForm = (prevData, newData, editor) => {\n      var _a;\n      newData.embed = shouldInsertAsNewIframe(prevData, newData) && hasDimensions(editor) ? dataToHtml(editor, {\n        ...newData,\n        embed: ''\n      }) : updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema);\n      if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {\n        handleInsert(editor, newData.embed);\n      } else {\n        getEmbedHtml(editor, newData).then(response => {\n          handleInsert(editor, response.html);\n        }).catch(handleError(editor));\n      }\n    };\n    const showDialog = editor => {\n      const editorData = getEditorData(editor);\n      const currentData = Cell(editorData);\n      const initialData = wrap(editorData);\n      const handleSource = (prevData, api) => {\n        const serviceData = unwrap(api.getData(), 'source');\n        if (prevData.source !== serviceData.source) {\n          addEmbedHtml(win, editor)({\n            url: serviceData.source,\n            html: ''\n          });\n          getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n        }\n      };\n      const handleEmbed = api => {\n        var _a;\n        const data = unwrap(api.getData());\n        const dataFromEmbed = htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema);\n        api.setData(wrap(dataFromEmbed));\n      };\n      const handleUpdate = (api, sourceInput, prevData) => {\n        const dialogData = unwrap(api.getData(), sourceInput);\n        const data = shouldInsertAsNewIframe(prevData, dialogData) && hasDimensions(editor) ? {\n          ...dialogData,\n          embed: ''\n        } : dialogData;\n        const embed = dataToHtml(editor, data);\n        api.setData(wrap({\n          ...data,\n          embed\n        }));\n      };\n      const mediaInput = [{\n          name: 'source',\n          type: 'urlinput',\n          filetype: 'media',\n          label: 'Source',\n          picker_text: 'Browse files'\n        }];\n      const sizeInput = !hasDimensions(editor) ? [] : [{\n          type: 'sizeinput',\n          name: 'dimensions',\n          label: 'Constrain proportions',\n          constrain: true\n        }];\n      const generalTab = {\n        title: 'General',\n        name: 'general',\n        items: flatten([\n          mediaInput,\n          sizeInput\n        ])\n      };\n      const embedTextarea = {\n        type: 'textarea',\n        name: 'embed',\n        label: 'Paste your embed code below:'\n      };\n      const embedTab = {\n        title: 'Embed',\n        items: [embedTextarea]\n      };\n      const advancedFormItems = [];\n      if (hasAltSource(editor)) {\n        advancedFormItems.push({\n          name: 'altsource',\n          type: 'urlinput',\n          filetype: 'media',\n          label: 'Alternative source URL'\n        });\n      }\n      if (hasPoster(editor)) {\n        advancedFormItems.push({\n          name: 'poster',\n          type: 'urlinput',\n          filetype: 'image',\n          label: 'Media poster (Image URL)'\n        });\n      }\n      const advancedTab = {\n        title: 'Advanced',\n        name: 'advanced',\n        items: advancedFormItems\n      };\n      const tabs = [\n        generalTab,\n        embedTab\n      ];\n      if (advancedFormItems.length > 0) {\n        tabs.push(advancedTab);\n      }\n      const body = {\n        type: 'tabpanel',\n        tabs\n      };\n      const win = editor.windowManager.open({\n        title: 'Insert/Edit Media',\n        size: 'normal',\n        body,\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        onSubmit: api => {\n          const serviceData = unwrap(api.getData());\n          submitForm(currentData.get(), serviceData, editor);\n          api.close();\n        },\n        onChange: (api, detail) => {\n          switch (detail.name) {\n          case 'source':\n            handleSource(currentData.get(), api);\n            break;\n          case 'embed':\n            handleEmbed(api);\n            break;\n          case 'dimensions':\n          case 'altsource':\n          case 'poster':\n            handleUpdate(api, detail.name, currentData.get());\n            break;\n          }\n          currentData.set(unwrap(api.getData()));\n        },\n        initialData\n      });\n    };\n\n    const get = editor => {\n      const showDialog$1 = () => {\n        showDialog(editor);\n      };\n      return { showDialog: showDialog$1 };\n    };\n\n    const register$1 = editor => {\n      const showDialog$1 = () => {\n        showDialog(editor);\n      };\n      editor.addCommand('mceMedia', showDialog$1);\n    };\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n    const isLiveEmbedNode = node => {\n      const name = node.name;\n      return name === 'iframe' || name === 'video' || name === 'audio';\n    };\n    const getDimension = (node, styles, dimension, defaultValue = null) => {\n      const value = node.attr(dimension);\n      if (isNonNullable(value)) {\n        return value;\n      } else if (!has(styles, dimension)) {\n        return defaultValue;\n      } else {\n        return null;\n      }\n    };\n    const setDimensions = (node, previewNode, styles) => {\n      const useDefaults = previewNode.name === 'img' || node.name === 'video';\n      const defaultWidth = useDefaults ? '300' : null;\n      const fallbackHeight = node.name === 'audio' ? '30' : '150';\n      const defaultHeight = useDefaults ? fallbackHeight : null;\n      previewNode.attr({\n        width: getDimension(node, styles, 'width', defaultWidth),\n        height: getDimension(node, styles, 'height', defaultHeight)\n      });\n    };\n    const appendNodeContent = (editor, nodeName, previewNode, html) => {\n      const newNode = Parser(editor.schema).parse(html, { context: nodeName });\n      while (newNode.firstChild) {\n        previewNode.append(newNode.firstChild);\n      }\n    };\n    const createPlaceholderNode = (editor, node) => {\n      const name = node.name;\n      const placeHolder = new global$2('img', 1);\n      retainAttributesAndInnerHtml(editor, node, placeHolder);\n      setDimensions(node, placeHolder, {});\n      placeHolder.attr({\n        'style': node.attr('style'),\n        'src': global.transparentSrc,\n        'data-mce-object': name,\n        'class': 'mce-object mce-object-' + name\n      });\n      return placeHolder;\n    };\n    const createPreviewNode = (editor, node) => {\n      var _a;\n      const name = node.name;\n      const previewWrapper = new global$2('span', 1);\n      previewWrapper.attr({\n        'contentEditable': 'false',\n        'style': node.attr('style'),\n        'data-mce-object': name,\n        'class': 'mce-preview-object mce-object-' + name\n      });\n      retainAttributesAndInnerHtml(editor, node, previewWrapper);\n      const styles = editor.dom.parseStyle((_a = node.attr('style')) !== null && _a !== void 0 ? _a : '');\n      const previewNode = new global$2(name, 1);\n      setDimensions(node, previewNode, styles);\n      previewNode.attr({\n        src: node.attr('src'),\n        style: node.attr('style'),\n        class: node.attr('class')\n      });\n      if (name === 'iframe') {\n        previewNode.attr({\n          allowfullscreen: node.attr('allowfullscreen'),\n          frameborder: '0',\n          sandbox: node.attr('sandbox')\n        });\n      } else {\n        const attrs = [\n          'controls',\n          'crossorigin',\n          'currentTime',\n          'loop',\n          'muted',\n          'poster',\n          'preload'\n        ];\n        each$1(attrs, attrName => {\n          previewNode.attr(attrName, node.attr(attrName));\n        });\n        const sanitizedHtml = previewWrapper.attr('data-mce-html');\n        if (isNonNullable(sanitizedHtml)) {\n          appendNodeContent(editor, name, previewNode, unescape(sanitizedHtml));\n        }\n      }\n      const shimNode = new global$2('span', 1);\n      shimNode.attr('class', 'mce-shim');\n      previewWrapper.append(previewNode);\n      previewWrapper.append(shimNode);\n      return previewWrapper;\n    };\n    const retainAttributesAndInnerHtml = (editor, sourceNode, targetNode) => {\n      var _a;\n      const attribs = (_a = sourceNode.attributes) !== null && _a !== void 0 ? _a : [];\n      let ai = attribs.length;\n      while (ai--) {\n        const attrName = attribs[ai].name;\n        let attrValue = attribs[ai].value;\n        if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style' && !startsWith(attrName, 'data-mce-')) {\n          if (attrName === 'data' || attrName === 'src') {\n            attrValue = editor.convertURL(attrValue, attrName);\n          }\n          targetNode.attr('data-mce-p-' + attrName, attrValue);\n        }\n      }\n      const serializer = global$1({ inner: true }, editor.schema);\n      const tempNode = new global$2('div', 1);\n      each$1(sourceNode.children(), child => tempNode.append(child));\n      const innerHtml = serializer.serialize(tempNode);\n      if (innerHtml) {\n        targetNode.attr('data-mce-html', escape(innerHtml));\n        targetNode.empty();\n      }\n    };\n    const isPageEmbedWrapper = node => {\n      const nodeClass = node.attr('class');\n      return isString(nodeClass) && /\\btiny-pageembed\\b/.test(nodeClass);\n    };\n    const isWithinEmbedWrapper = node => {\n      let tempNode = node;\n      while (tempNode = tempNode.parent) {\n        if (tempNode.attr('data-ephox-embed-iri') || isPageEmbedWrapper(tempNode)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const placeHolderConverter = editor => nodes => {\n      let i = nodes.length;\n      let node;\n      while (i--) {\n        node = nodes[i];\n        if (!node.parent) {\n          continue;\n        }\n        if (node.parent.attr('data-mce-object')) {\n          continue;\n        }\n        if (isLiveEmbedNode(node) && hasLiveEmbeds(editor)) {\n          if (!isWithinEmbedWrapper(node)) {\n            node.replace(createPreviewNode(editor, node));\n          }\n        } else {\n          if (!isWithinEmbedWrapper(node)) {\n            node.replace(createPlaceholderNode(editor, node));\n          }\n        }\n      }\n    };\n\n    const parseAndSanitize = (editor, context, html) => {\n      const getEditorOption = editor.options.get;\n      const sanitize = getEditorOption('xss_sanitization');\n      const validate = shouldFilterHtml(editor);\n      return Parser(editor.schema, {\n        sanitize,\n        validate\n      }).parse(html, { context });\n    };\n\n    const setup$1 = editor => {\n      editor.on('PreInit', () => {\n        const {schema, serializer, parser} = editor;\n        const boolAttrs = schema.getBoolAttrs();\n        each$1('webkitallowfullscreen mozallowfullscreen'.split(' '), name => {\n          boolAttrs[name] = {};\n        });\n        each({ embed: ['wmode'] }, (attrs, name) => {\n          const rule = schema.getElementRule(name);\n          if (rule) {\n            each$1(attrs, attr => {\n              rule.attributes[attr] = {};\n              rule.attributesOrder.push(attr);\n            });\n          }\n        });\n        parser.addNodeFilter('iframe,video,audio,object,embed', placeHolderConverter(editor));\n        serializer.addAttributeFilter('data-mce-object', (nodes, name) => {\n          var _a;\n          let i = nodes.length;\n          while (i--) {\n            const node = nodes[i];\n            if (!node.parent) {\n              continue;\n            }\n            const realElmName = node.attr(name);\n            const realElm = new global$2(realElmName, 1);\n            if (realElmName !== 'audio') {\n              const className = node.attr('class');\n              if (className && className.indexOf('mce-preview-object') !== -1 && node.firstChild) {\n                realElm.attr({\n                  width: node.firstChild.attr('width'),\n                  height: node.firstChild.attr('height')\n                });\n              } else {\n                realElm.attr({\n                  width: node.attr('width'),\n                  height: node.attr('height')\n                });\n              }\n            }\n            realElm.attr({ style: node.attr('style') });\n            const attribs = (_a = node.attributes) !== null && _a !== void 0 ? _a : [];\n            let ai = attribs.length;\n            while (ai--) {\n              const attrName = attribs[ai].name;\n              if (attrName.indexOf('data-mce-p-') === 0) {\n                realElm.attr(attrName.substr(11), attribs[ai].value);\n              }\n            }\n            const innerHtml = node.attr('data-mce-html');\n            if (innerHtml) {\n              const fragment = parseAndSanitize(editor, realElmName, unescape(innerHtml));\n              each$1(fragment.children(), child => realElm.append(child));\n            }\n            node.replace(realElm);\n          }\n        });\n      });\n      editor.on('SetContent', () => {\n        const dom = editor.dom;\n        each$1(dom.select('span.mce-preview-object'), elm => {\n          if (dom.select('span.mce-shim', elm).length === 0) {\n            dom.add(elm, 'span', { class: 'mce-shim' });\n          }\n        });\n      });\n    };\n\n    const setup = editor => {\n      editor.on('ResolveName', e => {\n        let name;\n        if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n          e.name = name;\n        }\n      });\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const onAction = () => editor.execCommand('mceMedia');\n      editor.ui.registry.addToggleButton('media', {\n        tooltip: 'Insert/edit media',\n        icon: 'embed',\n        onAction,\n        onSetup: buttonApi => {\n          const selection = editor.selection;\n          buttonApi.setActive(isMediaElement(selection.getNode()));\n          const unbindSelectorChanged = selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind;\n          const unbindEditable = onSetupEditable(editor)(buttonApi);\n          return () => {\n            unbindSelectorChanged();\n            unbindEditable();\n          };\n        }\n      });\n      editor.ui.registry.addMenuItem('media', {\n        icon: 'embed',\n        text: 'Media...',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$6.add('media', editor => {\n        register$2(editor);\n        register$1(editor);\n        register(editor);\n        setup(editor);\n        setup$1(editor);\n        setup$2(editor);\n        return get(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const isSimpleType = type => value => typeof value === type;\n    const isBoolean = isSimpleType('boolean');\n    const isNumber = isSimpleType('number');\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('nonbreaking_force_tab', {\n        processor: value => {\n          if (isBoolean(value)) {\n            return {\n              value: value ? 3 : 0,\n              valid: true\n            };\n          } else if (isNumber(value)) {\n            return {\n              value,\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a boolean or number.'\n            };\n          }\n        },\n        default: false\n      });\n      registerOption('nonbreaking_wrap', {\n        processor: 'boolean',\n        default: true\n      });\n    };\n    const getKeyboardSpaces = option('nonbreaking_force_tab');\n    const wrapNbsps = option('nonbreaking_wrap');\n\n    const stringRepeat = (string, repeats) => {\n      let str = '';\n      for (let index = 0; index < repeats; index++) {\n        str += string;\n      }\n      return str;\n    };\n    const isVisualCharsEnabled = editor => editor.plugins.visualchars ? editor.plugins.visualchars.isEnabled() : false;\n    const insertNbsp = (editor, times) => {\n      const classes = () => isVisualCharsEnabled(editor) ? 'mce-nbsp-wrap mce-nbsp' : 'mce-nbsp-wrap';\n      const nbspSpan = () => `<span class=\"${ classes() }\" contenteditable=\"false\">${ stringRepeat('&nbsp;', times) }</span>`;\n      const shouldWrap = wrapNbsps(editor);\n      const html = shouldWrap || editor.plugins.visualchars ? nbspSpan() : stringRepeat('&nbsp;', times);\n      editor.undoManager.transact(() => editor.insertContent(html));\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mceNonBreaking', () => {\n        insertNbsp(editor, 1);\n      });\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n    const setup = editor => {\n      const spaces = getKeyboardSpaces(editor);\n      if (spaces > 0) {\n        editor.on('keydown', e => {\n          if (e.keyCode === global.TAB && !e.isDefaultPrevented()) {\n            if (e.shiftKey) {\n              return;\n            }\n            e.preventDefault();\n            e.stopImmediatePropagation();\n            insertNbsp(editor, spaces);\n          }\n        });\n      }\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const onAction = () => editor.execCommand('mceNonBreaking');\n      editor.ui.registry.addButton('nonbreaking', {\n        icon: 'non-breaking',\n        tooltip: 'Nonbreaking space',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n      editor.ui.registry.addMenuItem('nonbreaking', {\n        icon: 'non-breaking',\n        text: 'Nonbreaking space',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$1.add('nonbreaking', editor => {\n        register$2(editor);\n        register$1(editor);\n        register(editor);\n        setup(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('pagebreak_separator', {\n        processor: 'string',\n        default: '<!-- pagebreak -->'\n      });\n      registerOption('pagebreak_split_block', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const getSeparatorHtml = option('pagebreak_separator');\n    const shouldSplitBlock = option('pagebreak_split_block');\n\n    const pageBreakClass = 'mce-pagebreak';\n    const getPlaceholderHtml = shouldSplitBlock => {\n      const html = `<img src=\"${ global.transparentSrc }\" class=\"${ pageBreakClass }\" data-mce-resize=\"false\" data-mce-placeholder />`;\n      return shouldSplitBlock ? `<p>${ html }</p>` : html;\n    };\n    const setup$1 = editor => {\n      const separatorHtml = getSeparatorHtml(editor);\n      const shouldSplitBlock$1 = () => shouldSplitBlock(editor);\n      const pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\\?\\.\\*\\[\\]\\(\\)\\{\\}\\+\\^\\$\\:]/g, a => {\n        return '\\\\' + a;\n      }), 'gi');\n      editor.on('BeforeSetContent', e => {\n        e.content = e.content.replace(pageBreakSeparatorRegExp, getPlaceholderHtml(shouldSplitBlock$1()));\n      });\n      editor.on('PreInit', () => {\n        editor.serializer.addNodeFilter('img', nodes => {\n          let i = nodes.length, node, className;\n          while (i--) {\n            node = nodes[i];\n            className = node.attr('class');\n            if (className && className.indexOf(pageBreakClass) !== -1) {\n              const parentNode = node.parent;\n              if (parentNode && editor.schema.getBlockElements()[parentNode.name] && shouldSplitBlock$1()) {\n                parentNode.type = 3;\n                parentNode.value = separatorHtml;\n                parentNode.raw = true;\n                node.remove();\n                continue;\n              }\n              node.type = 3;\n              node.value = separatorHtml;\n              node.raw = true;\n            }\n          }\n        });\n      });\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mcePageBreak', () => {\n        editor.insertContent(getPlaceholderHtml(shouldSplitBlock(editor)));\n      });\n    };\n\n    const setup = editor => {\n      editor.on('ResolveName', e => {\n        if (e.target.nodeName === 'IMG' && editor.dom.hasClass(e.target, pageBreakClass)) {\n          e.name = 'pagebreak';\n        }\n      });\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const register = editor => {\n      const onAction = () => editor.execCommand('mcePageBreak');\n      editor.ui.registry.addButton('pagebreak', {\n        icon: 'page-break',\n        tooltip: 'Page break',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n      editor.ui.registry.addMenuItem('pagebreak', {\n        text: 'Page break',\n        icon: 'page-break',\n        onAction,\n        onSetup: onSetupEditable(editor)\n      });\n    };\n\n    var Plugin = () => {\n      global$1.add('pagebreak', editor => {\n        register$2(editor);\n        register$1(editor);\n        register(editor);\n        setup$1(editor);\n        setup(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const option = name => editor => editor.options.get(name);\n    const getContentStyle = option('content_style');\n    const shouldUseContentCssCors = option('content_css_cors');\n    const getBodyClass = option('body_class');\n    const getBodyId = option('body_id');\n\n    const getPreviewHtml = editor => {\n      var _a;\n      let headHtml = '';\n      const encode = editor.dom.encode;\n      const contentStyle = (_a = getContentStyle(editor)) !== null && _a !== void 0 ? _a : '';\n      headHtml += '<base href=\"' + encode(editor.documentBaseURI.getURI()) + '\">';\n      const cors = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n      global.each(editor.contentCSS, url => {\n        headHtml += '<link type=\"text/css\" rel=\"stylesheet\" href=\"' + encode(editor.documentBaseURI.toAbsolute(url)) + '\"' + cors + '>';\n      });\n      if (contentStyle) {\n        headHtml += '<style type=\"text/css\">' + contentStyle + '</style>';\n      }\n      const bodyId = getBodyId(editor);\n      const bodyClass = getBodyClass(editor);\n      const isMetaKeyPressed = global$1.os.isMacOS() || global$1.os.isiOS() ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';\n      const preventClicksOnLinksScript = '<script>' + 'document.addEventListener && document.addEventListener(\"click\", function(e) {' + 'for (var elm = e.target; elm; elm = elm.parentNode) {' + 'if (elm.nodeName === \"A\" && !(' + isMetaKeyPressed + ')) {' + 'e.preventDefault();' + '}' + '}' + '}, false);' + '</script> ';\n      const directionality = editor.getBody().dir;\n      const dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n      const previewHtml = '<!DOCTYPE html>' + '<html>' + '<head>' + headHtml + '</head>' + '<body id=\"' + encode(bodyId) + '\" class=\"mce-content-body ' + encode(bodyClass) + '\"' + dirAttr + '>' + editor.getContent() + preventClicksOnLinksScript + '</body>' + '</html>';\n      return previewHtml;\n    };\n\n    const open = editor => {\n      const content = getPreviewHtml(editor);\n      const dataApi = editor.windowManager.open({\n        title: 'Preview',\n        size: 'large',\n        body: {\n          type: 'panel',\n          items: [{\n              name: 'preview',\n              type: 'iframe',\n              sandboxed: true,\n              transparent: false\n            }]\n        },\n        buttons: [{\n            type: 'cancel',\n            name: 'close',\n            text: 'Close',\n            primary: true\n          }],\n        initialData: { preview: content }\n      });\n      dataApi.focus('close');\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mcePreview', () => {\n        open(editor);\n      });\n    };\n\n    const register = editor => {\n      const onAction = () => editor.execCommand('mcePreview');\n      editor.ui.registry.addButton('preview', {\n        icon: 'preview',\n        tooltip: 'Preview',\n        onAction\n      });\n      editor.ui.registry.addMenuItem('preview', {\n        icon: 'preview',\n        text: 'Preview',\n        onAction\n      });\n    };\n\n    var Plugin = () => {\n      global$2.add('preview', editor => {\n        register$1(editor);\n        register(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const isString = isType('string');\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n\n    const option = name => editor => editor.options.get(name);\n    const register = editor => {\n      const registerOption = editor.options.register;\n      const toolbarProcessor = defaultValue => value => {\n        const valid = isBoolean(value) || isString(value);\n        if (valid) {\n          if (isBoolean(value)) {\n            return {\n              value: value ? defaultValue : '',\n              valid\n            };\n          } else {\n            return {\n              value: value.trim(),\n              valid\n            };\n          }\n        } else {\n          return {\n            valid: false,\n            message: 'Must be a boolean or string.'\n          };\n        }\n      };\n      const defaultSelectionToolbar = 'bold italic | quicklink h2 h3 blockquote';\n      registerOption('quickbars_selection_toolbar', {\n        processor: toolbarProcessor(defaultSelectionToolbar),\n        default: defaultSelectionToolbar\n      });\n      const defaultInsertToolbar = 'quickimage quicktable';\n      registerOption('quickbars_insert_toolbar', {\n        processor: toolbarProcessor(defaultInsertToolbar),\n        default: defaultInsertToolbar\n      });\n      const defaultImageToolbar = 'alignleft aligncenter alignright';\n      registerOption('quickbars_image_toolbar', {\n        processor: toolbarProcessor(defaultImageToolbar),\n        default: defaultImageToolbar\n      });\n    };\n    const getTextSelectionToolbarItems = option('quickbars_selection_toolbar');\n    const getInsertToolbarItems = option('quickbars_insert_toolbar');\n    const getImageToolbarItems = option('quickbars_image_toolbar');\n\n    let unique = 0;\n    const generate = prefix => {\n      const date = new Date();\n      const time = date.getTime();\n      const random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    const insertTable = (editor, columns, rows) => {\n      editor.execCommand('mceInsertTable', false, {\n        rows,\n        columns\n      });\n    };\n    const insertBlob = (editor, base64, blob) => {\n      const blobCache = editor.editorUpload.blobCache;\n      const blobInfo = blobCache.create(generate('mceu'), blob, base64);\n      blobCache.add(blobInfo);\n      editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() }));\n    };\n\n    const blobToBase64 = blob => {\n      return new Promise(resolve => {\n        const reader = new FileReader();\n        reader.onloadend = () => {\n          resolve(reader.result.split(',')[1]);\n        };\n        reader.readAsDataURL(blob);\n      });\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n    const pickFile = editor => new Promise(resolve => {\n      let resolved = false;\n      const fileInput = document.createElement('input');\n      fileInput.type = 'file';\n      fileInput.accept = 'image/*';\n      fileInput.style.position = 'fixed';\n      fileInput.style.left = '0';\n      fileInput.style.top = '0';\n      fileInput.style.opacity = '0.001';\n      document.body.appendChild(fileInput);\n      const resolveFileInput = value => {\n        var _a;\n        if (!resolved) {\n          (_a = fileInput.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(fileInput);\n          resolved = true;\n          resolve(value);\n        }\n      };\n      const changeHandler = e => {\n        resolveFileInput(Array.prototype.slice.call(e.target.files));\n      };\n      fileInput.addEventListener('input', changeHandler);\n      fileInput.addEventListener('change', changeHandler);\n      const cancelHandler = e => {\n        const cleanup = () => {\n          resolveFileInput([]);\n        };\n        if (!resolved) {\n          if (e.type === 'focusin') {\n            global.setEditorTimeout(editor, cleanup, 1000);\n          } else {\n            cleanup();\n          }\n        }\n        editor.off('focusin remove', cancelHandler);\n      };\n      editor.on('focusin remove', cancelHandler);\n      fileInput.click();\n    });\n\n    const setupButtons = editor => {\n      editor.ui.registry.addButton('quickimage', {\n        icon: 'image',\n        tooltip: 'Insert image',\n        onAction: () => {\n          pickFile(editor).then(files => {\n            if (files.length > 0) {\n              const blob = files[0];\n              blobToBase64(blob).then(base64 => {\n                insertBlob(editor, base64, blob);\n              });\n            }\n          });\n        }\n      });\n      editor.ui.registry.addButton('quicktable', {\n        icon: 'table',\n        tooltip: 'Insert table',\n        onAction: () => {\n          insertTable(editor, 2, 2);\n        }\n      });\n    };\n\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const never = constant(false);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const ELEMENT = 1;\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n\n    const has$1 = (element, key) => {\n      const dom = element.dom;\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n    };\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    const is = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n\n    const ancestor$1 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$2 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n    };\n\n    const closest$1 = (scope, predicate, isRoot) => closest$2(scope, predicate, isRoot).isSome();\n\n    const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n    const closest = (scope, selector, isRoot) => {\n      const is$1 = (element, selector) => is(element, selector);\n      return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n    };\n\n    const addToEditor$1 = editor => {\n      const insertToolbarItems = getInsertToolbarItems(editor);\n      if (insertToolbarItems.length > 0) {\n        editor.ui.registry.addContextToolbar('quickblock', {\n          predicate: node => {\n            const sugarNode = SugarElement.fromDom(node);\n            const textBlockElementsMap = editor.schema.getTextBlockElements();\n            const isRoot = elem => elem.dom === editor.getBody();\n            return !has$1(sugarNode, 'data-mce-bogus') && closest(sugarNode, 'table,[data-mce-bogus=\"all\"]', isRoot).fold(() => closest$1(sugarNode, elem => name(elem) in textBlockElementsMap && editor.dom.isEmpty(elem.dom), isRoot), never);\n          },\n          items: insertToolbarItems,\n          position: 'line',\n          scope: 'editor'\n        });\n      }\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n\n    const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n    const addToEditor = editor => {\n      const isEditable = node => editor.dom.isEditable(node);\n      const isInEditableContext = el => isEditable(el.parentElement);\n      const isImage = node => {\n        const isImageFigure = node.nodeName === 'FIGURE' && /image/i.test(node.className);\n        const isImage = node.nodeName === 'IMG' || isImageFigure;\n        const isPagebreak = has(SugarElement.fromDom(node), 'mce-pagebreak');\n        return isImage && isInEditableContext(node) && !isPagebreak;\n      };\n      const imageToolbarItems = getImageToolbarItems(editor);\n      if (imageToolbarItems.length > 0) {\n        editor.ui.registry.addContextToolbar('imageselection', {\n          predicate: isImage,\n          items: imageToolbarItems,\n          position: 'node'\n        });\n      }\n      const textToolbarItems = getTextSelectionToolbarItems(editor);\n      if (textToolbarItems.length > 0) {\n        editor.ui.registry.addContextToolbar('textselection', {\n          predicate: node => !isImage(node) && !editor.selection.isCollapsed() && isEditable(node),\n          items: textToolbarItems,\n          position: 'selection',\n          scope: 'editor'\n        });\n      }\n    };\n\n    var Plugin = () => {\n      global$1.add('quickbars', editor => {\n        register(editor);\n        setupButtons(editor);\n        addToEditor$1(editor);\n        addToEditor(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const isSimpleType = type => value => typeof value === type;\n    const isFunction = isSimpleType('function');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const option = name => editor => editor.options.get(name);\n    const register$2 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('save_enablewhendirty', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('save_onsavecallback', { processor: 'function' });\n      registerOption('save_oncancelcallback', { processor: 'function' });\n    };\n    const enableWhenDirty = option('save_enablewhendirty');\n    const getOnSaveCallback = option('save_onsavecallback');\n    const getOnCancelCallback = option('save_oncancelcallback');\n\n    const displayErrorMessage = (editor, message) => {\n      editor.notificationManager.open({\n        text: message,\n        type: 'error'\n      });\n    };\n    const save = editor => {\n      const formObj = global$1.DOM.getParent(editor.id, 'form');\n      if (enableWhenDirty(editor) && !editor.isDirty()) {\n        return;\n      }\n      editor.save();\n      const onSaveCallback = getOnSaveCallback(editor);\n      if (isFunction(onSaveCallback)) {\n        onSaveCallback.call(editor, editor);\n        editor.nodeChanged();\n        return;\n      }\n      if (formObj) {\n        editor.setDirty(false);\n        if (!formObj.onsubmit || formObj.onsubmit()) {\n          if (typeof formObj.submit === 'function') {\n            formObj.submit();\n          } else {\n            displayErrorMessage(editor, 'Error: Form submit field collision.');\n          }\n        }\n        editor.nodeChanged();\n      } else {\n        displayErrorMessage(editor, 'Error: No form element found.');\n      }\n    };\n    const cancel = editor => {\n      const h = global.trim(editor.startContent);\n      const onCancelCallback = getOnCancelCallback(editor);\n      if (isFunction(onCancelCallback)) {\n        onCancelCallback.call(editor, editor);\n        return;\n      }\n      editor.resetContent(h);\n    };\n\n    const register$1 = editor => {\n      editor.addCommand('mceSave', () => {\n        save(editor);\n      });\n      editor.addCommand('mceCancel', () => {\n        cancel(editor);\n      });\n    };\n\n    const stateToggle = editor => api => {\n      const handler = () => {\n        api.setEnabled(!enableWhenDirty(editor) || editor.isDirty());\n      };\n      handler();\n      editor.on('NodeChange dirty', handler);\n      return () => editor.off('NodeChange dirty', handler);\n    };\n    const register = editor => {\n      editor.ui.registry.addButton('save', {\n        icon: 'save',\n        tooltip: 'Save',\n        enabled: false,\n        onAction: () => editor.execCommand('mceSave'),\n        onSetup: stateToggle(editor)\n      });\n      editor.ui.registry.addButton('cancel', {\n        icon: 'cancel',\n        tooltip: 'Cancel',\n        enabled: false,\n        onAction: () => editor.execCommand('mceCancel'),\n        onSetup: stateToggle(editor)\n      });\n      editor.addShortcut('Meta+S', '', 'mceSave');\n    };\n\n    var Plugin = () => {\n      global$2.add('save', editor => {\n        register$2(editor);\n        register(editor);\n        register$1(editor);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const isString = isType$1('string');\n    const isArray = isType$1('array');\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isNumber = isSimpleType('number');\n\n    const noop = () => {\n    };\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const always = constant(true);\n\n    const punctuationStr = `[~\\u2116|!-*+-\\\\/:;?@\\\\[-\\`{}\\u00A1\\u00AB\\u00B7\\u00BB\\u00BF;\\u00B7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]`;\n\n    const punctuation$1 = constant(punctuationStr);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const punctuation = punctuation$1;\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const nativeSlice = Array.prototype.slice;\n    const nativePush = Array.prototype.push;\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const groupBy = (xs, f) => {\n      if (xs.length === 0) {\n        return [];\n      } else {\n        let wasType = f(xs[0]);\n        const r = [];\n        let group = [];\n        for (let i = 0, len = xs.length; i < len; i++) {\n          const x = xs[i];\n          const type = f(x);\n          if (type !== wasType) {\n            r.push(group);\n            group = [];\n          }\n          wasType = type;\n          group.push(x);\n        }\n        if (group.length !== 0) {\n          r.push(group);\n        }\n        return r;\n      }\n    };\n    const foldl = (xs, f, acc) => {\n      each(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind = (xs, f) => flatten(map(xs, f));\n    const sort = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n\n    const hasOwnProperty = Object.hasOwnProperty;\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isText$1 = isType(TEXT);\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n    const spot = (element, offset) => ({\n      element,\n      offset\n    });\n    const leaf = (element, offset) => {\n      const cs = children(element);\n      return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n    };\n\n    const before = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const append = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const wrap = (element, wrapper) => {\n      before(element, wrapper);\n      append(wrapper, element);\n    };\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api = NodeValue(isText$1, 'text');\n    const get$1 = element => api.get(element);\n\n    const compareDocumentPosition = (a, b, match) => {\n      return (a.compareDocumentPosition(b) & match) !== 0;\n    };\n    const documentPositionPreceding = (a, b) => {\n      return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_PRECEDING);\n    };\n\n    const descendants = (scope, selector) => all(selector, scope);\n\n    var global = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n    const isSimpleBoundary = (dom, node) => dom.isBlock(node) || has(dom.schema.getVoidElements(), node.nodeName);\n    const isContentEditableFalse = (dom, node) => !dom.isEditable(node);\n    const isContentEditableTrueInCef = (dom, node) => dom.getContentEditable(node) === 'true' && node.parentNode && !dom.isEditable(node.parentNode);\n    const isHidden = (dom, node) => !dom.isBlock(node) && has(dom.schema.getWhitespaceElements(), node.nodeName);\n    const isBoundary = (dom, node) => isSimpleBoundary(dom, node) || isContentEditableFalse(dom, node) || isHidden(dom, node) || isContentEditableTrueInCef(dom, node);\n    const isText = node => node.nodeType === 3;\n    const nuSection = () => ({\n      sOffset: 0,\n      fOffset: 0,\n      elements: []\n    });\n    const toLeaf = (node, offset) => leaf(SugarElement.fromDom(node), offset);\n    const walk = (dom, walkerFn, startNode, callbacks, endNode, skipStart = true) => {\n      let next = skipStart ? walkerFn(false) : startNode;\n      while (next) {\n        const isCefNode = isContentEditableFalse(dom, next);\n        if (isCefNode || isHidden(dom, next)) {\n          const stopWalking = isCefNode ? callbacks.cef(next) : callbacks.boundary(next);\n          if (stopWalking) {\n            break;\n          } else {\n            next = walkerFn(true);\n            continue;\n          }\n        } else if (isSimpleBoundary(dom, next)) {\n          if (callbacks.boundary(next)) {\n            break;\n          }\n        } else if (isText(next)) {\n          callbacks.text(next);\n        }\n        if (next === endNode) {\n          break;\n        } else {\n          next = walkerFn(false);\n        }\n      }\n    };\n    const collectTextToBoundary = (dom, section, node, rootNode, forwards) => {\n      var _a;\n      if (isBoundary(dom, node)) {\n        return;\n      }\n      const rootBlock = (_a = dom.getParent(rootNode, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n      const walker = new global(node, rootBlock);\n      const walkerFn = forwards ? walker.next.bind(walker) : walker.prev.bind(walker);\n      walk(dom, walkerFn, node, {\n        boundary: always,\n        cef: always,\n        text: next => {\n          if (forwards) {\n            section.fOffset += next.length;\n          } else {\n            section.sOffset += next.length;\n          }\n          section.elements.push(SugarElement.fromDom(next));\n        }\n      });\n    };\n    const collect = (dom, rootNode, startNode, endNode, callbacks, skipStart = true) => {\n      const walker = new global(startNode, rootNode);\n      const sections = [];\n      let current = nuSection();\n      collectTextToBoundary(dom, current, startNode, rootNode, false);\n      const finishSection = () => {\n        if (current.elements.length > 0) {\n          sections.push(current);\n          current = nuSection();\n        }\n        return false;\n      };\n      walk(dom, walker.next.bind(walker), startNode, {\n        boundary: finishSection,\n        cef: node => {\n          finishSection();\n          if (callbacks) {\n            sections.push(...callbacks.cef(node));\n          }\n          return false;\n        },\n        text: next => {\n          current.elements.push(SugarElement.fromDom(next));\n          if (callbacks) {\n            callbacks.text(next, current);\n          }\n        }\n      }, endNode, skipStart);\n      if (endNode) {\n        collectTextToBoundary(dom, current, endNode, rootNode, true);\n      }\n      finishSection();\n      return sections;\n    };\n    const collectRangeSections = (dom, rng) => {\n      const start = toLeaf(rng.startContainer, rng.startOffset);\n      const startNode = start.element.dom;\n      const end = toLeaf(rng.endContainer, rng.endOffset);\n      const endNode = end.element.dom;\n      return collect(dom, rng.commonAncestorContainer, startNode, endNode, {\n        text: (node, section) => {\n          if (node === endNode) {\n            section.fOffset += node.length - end.offset;\n          } else if (node === startNode) {\n            section.sOffset += start.offset;\n          }\n        },\n        cef: node => {\n          const sections = bind(descendants(SugarElement.fromDom(node), '*[contenteditable=true]'), e => {\n            const ceTrueNode = e.dom;\n            return collect(dom, ceTrueNode, ceTrueNode);\n          });\n          return sort(sections, (a, b) => documentPositionPreceding(a.elements[0].dom, b.elements[0].dom) ? 1 : -1);\n        }\n      }, false);\n    };\n    const fromRng = (dom, rng) => rng.collapsed ? [] : collectRangeSections(dom, rng);\n    const fromNode = (dom, node) => {\n      const rng = dom.createRng();\n      rng.selectNode(node);\n      return fromRng(dom, rng);\n    };\n    const fromNodes = (dom, nodes) => bind(nodes, node => fromNode(dom, node));\n\n    const find$2 = (text, pattern, start = 0, finish = text.length) => {\n      const regex = pattern.regex;\n      regex.lastIndex = start;\n      const results = [];\n      let match;\n      while (match = regex.exec(text)) {\n        const matchedText = match[pattern.matchIndex];\n        const matchStart = match.index + match[0].indexOf(matchedText);\n        const matchFinish = matchStart + matchedText.length;\n        if (matchFinish > finish) {\n          break;\n        }\n        results.push({\n          start: matchStart,\n          finish: matchFinish\n        });\n        regex.lastIndex = matchFinish;\n      }\n      return results;\n    };\n    const extract = (elements, matches) => {\n      const nodePositions = foldl(elements, (acc, element) => {\n        const content = get$1(element);\n        const start = acc.last;\n        const finish = start + content.length;\n        const positions = bind(matches, (match, matchIdx) => {\n          if (match.start < finish && match.finish > start) {\n            return [{\n                element,\n                start: Math.max(start, match.start) - start,\n                finish: Math.min(finish, match.finish) - start,\n                matchId: matchIdx\n              }];\n          } else {\n            return [];\n          }\n        });\n        return {\n          results: acc.results.concat(positions),\n          last: finish\n        };\n      }, {\n        results: [],\n        last: 0\n      }).results;\n      return groupBy(nodePositions, position => position.matchId);\n    };\n\n    const find$1 = (pattern, sections) => bind(sections, section => {\n      const elements = section.elements;\n      const content = map(elements, get$1).join('');\n      const positions = find$2(content, pattern, section.sOffset, content.length - section.fOffset);\n      return extract(elements, positions);\n    });\n    const mark = (matches, replacementNode) => {\n      eachr(matches, (match, idx) => {\n        eachr(match, pos => {\n          const wrapper = SugarElement.fromDom(replacementNode.cloneNode(false));\n          set(wrapper, 'data-mce-index', idx);\n          const textNode = pos.element.dom;\n          if (textNode.length === pos.finish && pos.start === 0) {\n            wrap(pos.element, wrapper);\n          } else {\n            if (textNode.length !== pos.finish) {\n              textNode.splitText(pos.finish);\n            }\n            const matchNode = textNode.splitText(pos.start);\n            wrap(SugarElement.fromDom(matchNode), wrapper);\n          }\n        });\n      });\n    };\n    const findAndMark = (dom, pattern, node, replacementNode) => {\n      const textSections = fromNode(dom, node);\n      const matches = find$1(pattern, textSections);\n      mark(matches, replacementNode);\n      return matches.length;\n    };\n    const findAndMarkInSelection = (dom, pattern, selection, replacementNode) => {\n      const bookmark = selection.getBookmark();\n      const nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n      const textSections = nodes.length > 0 ? fromNodes(dom, nodes) : fromRng(dom, selection.getRng());\n      const matches = find$1(pattern, textSections);\n      mark(matches, replacementNode);\n      selection.moveToBookmark(bookmark);\n      return matches.length;\n    };\n\n    const getElmIndex = elm => {\n      return elm.getAttribute('data-mce-index');\n    };\n    const markAllMatches = (editor, currentSearchState, pattern, inSelection) => {\n      const marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n      marker.className = 'mce-match-marker';\n      const node = editor.getBody();\n      done(editor, currentSearchState, false);\n      if (inSelection) {\n        return findAndMarkInSelection(editor.dom, pattern, editor.selection, marker);\n      } else {\n        return findAndMark(editor.dom, pattern, node, marker);\n      }\n    };\n    const unwrap = node => {\n      var _a;\n      const parentNode = node.parentNode;\n      if (node.firstChild) {\n        parentNode.insertBefore(node.firstChild, node);\n      }\n      (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);\n    };\n    const findSpansByIndex = (editor, index) => {\n      const spans = [];\n      const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n      if (nodes.length) {\n        for (let i = 0; i < nodes.length; i++) {\n          const nodeIndex = getElmIndex(nodes[i]);\n          if (nodeIndex === null || !nodeIndex.length) {\n            continue;\n          }\n          if (nodeIndex === index.toString()) {\n            spans.push(nodes[i]);\n          }\n        }\n      }\n      return spans;\n    };\n    const moveSelection = (editor, currentSearchState, forward) => {\n      const searchState = currentSearchState.get();\n      let testIndex = searchState.index;\n      const dom = editor.dom;\n      if (forward) {\n        if (testIndex + 1 === searchState.count) {\n          testIndex = 0;\n        } else {\n          testIndex++;\n        }\n      } else {\n        if (testIndex - 1 === -1) {\n          testIndex = searchState.count - 1;\n        } else {\n          testIndex--;\n        }\n      }\n      dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');\n      const spans = findSpansByIndex(editor, testIndex);\n      if (spans.length) {\n        dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n        editor.selection.scrollIntoView(spans[0]);\n        return testIndex;\n      }\n      return -1;\n    };\n    const removeNode = (dom, node) => {\n      const parent = node.parentNode;\n      dom.remove(node);\n      if (parent && dom.isEmpty(parent)) {\n        dom.remove(parent);\n      }\n    };\n    const escapeSearchText = (text, wholeWord) => {\n      const escapedText = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&').replace(/\\s/g, '[^\\\\S\\\\r\\\\n\\\\uFEFF]');\n      const wordRegex = '(' + escapedText + ')';\n      return wholeWord ? `(?:^|\\\\s|${ punctuation() })` + wordRegex + `(?=$|\\\\s|${ punctuation() })` : wordRegex;\n    };\n    const find = (editor, currentSearchState, text, matchCase, wholeWord, inSelection) => {\n      const selection = editor.selection;\n      const escapedText = escapeSearchText(text, wholeWord);\n      const isForwardSelection = selection.isForward();\n      const pattern = {\n        regex: new RegExp(escapedText, matchCase ? 'g' : 'gi'),\n        matchIndex: 1\n      };\n      const count = markAllMatches(editor, currentSearchState, pattern, inSelection);\n      if (global$2.browser.isSafari()) {\n        selection.setRng(selection.getRng(), isForwardSelection);\n      }\n      if (count) {\n        const newIndex = moveSelection(editor, currentSearchState, true);\n        currentSearchState.set({\n          index: newIndex,\n          count,\n          text,\n          matchCase,\n          wholeWord,\n          inSelection\n        });\n      }\n      return count;\n    };\n    const next = (editor, currentSearchState) => {\n      const index = moveSelection(editor, currentSearchState, true);\n      currentSearchState.set({\n        ...currentSearchState.get(),\n        index\n      });\n    };\n    const prev = (editor, currentSearchState) => {\n      const index = moveSelection(editor, currentSearchState, false);\n      currentSearchState.set({\n        ...currentSearchState.get(),\n        index\n      });\n    };\n    const isMatchSpan = node => {\n      const matchIndex = getElmIndex(node);\n      return matchIndex !== null && matchIndex.length > 0;\n    };\n    const replace = (editor, currentSearchState, text, forward, all) => {\n      const searchState = currentSearchState.get();\n      const currentIndex = searchState.index;\n      let currentMatchIndex, nextIndex = currentIndex;\n      forward = forward !== false;\n      const node = editor.getBody();\n      const nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n      for (let i = 0; i < nodes.length; i++) {\n        const nodeIndex = getElmIndex(nodes[i]);\n        let matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n        if (all || matchIndex === searchState.index) {\n          if (text.length) {\n            nodes[i].innerText = text;\n            unwrap(nodes[i]);\n          } else {\n            removeNode(editor.dom, nodes[i]);\n          }\n          while (nodes[++i]) {\n            matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n            if (matchIndex === currentMatchIndex) {\n              removeNode(editor.dom, nodes[i]);\n            } else {\n              i--;\n              break;\n            }\n          }\n          if (forward) {\n            nextIndex--;\n          }\n        } else if (currentMatchIndex > currentIndex) {\n          nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));\n        }\n      }\n      currentSearchState.set({\n        ...searchState,\n        count: all ? 0 : searchState.count - 1,\n        index: nextIndex\n      });\n      if (forward) {\n        next(editor, currentSearchState);\n      } else {\n        prev(editor, currentSearchState);\n      }\n      return !all && currentSearchState.get().count > 0;\n    };\n    const done = (editor, currentSearchState, keepEditorSelection) => {\n      let startContainer;\n      let endContainer;\n      const searchState = currentSearchState.get();\n      const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n      for (let i = 0; i < nodes.length; i++) {\n        const nodeIndex = getElmIndex(nodes[i]);\n        if (nodeIndex !== null && nodeIndex.length) {\n          if (nodeIndex === searchState.index.toString()) {\n            if (!startContainer) {\n              startContainer = nodes[i].firstChild;\n            }\n            endContainer = nodes[i].firstChild;\n          }\n          unwrap(nodes[i]);\n        }\n      }\n      currentSearchState.set({\n        ...searchState,\n        index: -1,\n        count: 0,\n        text: ''\n      });\n      if (startContainer && endContainer) {\n        const rng = editor.dom.createRng();\n        rng.setStart(startContainer, 0);\n        rng.setEnd(endContainer, endContainer.data.length);\n        if (keepEditorSelection !== false) {\n          editor.selection.setRng(rng);\n        }\n        return rng;\n      } else {\n        return undefined;\n      }\n    };\n    const hasNext = (editor, currentSearchState) => currentSearchState.get().count > 1;\n    const hasPrev = (editor, currentSearchState) => currentSearchState.get().count > 1;\n\n    const get = (editor, currentState) => {\n      const done$1 = keepEditorSelection => {\n        return done(editor, currentState, keepEditorSelection);\n      };\n      const find$1 = (text, matchCase, wholeWord, inSelection = false) => {\n        return find(editor, currentState, text, matchCase, wholeWord, inSelection);\n      };\n      const next$1 = () => {\n        return next(editor, currentState);\n      };\n      const prev$1 = () => {\n        return prev(editor, currentState);\n      };\n      const replace$1 = (text, forward, all) => {\n        return replace(editor, currentState, text, forward, all);\n      };\n      return {\n        done: done$1,\n        find: find$1,\n        next: next$1,\n        prev: prev$1,\n        replace: replace$1\n      };\n    };\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const value = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const open = (editor, currentSearchState) => {\n      const dialogApi = value();\n      editor.undoManager.add();\n      const selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n      const updateButtonStates = api => {\n        api.setEnabled('next', hasNext(editor, currentSearchState));\n        api.setEnabled('prev', hasPrev(editor, currentSearchState));\n      };\n      const updateSearchState = api => {\n        const data = api.getData();\n        const current = currentSearchState.get();\n        currentSearchState.set({\n          ...current,\n          matchCase: data.matchcase,\n          wholeWord: data.wholewords,\n          inSelection: data.inselection\n        });\n      };\n      const disableAll = (api, disable) => {\n        const buttons = [\n          'replace',\n          'replaceall',\n          'prev',\n          'next'\n        ];\n        const toggle = name => api.setEnabled(name, !disable);\n        each(buttons, toggle);\n      };\n      const toggleNotFoundAlert = (isVisible, api) => {\n        api.redial(getDialogSpec(isVisible, api.getData()));\n      };\n      const focusButtonIfRequired = (api, name) => {\n        if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {\n          api.focus(name);\n        }\n      };\n      const reset = api => {\n        done(editor, currentSearchState, false);\n        disableAll(api, true);\n        updateButtonStates(api);\n      };\n      const doFind = api => {\n        const data = api.getData();\n        const last = currentSearchState.get();\n        if (!data.findtext.length) {\n          reset(api);\n          return;\n        }\n        if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {\n          next(editor, currentSearchState);\n        } else {\n          const count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords, data.inselection);\n          if (count <= 0) {\n            toggleNotFoundAlert(true, api);\n          }\n          disableAll(api, count === 0);\n        }\n        updateButtonStates(api);\n      };\n      const initialState = currentSearchState.get();\n      const initialData = {\n        findtext: selectedText,\n        replacetext: '',\n        wholewords: initialState.wholeWord,\n        matchcase: initialState.matchCase,\n        inselection: initialState.inSelection\n      };\n      const getPanelItems = error => {\n        const items = [\n          {\n            type: 'bar',\n            items: [\n              {\n                type: 'input',\n                name: 'findtext',\n                placeholder: 'Find',\n                maximized: true,\n                inputMode: 'search'\n              },\n              {\n                type: 'button',\n                name: 'prev',\n                text: 'Previous',\n                icon: 'action-prev',\n                enabled: false,\n                borderless: true\n              },\n              {\n                type: 'button',\n                name: 'next',\n                text: 'Next',\n                icon: 'action-next',\n                enabled: false,\n                borderless: true\n              }\n            ]\n          },\n          {\n            type: 'input',\n            name: 'replacetext',\n            placeholder: 'Replace with',\n            inputMode: 'search'\n          }\n        ];\n        if (error) {\n          items.push({\n            type: 'alertbanner',\n            level: 'error',\n            text: 'Could not find the specified string.',\n            icon: 'warning'\n          });\n        }\n        return items;\n      };\n      const getDialogSpec = (showNoMatchesAlertBanner, initialData) => ({\n        title: 'Find and Replace',\n        size: 'normal',\n        body: {\n          type: 'panel',\n          items: getPanelItems(showNoMatchesAlertBanner)\n        },\n        buttons: [\n          {\n            type: 'menu',\n            name: 'options',\n            icon: 'preferences',\n            tooltip: 'Preferences',\n            align: 'start',\n            items: [\n              {\n                type: 'togglemenuitem',\n                name: 'matchcase',\n                text: 'Match case'\n              },\n              {\n                type: 'togglemenuitem',\n                name: 'wholewords',\n                text: 'Find whole words only'\n              },\n              {\n                type: 'togglemenuitem',\n                name: 'inselection',\n                text: 'Find in selection'\n              }\n            ]\n          },\n          {\n            type: 'custom',\n            name: 'find',\n            text: 'Find',\n            primary: true\n          },\n          {\n            type: 'custom',\n            name: 'replace',\n            text: 'Replace',\n            enabled: false\n          },\n          {\n            type: 'custom',\n            name: 'replaceall',\n            text: 'Replace all',\n            enabled: false\n          }\n        ],\n        initialData,\n        onChange: (api, details) => {\n          if (showNoMatchesAlertBanner) {\n            toggleNotFoundAlert(false, api);\n          }\n          if (details.name === 'findtext' && currentSearchState.get().count > 0) {\n            reset(api);\n          }\n        },\n        onAction: (api, details) => {\n          const data = api.getData();\n          switch (details.name) {\n          case 'find':\n            doFind(api);\n            break;\n          case 'replace':\n            if (!replace(editor, currentSearchState, data.replacetext)) {\n              reset(api);\n            } else {\n              updateButtonStates(api);\n            }\n            break;\n          case 'replaceall':\n            replace(editor, currentSearchState, data.replacetext, true, true);\n            reset(api);\n            break;\n          case 'prev':\n            prev(editor, currentSearchState);\n            updateButtonStates(api);\n            break;\n          case 'next':\n            next(editor, currentSearchState);\n            updateButtonStates(api);\n            break;\n          case 'matchcase':\n          case 'wholewords':\n          case 'inselection':\n            toggleNotFoundAlert(false, api);\n            updateSearchState(api);\n            reset(api);\n            break;\n          }\n          focusButtonIfRequired(api, details.name);\n        },\n        onSubmit: api => {\n          doFind(api);\n          focusButtonIfRequired(api, 'find');\n        },\n        onClose: () => {\n          editor.focus();\n          done(editor, currentSearchState);\n          editor.undoManager.add();\n        }\n      });\n      dialogApi.set(editor.windowManager.open(getDialogSpec(false, initialData), { inline: 'toolbar' }));\n    };\n\n    const register$1 = (editor, currentSearchState) => {\n      editor.addCommand('SearchReplace', () => {\n        open(editor, currentSearchState);\n      });\n    };\n\n    const showDialog = (editor, currentSearchState) => () => {\n      open(editor, currentSearchState);\n    };\n    const register = (editor, currentSearchState) => {\n      editor.ui.registry.addMenuItem('searchreplace', {\n        text: 'Find and replace...',\n        shortcut: 'Meta+F',\n        onAction: showDialog(editor, currentSearchState),\n        icon: 'search'\n      });\n      editor.ui.registry.addButton('searchreplace', {\n        tooltip: 'Find and replace',\n        onAction: showDialog(editor, currentSearchState),\n        icon: 'search'\n      });\n      editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));\n    };\n\n    var Plugin = () => {\n      global$3.add('searchreplace', editor => {\n        const currentSearchState = Cell({\n          index: -1,\n          count: 0,\n          text: '',\n          matchCase: false,\n          wholeWord: false,\n          inSelection: false\n        });\n        register$1(editor, currentSearchState);\n        register(editor, currentSearchState);\n        return get(editor, currentSearchState);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$1 = t => a => t === a;\n    const isString = isType$1('string');\n    const isArray = isType$1('array');\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$1(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n\n    const noop = () => {\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const identity = x => {\n      return x;\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const call = f => {\n      f();\n    };\n    const never = constant(false);\n    const always = constant(true);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each$1 = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each$1(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const filter$1 = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const mapToArray = (obj, f) => {\n      const r = [];\n      each$1(obj, (value, name) => {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    const values = obj => {\n      return mapToArray(obj, identity);\n    };\n    const size = obj => {\n      return keys(obj).length;\n    };\n    const get$4 = (obj, key) => {\n      return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has = (obj, key) => hasOwnProperty.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n    const isEmpty$1 = r => {\n      for (const x in r) {\n        if (hasOwnProperty.call(r, x)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const range = (num, f) => {\n      const r = [];\n      for (let i = 0; i < num; i++) {\n        r.push(f(i));\n      }\n      return r;\n    };\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const partition = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        const arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const foldr = (xs, f, acc) => {\n      eachr(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const foldl = (xs, f, acc) => {\n      each(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const flatten$1 = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind = (xs, f) => flatten$1(map(xs, f));\n    const forall = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        const x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const mapToObject = (xs, f) => {\n      const r = {};\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    const get$3 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$3(xs, 0);\n    const last = xs => get$3(xs, xs.length - 1);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom$1(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom$1(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom$1(node);\n    };\n    const fromDom$1 = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom: fromDom$1,\n      fromPoint\n    };\n\n    const is$2 = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all$1 = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    const eq = (e1, e2) => e1.dom === e2.dom;\n    const is$1 = is$2;\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n    const isElement = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement(e) && name(e) === tag;\n\n    const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parents = (element, isRoot) => {\n      const stop = isFunction(isRoot) ? isRoot : never;\n      let dom = element.dom;\n      const ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        const rawParent = dom.parentNode;\n        const p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const children$3 = element => map(element.dom.childNodes, SugarElement.fromDom);\n    const child$3 = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child$3(element, 0);\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$1 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$2 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n    };\n    const child$2 = (scope, predicate) => {\n      const pred = node => predicate(SugarElement.fromDom(node));\n      const result = find(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n\n    const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is$2(e, selector), isRoot);\n    const child$1 = (scope, selector) => child$2(scope, e => is$2(e, selector));\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is = (element, selector) => is$2(element, selector);\n      return ClosestOrAncestor(is, ancestor, scope, selector, isRoot);\n    };\n\n    const closest = target => closest$1(target, '[contenteditable]');\n    const isEditable = (element, assumeEditable = false) => {\n      if (inBody(element)) {\n        return element.dom.isContentEditable;\n      } else {\n        return closest(element).fold(constant(assumeEditable), editable => getRaw$1(editable) === 'true');\n      }\n    };\n    const getRaw$1 = element => element.dom.contentEditable;\n\n    const getNodeName = elm => elm.nodeName.toLowerCase();\n    const getBody = editor => SugarElement.fromDom(editor.getBody());\n    const getIsRoot = editor => element => eq(element, getBody(editor));\n    const removePxSuffix = size => size ? size.replace(/px$/, '') : '';\n    const addPxSuffix = size => /^\\d+(\\.\\d+)?$/.test(size) ? size + 'px' : size;\n    const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n    const getSelectionEnd = editor => SugarElement.fromDom(editor.selection.getEnd());\n    const isInEditableContext = cell => closest$2(cell, isTag('table')).forall(isEditable);\n\n    const children$2 = (scope, predicate) => filter(children$3(scope), predicate);\n    const descendants$1 = (scope, predicate) => {\n      let result = [];\n      each(children$3(scope), x => {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants$1(x, predicate));\n      });\n      return result;\n    };\n\n    const children$1 = (scope, selector) => children$2(scope, e => is$2(e, selector));\n    const descendants = (scope, selector) => all$1(selector, scope);\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set$2 = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const setAll = (element, attrs) => {\n      const dom = element.dom;\n      each$1(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const get$2 = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const getOpt = (element, key) => Optional.from(get$2(element, key));\n    const remove$2 = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n    const clone = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    const flatten = oot => oot.bind(identity);\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const removeFromStart = (str, numChars) => {\n      return str.substring(numChars);\n    };\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const removeLeading = (str, prefix) => {\n      return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n    const blank = r => s => s.replace(r, '');\n    const trim = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const isEmpty = s => !isNotEmpty(s);\n    const toInt = (value, radix = 10) => {\n      const num = parseInt(value, radix);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n    const toFloat = value => {\n      const num = parseFloat(value);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const internalRemove = (dom, property) => {\n      if (isSupported(dom)) {\n        dom.style.removeProperty(property);\n      }\n    };\n    const set$1 = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n    const get$1 = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    const getRaw = (element, property) => {\n      const dom = element.dom;\n      const raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(r => r.length > 0);\n    };\n    const remove$1 = (element, property) => {\n      const dom = element.dom;\n      internalRemove(dom, property);\n      if (is(getOpt(element, 'style').map(trim), '')) {\n        remove$2(element, 'style');\n      }\n    };\n\n    const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n\n    const firstLayer = (scope, selector) => {\n      return filterFirstLayer(scope, selector, always);\n    };\n    const filterFirstLayer = (scope, selector, predicate) => {\n      return bind(children$3(scope), x => {\n        if (is$2(x, selector)) {\n          return predicate(x) ? [x] : [];\n        } else {\n          return filterFirstLayer(x, selector, predicate);\n        }\n      });\n    };\n\n    const validSectionList = [\n      'tfoot',\n      'thead',\n      'tbody',\n      'colgroup'\n    ];\n    const isValidSection = parentName => contains(validSectionList, parentName);\n    const grid = (rows, columns) => ({\n      rows,\n      columns\n    });\n    const detail = (element, rowspan, colspan) => ({\n      element,\n      rowspan,\n      colspan\n    });\n    const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n      element,\n      rowspan,\n      colspan,\n      row,\n      column,\n      isLocked\n    });\n    const rowdetail = (element, cells, section) => ({\n      element,\n      cells,\n      section\n    });\n    const bounds = (startRow, startCol, finishRow, finishCol) => ({\n      startRow,\n      startCol,\n      finishRow,\n      finishCol\n    });\n    const columnext = (element, colspan, column) => ({\n      element,\n      colspan,\n      column\n    });\n    const colgroup = (element, columns) => ({\n      element,\n      columns\n    });\n\n    const lookup = (tags, element, isRoot = never) => {\n      if (isRoot(element)) {\n        return Optional.none();\n      }\n      if (contains(tags, name(element))) {\n        return Optional.some(element);\n      }\n      const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n      return ancestor(element, tags.join(','), isRootOrUpperTable);\n    };\n    const cell = (element, isRoot) => lookup([\n      'td',\n      'th'\n    ], element, isRoot);\n    const cells = ancestor => firstLayer(ancestor, 'th,td');\n    const columns = ancestor => {\n      if (is$2(ancestor, 'colgroup')) {\n        return children$1(ancestor, 'col');\n      } else {\n        return bind(columnGroups(ancestor), columnGroup => children$1(columnGroup, 'col'));\n      }\n    };\n    const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n    const rows = ancestor => firstLayer(ancestor, 'tr');\n    const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children$1(table, 'colgroup'));\n\n    const fromRowsOrColGroups = (elems, getSection) => map(elems, row => {\n      if (name(row) === 'colgroup') {\n        const cells = map(columns(row), column => {\n          const colspan = getAttrValue(column, 'span', 1);\n          return detail(column, 1, colspan);\n        });\n        return rowdetail(row, cells, 'colgroup');\n      } else {\n        const cells$1 = map(cells(row), cell => {\n          const rowspan = getAttrValue(cell, 'rowspan', 1);\n          const colspan = getAttrValue(cell, 'colspan', 1);\n          return detail(cell, rowspan, colspan);\n        });\n        return rowdetail(row, cells$1, getSection(row));\n      }\n    });\n    const getParentSection = group => parent(group).map(parent => {\n      const parentName = name(parent);\n      return isValidSection(parentName) ? parentName : 'tbody';\n    }).getOr('tbody');\n    const fromTable$1 = table => {\n      const rows$1 = rows(table);\n      const columnGroups$1 = columnGroups(table);\n      const elems = [\n        ...columnGroups$1,\n        ...rows$1\n      ];\n      return fromRowsOrColGroups(elems, getParentSection);\n    };\n\n    const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n    const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n\n    const key = (row, column) => {\n      return row + ',' + column;\n    };\n    const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n    const findItem = (warehouse, item, comparator) => {\n      const filtered = filterItems(warehouse, detail => {\n        return comparator(item, detail.element);\n      });\n      return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n    };\n    const filterItems = (warehouse, predicate) => {\n      const all = bind(warehouse.all, r => {\n        return r.cells;\n      });\n      return filter(all, predicate);\n    };\n    const generateColumns = rowData => {\n      const columnsGroup = {};\n      let index = 0;\n      each(rowData.cells, column => {\n        const colspan = column.colspan;\n        range(colspan, columnIndex => {\n          const colIndex = index + columnIndex;\n          columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n        });\n        index += colspan;\n      });\n      return columnsGroup;\n    };\n    const generate$1 = list => {\n      const access = {};\n      const cells = [];\n      const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n      const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n      let maxRows = 0;\n      let maxColumns = 0;\n      let rowCount = 0;\n      const {\n        pass: colgroupRows,\n        fail: rows\n      } = partition(list, rowData => rowData.section === 'colgroup');\n      each(rows, rowData => {\n        const currentRow = [];\n        each(rowData.cells, rowCell => {\n          let start = 0;\n          while (access[key(rowCount, start)] !== undefined) {\n            start++;\n          }\n          const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n          const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n          for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n            for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n              const rowPosition = rowCount + occupiedRowPosition;\n              const columnPosition = start + occupiedColumnPosition;\n              const newpos = key(rowPosition, columnPosition);\n              access[newpos] = current;\n              maxColumns = Math.max(maxColumns, columnPosition + 1);\n            }\n          }\n          currentRow.push(current);\n        });\n        maxRows++;\n        cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n        rowCount++;\n      });\n      const {columns, colgroups} = last(colgroupRows).map(rowData => {\n        const columns = generateColumns(rowData);\n        const colgroup$1 = colgroup(rowData.element, values(columns));\n        return {\n          colgroups: [colgroup$1],\n          columns\n        };\n      }).getOrThunk(() => ({\n        colgroups: [],\n        columns: {}\n      }));\n      const grid$1 = grid(maxRows, maxColumns);\n      return {\n        grid: grid$1,\n        access,\n        all: cells,\n        columns,\n        colgroups\n      };\n    };\n    const fromTable = table => {\n      const list = fromTable$1(table);\n      return generate$1(list);\n    };\n    const justCells = warehouse => bind(warehouse.all, w => w.cells);\n    const justColumns = warehouse => values(warehouse.columns);\n    const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n    const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n    const Warehouse = {\n      fromTable,\n      generate: generate$1,\n      getAt,\n      findItem,\n      filterItems,\n      justCells,\n      justColumns,\n      hasColumns,\n      getColumnAt\n    };\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const getTDTHOverallStyle = (dom, elm, name) => {\n      const cells = dom.select('td,th', elm);\n      let firstChildStyle;\n      for (let i = 0; i < cells.length; i++) {\n        const currentStyle = dom.getStyle(cells[i], name);\n        if (isUndefined(firstChildStyle)) {\n          firstChildStyle = currentStyle;\n        }\n        if (firstChildStyle !== currentStyle) {\n          return '';\n        }\n      }\n      return firstChildStyle;\n    };\n    const setAlign = (editor, elm, name) => {\n      global$2.each('left center right'.split(' '), align => {\n        if (align !== name) {\n          editor.formatter.remove('align' + align, {}, elm);\n        }\n      });\n      if (name) {\n        editor.formatter.apply('align' + name, {}, elm);\n      }\n    };\n    const setVAlign = (editor, elm, name) => {\n      global$2.each('top middle bottom'.split(' '), align => {\n        if (align !== name) {\n          editor.formatter.remove('valign' + align, {}, elm);\n        }\n      });\n      if (name) {\n        editor.formatter.apply('valign' + name, {}, elm);\n      }\n    };\n\n    const fireTableModified = (editor, table, data) => {\n      editor.dispatch('TableModified', {\n        ...data,\n        table\n      });\n    };\n\n    const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n    const getProp = (element, name, fallback) => toNumber(get$1(element, name), fallback);\n    const calcContentBoxSize = (element, size, upper, lower) => {\n      const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n      const paddingLower = getProp(element, `padding-${ lower }`, 0);\n      const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n      const borderLower = getProp(element, `border-${ lower }-width`, 0);\n      return size - paddingUpper - paddingLower - borderUpper - borderLower;\n    };\n    const getCalculatedWidth = (element, boxSizing) => {\n      const dom = element.dom;\n      const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n      return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n    };\n    const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n    const getInner = getInnerWidth;\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    const defaultTableToolbar = 'tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol';\n    const defaultCellBorderWidths = range(5, i => {\n      const size = `${ i + 1 }px`;\n      return {\n        title: size,\n        value: size\n      };\n    });\n    const defaultCellBorderStyles = map([\n      'Solid',\n      'Dotted',\n      'Dashed',\n      'Double',\n      'Groove',\n      'Ridge',\n      'Inset',\n      'Outset',\n      'None',\n      'Hidden'\n    ], type => {\n      return {\n        title: type,\n        value: type.toLowerCase()\n      };\n    });\n    const defaultWidth = '100%';\n    const getPixelForcedWidth = editor => {\n      var _a;\n      const dom = editor.dom;\n      const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n      return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n    };\n    const determineDefaultStyles = (editor, defaultStyles) => {\n      if (isResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n        return defaultStyles;\n      } else if (isPixelsForced(editor)) {\n        return {\n          ...defaultStyles,\n          width: getPixelForcedWidth(editor)\n        };\n      } else {\n        return {\n          ...defaultStyles,\n          width: defaultWidth\n        };\n      }\n    };\n    const determineDefaultAttributes = (editor, defaultAttributes) => {\n      if (isResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n        return defaultAttributes;\n      } else if (isPixelsForced(editor)) {\n        return {\n          ...defaultAttributes,\n          width: getPixelForcedWidth(editor)\n        };\n      } else {\n        return {\n          ...defaultAttributes,\n          width: defaultWidth\n        };\n      }\n    };\n    const option = name => editor => editor.options.get(name);\n    const register = editor => {\n      const registerOption = editor.options.register;\n      registerOption('table_border_widths', {\n        processor: 'object[]',\n        default: defaultCellBorderWidths\n      });\n      registerOption('table_border_styles', {\n        processor: 'object[]',\n        default: defaultCellBorderStyles\n      });\n      registerOption('table_cell_advtab', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_row_advtab', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_advtab', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_appearance_options', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_grid', {\n        processor: 'boolean',\n        default: !global$1.deviceType.isTouch()\n      });\n      registerOption('table_cell_class_list', {\n        processor: 'object[]',\n        default: []\n      });\n      registerOption('table_row_class_list', {\n        processor: 'object[]',\n        default: []\n      });\n      registerOption('table_class_list', {\n        processor: 'object[]',\n        default: []\n      });\n      registerOption('table_toolbar', {\n        processor: 'string',\n        default: defaultTableToolbar\n      });\n      registerOption('table_background_color_map', {\n        processor: 'object[]',\n        default: []\n      });\n      registerOption('table_border_color_map', {\n        processor: 'object[]',\n        default: []\n      });\n    };\n    const getTableSizingMode = option('table_sizing_mode');\n    const getTableBorderWidths = option('table_border_widths');\n    const getTableBorderStyles = option('table_border_styles');\n    const hasAdvancedCellTab = option('table_cell_advtab');\n    const hasAdvancedRowTab = option('table_row_advtab');\n    const hasAdvancedTableTab = option('table_advtab');\n    const hasAppearanceOptions = option('table_appearance_options');\n    const hasTableGrid = option('table_grid');\n    const shouldStyleWithCss = option('table_style_by_css');\n    const getCellClassList = option('table_cell_class_list');\n    const getRowClassList = option('table_row_class_list');\n    const getTableClassList = option('table_class_list');\n    const getToolbar = option('table_toolbar');\n    const getTableBackgroundColorMap = option('table_background_color_map');\n    const getTableBorderColorMap = option('table_border_color_map');\n    const isPixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n    const isResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n    const getDefaultStyles = editor => {\n      const options = editor.options;\n      const defaultStyles = options.get('table_default_styles');\n      return options.isSet('table_default_styles') ? defaultStyles : determineDefaultStyles(editor, defaultStyles);\n    };\n    const getDefaultAttributes = editor => {\n      const options = editor.options;\n      const defaultAttributes = options.get('table_default_attributes');\n      return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultAttributes(editor, defaultAttributes);\n    };\n\n    const isWithin = (bounds, detail) => {\n      return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n    };\n    const isRectangular = (warehouse, bounds) => {\n      let isRect = true;\n      const detailIsWithin = curry(isWithin, bounds);\n      for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n        for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n          isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n        }\n      }\n      return isRect ? Optional.some(bounds) : Optional.none();\n    };\n\n    const getBounds = (detailA, detailB) => {\n      return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n    };\n    const getAnyBox = (warehouse, startCell, finishCell) => {\n      const startCoords = Warehouse.findItem(warehouse, startCell, eq);\n      const finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n      return startCoords.bind(sc => {\n        return finishCoords.map(fc => {\n          return getBounds(sc, fc);\n        });\n      });\n    };\n    const getBox$1 = (warehouse, startCell, finishCell) => {\n      return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n        return isRectangular(warehouse, bounds);\n      });\n    };\n\n    const getBox = (table, first, last) => {\n      const warehouse = getWarehouse(table);\n      return getBox$1(warehouse, first, last);\n    };\n    const getWarehouse = Warehouse.fromTable;\n\n    const before = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after$1 = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$1(v, element);\n        });\n      }, v => {\n        before(v, element);\n      });\n    };\n    const prepend = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$1(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$1 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const wrap = (element, wrapper) => {\n      before(element, wrapper);\n      append$1(wrapper, element);\n    };\n\n    const after = (marker, elements) => {\n      each(elements, (x, i) => {\n        const e = i === 0 ? marker : elements[i - 1];\n        after$1(e, x);\n      });\n    };\n    const append = (parent, elements) => {\n      each(elements, x => {\n        append$1(parent, x);\n      });\n    };\n\n    const remove = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    const unwrap = wrapper => {\n      const children = children$3(wrapper);\n      if (children.length > 0) {\n        after(wrapper, children);\n      }\n      remove(wrapper);\n    };\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api = NodeValue(isText, 'text');\n    const get = element => api.get(element);\n    const set = (element, value) => api.set(element, value);\n\n    var TagBoundaries = [\n      'body',\n      'p',\n      'div',\n      'article',\n      'aside',\n      'figcaption',\n      'figure',\n      'footer',\n      'header',\n      'nav',\n      'section',\n      'ol',\n      'ul',\n      'li',\n      'table',\n      'thead',\n      'tbody',\n      'tfoot',\n      'caption',\n      'tr',\n      'td',\n      'th',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'blockquote',\n      'pre',\n      'address'\n    ];\n\n    var DomUniverse = () => {\n      const clone$1 = element => {\n        return SugarElement.fromDom(element.dom.cloneNode(false));\n      };\n      const document = element => documentOrOwner(element).dom;\n      const isBoundary = element => {\n        if (!isElement(element)) {\n          return false;\n        }\n        if (name(element) === 'body') {\n          return true;\n        }\n        return contains(TagBoundaries, name(element));\n      };\n      const isEmptyTag = element => {\n        if (!isElement(element)) {\n          return false;\n        }\n        return contains([\n          'br',\n          'img',\n          'hr',\n          'input'\n        ], name(element));\n      };\n      const isNonEditable = element => isElement(element) && get$2(element, 'contenteditable') === 'false';\n      const comparePosition = (element, other) => {\n        return element.dom.compareDocumentPosition(other.dom);\n      };\n      const copyAttributesTo = (source, destination) => {\n        const as = clone(source);\n        setAll(destination, as);\n      };\n      const isSpecial = element => {\n        const tag = name(element);\n        return contains([\n          'script',\n          'noscript',\n          'iframe',\n          'noframes',\n          'noembed',\n          'title',\n          'style',\n          'textarea',\n          'xmp'\n        ], tag);\n      };\n      const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n      return {\n        up: constant({\n          selector: ancestor,\n          closest: closest$1,\n          predicate: ancestor$1,\n          all: parents\n        }),\n        down: constant({\n          selector: descendants,\n          predicate: descendants$1\n        }),\n        styles: constant({\n          get: get$1,\n          getRaw: getRaw,\n          set: set$1,\n          remove: remove$1\n        }),\n        attrs: constant({\n          get: get$2,\n          set: set$2,\n          remove: remove$2,\n          copyTo: copyAttributesTo\n        }),\n        insert: constant({\n          before: before,\n          after: after$1,\n          afterAll: after,\n          append: append$1,\n          appendAll: append,\n          prepend: prepend,\n          wrap: wrap\n        }),\n        remove: constant({\n          unwrap: unwrap,\n          remove: remove\n        }),\n        create: constant({\n          nu: SugarElement.fromTag,\n          clone: clone$1,\n          text: SugarElement.fromText\n        }),\n        query: constant({\n          comparePosition,\n          prevSibling: prevSibling,\n          nextSibling: nextSibling\n        }),\n        property: constant({\n          children: children$3,\n          name: name,\n          parent: parent,\n          document,\n          isText: isText,\n          isComment: isComment,\n          isElement: isElement,\n          isSpecial,\n          getLanguage,\n          getText: get,\n          setText: set,\n          isBoundary,\n          isEmptyTag,\n          isNonEditable\n        }),\n        eq: eq,\n        is: is$1\n      };\n    };\n\n    const all = (universe, look, elements, f) => {\n      const head = elements[0];\n      const tail = elements.slice(1);\n      return f(universe, look, head, tail);\n    };\n    const oneAll = (universe, look, elements) => {\n      return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n    };\n    const unsafeOne = (universe, look, head, tail) => {\n      const start = look(universe, head);\n      return foldr(tail, (b, a) => {\n        const current = look(universe, a);\n        return commonElement(universe, b, current);\n      }, start);\n    };\n    const commonElement = (universe, start, end) => {\n      return start.bind(s => {\n        return end.filter(curry(universe.eq, s));\n      });\n    };\n\n    const sharedOne$1 = oneAll;\n\n    const universe = DomUniverse();\n    const sharedOne = (look, elements) => {\n      return sharedOne$1(universe, (_universe, element) => {\n        return look(element);\n      }, elements);\n    };\n\n    const lookupTable = container => {\n      return ancestor(container, 'table');\n    };\n    const retrieve$1 = (container, selector) => {\n      const sels = descendants(container, selector);\n      return sels.length > 0 ? Optional.some(sels) : Optional.none();\n    };\n    const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n      return descendant(container, firstSelectedSelector).bind(first => {\n        return descendant(container, lastSelectedSelector).bind(last => {\n          return sharedOne(lookupTable, [\n            first,\n            last\n          ]).map(table => {\n            return {\n              first,\n              last,\n              table\n            };\n          });\n        });\n      });\n    };\n\n    const retrieve = (container, selector) => {\n      return retrieve$1(container, selector);\n    };\n    const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n      return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n        const isRoot = ancestor => {\n          return eq(container, ancestor);\n        };\n        const sectionSelector = 'thead,tfoot,tbody,table';\n        const firstAncestor = ancestor(edges.first, sectionSelector, isRoot);\n        const lastAncestor = ancestor(edges.last, sectionSelector, isRoot);\n        return firstAncestor.bind(fA => {\n          return lastAncestor.bind(lA => {\n            return eq(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n          });\n        });\n      });\n    };\n\n    const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n    const strSelected = 'data-mce-selected';\n    const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n    const strFirstSelected = 'data-mce-first-selected';\n    const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n    const strLastSelected = 'data-mce-last-selected';\n    const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n    const ephemera = {\n      selected: strSelected,\n      selectedSelector: strSelectedSelector,\n      firstSelected: strFirstSelected,\n      firstSelectedSelector: strFirstSelectedSelector,\n      lastSelected: strLastSelected,\n      lastSelectedSelector: strLastSelectedSelector\n    };\n\n    const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n    const getSelectionFromSelector = selector => (initCell, isRoot) => {\n      const cellName = name(initCell);\n      const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n      return closest$1(cell, selector, isRoot);\n    };\n    const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n    const getSelectionCell = getSelectionFromSelector('th,td');\n    const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n    const getRowsFromSelection = (selected, selector) => {\n      const cellOpt = getSelectionCell(selected);\n      const rowsOpt = cellOpt.bind(cell => table(cell)).map(table => rows(table));\n      return lift2(cellOpt, rowsOpt, (cell, rows) => filter(rows, row => exists(fromDom(row.dom.cells), rowCell => get$2(rowCell, selector) === '1' || eq(rowCell, cell)))).getOr([]);\n    };\n\n    const verticalAlignValues = [\n      {\n        text: 'None',\n        value: ''\n      },\n      {\n        text: 'Top',\n        value: 'top'\n      },\n      {\n        text: 'Middle',\n        value: 'middle'\n      },\n      {\n        text: 'Bottom',\n        value: 'bottom'\n      }\n    ];\n\n    const hexColour = value => ({ value: normalizeHex(value) });\n    const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n    const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n    const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n    const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n    const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n    const toHex = component => {\n      const hex = component.toString(16);\n      return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n    };\n    const fromRgba = rgbaColour => {\n      const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n      return hexColour(value);\n    };\n\n    const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n    const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n    const rgbaColour = (red, green, blue, alpha) => ({\n      red,\n      green,\n      blue,\n      alpha\n    });\n    const fromStringValues = (red, green, blue, alpha) => {\n      const r = parseInt(red, 10);\n      const g = parseInt(green, 10);\n      const b = parseInt(blue, 10);\n      const a = parseFloat(alpha);\n      return rgbaColour(r, g, b, a);\n    };\n    const fromString = rgbaString => {\n      if (rgbaString === 'transparent') {\n        return Optional.some(rgbaColour(0, 0, 0, 0));\n      }\n      const rgbMatch = rgbRegex.exec(rgbaString);\n      if (rgbMatch !== null) {\n        return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n      }\n      const rgbaMatch = rgbaRegex.exec(rgbaString);\n      if (rgbaMatch !== null) {\n        return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n      }\n      return Optional.none();\n    };\n\n    const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n      const canvas = document.createElement('canvas');\n      canvas.height = 1;\n      canvas.width = 1;\n      const canvasContext = canvas.getContext('2d');\n      canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n      canvasContext.fillStyle = '#FFFFFF';\n      canvasContext.fillStyle = color;\n      canvasContext.fillRect(0, 0, 1, 1);\n      const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n      const r = rgba[0];\n      const g = rgba[1];\n      const b = rgba[2];\n      const a = rgba[3];\n      return fromRgba(rgbaColour(r, g, b, a));\n    });\n    const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const unbindable = () => singleton(s => s.unbind());\n\n    const onSetupToggle = (editor, formatName, formatValue) => {\n      return api => {\n        const boundCallback = unbindable();\n        const isNone = isEmpty(formatValue);\n        const init = () => {\n          const selectedCells = getCellsFromSelection(editor);\n          const checkNode = cell => editor.formatter.match(formatName, { value: formatValue }, cell.dom, isNone);\n          if (isNone) {\n            api.setActive(!exists(selectedCells, checkNode));\n            boundCallback.set(editor.formatter.formatChanged(formatName, match => api.setActive(!match), true));\n          } else {\n            api.setActive(forall(selectedCells, checkNode));\n            boundCallback.set(editor.formatter.formatChanged(formatName, api.setActive, false, { value: formatValue }));\n          }\n        };\n        editor.initialized ? init() : editor.on('init', init);\n        return boundCallback.clear;\n      };\n    };\n    const isListGroup = item => hasNonNullableKey(item, 'menu');\n    const buildListItems = items => map(items, item => {\n      const text = item.text || item.title || '';\n      if (isListGroup(item)) {\n        return {\n          text,\n          items: buildListItems(item.menu)\n        };\n      } else {\n        return {\n          text,\n          value: item.value\n        };\n      }\n    });\n    const buildMenuItems = (editor, items, format, onAction) => map(items, item => {\n      const text = item.text || item.title;\n      if (isListGroup(item)) {\n        return {\n          type: 'nestedmenuitem',\n          text,\n          getSubmenuItems: () => buildMenuItems(editor, item.menu, format, onAction)\n        };\n      } else {\n        return {\n          text,\n          type: 'togglemenuitem',\n          onAction: () => onAction(item.value),\n          onSetup: onSetupToggle(editor, format, item.value)\n        };\n      }\n    });\n    const applyTableCellStyle = (editor, style) => value => {\n      editor.execCommand('mceTableApplyCellStyle', false, { [style]: value });\n    };\n    const filterNoneItem = list => bind(list, item => {\n      if (isListGroup(item)) {\n        return [{\n            ...item,\n            menu: filterNoneItem(item.menu)\n          }];\n      } else {\n        return isNotEmpty(item.value) ? [item] : [];\n      }\n    });\n    const generateMenuItemsCallback = (editor, items, format, onAction) => callback => callback(buildMenuItems(editor, items, format, onAction));\n    const buildColorMenu = (editor, colorList, style) => {\n      const colorMap = map(colorList, entry => ({\n        text: entry.title,\n        value: '#' + anyToHex(entry.value).value,\n        type: 'choiceitem'\n      }));\n      return [{\n          type: 'fancymenuitem',\n          fancytype: 'colorswatch',\n          initData: {\n            colors: colorMap.length > 0 ? colorMap : undefined,\n            allowCustomColors: false\n          },\n          onAction: data => {\n            const value = data.value === 'remove' ? '' : data.value;\n            editor.execCommand('mceTableApplyCellStyle', false, { [style]: value });\n          }\n        }];\n    };\n    const changeRowHeader = editor => () => {\n      const currentType = editor.queryCommandValue('mceTableRowType');\n      const newType = currentType === 'header' ? 'body' : 'header';\n      editor.execCommand('mceTableRowType', false, { type: newType });\n    };\n    const changeColumnHeader = editor => () => {\n      const currentType = editor.queryCommandValue('mceTableColType');\n      const newType = currentType === 'th' ? 'td' : 'th';\n      editor.execCommand('mceTableColType', false, { type: newType });\n    };\n\n    const getClassList$1 = editor => {\n      const classes = buildListItems(getCellClassList(editor));\n      if (classes.length > 0) {\n        return Optional.some({\n          name: 'class',\n          type: 'listbox',\n          label: 'Class',\n          items: classes\n        });\n      }\n      return Optional.none();\n    };\n    const children = [\n      {\n        name: 'width',\n        type: 'input',\n        label: 'Width'\n      },\n      {\n        name: 'height',\n        type: 'input',\n        label: 'Height'\n      },\n      {\n        name: 'celltype',\n        type: 'listbox',\n        label: 'Cell type',\n        items: [\n          {\n            text: 'Cell',\n            value: 'td'\n          },\n          {\n            text: 'Header cell',\n            value: 'th'\n          }\n        ]\n      },\n      {\n        name: 'scope',\n        type: 'listbox',\n        label: 'Scope',\n        items: [\n          {\n            text: 'None',\n            value: ''\n          },\n          {\n            text: 'Row',\n            value: 'row'\n          },\n          {\n            text: 'Column',\n            value: 'col'\n          },\n          {\n            text: 'Row group',\n            value: 'rowgroup'\n          },\n          {\n            text: 'Column group',\n            value: 'colgroup'\n          }\n        ]\n      },\n      {\n        name: 'halign',\n        type: 'listbox',\n        label: 'Horizontal align',\n        items: [\n          {\n            text: 'None',\n            value: ''\n          },\n          {\n            text: 'Left',\n            value: 'left'\n          },\n          {\n            text: 'Center',\n            value: 'center'\n          },\n          {\n            text: 'Right',\n            value: 'right'\n          }\n        ]\n      },\n      {\n        name: 'valign',\n        type: 'listbox',\n        label: 'Vertical align',\n        items: verticalAlignValues\n      }\n    ];\n    const getItems$2 = editor => children.concat(getClassList$1(editor).toArray());\n\n    const getAdvancedTab = (editor, dialogName) => {\n      const emptyBorderStyle = [{\n          text: 'Select...',\n          value: ''\n        }];\n      const advTabItems = [\n        {\n          name: 'borderstyle',\n          type: 'listbox',\n          label: 'Border style',\n          items: emptyBorderStyle.concat(buildListItems(getTableBorderStyles(editor)))\n        },\n        {\n          name: 'bordercolor',\n          type: 'colorinput',\n          label: 'Border color'\n        },\n        {\n          name: 'backgroundcolor',\n          type: 'colorinput',\n          label: 'Background color'\n        }\n      ];\n      const borderWidth = {\n        name: 'borderwidth',\n        type: 'input',\n        label: 'Border width'\n      };\n      const items = dialogName === 'cell' ? [borderWidth].concat(advTabItems) : advTabItems;\n      return {\n        title: 'Advanced',\n        name: 'advanced',\n        items\n      };\n    };\n\n    const normal = (editor, element) => {\n      const dom = editor.dom;\n      const setAttrib = (attr, value) => {\n        dom.setAttrib(element, attr, value);\n      };\n      const setStyle = (prop, value) => {\n        dom.setStyle(element, prop, value);\n      };\n      const setFormat = (formatName, value) => {\n        if (value === '') {\n          editor.formatter.remove(formatName, { value: null }, element, true);\n        } else {\n          editor.formatter.apply(formatName, { value }, element);\n        }\n      };\n      return {\n        setAttrib,\n        setStyle,\n        setFormat\n      };\n    };\n    const DomModifier = { normal };\n\n    const isHeaderCell = isTag('th');\n    const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n      if (isHeaderRow && isHeaderCells) {\n        return 'sectionCells';\n      } else if (isHeaderRow) {\n        return 'section';\n      } else {\n        return 'cells';\n      }\n    };\n    const getRowType$1 = row => {\n      const isHeaderRow = row.section === 'thead';\n      const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n      if (row.section === 'tfoot') {\n        return { type: 'footer' };\n      } else if (isHeaderRow || isHeaderCells) {\n        return {\n          type: 'header',\n          subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n        };\n      } else {\n        return { type: 'body' };\n      }\n    };\n    const findCommonCellType = cells => {\n      const headerCells = filter(cells, cell => isHeaderCell(cell.element));\n      if (headerCells.length === 0) {\n        return Optional.some('td');\n      } else if (headerCells.length === cells.length) {\n        return Optional.some('th');\n      } else {\n        return Optional.none();\n      }\n    };\n    const findCommonRowType = rows => {\n      const rowTypes = map(rows, row => getRowType$1(row).type);\n      const hasHeader = contains(rowTypes, 'header');\n      const hasFooter = contains(rowTypes, 'footer');\n      if (!hasHeader && !hasFooter) {\n        return Optional.some('body');\n      } else {\n        const hasBody = contains(rowTypes, 'body');\n        if (hasHeader && !hasBody && !hasFooter) {\n          return Optional.some('header');\n        } else if (!hasHeader && !hasBody && hasFooter) {\n          return Optional.some('footer');\n        } else {\n          return Optional.none();\n        }\n      }\n    };\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find(r.cells, e => eq(element, e.element)));\n    const extractCells = (warehouse, target, predicate) => {\n      const details = map(target.selection, cell$1 => {\n        return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n      });\n      const cells = cat(details);\n      return someIf(cells.length > 0, cells);\n    };\n    const onMergable = (_warehouse, target) => target.mergable;\n    const onUnmergable = (_warehouse, target) => target.unmergable;\n    const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n    const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n    const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n    const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n    const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n    const generate = cases => {\n      if (!isArray(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      const constructors = [];\n      const adt = {};\n      each(cases, (acase, count) => {\n        const keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        const key = keys$1[0];\n        const value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          const match = branches => {\n            const branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            const allReqd = forall(constructors, reqKey => {\n              return contains(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: (...foldArgs) => {\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              const target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match,\n            log: label => {\n              console.log(label, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    const Adt = { generate };\n\n    const adt = Adt.generate([\n      { none: [] },\n      { only: ['index'] },\n      {\n        left: [\n          'index',\n          'next'\n        ]\n      },\n      {\n        middle: [\n          'prev',\n          'index',\n          'next'\n        ]\n      },\n      {\n        right: [\n          'prev',\n          'index'\n        ]\n      }\n    ]);\n    ({ ...adt });\n\n    const opGetRowsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minRowRange = selectedCells[0].row;\n        const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n        const selectedRows = house.all.slice(minRowRange, maxRowRange);\n        return findCommonRowType(selectedRows);\n      }).getOr('');\n    };\n    const getRowsType = opGetRowsType;\n\n    const rgbToHex = value => startsWith(value, 'rgb') ? rgbaToHexString(value) : value;\n    const extractAdvancedStyles = elm => {\n      const element = SugarElement.fromDom(elm);\n      return {\n        borderwidth: getRaw(element, 'border-width').getOr(''),\n        borderstyle: getRaw(element, 'border-style').getOr(''),\n        bordercolor: getRaw(element, 'border-color').map(rgbToHex).getOr(''),\n        backgroundcolor: getRaw(element, 'background-color').map(rgbToHex).getOr('')\n      };\n    };\n    const getSharedValues = data => {\n      const baseData = data[0];\n      const comparisonData = data.slice(1);\n      each(comparisonData, items => {\n        each(keys(baseData), key => {\n          each$1(items, (itemValue, itemKey) => {\n            const comparisonValue = baseData[key];\n            if (comparisonValue !== '' && key === itemKey) {\n              if (comparisonValue !== itemValue) {\n                baseData[key] = '';\n              }\n            }\n          });\n        });\n      });\n      return baseData;\n    };\n    const getAlignment = (formats, formatName, editor, elm) => find(formats, name => !isUndefined(editor.formatter.matchNode(elm, formatName + name))).getOr('');\n    const getHAlignment = curry(getAlignment, [\n      'left',\n      'center',\n      'right'\n    ], 'align');\n    const getVAlignment = curry(getAlignment, [\n      'top',\n      'middle',\n      'bottom'\n    ], 'valign');\n    const extractDataFromSettings = (editor, hasAdvTableTab) => {\n      const style = getDefaultStyles(editor);\n      const attrs = getDefaultAttributes(editor);\n      const extractAdvancedStyleData = () => ({\n        borderstyle: get$4(style, 'border-style').getOr(''),\n        bordercolor: rgbToHex(get$4(style, 'border-color').getOr('')),\n        backgroundcolor: rgbToHex(get$4(style, 'background-color').getOr(''))\n      });\n      const defaultData = {\n        height: '',\n        width: '100%',\n        cellspacing: '',\n        cellpadding: '',\n        caption: false,\n        class: '',\n        align: '',\n        border: ''\n      };\n      const getBorder = () => {\n        const borderWidth = style['border-width'];\n        if (shouldStyleWithCss(editor) && borderWidth) {\n          return { border: borderWidth };\n        }\n        return get$4(attrs, 'border').fold(() => ({}), border => ({ border }));\n      };\n      const advStyle = hasAdvTableTab ? extractAdvancedStyleData() : {};\n      const getCellPaddingCellSpacing = () => {\n        const spacing = get$4(style, 'border-spacing').or(get$4(attrs, 'cellspacing')).fold(() => ({}), cellspacing => ({ cellspacing }));\n        const padding = get$4(style, 'border-padding').or(get$4(attrs, 'cellpadding')).fold(() => ({}), cellpadding => ({ cellpadding }));\n        return {\n          ...spacing,\n          ...padding\n        };\n      };\n      const data = {\n        ...defaultData,\n        ...style,\n        ...attrs,\n        ...advStyle,\n        ...getBorder(),\n        ...getCellPaddingCellSpacing()\n      };\n      return data;\n    };\n    const getRowType = elm => table(SugarElement.fromDom(elm)).map(table => {\n      const target = { selection: fromDom(elm.cells) };\n      return getRowsType(table, target);\n    }).getOr('');\n    const extractDataFromTableElement = (editor, elm, hasAdvTableTab) => {\n      const getBorder = (dom, elm) => {\n        const optBorderWidth = getRaw(SugarElement.fromDom(elm), 'border-width');\n        if (shouldStyleWithCss(editor) && optBorderWidth.isSome()) {\n          return optBorderWidth.getOr('');\n        }\n        return dom.getAttrib(elm, 'border') || getTDTHOverallStyle(editor.dom, elm, 'border-width') || getTDTHOverallStyle(editor.dom, elm, 'border') || '';\n      };\n      const dom = editor.dom;\n      const cellspacing = shouldStyleWithCss(editor) ? dom.getStyle(elm, 'border-spacing') || dom.getAttrib(elm, 'cellspacing') : dom.getAttrib(elm, 'cellspacing') || dom.getStyle(elm, 'border-spacing');\n      const cellpadding = shouldStyleWithCss(editor) ? getTDTHOverallStyle(dom, elm, 'padding') || dom.getAttrib(elm, 'cellpadding') : dom.getAttrib(elm, 'cellpadding') || getTDTHOverallStyle(dom, elm, 'padding');\n      return {\n        width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n        height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n        cellspacing: cellspacing !== null && cellspacing !== void 0 ? cellspacing : '',\n        cellpadding: cellpadding !== null && cellpadding !== void 0 ? cellpadding : '',\n        border: getBorder(dom, elm),\n        caption: !!dom.select('caption', elm)[0],\n        class: dom.getAttrib(elm, 'class', ''),\n        align: getHAlignment(editor, elm),\n        ...hasAdvTableTab ? extractAdvancedStyles(elm) : {}\n      };\n    };\n    const extractDataFromRowElement = (editor, elm, hasAdvancedRowTab) => {\n      const dom = editor.dom;\n      return {\n        height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n        class: dom.getAttrib(elm, 'class', ''),\n        type: getRowType(elm),\n        align: getHAlignment(editor, elm),\n        ...hasAdvancedRowTab ? extractAdvancedStyles(elm) : {}\n      };\n    };\n    const extractDataFromCellElement = (editor, cell, hasAdvancedCellTab, column) => {\n      const dom = editor.dom;\n      const colElm = column.getOr(cell);\n      const getStyle = (element, style) => dom.getStyle(element, style) || dom.getAttrib(element, style);\n      return {\n        width: getStyle(colElm, 'width'),\n        height: getStyle(cell, 'height'),\n        scope: dom.getAttrib(cell, 'scope'),\n        celltype: getNodeName(cell),\n        class: dom.getAttrib(cell, 'class', ''),\n        halign: getHAlignment(editor, cell),\n        valign: getVAlignment(editor, cell),\n        ...hasAdvancedCellTab ? extractAdvancedStyles(cell) : {}\n      };\n    };\n\n    const getSelectedCells = (table, cells) => {\n      const warehouse = Warehouse.fromTable(table);\n      const allCells = Warehouse.justCells(warehouse);\n      const filtered = filter(allCells, cellA => exists(cells, cellB => eq(cellA.element, cellB)));\n      return map(filtered, cell => ({\n        element: cell.element.dom,\n        column: Warehouse.getColumnAt(warehouse, cell.column).map(col => col.element.dom)\n      }));\n    };\n    const updateSimpleProps$1 = (modifier, colModifier, data, shouldUpdate) => {\n      if (shouldUpdate('scope')) {\n        modifier.setAttrib('scope', data.scope);\n      }\n      if (shouldUpdate('class')) {\n        modifier.setAttrib('class', data.class);\n      }\n      if (shouldUpdate('height')) {\n        modifier.setStyle('height', addPxSuffix(data.height));\n      }\n      if (shouldUpdate('width')) {\n        colModifier.setStyle('width', addPxSuffix(data.width));\n      }\n    };\n    const updateAdvancedProps$1 = (modifier, data, shouldUpdate) => {\n      if (shouldUpdate('backgroundcolor')) {\n        modifier.setFormat('tablecellbackgroundcolor', data.backgroundcolor);\n      }\n      if (shouldUpdate('bordercolor')) {\n        modifier.setFormat('tablecellbordercolor', data.bordercolor);\n      }\n      if (shouldUpdate('borderstyle')) {\n        modifier.setFormat('tablecellborderstyle', data.borderstyle);\n      }\n      if (shouldUpdate('borderwidth')) {\n        modifier.setFormat('tablecellborderwidth', addPxSuffix(data.borderwidth));\n      }\n    };\n    const applyStyleData$1 = (editor, cells, data, wasChanged) => {\n      const isSingleCell = cells.length === 1;\n      each(cells, item => {\n        const cellElm = item.element;\n        const shouldOverrideCurrentValue = isSingleCell ? always : wasChanged;\n        const modifier = DomModifier.normal(editor, cellElm);\n        const colModifier = item.column.map(col => DomModifier.normal(editor, col)).getOr(modifier);\n        updateSimpleProps$1(modifier, colModifier, data, shouldOverrideCurrentValue);\n        if (hasAdvancedCellTab(editor)) {\n          updateAdvancedProps$1(modifier, data, shouldOverrideCurrentValue);\n        }\n        if (wasChanged('halign')) {\n          setAlign(editor, cellElm, data.halign);\n        }\n        if (wasChanged('valign')) {\n          setVAlign(editor, cellElm, data.valign);\n        }\n      });\n    };\n    const applyStructureData$1 = (editor, data) => {\n      editor.execCommand('mceTableCellType', false, {\n        type: data.celltype,\n        no_events: true\n      });\n    };\n    const applyCellData = (editor, cells, oldData, data) => {\n      const modifiedData = filter$1(data, (value, key) => oldData[key] !== value);\n      if (size(modifiedData) > 0 && cells.length >= 1) {\n        table(cells[0]).each(table => {\n          const selectedCells = getSelectedCells(table, cells);\n          const styleModified = size(filter$1(modifiedData, (_value, key) => key !== 'scope' && key !== 'celltype')) > 0;\n          const structureModified = has(modifiedData, 'celltype');\n          if (styleModified || has(modifiedData, 'scope')) {\n            applyStyleData$1(editor, selectedCells, data, curry(has, modifiedData));\n          }\n          if (structureModified) {\n            applyStructureData$1(editor, data);\n          }\n          fireTableModified(editor, table.dom, {\n            structure: structureModified,\n            style: styleModified\n          });\n        });\n      }\n    };\n    const onSubmitCellForm = (editor, cells, oldData, api) => {\n      const data = api.getData();\n      api.close();\n      editor.undoManager.transact(() => {\n        applyCellData(editor, cells, oldData, data);\n        editor.focus();\n      });\n    };\n    const getData$1 = (editor, cells) => {\n      const cellsData = table(cells[0]).map(table => map(getSelectedCells(table, cells), item => extractDataFromCellElement(editor, item.element, hasAdvancedCellTab(editor), item.column)));\n      return getSharedValues(cellsData.getOrDie());\n    };\n    const open$2 = editor => {\n      const cells = getCellsFromSelection(editor);\n      if (cells.length === 0) {\n        return;\n      }\n      const data = getData$1(editor, cells);\n      const dialogTabPanel = {\n        type: 'tabpanel',\n        tabs: [\n          {\n            title: 'General',\n            name: 'general',\n            items: getItems$2(editor)\n          },\n          getAdvancedTab(editor, 'cell')\n        ]\n      };\n      const dialogPanel = {\n        type: 'panel',\n        items: [{\n            type: 'grid',\n            columns: 2,\n            items: getItems$2(editor)\n          }]\n      };\n      editor.windowManager.open({\n        title: 'Cell Properties',\n        size: 'normal',\n        body: hasAdvancedCellTab(editor) ? dialogTabPanel : dialogPanel,\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        initialData: data,\n        onSubmit: curry(onSubmitCellForm, editor, cells, data)\n      });\n    };\n\n    const getClassList = editor => {\n      const classes = buildListItems(getRowClassList(editor));\n      if (classes.length > 0) {\n        return Optional.some({\n          name: 'class',\n          type: 'listbox',\n          label: 'Class',\n          items: classes\n        });\n      }\n      return Optional.none();\n    };\n    const formChildren = [\n      {\n        type: 'listbox',\n        name: 'type',\n        label: 'Row type',\n        items: [\n          {\n            text: 'Header',\n            value: 'header'\n          },\n          {\n            text: 'Body',\n            value: 'body'\n          },\n          {\n            text: 'Footer',\n            value: 'footer'\n          }\n        ]\n      },\n      {\n        type: 'listbox',\n        name: 'align',\n        label: 'Alignment',\n        items: [\n          {\n            text: 'None',\n            value: ''\n          },\n          {\n            text: 'Left',\n            value: 'left'\n          },\n          {\n            text: 'Center',\n            value: 'center'\n          },\n          {\n            text: 'Right',\n            value: 'right'\n          }\n        ]\n      },\n      {\n        label: 'Height',\n        name: 'height',\n        type: 'input'\n      }\n    ];\n    const getItems$1 = editor => formChildren.concat(getClassList(editor).toArray());\n\n    const updateSimpleProps = (modifier, data, shouldUpdate) => {\n      if (shouldUpdate('class')) {\n        modifier.setAttrib('class', data.class);\n      }\n      if (shouldUpdate('height')) {\n        modifier.setStyle('height', addPxSuffix(data.height));\n      }\n    };\n    const updateAdvancedProps = (modifier, data, shouldUpdate) => {\n      if (shouldUpdate('backgroundcolor')) {\n        modifier.setStyle('background-color', data.backgroundcolor);\n      }\n      if (shouldUpdate('bordercolor')) {\n        modifier.setStyle('border-color', data.bordercolor);\n      }\n      if (shouldUpdate('borderstyle')) {\n        modifier.setStyle('border-style', data.borderstyle);\n      }\n    };\n    const applyStyleData = (editor, rows, data, wasChanged) => {\n      const isSingleRow = rows.length === 1;\n      const shouldOverrideCurrentValue = isSingleRow ? always : wasChanged;\n      each(rows, rowElm => {\n        const modifier = DomModifier.normal(editor, rowElm);\n        updateSimpleProps(modifier, data, shouldOverrideCurrentValue);\n        if (hasAdvancedRowTab(editor)) {\n          updateAdvancedProps(modifier, data, shouldOverrideCurrentValue);\n        }\n        if (wasChanged('align')) {\n          setAlign(editor, rowElm, data.align);\n        }\n      });\n    };\n    const applyStructureData = (editor, data) => {\n      editor.execCommand('mceTableRowType', false, {\n        type: data.type,\n        no_events: true\n      });\n    };\n    const applyRowData = (editor, rows, oldData, data) => {\n      const modifiedData = filter$1(data, (value, key) => oldData[key] !== value);\n      if (size(modifiedData) > 0) {\n        const typeModified = has(modifiedData, 'type');\n        const styleModified = typeModified ? size(modifiedData) > 1 : true;\n        if (styleModified) {\n          applyStyleData(editor, rows, data, curry(has, modifiedData));\n        }\n        if (typeModified) {\n          applyStructureData(editor, data);\n        }\n        table(SugarElement.fromDom(rows[0])).each(table => fireTableModified(editor, table.dom, {\n          structure: typeModified,\n          style: styleModified\n        }));\n      }\n    };\n    const onSubmitRowForm = (editor, rows, oldData, api) => {\n      const data = api.getData();\n      api.close();\n      editor.undoManager.transact(() => {\n        applyRowData(editor, rows, oldData, data);\n        editor.focus();\n      });\n    };\n    const open$1 = editor => {\n      const rows = getRowsFromSelection(getSelectionStart(editor), ephemera.selected);\n      if (rows.length === 0) {\n        return;\n      }\n      const rowsData = map(rows, rowElm => extractDataFromRowElement(editor, rowElm.dom, hasAdvancedRowTab(editor)));\n      const data = getSharedValues(rowsData);\n      const dialogTabPanel = {\n        type: 'tabpanel',\n        tabs: [\n          {\n            title: 'General',\n            name: 'general',\n            items: getItems$1(editor)\n          },\n          getAdvancedTab(editor, 'row')\n        ]\n      };\n      const dialogPanel = {\n        type: 'panel',\n        items: [{\n            type: 'grid',\n            columns: 2,\n            items: getItems$1(editor)\n          }]\n      };\n      editor.windowManager.open({\n        title: 'Row Properties',\n        size: 'normal',\n        body: hasAdvancedRowTab(editor) ? dialogTabPanel : dialogPanel,\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        initialData: data,\n        onSubmit: curry(onSubmitRowForm, editor, map(rows, r => r.dom), data)\n      });\n    };\n\n    const getItems = (editor, classes, insertNewTable) => {\n      const rowColCountItems = !insertNewTable ? [] : [\n        {\n          type: 'input',\n          name: 'cols',\n          label: 'Cols',\n          inputMode: 'numeric'\n        },\n        {\n          type: 'input',\n          name: 'rows',\n          label: 'Rows',\n          inputMode: 'numeric'\n        }\n      ];\n      const alwaysItems = [\n        {\n          type: 'input',\n          name: 'width',\n          label: 'Width'\n        },\n        {\n          type: 'input',\n          name: 'height',\n          label: 'Height'\n        }\n      ];\n      const appearanceItems = hasAppearanceOptions(editor) ? [\n        {\n          type: 'input',\n          name: 'cellspacing',\n          label: 'Cell spacing',\n          inputMode: 'numeric'\n        },\n        {\n          type: 'input',\n          name: 'cellpadding',\n          label: 'Cell padding',\n          inputMode: 'numeric'\n        },\n        {\n          type: 'input',\n          name: 'border',\n          label: 'Border width'\n        },\n        {\n          type: 'label',\n          label: 'Caption',\n          items: [{\n              type: 'checkbox',\n              name: 'caption',\n              label: 'Show caption'\n            }]\n        }\n      ] : [];\n      const alignmentItem = [{\n          type: 'listbox',\n          name: 'align',\n          label: 'Alignment',\n          items: [\n            {\n              text: 'None',\n              value: ''\n            },\n            {\n              text: 'Left',\n              value: 'left'\n            },\n            {\n              text: 'Center',\n              value: 'center'\n            },\n            {\n              text: 'Right',\n              value: 'right'\n            }\n          ]\n        }];\n      const classListItem = classes.length > 0 ? [{\n          type: 'listbox',\n          name: 'class',\n          label: 'Class',\n          items: classes\n        }] : [];\n      return rowColCountItems.concat(alwaysItems).concat(appearanceItems).concat(alignmentItem).concat(classListItem);\n    };\n\n    const styleTDTH = (dom, elm, name, value) => {\n      if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n        if (isString(name) && isNonNullable(value)) {\n          dom.setStyle(elm, name, value);\n        } else {\n          dom.setStyles(elm, name);\n        }\n      } else {\n        if (elm.children) {\n          for (let i = 0; i < elm.children.length; i++) {\n            styleTDTH(dom, elm.children[i], name, value);\n          }\n        }\n      }\n    };\n    const applyDataToElement = (editor, tableElm, data, shouldApplyOnCell) => {\n      const dom = editor.dom;\n      const attrs = {};\n      const styles = {};\n      const shouldStyleWithCss$1 = shouldStyleWithCss(editor);\n      const hasAdvancedTableTab$1 = hasAdvancedTableTab(editor);\n      if (!isUndefined(data.class)) {\n        attrs.class = data.class;\n      }\n      styles.height = addPxSuffix(data.height);\n      if (shouldStyleWithCss$1) {\n        styles.width = addPxSuffix(data.width);\n      } else if (dom.getAttrib(tableElm, 'width')) {\n        attrs.width = removePxSuffix(data.width);\n      }\n      if (shouldStyleWithCss$1) {\n        styles['border-width'] = addPxSuffix(data.border);\n        styles['border-spacing'] = addPxSuffix(data.cellspacing);\n      } else {\n        attrs.border = data.border;\n        attrs.cellpadding = data.cellpadding;\n        attrs.cellspacing = data.cellspacing;\n      }\n      if (shouldStyleWithCss$1 && tableElm.children) {\n        const cellStyles = {};\n        if (shouldApplyOnCell.border) {\n          cellStyles['border-width'] = addPxSuffix(data.border);\n        }\n        if (shouldApplyOnCell.cellpadding) {\n          cellStyles.padding = addPxSuffix(data.cellpadding);\n        }\n        if (hasAdvancedTableTab$1 && shouldApplyOnCell.bordercolor) {\n          cellStyles['border-color'] = data.bordercolor;\n        }\n        if (!isEmpty$1(cellStyles)) {\n          for (let i = 0; i < tableElm.children.length; i++) {\n            styleTDTH(dom, tableElm.children[i], cellStyles);\n          }\n        }\n      }\n      if (hasAdvancedTableTab$1) {\n        const advData = data;\n        styles['background-color'] = advData.backgroundcolor;\n        styles['border-color'] = advData.bordercolor;\n        styles['border-style'] = advData.borderstyle;\n      }\n      dom.setStyles(tableElm, {\n        ...getDefaultStyles(editor),\n        ...styles\n      });\n      dom.setAttribs(tableElm, {\n        ...getDefaultAttributes(editor),\n        ...attrs\n      });\n    };\n    const onSubmitTableForm = (editor, tableElm, oldData, api) => {\n      const dom = editor.dom;\n      const data = api.getData();\n      const modifiedData = filter$1(data, (value, key) => oldData[key] !== value);\n      api.close();\n      if (data.class === '') {\n        delete data.class;\n      }\n      editor.undoManager.transact(() => {\n        if (!tableElm) {\n          const cols = toInt(data.cols).getOr(1);\n          const rows = toInt(data.rows).getOr(1);\n          editor.execCommand('mceInsertTable', false, {\n            rows,\n            columns: cols\n          });\n          tableElm = getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).bind(cell => table(cell, getIsRoot(editor))).map(table => table.dom).getOrDie();\n        }\n        if (size(modifiedData) > 0) {\n          const applicableCellProperties = {\n            border: has(modifiedData, 'border'),\n            bordercolor: has(modifiedData, 'bordercolor'),\n            cellpadding: has(modifiedData, 'cellpadding')\n          };\n          applyDataToElement(editor, tableElm, data, applicableCellProperties);\n          const captionElm = dom.select('caption', tableElm)[0];\n          if (captionElm && !data.caption || !captionElm && data.caption) {\n            editor.execCommand('mceTableToggleCaption');\n          }\n          setAlign(editor, tableElm, data.align);\n        }\n        editor.focus();\n        editor.addVisual();\n        if (size(modifiedData) > 0) {\n          const captionModified = has(modifiedData, 'caption');\n          const styleModified = captionModified ? size(modifiedData) > 1 : true;\n          fireTableModified(editor, tableElm, {\n            structure: captionModified,\n            style: styleModified\n          });\n        }\n      });\n    };\n    const open = (editor, insertNewTable) => {\n      const dom = editor.dom;\n      let tableElm;\n      let data = extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n      if (insertNewTable) {\n        data.cols = '1';\n        data.rows = '1';\n        if (hasAdvancedTableTab(editor)) {\n          data.borderstyle = '';\n          data.bordercolor = '';\n          data.backgroundcolor = '';\n        }\n      } else {\n        tableElm = dom.getParent(editor.selection.getStart(), 'table', editor.getBody());\n        if (tableElm) {\n          data = extractDataFromTableElement(editor, tableElm, hasAdvancedTableTab(editor));\n        } else {\n          if (hasAdvancedTableTab(editor)) {\n            data.borderstyle = '';\n            data.bordercolor = '';\n            data.backgroundcolor = '';\n          }\n        }\n      }\n      const classes = buildListItems(getTableClassList(editor));\n      if (classes.length > 0) {\n        if (data.class) {\n          data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n        }\n      }\n      const generalPanel = {\n        type: 'grid',\n        columns: 2,\n        items: getItems(editor, classes, insertNewTable)\n      };\n      const nonAdvancedForm = () => ({\n        type: 'panel',\n        items: [generalPanel]\n      });\n      const advancedForm = () => ({\n        type: 'tabpanel',\n        tabs: [\n          {\n            title: 'General',\n            name: 'general',\n            items: [generalPanel]\n          },\n          getAdvancedTab(editor, 'table')\n        ]\n      });\n      const dialogBody = hasAdvancedTableTab(editor) ? advancedForm() : nonAdvancedForm();\n      editor.windowManager.open({\n        title: 'Table Properties',\n        size: 'normal',\n        body: dialogBody,\n        onSubmit: curry(onSubmitTableForm, editor, tableElm, data),\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        initialData: data\n      });\n    };\n\n    const registerCommands = editor => {\n      const runAction = f => {\n        if (isInEditableContext(getSelectionStart(editor))) {\n          f();\n        }\n      };\n      each$1({\n        mceTableProps: curry(open, editor, false),\n        mceTableRowProps: curry(open$1, editor),\n        mceTableCellProps: curry(open$2, editor),\n        mceInsertTableDialog: curry(open, editor, true)\n      }, (func, name) => editor.addCommand(name, () => runAction(func)));\n    };\n\n    const child = (scope, selector) => child$1(scope, selector).isSome();\n\n    const selection = identity;\n    const unmergable = selectedCells => {\n      const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n      const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n      return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n    };\n    const mergable = (table, selectedCells, ephemera) => {\n      if (selectedCells.length <= 1) {\n        return Optional.none();\n      } else {\n        return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n          bounds,\n          cells: selectedCells\n        }));\n      }\n    };\n\n    const noMenu = cell => ({\n      element: cell,\n      mergable: Optional.none(),\n      unmergable: Optional.none(),\n      selection: [cell]\n    });\n    const forMenu = (selectedCells, table, cell) => ({\n      element: cell,\n      mergable: mergable(table, selectedCells, ephemera),\n      unmergable: unmergable(selectedCells),\n      selection: selection(selectedCells)\n    });\n\n    const getSelectionTargets = editor => {\n      const targets = Cell(Optional.none());\n      const changeHandlers = Cell([]);\n      let selectionDetails = Optional.none();\n      const isCaption = isTag('caption');\n      const isDisabledForSelection = key => selectionDetails.forall(details => !details[key]);\n      const getStart = () => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n      const getEnd = () => getSelectionCellOrCaption(getSelectionEnd(editor), getIsRoot(editor));\n      const findTargets = () => getStart().bind(startCellOrCaption => flatten(lift2(table(startCellOrCaption), getEnd().bind(table), (startTable, endTable) => {\n        if (eq(startTable, endTable)) {\n          if (isCaption(startCellOrCaption)) {\n            return Optional.some(noMenu(startCellOrCaption));\n          } else {\n            return Optional.some(forMenu(getCellsFromSelection(editor), startTable, startCellOrCaption));\n          }\n        }\n        return Optional.none();\n      })));\n      const getExtractedDetails = targets => {\n        const tableOpt = table(targets.element);\n        return tableOpt.map(table => {\n          const warehouse = Warehouse.fromTable(table);\n          const selectedCells = onCells(warehouse, targets).getOr([]);\n          const locked = foldl(selectedCells, (acc, cell) => {\n            if (cell.isLocked) {\n              acc.onAny = true;\n              if (cell.column === 0) {\n                acc.onFirst = true;\n              } else if (cell.column + cell.colspan >= warehouse.grid.columns) {\n                acc.onLast = true;\n              }\n            }\n            return acc;\n          }, {\n            onAny: false,\n            onFirst: false,\n            onLast: false\n          });\n          return {\n            mergeable: onUnlockedMergable(warehouse, targets).isSome(),\n            unmergeable: onUnlockedUnmergable(warehouse, targets).isSome(),\n            locked\n          };\n        });\n      };\n      const resetTargets = () => {\n        targets.set(cached(findTargets)());\n        selectionDetails = targets.get().bind(getExtractedDetails);\n        each(changeHandlers.get(), call);\n      };\n      const setupHandler = handler => {\n        handler();\n        changeHandlers.set(changeHandlers.get().concat([handler]));\n        return () => {\n          changeHandlers.set(filter(changeHandlers.get(), h => h !== handler));\n        };\n      };\n      const onSetup = (api, isDisabled) => setupHandler(() => targets.get().fold(() => {\n        api.setEnabled(false);\n      }, targets => {\n        api.setEnabled(!isDisabled(targets) && editor.selection.isEditable());\n      }));\n      const onSetupWithToggle = (api, isDisabled, isActive) => setupHandler(() => targets.get().fold(() => {\n        api.setEnabled(false);\n        api.setActive(false);\n      }, targets => {\n        api.setEnabled(!isDisabled(targets) && editor.selection.isEditable());\n        api.setActive(isActive(targets));\n      }));\n      const isDisabledFromLocked = lockedDisable => selectionDetails.exists(details => details.locked[lockedDisable]);\n      const onSetupTable = api => onSetup(api, _ => false);\n      const onSetupCellOrRow = api => onSetup(api, targets => isCaption(targets.element));\n      const onSetupColumn = lockedDisable => api => onSetup(api, targets => isCaption(targets.element) || isDisabledFromLocked(lockedDisable));\n      const onSetupPasteable = getClipboardData => api => onSetup(api, targets => isCaption(targets.element) || getClipboardData().isNone());\n      const onSetupPasteableColumn = (getClipboardData, lockedDisable) => api => onSetup(api, targets => isCaption(targets.element) || getClipboardData().isNone() || isDisabledFromLocked(lockedDisable));\n      const onSetupMergeable = api => onSetup(api, _targets => isDisabledForSelection('mergeable'));\n      const onSetupUnmergeable = api => onSetup(api, _targets => isDisabledForSelection('unmergeable'));\n      const onSetupTableWithCaption = api => {\n        return onSetupWithToggle(api, never, targets => {\n          const tableOpt = table(targets.element, getIsRoot(editor));\n          return tableOpt.exists(table => child(table, 'caption'));\n        });\n      };\n      const onSetupTableHeaders = (command, headerType) => api => {\n        return onSetupWithToggle(api, targets => isCaption(targets.element), () => editor.queryCommandValue(command) === headerType);\n      };\n      const onSetupTableRowHeaders = onSetupTableHeaders('mceTableRowType', 'header');\n      const onSetupTableColumnHeaders = onSetupTableHeaders('mceTableColType', 'th');\n      editor.on('NodeChange ExecCommand TableSelectorChange', resetTargets);\n      return {\n        onSetupTable,\n        onSetupCellOrRow,\n        onSetupColumn,\n        onSetupPasteable,\n        onSetupPasteableColumn,\n        onSetupMergeable,\n        onSetupUnmergeable,\n        resetTargets,\n        onSetupTableWithCaption,\n        onSetupTableRowHeaders,\n        onSetupTableColumnHeaders,\n        targets: targets.get\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n    const tableTypeBase = 'x-tinymce/dom-table-';\n    const tableTypeRow = tableTypeBase + 'rows';\n    const tableTypeColumn = tableTypeBase + 'columns';\n    const getData = type => {\n      var _a;\n      const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n      return findMap(items, item => Optional.from(item.getType(type)));\n    };\n    const getRows = () => getData(tableTypeRow);\n    const getColumns = () => getData(tableTypeColumn);\n\n    const onSetupEditable$1 = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const addButtons = (editor, selectionTargets) => {\n      editor.ui.registry.addMenuButton('table', {\n        tooltip: 'Table',\n        icon: 'table',\n        onSetup: onSetupEditable$1(editor),\n        fetch: callback => callback('inserttable | cell row column | advtablesort | tableprops deletetable')\n      });\n      const cmd = command => () => editor.execCommand(command);\n      const addButtonIfRegistered = (name, spec) => {\n        if (editor.queryCommandSupported(spec.command)) {\n          editor.ui.registry.addButton(name, {\n            ...spec,\n            onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n          });\n        }\n      };\n      const addToggleButtonIfRegistered = (name, spec) => {\n        if (editor.queryCommandSupported(spec.command)) {\n          editor.ui.registry.addToggleButton(name, {\n            ...spec,\n            onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n          });\n        }\n      };\n      addButtonIfRegistered('tableprops', {\n        tooltip: 'Table properties',\n        command: 'mceTableProps',\n        icon: 'table',\n        onSetup: selectionTargets.onSetupTable\n      });\n      addButtonIfRegistered('tabledelete', {\n        tooltip: 'Delete table',\n        command: 'mceTableDelete',\n        icon: 'table-delete-table',\n        onSetup: selectionTargets.onSetupTable\n      });\n      addButtonIfRegistered('tablecellprops', {\n        tooltip: 'Cell properties',\n        command: 'mceTableCellProps',\n        icon: 'table-cell-properties',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tablemergecells', {\n        tooltip: 'Merge cells',\n        command: 'mceTableMergeCells',\n        icon: 'table-merge-cells',\n        onSetup: selectionTargets.onSetupMergeable\n      });\n      addButtonIfRegistered('tablesplitcells', {\n        tooltip: 'Split cell',\n        command: 'mceTableSplitCells',\n        icon: 'table-split-cells',\n        onSetup: selectionTargets.onSetupUnmergeable\n      });\n      addButtonIfRegistered('tableinsertrowbefore', {\n        tooltip: 'Insert row before',\n        command: 'mceTableInsertRowBefore',\n        icon: 'table-insert-row-above',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tableinsertrowafter', {\n        tooltip: 'Insert row after',\n        command: 'mceTableInsertRowAfter',\n        icon: 'table-insert-row-after',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tabledeleterow', {\n        tooltip: 'Delete row',\n        command: 'mceTableDeleteRow',\n        icon: 'table-delete-row',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tablerowprops', {\n        tooltip: 'Row properties',\n        command: 'mceTableRowProps',\n        icon: 'table-row-properties',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tableinsertcolbefore', {\n        tooltip: 'Insert column before',\n        command: 'mceTableInsertColBefore',\n        icon: 'table-insert-column-before',\n        onSetup: selectionTargets.onSetupColumn('onFirst')\n      });\n      addButtonIfRegistered('tableinsertcolafter', {\n        tooltip: 'Insert column after',\n        command: 'mceTableInsertColAfter',\n        icon: 'table-insert-column-after',\n        onSetup: selectionTargets.onSetupColumn('onLast')\n      });\n      addButtonIfRegistered('tabledeletecol', {\n        tooltip: 'Delete column',\n        command: 'mceTableDeleteCol',\n        icon: 'table-delete-column',\n        onSetup: selectionTargets.onSetupColumn('onAny')\n      });\n      addButtonIfRegistered('tablecutrow', {\n        tooltip: 'Cut row',\n        command: 'mceTableCutRow',\n        icon: 'cut-row',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tablecopyrow', {\n        tooltip: 'Copy row',\n        command: 'mceTableCopyRow',\n        icon: 'duplicate-row',\n        onSetup: selectionTargets.onSetupCellOrRow\n      });\n      addButtonIfRegistered('tablepasterowbefore', {\n        tooltip: 'Paste row before',\n        command: 'mceTablePasteRowBefore',\n        icon: 'paste-row-before',\n        onSetup: selectionTargets.onSetupPasteable(getRows)\n      });\n      addButtonIfRegistered('tablepasterowafter', {\n        tooltip: 'Paste row after',\n        command: 'mceTablePasteRowAfter',\n        icon: 'paste-row-after',\n        onSetup: selectionTargets.onSetupPasteable(getRows)\n      });\n      addButtonIfRegistered('tablecutcol', {\n        tooltip: 'Cut column',\n        command: 'mceTableCutCol',\n        icon: 'cut-column',\n        onSetup: selectionTargets.onSetupColumn('onAny')\n      });\n      addButtonIfRegistered('tablecopycol', {\n        tooltip: 'Copy column',\n        command: 'mceTableCopyCol',\n        icon: 'duplicate-column',\n        onSetup: selectionTargets.onSetupColumn('onAny')\n      });\n      addButtonIfRegistered('tablepastecolbefore', {\n        tooltip: 'Paste column before',\n        command: 'mceTablePasteColBefore',\n        icon: 'paste-column-before',\n        onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onFirst')\n      });\n      addButtonIfRegistered('tablepastecolafter', {\n        tooltip: 'Paste column after',\n        command: 'mceTablePasteColAfter',\n        icon: 'paste-column-after',\n        onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onLast')\n      });\n      addButtonIfRegistered('tableinsertdialog', {\n        tooltip: 'Insert table',\n        command: 'mceInsertTableDialog',\n        icon: 'table',\n        onSetup: onSetupEditable$1(editor)\n      });\n      const tableClassList = filterNoneItem(getTableClassList(editor));\n      if (tableClassList.length !== 0 && editor.queryCommandSupported('mceTableToggleClass')) {\n        editor.ui.registry.addMenuButton('tableclass', {\n          icon: 'table-classes',\n          tooltip: 'Table styles',\n          fetch: generateMenuItemsCallback(editor, tableClassList, 'tableclass', value => editor.execCommand('mceTableToggleClass', false, value)),\n          onSetup: selectionTargets.onSetupTable\n        });\n      }\n      const tableCellClassList = filterNoneItem(getCellClassList(editor));\n      if (tableCellClassList.length !== 0 && editor.queryCommandSupported('mceTableCellToggleClass')) {\n        editor.ui.registry.addMenuButton('tablecellclass', {\n          icon: 'table-cell-classes',\n          tooltip: 'Cell styles',\n          fetch: generateMenuItemsCallback(editor, tableCellClassList, 'tablecellclass', value => editor.execCommand('mceTableCellToggleClass', false, value)),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n      }\n      if (editor.queryCommandSupported('mceTableApplyCellStyle')) {\n        editor.ui.registry.addMenuButton('tablecellvalign', {\n          icon: 'vertical-align',\n          tooltip: 'Vertical align',\n          fetch: generateMenuItemsCallback(editor, verticalAlignValues, 'tablecellverticalalign', applyTableCellStyle(editor, 'vertical-align')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addMenuButton('tablecellborderwidth', {\n          icon: 'border-width',\n          tooltip: 'Border width',\n          fetch: generateMenuItemsCallback(editor, getTableBorderWidths(editor), 'tablecellborderwidth', applyTableCellStyle(editor, 'border-width')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addMenuButton('tablecellborderstyle', {\n          icon: 'border-style',\n          tooltip: 'Border style',\n          fetch: generateMenuItemsCallback(editor, getTableBorderStyles(editor), 'tablecellborderstyle', applyTableCellStyle(editor, 'border-style')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addMenuButton('tablecellbackgroundcolor', {\n          icon: 'cell-background-color',\n          tooltip: 'Background color',\n          fetch: callback => callback(buildColorMenu(editor, getTableBackgroundColorMap(editor), 'background-color')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addMenuButton('tablecellbordercolor', {\n          icon: 'cell-border-color',\n          tooltip: 'Border color',\n          fetch: callback => callback(buildColorMenu(editor, getTableBorderColorMap(editor), 'border-color')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n      }\n      addToggleButtonIfRegistered('tablecaption', {\n        tooltip: 'Table caption',\n        icon: 'table-caption',\n        command: 'mceTableToggleCaption',\n        onSetup: selectionTargets.onSetupTableWithCaption\n      });\n      addToggleButtonIfRegistered('tablerowheader', {\n        tooltip: 'Row header',\n        icon: 'table-top-header',\n        command: 'mceTableRowType',\n        onAction: changeRowHeader(editor),\n        onSetup: selectionTargets.onSetupTableRowHeaders\n      });\n      addToggleButtonIfRegistered('tablecolheader', {\n        tooltip: 'Column header',\n        icon: 'table-left-header',\n        command: 'mceTableColType',\n        onAction: changeColumnHeader(editor),\n        onSetup: selectionTargets.onSetupTableColumnHeaders\n      });\n    };\n    const addToolbars = editor => {\n      const isEditableTable = table => editor.dom.is(table, 'table') && editor.getBody().contains(table) && editor.dom.isEditable(table.parentNode);\n      const toolbar = getToolbar(editor);\n      if (toolbar.length > 0) {\n        editor.ui.registry.addContextToolbar('table', {\n          predicate: isEditableTable,\n          items: toolbar,\n          scope: 'node',\n          position: 'node'\n        });\n      }\n    };\n\n    const onSetupEditable = editor => api => {\n      const nodeChanged = () => {\n        api.setEnabled(editor.selection.isEditable());\n      };\n      editor.on('NodeChange', nodeChanged);\n      nodeChanged();\n      return () => {\n        editor.off('NodeChange', nodeChanged);\n      };\n    };\n    const addMenuItems = (editor, selectionTargets) => {\n      const cmd = command => () => editor.execCommand(command);\n      const addMenuIfRegistered = (name, spec) => {\n        if (editor.queryCommandSupported(spec.command)) {\n          editor.ui.registry.addMenuItem(name, {\n            ...spec,\n            onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n          });\n          return true;\n        } else {\n          return false;\n        }\n      };\n      const addToggleMenuIfRegistered = (name, spec) => {\n        if (editor.queryCommandSupported(spec.command)) {\n          editor.ui.registry.addToggleMenuItem(name, {\n            ...spec,\n            onAction: isFunction(spec.onAction) ? spec.onAction : cmd(spec.command)\n          });\n        }\n      };\n      const insertTableAction = data => {\n        editor.execCommand('mceInsertTable', false, {\n          rows: data.numRows,\n          columns: data.numColumns\n        });\n      };\n      const hasRowMenuItems = [\n        addMenuIfRegistered('tableinsertrowbefore', {\n          text: 'Insert row before',\n          icon: 'table-insert-row-above',\n          command: 'mceTableInsertRowBefore',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tableinsertrowafter', {\n          text: 'Insert row after',\n          icon: 'table-insert-row-after',\n          command: 'mceTableInsertRowAfter',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tabledeleterow', {\n          text: 'Delete row',\n          icon: 'table-delete-row',\n          command: 'mceTableDeleteRow',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tablerowprops', {\n          text: 'Row properties',\n          icon: 'table-row-properties',\n          command: 'mceTableRowProps',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tablecutrow', {\n          text: 'Cut row',\n          icon: 'cut-row',\n          command: 'mceTableCutRow',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tablecopyrow', {\n          text: 'Copy row',\n          icon: 'duplicate-row',\n          command: 'mceTableCopyRow',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tablepasterowbefore', {\n          text: 'Paste row before',\n          icon: 'paste-row-before',\n          command: 'mceTablePasteRowBefore',\n          onSetup: selectionTargets.onSetupPasteable(getRows)\n        }),\n        addMenuIfRegistered('tablepasterowafter', {\n          text: 'Paste row after',\n          icon: 'paste-row-after',\n          command: 'mceTablePasteRowAfter',\n          onSetup: selectionTargets.onSetupPasteable(getRows)\n        })\n      ];\n      const hasColumnMenuItems = [\n        addMenuIfRegistered('tableinsertcolumnbefore', {\n          text: 'Insert column before',\n          icon: 'table-insert-column-before',\n          command: 'mceTableInsertColBefore',\n          onSetup: selectionTargets.onSetupColumn('onFirst')\n        }),\n        addMenuIfRegistered('tableinsertcolumnafter', {\n          text: 'Insert column after',\n          icon: 'table-insert-column-after',\n          command: 'mceTableInsertColAfter',\n          onSetup: selectionTargets.onSetupColumn('onLast')\n        }),\n        addMenuIfRegistered('tabledeletecolumn', {\n          text: 'Delete column',\n          icon: 'table-delete-column',\n          command: 'mceTableDeleteCol',\n          onSetup: selectionTargets.onSetupColumn('onAny')\n        }),\n        addMenuIfRegistered('tablecutcolumn', {\n          text: 'Cut column',\n          icon: 'cut-column',\n          command: 'mceTableCutCol',\n          onSetup: selectionTargets.onSetupColumn('onAny')\n        }),\n        addMenuIfRegistered('tablecopycolumn', {\n          text: 'Copy column',\n          icon: 'duplicate-column',\n          command: 'mceTableCopyCol',\n          onSetup: selectionTargets.onSetupColumn('onAny')\n        }),\n        addMenuIfRegistered('tablepastecolumnbefore', {\n          text: 'Paste column before',\n          icon: 'paste-column-before',\n          command: 'mceTablePasteColBefore',\n          onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onFirst')\n        }),\n        addMenuIfRegistered('tablepastecolumnafter', {\n          text: 'Paste column after',\n          icon: 'paste-column-after',\n          command: 'mceTablePasteColAfter',\n          onSetup: selectionTargets.onSetupPasteableColumn(getColumns, 'onLast')\n        })\n      ];\n      const hasCellMenuItems = [\n        addMenuIfRegistered('tablecellprops', {\n          text: 'Cell properties',\n          icon: 'table-cell-properties',\n          command: 'mceTableCellProps',\n          onSetup: selectionTargets.onSetupCellOrRow\n        }),\n        addMenuIfRegistered('tablemergecells', {\n          text: 'Merge cells',\n          icon: 'table-merge-cells',\n          command: 'mceTableMergeCells',\n          onSetup: selectionTargets.onSetupMergeable\n        }),\n        addMenuIfRegistered('tablesplitcells', {\n          text: 'Split cell',\n          icon: 'table-split-cells',\n          command: 'mceTableSplitCells',\n          onSetup: selectionTargets.onSetupUnmergeable\n        })\n      ];\n      if (!hasTableGrid(editor)) {\n        editor.ui.registry.addMenuItem('inserttable', {\n          text: 'Table',\n          icon: 'table',\n          onAction: cmd('mceInsertTableDialog'),\n          onSetup: onSetupEditable(editor)\n        });\n      } else {\n        editor.ui.registry.addNestedMenuItem('inserttable', {\n          text: 'Table',\n          icon: 'table',\n          getSubmenuItems: () => [{\n              type: 'fancymenuitem',\n              fancytype: 'inserttable',\n              onAction: insertTableAction\n            }],\n          onSetup: onSetupEditable(editor)\n        });\n      }\n      editor.ui.registry.addMenuItem('inserttabledialog', {\n        text: 'Insert table',\n        icon: 'table',\n        onAction: cmd('mceInsertTableDialog'),\n        onSetup: onSetupEditable(editor)\n      });\n      addMenuIfRegistered('tableprops', {\n        text: 'Table properties',\n        onSetup: selectionTargets.onSetupTable,\n        command: 'mceTableProps'\n      });\n      addMenuIfRegistered('deletetable', {\n        text: 'Delete table',\n        icon: 'table-delete-table',\n        onSetup: selectionTargets.onSetupTable,\n        command: 'mceTableDelete'\n      });\n      if (contains(hasRowMenuItems, true)) {\n        editor.ui.registry.addNestedMenuItem('row', {\n          type: 'nestedmenuitem',\n          text: 'Row',\n          getSubmenuItems: constant('tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter')\n        });\n      }\n      if (contains(hasColumnMenuItems, true)) {\n        editor.ui.registry.addNestedMenuItem('column', {\n          type: 'nestedmenuitem',\n          text: 'Column',\n          getSubmenuItems: constant('tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn | tablecutcolumn tablecopycolumn tablepastecolumnbefore tablepastecolumnafter')\n        });\n      }\n      if (contains(hasCellMenuItems, true)) {\n        editor.ui.registry.addNestedMenuItem('cell', {\n          type: 'nestedmenuitem',\n          text: 'Cell',\n          getSubmenuItems: constant('tablecellprops tablemergecells tablesplitcells')\n        });\n      }\n      editor.ui.registry.addContextMenu('table', {\n        update: () => {\n          selectionTargets.resetTargets();\n          return selectionTargets.targets().fold(constant(''), targets => {\n            if (name(targets.element) === 'caption') {\n              return 'tableprops deletetable';\n            } else {\n              return 'cell row column | advtablesort | tableprops deletetable';\n            }\n          });\n        }\n      });\n      const tableClassList = filterNoneItem(getTableClassList(editor));\n      if (tableClassList.length !== 0 && editor.queryCommandSupported('mceTableToggleClass')) {\n        editor.ui.registry.addNestedMenuItem('tableclass', {\n          icon: 'table-classes',\n          text: 'Table styles',\n          getSubmenuItems: () => buildMenuItems(editor, tableClassList, 'tableclass', value => editor.execCommand('mceTableToggleClass', false, value)),\n          onSetup: selectionTargets.onSetupTable\n        });\n      }\n      const tableCellClassList = filterNoneItem(getCellClassList(editor));\n      if (tableCellClassList.length !== 0 && editor.queryCommandSupported('mceTableCellToggleClass')) {\n        editor.ui.registry.addNestedMenuItem('tablecellclass', {\n          icon: 'table-cell-classes',\n          text: 'Cell styles',\n          getSubmenuItems: () => buildMenuItems(editor, tableCellClassList, 'tablecellclass', value => editor.execCommand('mceTableCellToggleClass', false, value)),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n      }\n      if (editor.queryCommandSupported('mceTableApplyCellStyle')) {\n        editor.ui.registry.addNestedMenuItem('tablecellvalign', {\n          icon: 'vertical-align',\n          text: 'Vertical align',\n          getSubmenuItems: () => buildMenuItems(editor, verticalAlignValues, 'tablecellverticalalign', applyTableCellStyle(editor, 'vertical-align')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addNestedMenuItem('tablecellborderwidth', {\n          icon: 'border-width',\n          text: 'Border width',\n          getSubmenuItems: () => buildMenuItems(editor, getTableBorderWidths(editor), 'tablecellborderwidth', applyTableCellStyle(editor, 'border-width')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addNestedMenuItem('tablecellborderstyle', {\n          icon: 'border-style',\n          text: 'Border style',\n          getSubmenuItems: () => buildMenuItems(editor, getTableBorderStyles(editor), 'tablecellborderstyle', applyTableCellStyle(editor, 'border-style')),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addNestedMenuItem('tablecellbackgroundcolor', {\n          icon: 'cell-background-color',\n          text: 'Background color',\n          getSubmenuItems: () => buildColorMenu(editor, getTableBackgroundColorMap(editor), 'background-color'),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n        editor.ui.registry.addNestedMenuItem('tablecellbordercolor', {\n          icon: 'cell-border-color',\n          text: 'Border color',\n          getSubmenuItems: () => buildColorMenu(editor, getTableBorderColorMap(editor), 'border-color'),\n          onSetup: selectionTargets.onSetupCellOrRow\n        });\n      }\n      addToggleMenuIfRegistered('tablecaption', {\n        icon: 'table-caption',\n        text: 'Table caption',\n        command: 'mceTableToggleCaption',\n        onSetup: selectionTargets.onSetupTableWithCaption\n      });\n      addToggleMenuIfRegistered('tablerowheader', {\n        text: 'Row header',\n        icon: 'table-top-header',\n        command: 'mceTableRowType',\n        onAction: changeRowHeader(editor),\n        onSetup: selectionTargets.onSetupTableRowHeaders\n      });\n      addToggleMenuIfRegistered('tablecolheader', {\n        text: 'Column header',\n        icon: 'table-left-header',\n        command: 'mceTableColType',\n        onAction: changeColumnHeader(editor),\n        onSetup: selectionTargets.onSetupTableRowHeaders\n      });\n    };\n\n    const Plugin = editor => {\n      const selectionTargets = getSelectionTargets(editor);\n      register(editor);\n      registerCommands(editor);\n      addMenuItems(editor, selectionTargets);\n      addButtons(editor, selectionTargets);\n      addToolbars(editor);\n    };\n    var Plugin$1 = () => {\n      global$3.add('table', Plugin);\n    };\n\n    Plugin$1();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const fireVisualBlocks = (editor, state) => {\n      editor.dispatch('VisualBlocks', { state });\n    };\n\n    const toggleVisualBlocks = (editor, pluginUrl, enabledState) => {\n      const dom = editor.dom;\n      dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n      enabledState.set(!enabledState.get());\n      fireVisualBlocks(editor, enabledState.get());\n    };\n\n    const register$2 = (editor, pluginUrl, enabledState) => {\n      editor.addCommand('mceVisualBlocks', () => {\n        toggleVisualBlocks(editor, pluginUrl, enabledState);\n      });\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const register$1 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('visualblocks_default_state', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const isEnabledByDefault = option('visualblocks_default_state');\n\n    const setup = (editor, pluginUrl, enabledState) => {\n      editor.on('PreviewFormats AfterPreviewFormats', e => {\n        if (enabledState.get()) {\n          editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n        }\n      });\n      editor.on('init', () => {\n        if (isEnabledByDefault(editor)) {\n          toggleVisualBlocks(editor, pluginUrl, enabledState);\n        }\n      });\n    };\n\n    const toggleActiveState = (editor, enabledState) => api => {\n      api.setActive(enabledState.get());\n      const editorEventCallback = e => api.setActive(e.state);\n      editor.on('VisualBlocks', editorEventCallback);\n      return () => editor.off('VisualBlocks', editorEventCallback);\n    };\n    const register = (editor, enabledState) => {\n      const onAction = () => editor.execCommand('mceVisualBlocks');\n      editor.ui.registry.addToggleButton('visualblocks', {\n        icon: 'visualblocks',\n        tooltip: 'Show blocks',\n        onAction,\n        onSetup: toggleActiveState(editor, enabledState)\n      });\n      editor.ui.registry.addToggleMenuItem('visualblocks', {\n        text: 'Show blocks',\n        icon: 'visualblocks',\n        onAction,\n        onSetup: toggleActiveState(editor, enabledState)\n      });\n    };\n\n    var Plugin = () => {\n      global.add('visualblocks', (editor, pluginUrl) => {\n        register$1(editor);\n        const enabledState = Cell(false);\n        register$2(editor, pluginUrl, enabledState);\n        register(editor, enabledState);\n        setup(editor, pluginUrl, enabledState);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const get$2 = toggleState => {\n      const isEnabled = () => {\n        return toggleState.get();\n      };\n      return { isEnabled };\n    };\n\n    const fireVisualChars = (editor, state) => {\n      return editor.dispatch('VisualChars', { state });\n    };\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq = t => a => t === a;\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isNull = eq(null);\n    const isBoolean = isSimpleType('boolean');\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isNumber = isSimpleType('number');\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const filter = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n\n    const keys = Object.keys;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n\n    const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const path = (parts, scope) => {\n      let o = scope !== undefined && scope !== null ? scope : Global;\n      for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    const resolve = (p, scope) => {\n      const parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    const unsafe = (name, scope) => {\n      return resolve(name, scope);\n    };\n    const getOrDie = (name, scope) => {\n      const actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n\n    const getPrototypeOf = Object.getPrototypeOf;\n    const sandHTMLElement = scope => {\n      return getOrDie('HTMLElement', scope);\n    };\n    const isPrototypeOf = x => {\n      const scope = resolve('ownerDocument.defaultView', x);\n      return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n    };\n\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const type = element => element.dom.nodeType;\n    const value = element => element.dom.nodeValue;\n    const isType = t => element => type(element) === t;\n    const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n    const isElement = isType(ELEMENT);\n    const isText = isType(TEXT);\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const get$1 = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const remove$3 = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n\n    const read = (element, attr) => {\n      const value = get$1(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    const add$2 = (element, attr, id) => {\n      const old = read(element, attr);\n      const nu = old.concat([id]);\n      set(element, attr, nu.join(' '));\n      return true;\n    };\n    const remove$2 = (element, attr, id) => {\n      const nu = filter(read(element, attr), v => v !== id);\n      if (nu.length > 0) {\n        set(element, attr, nu.join(' '));\n      } else {\n        remove$3(element, attr);\n      }\n      return false;\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n    const get = element => read(element, 'class');\n    const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n    const remove$1 = (element, clazz) => remove$2(element, 'class', clazz);\n\n    const add = (element, clazz) => {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$1(element, clazz);\n      }\n    };\n    const cleanClass = element => {\n      const classList = supports(element) ? element.dom.classList : get(element);\n      if (classList.length === 0) {\n        remove$3(element, 'class');\n      }\n    };\n    const remove = (element, clazz) => {\n      if (supports(element)) {\n        const classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$1(element, clazz);\n      }\n      cleanClass(element);\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    const charMap = {\n      '\\xA0': 'nbsp',\n      '\\xAD': 'shy'\n    };\n    const charMapToRegExp = (charMap, global) => {\n      let regExp = '';\n      each(charMap, (_value, key) => {\n        regExp += key;\n      });\n      return new RegExp('[' + regExp + ']', global ? 'g' : '');\n    };\n    const charMapToSelector = charMap => {\n      let selector = '';\n      each(charMap, value => {\n        if (selector) {\n          selector += ',';\n        }\n        selector += 'span.mce-' + value;\n      });\n      return selector;\n    };\n    const regExp = charMapToRegExp(charMap);\n    const regExpGlobal = charMapToRegExp(charMap, true);\n    const selector = charMapToSelector(charMap);\n    const nbspClass = 'mce-nbsp';\n\n    const getRaw = element => element.dom.contentEditable;\n\n    const wrapCharWithSpan = value => '<span data-mce-bogus=\"1\" class=\"mce-' + charMap[value] + '\">' + value + '</span>';\n\n    const isWrappedNbsp = node => node.nodeName.toLowerCase() === 'span' && node.classList.contains('mce-nbsp-wrap');\n    const isMatch = n => {\n      const value$1 = value(n);\n      return isText(n) && isString(value$1) && regExp.test(value$1);\n    };\n    const isContentEditableFalse = node => isHTMLElement(node) && getRaw(node) === 'false';\n    const isChildEditable = (node, currentState) => {\n      if (isHTMLElement(node) && !isWrappedNbsp(node.dom)) {\n        const value = getRaw(node);\n        if (value === 'true') {\n          return true;\n        } else if (value === 'false') {\n          return false;\n        }\n      }\n      return currentState;\n    };\n    const filterEditableDescendants = (scope, predicate, editable) => {\n      let result = [];\n      const dom = scope.dom;\n      const children = map(dom.childNodes, SugarElement.fromDom);\n      const isEditable = node => isWrappedNbsp(node.dom) || !isContentEditableFalse(node);\n      each$1(children, x => {\n        if (editable && isEditable(x) && predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(filterEditableDescendants(x, predicate, isChildEditable(x, editable)));\n      });\n      return result;\n    };\n    const findParentElm = (elm, rootElm) => {\n      while (elm.parentNode) {\n        if (elm.parentNode === rootElm) {\n          return rootElm;\n        }\n        elm = elm.parentNode;\n      }\n      return undefined;\n    };\n    const replaceWithSpans = text => text.replace(regExpGlobal, wrapCharWithSpan);\n\n    const show = (editor, rootElm) => {\n      const dom = editor.dom;\n      const nodeList = filterEditableDescendants(SugarElement.fromDom(rootElm), isMatch, editor.dom.isEditable(rootElm));\n      each$1(nodeList, n => {\n        var _a;\n        const parent = n.dom.parentNode;\n        if (isWrappedNbsp(parent)) {\n          add(SugarElement.fromDom(parent), nbspClass);\n        } else {\n          const withSpans = replaceWithSpans(dom.encode((_a = value(n)) !== null && _a !== void 0 ? _a : ''));\n          const div = dom.create('div', {}, withSpans);\n          let node;\n          while (node = div.lastChild) {\n            dom.insertAfter(node, n.dom);\n          }\n          editor.dom.remove(n.dom);\n        }\n      });\n    };\n    const hide = (editor, rootElm) => {\n      const nodeList = editor.dom.select(selector, rootElm);\n      each$1(nodeList, node => {\n        if (isWrappedNbsp(node)) {\n          remove(SugarElement.fromDom(node), nbspClass);\n        } else {\n          editor.dom.remove(node, true);\n        }\n      });\n    };\n    const toggle = editor => {\n      const body = editor.getBody();\n      const bookmark = editor.selection.getBookmark();\n      let parentNode = findParentElm(editor.selection.getNode(), body);\n      parentNode = parentNode !== undefined ? parentNode : body;\n      hide(editor, parentNode);\n      show(editor, parentNode);\n      editor.selection.moveToBookmark(bookmark);\n    };\n\n    const applyVisualChars = (editor, toggleState) => {\n      fireVisualChars(editor, toggleState.get());\n      const body = editor.getBody();\n      if (toggleState.get() === true) {\n        show(editor, body);\n      } else {\n        hide(editor, body);\n      }\n    };\n    const toggleVisualChars = (editor, toggleState) => {\n      toggleState.set(!toggleState.get());\n      const bookmark = editor.selection.getBookmark();\n      applyVisualChars(editor, toggleState);\n      editor.selection.moveToBookmark(bookmark);\n    };\n\n    const register$2 = (editor, toggleState) => {\n      editor.addCommand('mceVisualChars', () => {\n        toggleVisualChars(editor, toggleState);\n      });\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const register$1 = editor => {\n      const registerOption = editor.options.register;\n      registerOption('visualchars_default_state', {\n        processor: 'boolean',\n        default: false\n      });\n    };\n    const isEnabledByDefault = option('visualchars_default_state');\n\n    const setup$1 = (editor, toggleState) => {\n      editor.on('init', () => {\n        applyVisualChars(editor, toggleState);\n      });\n    };\n\n    const first = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const setup = (editor, toggleState) => {\n      const debouncedToggle = first(() => {\n        toggle(editor);\n      }, 300);\n      editor.on('keydown', e => {\n        if (toggleState.get() === true) {\n          e.keyCode === 13 ? toggle(editor) : debouncedToggle.throttle();\n        }\n      });\n      editor.on('remove', debouncedToggle.cancel);\n    };\n\n    const toggleActiveState = (editor, enabledStated) => api => {\n      api.setActive(enabledStated.get());\n      const editorEventCallback = e => api.setActive(e.state);\n      editor.on('VisualChars', editorEventCallback);\n      return () => editor.off('VisualChars', editorEventCallback);\n    };\n    const register = (editor, toggleState) => {\n      const onAction = () => editor.execCommand('mceVisualChars');\n      editor.ui.registry.addToggleButton('visualchars', {\n        tooltip: 'Show invisible characters',\n        icon: 'visualchars',\n        onAction,\n        onSetup: toggleActiveState(editor, toggleState)\n      });\n      editor.ui.registry.addToggleMenuItem('visualchars', {\n        text: 'Show invisible characters',\n        icon: 'visualchars',\n        onAction,\n        onSetup: toggleActiveState(editor, toggleState)\n      });\n    };\n\n    var Plugin = () => {\n      global.add('visualchars', editor => {\n        register$1(editor);\n        const toggleState = Cell(isEnabledByDefault(editor));\n        register$2(editor, toggleState);\n        register(editor, toggleState);\n        setup(editor, toggleState);\n        setup$1(editor, toggleState);\n        return get$2(toggleState);\n      });\n    };\n\n    Plugin();\n\n})();\n","/**\n * TinyMCE version 6.8.0 (2023-11-22)\n */\n\n(function () {\n    'use strict';\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    const eq = t => a => t === a;\n    const isNull = eq(null);\n\n    const identity = x => {\n      return x;\n    };\n\n    const map = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n\n    const punctuationStr = `[~\\u2116|!-*+-\\\\/:;?@\\\\[-\\`{}\\u00A1\\u00AB\\u00B7\\u00BB\\u00BF;\\u00B7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]`;\n    const regExps = {\n      aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n      midnumlet: `[-'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]`,\n      midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n      midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n      numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n      cr: '\\\\r',\n      lf: '\\\\n',\n      newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n      extend: '[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n      format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n      katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n      extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n      punctuation: punctuationStr\n    };\n    const characterIndices = {\n      ALETTER: 0,\n      MIDNUMLET: 1,\n      MIDLETTER: 2,\n      MIDNUM: 3,\n      NUMERIC: 4,\n      CR: 5,\n      LF: 6,\n      NEWLINE: 7,\n      EXTEND: 8,\n      FORMAT: 9,\n      KATAKANA: 10,\n      EXTENDNUMLET: 11,\n      AT: 12,\n      OTHER: 13\n    };\n    const SETS$1 = [\n      new RegExp(regExps.aletter),\n      new RegExp(regExps.midnumlet),\n      new RegExp(regExps.midletter),\n      new RegExp(regExps.midnum),\n      new RegExp(regExps.numeric),\n      new RegExp(regExps.cr),\n      new RegExp(regExps.lf),\n      new RegExp(regExps.newline),\n      new RegExp(regExps.extend),\n      new RegExp(regExps.format),\n      new RegExp(regExps.katakana),\n      new RegExp(regExps.extendnumlet),\n      new RegExp('@')\n    ];\n    const EMPTY_STRING$1 = '';\n    const PUNCTUATION$1 = new RegExp('^' + regExps.punctuation + '$');\n    const WHITESPACE$1 = /^\\s+$/;\n\n    const SETS = SETS$1;\n    const OTHER = characterIndices.OTHER;\n    const getType = char => {\n      let type = OTHER;\n      const setsLength = SETS.length;\n      for (let j = 0; j < setsLength; ++j) {\n        const set = SETS[j];\n        if (set && set.test(char)) {\n          type = j;\n          break;\n        }\n      }\n      return type;\n    };\n    const memoize = func => {\n      const cache = {};\n      return char => {\n        if (cache[char]) {\n          return cache[char];\n        } else {\n          const result = func(char);\n          cache[char] = result;\n          return result;\n        }\n      };\n    };\n    const classify = characters => {\n      const memoized = memoize(getType);\n      return map(characters, memoized);\n    };\n\n    const isWordBoundary = (map, index) => {\n      const type = map[index];\n      const nextType = map[index + 1];\n      if (index < 0 || index > map.length - 1 && index !== 0) {\n        return false;\n      }\n      if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {\n        return false;\n      }\n      const nextNextType = map[index + 2];\n      if (type === characterIndices.ALETTER && (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextNextType === characterIndices.ALETTER) {\n        return false;\n      }\n      const prevType = map[index - 1];\n      if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextType === characterIndices.ALETTER && prevType === characterIndices.ALETTER) {\n        return false;\n      }\n      if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) && (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {\n        return false;\n      }\n      if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) && nextType === characterIndices.NUMERIC && prevType === characterIndices.NUMERIC) {\n        return false;\n      }\n      if (type === characterIndices.NUMERIC && (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) && nextNextType === characterIndices.NUMERIC) {\n        return false;\n      }\n      if ((type === characterIndices.EXTEND || type === characterIndices.FORMAT) && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA || nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT) || (nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT && (nextNextType === characterIndices.ALETTER || nextNextType === characterIndices.NUMERIC || nextNextType === characterIndices.KATAKANA || nextNextType === characterIndices.EXTEND || nextNextType === characterIndices.FORMAT)) && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTEND || type === characterIndices.FORMAT)) {\n        return false;\n      }\n      if (type === characterIndices.CR && nextType === characterIndices.LF) {\n        return false;\n      }\n      if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {\n        return true;\n      }\n      if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {\n        return true;\n      }\n      if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {\n        return false;\n      }\n      if (nextType === characterIndices.EXTENDNUMLET && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTENDNUMLET)) {\n        return false;\n      }\n      if (type === characterIndices.EXTENDNUMLET && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA)) {\n        return false;\n      }\n      if (type === characterIndices.AT) {\n        return false;\n      }\n      return true;\n    };\n\n    const EMPTY_STRING = EMPTY_STRING$1;\n    const WHITESPACE = WHITESPACE$1;\n    const PUNCTUATION = PUNCTUATION$1;\n    const isProtocol = str => str === 'http' || str === 'https';\n    const findWordEnd = (characters, startIndex) => {\n      let i;\n      for (i = startIndex; i < characters.length; i++) {\n        if (WHITESPACE.test(characters[i])) {\n          break;\n        }\n      }\n      return i;\n    };\n    const findUrlEnd = (characters, startIndex) => {\n      const endIndex = findWordEnd(characters, startIndex + 1);\n      const peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING);\n      return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;\n    };\n    const findWordsWithIndices = (chars, sChars, characterMap, options) => {\n      const words = [];\n      const indices = [];\n      let word = [];\n      for (let i = 0; i < characterMap.length; ++i) {\n        word.push(chars[i]);\n        if (isWordBoundary(characterMap, i)) {\n          const ch = sChars[i];\n          if ((options.includeWhitespace || !WHITESPACE.test(ch)) && (options.includePunctuation || !PUNCTUATION.test(ch))) {\n            const startOfWord = i - word.length + 1;\n            const endOfWord = i + 1;\n            const str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING);\n            if (isProtocol(str)) {\n              const endOfUrl = findUrlEnd(sChars, i);\n              const url = chars.slice(endOfWord, endOfUrl);\n              Array.prototype.push.apply(word, url);\n              i = endOfUrl;\n            }\n            words.push(word);\n            indices.push({\n              start: startOfWord,\n              end: endOfWord\n            });\n          }\n          word = [];\n        }\n      }\n      return {\n        words,\n        indices\n      };\n    };\n    const getDefaultOptions = () => ({\n      includeWhitespace: false,\n      includePunctuation: false\n    });\n    const getWordsWithIndices = (chars, extract, options) => {\n      options = {\n        ...getDefaultOptions(),\n        ...options\n      };\n      const extractedChars = map(chars, extract);\n      const characterMap = classify(extractedChars);\n      return findWordsWithIndices(chars, extractedChars, characterMap, options);\n    };\n    const getWords$1 = (chars, extract, options) => getWordsWithIndices(chars, extract, options).words;\n\n    const getWords = getWords$1;\n\n    const removeZwsp$1 = s => s.replace(/\\uFEFF/g, '');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n    const getText = (node, schema) => {\n      const blockElements = schema.getBlockElements();\n      const voidElements = schema.getVoidElements();\n      const isNewline = node => blockElements[node.nodeName] || voidElements[node.nodeName];\n      const textBlocks = [];\n      let txt = '';\n      const treeWalker = new global$1(node, node);\n      let tempNode;\n      while (tempNode = treeWalker.next()) {\n        if (tempNode.nodeType === 3) {\n          txt += removeZwsp$1(tempNode.data);\n        } else if (isNewline(tempNode) && txt.length) {\n          textBlocks.push(txt);\n          txt = '';\n        }\n      }\n      if (txt.length) {\n        textBlocks.push(txt);\n      }\n      return textBlocks;\n    };\n\n    const removeZwsp = text => text.replace(/\\u200B/g, '');\n    const strLen = str => str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n    const countWords = (node, schema) => {\n      const text = removeZwsp(getText(node, schema).join('\\n'));\n      return getWords(text.split(''), identity).length;\n    };\n    const countCharacters = (node, schema) => {\n      const text = getText(node, schema).join('');\n      return strLen(text);\n    };\n    const countCharactersWithoutSpaces = (node, schema) => {\n      const text = getText(node, schema).join('').replace(/\\s/g, '');\n      return strLen(text);\n    };\n\n    const createBodyCounter = (editor, count) => () => count(editor.getBody(), editor.schema);\n    const createSelectionCounter = (editor, count) => () => count(editor.selection.getRng().cloneContents(), editor.schema);\n    const createBodyWordCounter = editor => createBodyCounter(editor, countWords);\n    const get = editor => ({\n      body: {\n        getWordCount: createBodyWordCounter(editor),\n        getCharacterCount: createBodyCounter(editor, countCharacters),\n        getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)\n      },\n      selection: {\n        getWordCount: createSelectionCounter(editor, countWords),\n        getCharacterCount: createSelectionCounter(editor, countCharacters),\n        getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)\n      },\n      getCount: createBodyWordCounter(editor)\n    });\n\n    const open = (editor, api) => {\n      editor.windowManager.open({\n        title: 'Word Count',\n        body: {\n          type: 'panel',\n          items: [{\n              type: 'table',\n              header: [\n                'Count',\n                'Document',\n                'Selection'\n              ],\n              cells: [\n                [\n                  'Words',\n                  String(api.body.getWordCount()),\n                  String(api.selection.getWordCount())\n                ],\n                [\n                  'Characters (no spaces)',\n                  String(api.body.getCharacterCountWithoutSpaces()),\n                  String(api.selection.getCharacterCountWithoutSpaces())\n                ],\n                [\n                  'Characters',\n                  String(api.body.getCharacterCount()),\n                  String(api.selection.getCharacterCount())\n                ]\n              ]\n            }]\n        },\n        buttons: [{\n            type: 'cancel',\n            name: 'close',\n            text: 'Close',\n            primary: true\n          }]\n      });\n    };\n\n    const register$1 = (editor, api) => {\n      editor.addCommand('mceWordCount', () => open(editor, api));\n    };\n\n    const first = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n    const fireWordCountUpdate = (editor, api) => {\n      editor.dispatch('wordCountUpdate', {\n        wordCount: {\n          words: api.body.getWordCount(),\n          characters: api.body.getCharacterCount(),\n          charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()\n        }\n      });\n    };\n\n    const updateCount = (editor, api) => {\n      fireWordCountUpdate(editor, api);\n    };\n    const setup = (editor, api, delay) => {\n      const debouncedUpdate = first(() => updateCount(editor, api), delay);\n      editor.on('init', () => {\n        updateCount(editor, api);\n        global.setEditorTimeout(editor, () => {\n          editor.on('SetContent BeforeAddUndo Undo Redo ViewUpdate keyup', debouncedUpdate.throttle);\n        }, 0);\n        editor.on('remove', debouncedUpdate.cancel);\n      });\n    };\n\n    const register = editor => {\n      const onAction = () => editor.execCommand('mceWordCount');\n      editor.ui.registry.addButton('wordcount', {\n        tooltip: 'Word count',\n        icon: 'character-count',\n        onAction\n      });\n      editor.ui.registry.addMenuItem('wordcount', {\n        text: 'Word count',\n        icon: 'character-count',\n        onAction\n      });\n    };\n\n    var Plugin = (delay = 300) => {\n      global$2.add('wordcount', editor => {\n        const api = get(editor);\n        register$1(editor, api);\n        register(editor);\n        setup(editor, api, delay);\n        return api;\n      });\n    };\n\n    Plugin();\n\n})();\n","import {\n  computed,\n  defineComponent,\n  h,\n  isVue3,\n  onMounted,\n  onUnmounted,\n  ref,\n  unref,\n  watch,\n  // vShow, // 不支持 Vue 2\n  // withDirectives, // 不支持 Vue 2\n} from 'vue-demi'\nimport { conclude } from 'vue-global-config'\nimport { v4 as uuidv4 } from 'uuid'\nimport { debounce } from 'lodash-es'\n\nimport tinymce from 'tinymce/tinymce'\nimport type { Editor } from 'tinymce/tinymce'\nimport { PascalCasedName as name } from '../package.json'\nimport { globalProps } from './install'\n\n// models\nimport 'tinymce/models/dom'\n\n// plugins\nimport 'tinymce/plugins/advlist'\nimport 'tinymce/plugins/anchor'\nimport 'tinymce/plugins/autolink'\n\n// 该插件在官方的 full-featured 示例中被排除，故默认关闭\n// import 'tinymce/plugins/autoresize' //\nimport 'tinymce/plugins/autosave'\nimport 'tinymce/plugins/charmap'\n\n// 该插件只有开发者会用到，故默认关闭\n// import 'tinymce/plugins/code'\n// 该插件只有开发者会用到，故默认关闭\n// import 'tinymce/plugins/codesample'\nimport 'tinymce/plugins/directionality'\nimport 'tinymce/plugins/emoticons'\nimport 'tinymce/plugins/emoticons/js/emojis.min'\nimport 'tinymce/plugins/fullscreen'\nimport 'tinymce/plugins/help'\nimport 'tinymce/plugins/image'\nimport 'tinymce/plugins/importcss'\nimport 'tinymce/plugins/insertdatetime'\nimport 'tinymce/plugins/link'\nimport 'tinymce/plugins/lists'\nimport 'tinymce/plugins/media'\nimport 'tinymce/plugins/nonbreaking'\nimport 'tinymce/plugins/pagebreak'\nimport 'tinymce/plugins/preview'\nimport 'tinymce/plugins/quickbars'\nimport 'tinymce/plugins/save'\nimport 'tinymce/plugins/searchreplace'\nimport 'tinymce/plugins/table'\n\n// 该插件需要用户进一步的配置，故默认关闭\n// import 'tinymce/plugins/template'\nimport 'tinymce/plugins/visualblocks'\nimport 'tinymce/plugins/visualchars'\nimport 'tinymce/plugins/wordcount'\n\n// const isSmallScreen = window.matchMedia('(max-width: 1023.5px)').matches\n\nconst model = {\n  prop: isVue3 ? 'modelValue' : 'value',\n  event: isVue3 ? 'update:modelValue' : 'input',\n}\n\nexport default defineComponent({\n  name,\n  props: {\n    [model.prop]: String,\n    disabled: {\n      type: Boolean,\n      default: undefined,\n    },\n    outputFormat: {},\n    options: {},\n  },\n  emits: [model.event, 'init'],\n  setup(props, { emit, expose }) {\n    const loading = ref(true)\n    const id = ref(`minimce-${uuidv4()}`)\n    const preventSettingContent = ref(false)\n    const preventUpdatingModelValue = ref(false)\n    /**\n     * props & attrs\n     */\n    const Disabled = computed(() =>\n      conclude([props.disabled, globalProps.disabled], {\n        type: Boolean,\n      }),\n    )\n    const OutputFormat = computed(() =>\n      conclude([props.outputFormat, globalProps.outputFormat], {\n        type: String,\n      }),\n    )\n    const Options = computed(() =>\n      conclude(\n        [\n          props.options,\n          globalProps.options,\n          {\n            selector: `#${id.value}`,\n            /**\n             * 默认开启所有免费插件\n             * https://www.tiny.cloud/docs/tinymce/6/full-featured-open-source-demo/\n             */\n            plugins:\n              'preview importcss searchreplace autolink autosave save directionality visualblocks visualchars fullscreen image link media table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons',\n            menubar: 'file edit view insert format tools table help',\n            toolbar:\n              'undo redo | bold italic underline strikethrough | fontfamily fontsize blocks | alignleft aligncenter alignright alignjustify | outdent indent |  numlist bullist | forecolor backcolor removeformat | pagebreak | charmap emoticons | fullscreen  preview save print | insertfile image media template link anchor codesample | ltr rtl',\n            quickbars_selection_toolbar:\n              'bold italic | quicklink h2 h3 blockquote quickimage quicktable',\n            contextmenu: 'link image table',\n            branding: false,\n            promotion: false,\n            quickbars_insert_toolbar: false,\n            // 默认屏蔽 iframe 原因：\n            // - 允许用户引入未知的 iframe 存在执行未知脚本等安全隐患\n            // - 小程序侧不支持 iframe\n            // - 小程序侧 web-view 中使用 iframe 需要配置业务域名\n            // - 给微信公众号 H5 侧带来授权问题\n            invalid_elements: 'iframe,frame',\n\n            // note that skin and content_css is disabled to avoid the normal\n            // loading process and is instead loaded as a string via content_style\n            skin: false,\n            content_css: false,\n            // skin: useDarkMode ? 'oxide-dark' : 'oxide',\n            // content_css: useDarkMode ? 'dark' : 'default',\n\n            autosave_ask_before_unload: false, // 改动后刷新，不再弹 alert\n            autosave_interval: '30s',\n            autosave_prefix: '{path}{query}-{id}-',\n            autosave_restore_when_empty: false,\n            autosave_retention: '2m',\n            // importcss_append: true,\n            // height: 500,\n            relative_urls: false,\n            convert_urls: false,\n            image_advtab: true,\n            image_caption: true,\n            // 开启时，出现两个 bug：1. 部分菜单项失效；2. 拖拉拽调整视频大小会错位（该问题在 v6.0 仍在存在）\n            media_live_embeds: false,\n            toolbar_mode: 'sliding',\n            // toolbar_sticky: true,\n            // toolbar_sticky_offset: isSmallScreen ? 102 : 108,\n            // extended_valid_elements: 'img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|referrerpolicy=no-referrer]',\n            init_instance_callback: (editor: Editor) => {\n              watch(\n                Disabled,\n                (n: boolean) => {\n                  editor.mode.set(n ? 'readonly' : 'design')\n                },\n                {\n                  immediate: true,\n                },\n              )\n\n              // 监听手动输入，更新绑定值\n              const onContentChange = debounce(() => {\n                if (preventUpdatingModelValue.value) {\n                  preventUpdatingModelValue.value = false\n                  return\n                }\n                // 更新绑定值会触发编程式输入的监听，需要避免\n                preventSettingContent.value = true\n                const newContent = editor.getContent({ format: OutputFormat.value })\n                // console.log('手动输入:', newContent)\n                emit(model.event, newContent)\n              }, 100)\n\n              /**\n               * 事件列表: https://www.tiny.cloud/docs/tinymce/6/events/\n               *\n               * SetContent 事件\n               *   触发：Undo Redo paste drop insertContent resetContent setContent\n               *   不触发：input\n               *\n               * Change 事件\n               *   触发：blur Undo paste drop insertContent\n               *   不触发：input Redo setContent resetContent\n               *\n               * 全小写表示原生事件，editor.on 不区分大小写\n               *\n               * 顺序：先监听手动输入，再监听编程式输入\n               *\n               * tinymce-vue 使用的是: Change input Redo Undo\n               *\n               * input 监听不到加粗，所以需要 Change\n               */\n              editor.on('Change input Redo Undo SetContent', onContentChange)\n\n              // 监听编程式输入，更新文本内容\n              watch(\n                () => props[model.prop],\n                (newModelValue) => {\n                  if (preventSettingContent.value) {\n                    preventSettingContent.value = false\n                    return\n                  }\n                  // 更新文本内容会触发手动输入的监听，需要避免\n                  preventUpdatingModelValue.value = true\n                  // 参数必须为 string 类型，否则无效\n                  // console.log('编程式输入:', newModelValue)\n                  editor.setContent((newModelValue || '') as string)\n                },\n                {\n                  immediate: true,\n                },\n              )\n\n              loading.value = false\n            },\n          },\n        ],\n        {\n          mergeFunction: (previousValue: (...args: any) => unknown, currentValue: (...args: any) => unknown) => (...args: any) => {\n            previousValue(...args)\n            currentValue(...args)\n          },\n          type: Object,\n        },\n      ),\n    )\n\n    onUnmounted(() => {\n      tinymce.get(id.value)?.destroy()\n    })\n\n    onMounted(() => {\n      const el = document.querySelector(`#${id.value}`) as Element\n      const intersectionObserver = new IntersectionObserver((entries) => {\n        if (entries[0].isIntersecting) {\n          // el is visible\n          intersectionObserver.unobserve(el) // tinymce.init will trigger invisible\n          tinymce.init(Options.value)\n        } else {\n          // el is invisible\n        }\n      })\n      // Asynchronous call\n      intersectionObserver.observe(el)\n    })\n\n    expose?.({ id })\n\n    // 在 Vue 2.6 中，return 出去的数据不需要 expose\n    return {\n      id,\n      loading,\n      // height: (Options.value.height ?? '400') + 'px',\n    }\n  },\n  render() {\n    // this 为组件实例\n    // this.id 在 Vue 2.6 中为 id 的 ref\n    // 参数 ctx 在 Vue 3 中为组件实例，在 Vue 2 中为渲染函数 h\n    // console.log('this.id: ', this.id)\n    // console.log('ctx: ', ctx)\n    return isVue3\n      ? h('textarea', { id: this.id })\n      : h('textarea', {\n        attrs: {\n          id: unref(this.id),\n        },\n        on: {\n          input: (value?: string | null) => {\n            this.$emit(model.event, value)\n          },\n        },\n      })\n  },\n})\n","import { resolveConfig } from 'vue-global-config'\nimport type { App } from 'vue-demi'\nimport Component from './Component'\n\nconst globalProps: Record<keyof any, any> = {}\n\ntype SFCWithInstall = typeof Component & {\n  install: (app: App, options?: Record<keyof any, any>) => void\n}\n\nfunction withInstall(sfc: typeof Component): SFCWithInstall {\n  (sfc as SFCWithInstall).install = (app: App, options = {}): void => {\n    const { props } = resolveConfig(options, Component.props)\n    Object.assign(globalProps, props)\n    app.component(sfc.name as string, sfc as object)\n  }\n\n  return sfc as SFCWithInstall\n}\n\nexport { globalProps }\nexport default withInstall(Component)\n"],"names":["Dt","at","Nt","Ut","m","Gt","O","it","Bt","Ht","U","Wt","e","t","r","n","a","Kt","zt","qt","Xt","Yt","je","j","w","Zt","be","Jt","Qt","$","Vt","Le","xe","ot","P","_e","kt","er","tr","rr","ve","nr","oe","Me","ar","ir","or","L","sr","fr","ur","cr","lr","pr","gr","dr","hr","x","yr","ce","Re","br","_r","vr","st","Tr","$r","Ar","Or","wr","mr","Q","Pr","Sr","Er","Ir","Cr","jr","Lr","Te","te","z","xr","Mr","ft","F","i","o","s","f","Fe","Rr","Fr","Dr","$e","re","Nr","ut","Ur","Ae","Gr","Br","De","ct","Hr","Wr","Kr","V","zr","lt","Ne","qr","Ue","Xr","Yr","B","Zr","Jr","Qr","Vr","kr","en","tn","rn","nn","an","on","sn","fn","un","cn","ln","pn","gn","dn","hn","yn","bn","_n","vn","h","Tn","Oe","pt","G","$n","se","An","R","Ge","On","we","wn","mn","gt","c","dt","Pn","Sn","En","In","Cn","q","jn","Ln","xn","Mn","D","Rn","Fn","Dn","Nn","me","Un","H","Gn","Bn","Hn","Wn","Kn","zn","qn","Xn","Yn","Zn","Jn","C","Qn","ne","Vn","kn","ea","ta","ra","na","S","aa","W","ia","oa","ae","sa","fa","ua","ca","E","la","Pe","pa","ga","da","ha","ya","ba","_a","ht","va","ie","yt","Ta","bt","$a","Se","Aa","Oa","wa","_t","ma","Pa","vt","Sa","Ea","Ia","Ca","ja","La","A","xa","Ma","Tt","Be","Ra","He","We","$t","Fa","At","Da","Na","Ke","Ua","Ee","Ga","Ba","Ha","Ot","Wa","wt","le","Ka","za","pe","qa","ge","Xa","de","ze","Ya","qe","Xe","Ye","Ze","Za","Ja","Qa","Va","ka","I","K","ei","ti","ri","ni","k","Ie","ai","ii","oi","Je","Qe","si","mt","fi","ui","ci","li","pi","gi","di","hi","yi","bi","_i","vi","Ti","$i","Ai","Oi","wi","mi","Pi","Si","Pt","Ei","Ii","Ve","Ci","ji","Li","xi","ke","Mi","Ri","Fi","Di","Ni","St","Ui","Gi","Bi","Hi","Et","Wi","Ki","zi","It","qi","Xi","Yi","Zi","Ji","Qi","Vi","ki","eo","to","ro","no","ao","io","oo","so","d","J","l","p","u","y","_","g","b","v","fo","uo","co","lo","po","go","ee","ho","yo","bo","_o","Ct","T","vo","To","$o","Ao","Oo","wo","mo","Po","So","Eo","Io","Co","jo","Lo","xo","et","fe","Mo","Ro","Fo","Do","No","X","N","M","Uo","tt","rt","Y","Go","nt","Bo","Ce","Ho","Wo","Ko","jt","zo","Lt","qo","Xo","Yo","Zo","Jo","Qo","Vo","ko","es","ts","rs","ns","as","xt","is","he","os","ye","ss","fs","Mt","us","cs","ls","ps","gs","ds","hs","ys","Z","bs","Rt","_s","vs","Ts","$s","As","Os","ws","ms","Ps","Ss","Es","ue","xs","Ft","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","arr","offset","randomUUID","native","v4","options","buf","rnds","freeGlobal","freeGlobal$1","freeSelf","root","root$1","Symbol","Symbol$2","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","value","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","reWhitespace","trimmedEndIndex","string","index","reTrimStart","baseTrim","isObject","type","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","now","now$1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","typeOf$1","isEquatableType","sort$1","compareFn","clone","contramap","eqa","eq$2","tripleEq","eqString","eqArray","len","eqSortedArray","eqRecord","kx","ky","eqAny","tx","ty","getPrototypeOf$2","hasProto","constructor","predicate","typeOf","proto","isType$1","isSimpleType","eq$1","is$4","isString","isPlainObject","isArray$1","isNull","isBoolean","isUndefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","noop","compose","fb","compose1","fbc","fab","constant","identity","tripleEquals","curry","initialArgs","restArgs","all","not","die","msg","apply$1","call","never","always","Optional","onNone","onSome","mapper","binder","replacement","thunk","message","worker","nativeSlice","nativeIndexOf","nativePush","rawIndexOf","indexOf$1","contains$2","exists","map$3","each$e","eachr","partition$2","pass","fail","filter$5","foldr","acc","foldl","findUntil$1","until","find$2","findIndex$2","flatten","bind$3","forall","reverse","difference","a1","a2","mapToObject","sort","comparator","copy","get$b","head","last$3","from","findMap","unique$1","isDuplicated","keys","hasOwnProperty$1","each$d","obj","props","map$2","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","bifilter","filter$4","mapToArray","name","values","get$a","key","has$2","hasNonNullableKey","equal$1","eq","stringArray","isArrayLike","isArray","toArray$1","array","each$c","cb","map$1","callback","out","item","filter$3","indexOf","reduce","collection","iteratee","accumulator","findIndex$1","last$2","cached","called","DeviceType","browser","userAgent","mediaMatch","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","firstMatch","regexes","find$1","agent","group","nu$3","detect$5","versionRegexes","cleanedAgent","unknown$2","major","minor","Version","detectBrowser$1","browsers","userAgentData","uaBrand","lcBrand","info","detect$4","candidates","candidate","detectBrowser","version","detectOs","oses","removeFromStart","str","numChars","checkRange","substr","start","removeLeading","prefix","startsWith","contains$1","end","idx","endsWith","suffix","blank","trim$4","lTrim","rTrim","isNotEmpty","isEmpty$3","repeat","count","toInt","radix","num","normalVersionRegex","checkContains","target","uastring","PlatformInfo","edge","chromium","opera","firefox","safari","unknown$1","nu$2","current","isBrowser","Browser","windows","ios","android","linux","macos","solaris","freebsd","chromeos","unknown","nu$1","isOS","OperatingSystem","PlatformDetection","userAgentDataOpt","deviceType","query","platform$4","detect$2","platform$3","browser$3","os$1","windowsPhone","Env","whiteSpaceRegExp$1","trim$3","is$3","makeMap$4","items","delim","map","resolvedItems","extend$3","exts","ext","walk$4","Tools","path","url","cacheSuffix","is$2","lhs","rhs","left","equals","lift2","cat","push","ob","lift3","oc","someIf","Global","parts","scope","resolve$2","unsafe","getOrDie","actual","getPrototypeOf$1","sandHTMLElement","isPrototypeOf","COMMENT","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","element","type$1","isType","isComment$1","isHTMLElement$1","isElement$7","isText$b","isDocument$2","isDocumentFragment$1","isTag","rawSet","dom","set$3","setAll$1","attrs","get$9","getOpt","has$1","remove$a","hasNone","clone$4","attr","read$4","add$4","id","nu","remove$9","supports","get$8","add$3","clazz","remove$8","toggle$2","add$2","cleanClass","remove$7","toggle$1","has","fromHtml$1","html","div","fromDom$2","fromTag","node","fromText","text","SugarElement","docElm","toArray","recurse","cur","is$1","selector","elem","bypassSelector","base","one","e1","e2","contains","d1","d2","owner$1","documentOrOwner","dos","documentElement","defaultView","parent","parentElement","parents$1","isRoot","stop","ret","rawParent","siblings","filterSelf","elements","children$1","prevSibling","nextSibling","prevSiblings","nextSiblings","child$1","firstChild","lastChild","childNodesCount","hasChildNodes","getHead","doc","isShadowRoot","supported","isSupported$1","getRootNode","getStyleContainer","getContentContainer","getShadowRoot","getShadowHost","getOriginalEventTarget","event","el","isOpenShadowHost","composedPath","inBody","ClosestOrAncestor","ancestor","ancestor$4","closest$4","test","sibling$1","child","descendant$2","descend","res","ancestor$3","descendant$1","closest$3","closest$2","isEditable$2","assumeEditable","editable","getRaw$1","isSupported","internalSet","property","internalRemove","set$2","setAll","css","get$7","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","remove$6","reflow","before$3","marker","after$4","append$1","prepend","wrap$2","wrapper","after$3","append","empty","rogue","remove$5","unwrap","children","fromHtml","fromDom$1","nodes","get$6","set$1","content","docDom","fragment","contentElements","getOuter","container","mkEvent","prevent","kill","fromRawEvent","rawEvent","handle$1","filter","handler","useCapture","wrapped","unbind","bind$2","top","SugarPosition","boxPosition","box","firstDefinedOrZero","absolute","body","win","scrollTop","scrollLeft","clientTop","clientLeft","viewport","get$5","_DOC","intoView","alignToTop","get$4","_win","bounds","width","height","getBounds","scroll","visualViewport","descendants$1","descendants","ancestor$2","DomTreeWalker","startNode","rootNode","shallow","startName","siblingName","sibling","isNodeType","isRestrictedNode","isElement$6","isHTMLElement","isSVGElement","matchNodeName","lowerCasedName","matchNodeNames","names","lowerCasedNames","nodeName","matchStyleValues","computed","hasAttribute","attrName","hasAttributeValue","attrValue","isBogus$2","isBogusAll$1","isTable$2","hasContentEditableState","isTextareaOrInput","isText$a","isCData","isPi","isComment","isDocument$1","isDocumentFragment","isBr$6","isImg","isContentEditableTrue$3","isContentEditableFalse$b","isTableCell$3","isTableCellOrCaption","isMedia$2","isListItem$2","isDetails","isSummary$1","zeroWidth","nbsp","isZwsp$2","char","removeZwsp","api$1","get","getOption","get$3","set","tableCells","tableSections","textBlocks","listItems$1","lists","wsElements","lazyLookup","lookup","isTable$1","isBr$5","isTextBlock$2","isList","isListItem$1","isTableSection","isTableCell$2","isWsPreserveElement","getLastChildren$1","elm","rawNode","removeTrailingBr","allBrs","brs","createPaddingBr","fillWithPaddingBr","trimBlockTrailingBr","schema","lastChildPrevSibling","ZWSP$1","isZwsp$1","trim$2","insert$5","editor","isElement$5","isText$9","isCaretContainerBlock$1","isCaretContainerInline","isCaretContainer$2","hasContent","insertInline$1","before","textNode","parentNode","endsWithCaretContainer$1","startsWithCaretContainer$1","isBeforeInline","pos","isAfterInline","insertBlock","blockName","blockNode","trimBogusBr","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","range","isContentEditableTrue$2","isContentEditableFalse$a","isBr$4","isText$8","isInvalidTextElement","isAtomicInline","isTable","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isInEditable","tempNode","isAtomicContentEditableFalse","isAtomic$1","isEditableCaretCandidate$1","whiteSpaceRegExp","isWhitespaceText","isZwsp","isCollapsibleWhitespace$1","isNewLineChar","isNewline","normalize$4","tabSpaces","isStartOfContent","isEndOfContent","tabSpace","normalizedText","hasWhitespacePreserveParent","rootElement","isWhitespace$1","isNamedAnchor","isContent$1","isBookmark","isBogus$1","isBogusAll","hasNonEditableParent","isEmptyNode","targetNode","skipBogus","brCount","walker","isEmpty$2","isNonHtmlElementRootName","isNonHtmlElementRoot","toScopeType","namespaceElements","createNamespaceTracker","scopes","peek","currentScope","transparentBlockAttr","elementNames","makeSelectorFromSchemaMap","updateTransparent","blocksSelector","transparent","updateBlockStateOnChildren","transparentSelector","trimEdge","leftSide","childPropertyName","split$2","parentElm","splitElm","beforeFragment","afterFragment","splitInvalidChildren","transparentBlocks","blocksElements","isBlock","transparentBlock","parentBlock","invalidChildren","stateScope","unwrapInvalidChildren","isTransparentBlock","block","isTransparentInline","updateChildren","updateElement","isTransparentElement","updateCaret","caretParent","parents","hasBlockAttr","isTransparentElementName","isTransparentAstBlock","browser$2","firstElement","getTableCaptionDeltaY","caption","bodyTop","captionTop","captionHeight","hasChild","getPos","rootElm","offsetParent","castOffsetParent","StyleSheetLoader","documentOrShadowRoot","settings","idCount","loadedStates","edos","_setReferrerPolicy","referrerPolicy","_setContentCssCors","contentCssCors","addStyle","removeStyle","styleContainer","getOrCreateState","load","success","failure","link","urlWithSuffix","state","resolve","callbacks","status","passed","failed","linkElem","loadRawCss","styleElem","loadAll","urls","results","unload","instance","referenceElement","rootDom","sl","isSpan","isInlineContent","surroundedByInlineContent","prev","next","prevIsInline","nextIsInline","isBookmarkNode$2","isKeepTextNode","isKeepElement","isDocument","trimNode","currentChildren","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","baseEntities","reverseEntities","nativeDecode","buildEntitiesLookup","itemList","chr","entity","namedEntities","encodeRaw","encodeAllRaw","encodeNumeric","encodeNamed","entities","resolveEntities","Entities","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","numeric","split$1","patternToRegExp","parseCustomElementsRules","customElementRegExp","rule","matches","inline","cloneName","getElementSetsAsStrings","globalAttributes","blockContent","phrasingContent","transparentContent","flowContent","makeSchema","addElement","attributes","add","childNames","allAttributes","addAttrs","schemaItem","prefixToOperation","parseValidChildrenRules","childRuleRegExp","operation","validChildren","parseValidElementsAttrDataIntoElement","attrData","targetElement","attrRuleRegExp","hasPatternsRegExp","attributesOrder","attrType","attrPrefix","attrPattern","cloneAttributesInto","parseValidElementsRules","globalElement","validElements","elementRuleRegExp","elementName","outputName","attrsPrefix","mapCache","makeMap$2","each$b","extend$2","explode$2","createMap","defaultValue","extendWith","getTextRootBlockElements","compileElementMap","mode","styles","Schema","patternElements","customElementsMap","specialElements","createLookupTable","option","newValue","schemaType","schemaItems","validStyles","invalidStyles","validClasses","whitespaceElementsMap","selfClosingElementsMap","voidElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","headings","textBlockElementsMap","blockElementsMap","textInlineElementsMap","transparentElementsMap","wrapBlockElementsMap","addValidElements","aliasName","patternElement","setValidElements","addCustomElements","customElements","customRule","elmName","addValidChildren","getElementRule","_val","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getBlockElements","getTextBlockElements","getTextInlineElements","getVoidElements","getSelfClosingElements","getNonEmptyElements","getMoveCaretBeforeOnEnterElements","getWhitespaceElements","getTransparentElements","getWrapBlockElements","getSpecialElements","isValidChild","isValid","attrPatterns","isInline","isWrapper","getCustomElements","hexColour","normalizeHex","hex","toHex","component","fromRgba","rgbaColour","rgbRegex","rgbaRegex","red","green","blue","alpha","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","toString","rgba","rgbaToHexString","color","Styles","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","self","isEncoded","urlConverter","urlConverterScope","compress","noJoin","right","bottom","canCompress","compress2","encode","decode","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","match","url2","url3","str2","scriptUrl","serializeStyles","elemName","validStyleList","styleList","styleMap","deprecated","isNativeEvent","hasIsDefaultPrevented","needsNormalizing","clone$3","originalEvent","data","keyArg","normalize$3","fallbackTarget","eventExpandoPrefix","mouseEventRe","addEvent","capture","removeEvent","isMouseEvent","fix","eventDoc","mouseEvent","bindOnReady","eventUtils","isDocReady","readyHandler","EventUtils","callbackList","defaultNativeHandler","evt","namesList","nativeHandler","fakeName","eventMap","newCallbackList","each$a","grep","internalStyleName","numericalCssMap","legacySetAttribute","camelCaseToHyphens","findNodeIndex","normalized","lastNodeType","nodeType","updateInternalStyleAttr","rawValue","convertStyleToString","cssValue","cssName","applyStyle$1","$elm","normalizedName","setupAttrHooks","getContext","keepValues","keepUrlHook","sugarElm","internalName","attrHooks","DOMUtils","addedStyles","files","counter","stdMode","boxModel","styleSheetLoader","boundEvents","events","_get","getAttrib","defaultVal","hook","getAttribs","setAttrib","run","val","originalValue","deep","getRoot","getViewPort","argWin","vp","getPos$1","setStyle","setStyles","stylesArg","getStyle","getSize","getRect","size","elms","getParents","collect","resolvedRoot","selectorVal","getParent","_findSib","getNext","getPrev","isParentNode","select","_b","context","setAttribs","setHTML","create","newElm","createHTML","outHtml","createFragment","frag","remove","keepChildren","$node","removeAllAttribs","parseStyle","cssText","serializeStyle","styleElm","loadCSS","toggleClass","cls","classes","addClass","removeClass","hasClass","show","hide","isHidden","uniqueId","getOuterHTML","setOuterHTML","insertAfter","reference","referenceNode","replace","oldElm","replacee","rename","attrNode","findCommonAncestor","isNonEmptyElement","isEmpty","whitespaceElements","nonEmptyElements","bogusVal","createRng","split","replacementElm","bind","rv","boundTarget","boundName","boundFunc","dispatch","fire","getContentEditable","contentEditable","DOM$b","QUEUED","LOADING","LOADED","FAILED","ScriptLoader","reject","cleanup","done","error","queue","scripts","execCallbacks","processResults","failures","reason","processQueue","nextQueuedItem","uniqueScripts","Cell","initial","firstIndex","isRaw","isTokenised","currentCode","getLanguageData","I18n","newCode","code","langData","lcNames","translation","lcName","getLangData","textStr","removeContext","substitued","$1","$2","dir","AddOnManager","_listeners","runListeners","matchedListeners","listener","isLoaded","isAdded","loadLanguagePack","languages","language","wrappedLanguages","requireLangPack","waitFor","addOn","createUrl","baseUrl","dep","addOnUrl","urlString","singleton","doRevoke","subject","revoke","repeatable","delay","intervalId","functionToRepeat","value$2","first$1","rate","timer","last$1","annotation","dataAnnotation","dataAnnotationId","dataAnnotationActive","dataAnnotationClasses","dataAnnotationAttributes","isRoot$1","identify","annotationName","newStart","uid","findMarkers","isAnnotation","isBogusElement","descendant","findAll","markers","directory","nodesAlready","setup$y","registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","toggleActiveAttr","onNodeChange","annotations","setup$x","dataAnnotation$1","identifyParserNode","removeDirectAnnotation","customAttrNames","customClasses","classList","newClassList","create$c","unique","generate$1","random","remove$4","clone$2","original","isDeep","shallow$1","deep$1","shallowAs","mutate","TextWalker","isBoundary","walk","direction","TextSeeker","isBlockBoundary","process","newOffset","round$2","clone$1","rect","collapse","toStart","isEqual","rect1","rect2","isValidOverflow","overflowY","isAbove$1","halfHeight","isBelow$1","containsXY","clientX","clientY","boundingClientRectFromRects","rects","prevRect","distanceToRectEdgeFromXY","cx","cy","overlapY","r1","r2","clamp$2","min","max","getSelectedNode","startContainer","startOffset","getNode$1","childNodes","safeOffset","getNodeUnsafe","extendingChars","isExtendingChar","ch","and","isElement$4","isCaretCandidate$2","isBlock$2","isFloated","isValidElementCaretCandidate","isNotPre","isText$7","isBr$3","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","sc","ec","newRng","getBoundingClientRect$1","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","isAtStart","isAtEnd","toRange","getClientRects","isVisible","getNode","pos1","pos2","trimEmptyTextNode$1","insertNode","insertFragment","rangeInsertNode","isText$6","isBogus","nodeIndex","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","parentsUntil$1","create$b","outputOffset","resolvePathItem","findTextPosition","targetOffset","dataLen","resolve$1","paths","nodeOffset","isContentEditableFalse$9","getNormalizedTextOffset$1","trim","trimmedOffset","getPoint","point","after","getLocation","selection","forward","fakeCaret","findIndex","moveEndPoint$1","normalizeTableCellSelection","findSibling","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","collapsed","rng2","endBookmarkNode","startBookmarkNode","getBookmark$2","getUndoBookmark","value$1","applyHelper","constHelper","outputHelper","output","_onError","onValue","Result","onError","_onValue","optional","err","Adt","cases","constructors","adt","acase","keys$1","argLength","foldArgs","branches","branchKeys","reqKey","label","partition$1","errors","isInlinePattern","pattern","isBlockPattern","normalizePattern","formatOrCmd","onFormat","onCommand","formats","format","cmd","command","commandValue","getBlockPatterns","patterns","getInlinePatterns","createPatternSet","dynamicPatternsLookup","fromRawPatterns","fromRawPatternsLookup","lookupFn","ctx","rawPatterns","deviceDetection$1","DOM$a","getHash","isRegExp","stringOrObjectProcessor","bodyOptionProcessor","valid","bodyObj","register$7","registerOption","isInline$1","_ctx","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre$1","getForcedRootBlock","getForcedRootBlockAttrs","getNewlineBehavior","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","getContentStyle","getFontCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","getThemeUrl","getModel","getModelUrl","isInlineBoundariesEnabled","getFormats","getPreviewStyles","canFormatEmptyLines","getFormatNoneditableSelector","getCustomUiSelector","hasHiddenInput","shouldPatchSubmit","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","getCustomUndoRedoLevels","shouldDisableNodeChange","isReadOnly$1","hasEditableRoot$1","hasContentCssCors","getPlugins","getExternalPlugins$1","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","getIframeAriaText","getSetupCallback","getInitInstanceCallback","getUrlConverterCallback","getAutoFocus","shouldBrowserSpellcheck","getProtect","shouldPasteBlockDrop","shouldPasteDataImages","getPastePreProcess","getPastePostProcess","getNewDocumentContent","getPasteWebkitStyles","shouldPasteRemoveWebKitStyles","shouldPasteMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getPasteTabSpaces","shouldAllowHtmlDataUrls","getTextPatterns","getTextPatternsLookup","getNonEditableClass","getEditableClass","getNonEditableRegExps","shouldPreserveCData","shouldHighlightOnFocus","shouldSanitizeXss","shouldUseDocumentWrite","hasTextPatternsLookup","getFontStyleValues","getFontSizeClasses","isEncodingXml","getAllowedImageFileTypes","hasTableTabNavigation","getDetailsInitialState","getDetailsSerializedState","shouldForceHexColor","shouldSandboxIframes","isElement$3","isText$5","removeNode$1","trimCount","trimmedText","deleteZwspChars","removeUnchanged","remove$3","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","isContentEditableFalse$8","isMedia$1","isTableCell$1","inlineFakeCaretSelector","getAbsoluteClientRect","scrollX","scrollY","rootRect","margin","trimInlineCaretContainers","fakeCaretTargetNodes","FakeCaret","hasFocus","lastVisualCaret","cursorInterval","caretBlock","caret","startBlink","isInlineFakeCaretTarget","caretState","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableTrue$1","isContentEditableFalse$7","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isElement$2","isText$4","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","isCefOrCaretContainer","getEditingHost","isCETrue","getParentBlock$3","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","before$2","after$2","normalizeRange","leanLeft","leanRight","location","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","HDirection","isContentEditableFalse$6","isText$3","isElement$1","isBr$2","isCaretCandidate","isAtomic","isEditableCaretCandidate","getParents$3","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition$1","startPos","innerNode","rootContentEditableFalseElm","CaretWalker","walkToPositionIn","position","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigate","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","currentNode","isStringPathBookmark","bookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","isForwardBookmark","addBogus","resolveCaretPositionBookmark","endPos","insertZwsp","isEmpty$1","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","restoreEndPoint","markerParent","keep","otherMarker","resolvePaths","resolveId","spos","epos","resolveIndex","getBookmark$1","moveToBookmark","isBookmarkNode$1","isNbsp","expected","isWhiteSpace","isContent","getRanges$1","ranges","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","selectedCells","getCellsFromEditor","getClosestTable","cell","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","endNode","moveEndPoint","hasAnyRanges","sel","runOnRanges","executor","fakeSelectionNodes","fakeNodeRng","preserve","fillBookmark","isNode","isElementNode$1","isElementDirectlySelected","selectedAttr","preserveSelection","action","shouldMoveStart","selectedNodeBeforeAction","isSelectedBeforeNodeNoneditable","moveStartToNearestText","selectedNode","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","ed","allowSpaces","isEmptyTextNode$1","isWrapNoneditableTarget","baseDataSelector","formatNoneditableSelector","isWrappableNoneditable","replaceVars","vars","isEq$5","str1","normalizeStyleValue","strValue","style","getTextDecoration","decoration","getParents$2","isFormatPredicate","formatName","isVariableFormatName","isVariableValue","field","fieldValues","areSimilarFormats","otherFormatName","validKeys","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isBlockFormat","isWrappingBlockFormat","isNonWrappingBlockFormat","isSelectorFormat","isInlineFormat","isMixedFormat","shouldExpandToSelector","getEmptyCaretContainers","isCaretContainerEmpty","isEmptyCaretFormatElement","isBookmarkNode","getParents$1","isWhiteSpaceNode","isTextBlock","isBogusBr","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","isSelfOrParentBookmark","expandRng","includeTrailingSpace","endContainer","endOffset","walk$3","exclude","firstNode","lastNode","collectSiblings","findEndPoint","walkBoundary","startPoint","endPoint","validBlocks","isZeroWidth","wrapName","applyWordGrab","applyAnnotation","masterUId","decorate","directAnnotation","otherData","attributeNames","makeAnnotation","eDoc","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","elems","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","masterUid","selectionRng","Annotator","changes","removeAnnotations","BookmarkManager","isXYWithinRange","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","fireObjectResizeStart","origin","fireObjectResized","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","fireFormatApply","fireFormatRemove","fireBeforeSetContent","fireSetContent","fireBeforeGetContent","fireGetContent","fireAutocompleterStart","fireAutocompleterUpdate","fireAutocompleterEnd","firePastePreProcess","internal","firePastePostProcess","firePastePlainTextToggle","fireEditableRootStateChange","VK","elementSelectionAttr","controlElmSelector","abs","round$1","resizeHandles","isTouchEvent","ControlSelection","editableDoc","rootDocument","selectedElm","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","startX","startY","selectedElmX","selectedElmY","startW","startH","ratio","resizeStarted","startScrollWidth","startScrollHeight","isImage","isEventOnImageOutsideRange","touch","contextMenuSelectImage","getResizeTargets","isResizable","createGhostElement","setSizeProp","targets","setGhostElmSize","ghostElm","resizeGhostElement","deltaX","deltaY","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","showResizeRect","targetElm","unbindResizeHandleEvents","targetWidth","targetHeight","hideResizeRect","handle","startDrag","handleElm","throttledShowResizeRect","removeSelected","isChildOrEqual","updateResizeRect","controlElm","selectedValue","img","disableGeckoResize","startElm","setStart","situ","setFinish","relativeToNative","startSitu","finishSitu","exactToNative","soffset","finish","foffset","adt$3","fromRange","getRanges","doDiagnose","rev","diagnose","SimRange","caretPositionFromPoint","caretRangeFromPoint","availableSearch","fromPoint$1","adt$2","cata","onBefore","onOn","onAfter","getStart$2","before$1","after$1","Situ","adt$1","exactFromRange","simRange","getStart$1","_finishSitu","_soffset","_finish","_foffset","domRange","relative","exact","getWin","SimSelection","beforeSpecial","name$1","preprocessRelative","preprocessExact","preprocess","fromElements","toNative","getDomRange","filtered","getAtPoint","fromPoint","isEq$4","rng1","findParent","hasParent$1","hasParentWithName","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","splitText","newContainer","RangeUtils","rangeLike","newRange","normalizedRng","api","getOffset","aggregate","properties","cumulativeInclusions","get$2","getDocument","walkUp","navigation","rest","pathTo","Navigation","find","frames","loc","excludeFromDescend","fireScrollIntoViewEvent","fireAfterScrollIntoViewEvent","last","markerInfo","cleanupFun","createMarker$1","span","elementMarker","withMarker","preserveWith","applyWithMarker","withScrollEvents","withElement","startElement","endElement","scrollToMarker","viewHeight","intoWindowIfNeeded","viewportBottom","markerTop","markerBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","viewportBounds","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scrollRangeIntoView","focus$1","preventScroll","hasFocus$1","active$1","search","clamp$1","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","readRange","getBookmark","validate","bookmarkToNativeRng","store","newBookmark","getRng","restore","FocusManager","className","wrappedSetTimeout","wrappedSetInterval","Delay","isManualNodeChange","registerPageMouseUp","throttledStore","mouseUpPage","registerMouseUp","registerEditorEvents","register$6","documentFocusInHandler","DOM$9","isEditorUIElement","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","registerEvents$1","editorManager","toggleContentAreaOnFocus","contentArea","focusedEditor","activeEditor","unregisterDocumentEvents","setup$w","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","hasInlineFocus","rawBody","hasUiFocus","hasEditorOrUiFocus","focusEditor","bookmarkRng","contentEditableHost","activateEditor","focus","skipFocus","isEditableRange","getEndpointElement","real","getStart","getEnd$1","skipEmptyTextNodes","forwards","orig","getSelectedBlocks","endElm","selectedBlocks","processRanges","getEnd","isTextNodeWithCursorPosition","isContentEditableFalse$5","elementsWithCursorPosition","isCursorPosition","first","descendantRtl","autocompleteSelector","create$9","findIn","detect$1","remove$2","typeLookup","walk$2","isEmptyTextNode","AstNode","selfAttrs","cloneAttrs","selfAttr","refNode","whitespace","unescapedTextParents","containsZwsp","getTemporaryNodeSelector","tempAttrs","getTemporaryNodes","createZwspCommentWalker","createUnescapedZwspTextWalker","hasZwspComment","hasUnescapedZwspText","hasTemporaryNode","trimTemporaryNodes","emptyAllNodeValuesInWalker","curr","emptyZwspComments","emptyUnescapedZwspTexts","trim$1","conditionalTrims","trimmed","cloned","condition","cleanupBogusElements","bogusElements","cleanupInputNames","inputs","input","trimEmptyContents","emptyRegExp","getPlainTextContent","offscreenDiv","getContentFromBody","getContentInternal","makeMap$1","Writer","indent","indentBefore","indentAfter","htmlOutput","HtmlSerializer","writer","handlers","sortedAttrs","elementRule","nonInheritableStyles","shorthandStyleProps","getStyleProps","isNonInheritableStyle","hasInheritableStyles","getLonghandStyleProps","prop","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","nodeValue","parentValue","nodeStyleProp","propExists","longhandProps","isChar","delta","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","dropLast","parentsUntil","parentsAndSelf","navigateIgnoreEmptyTextNodes","isBlock$1","getClosestBlock$1","isAtBeforeAfterBlockBoundary","newPos","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr$1","findBr","parentBlocks","isBeforeBr$1","isAfterBr","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","isCefBlock","isSiblingCefBlock","isBeforeCefBlock","nextPos","isNextCefBlock","isAfterCefBlock","prevPos","isPrevCefBlock","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","isWhiteSpaceAt","hasNbsp","normalizeNbspMiddle","chars","normalizeNbspAtStart","makeNbsp","firstPos","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","lastPos","normalizeNbsps","normalizeNbspsInEditor","normalize$1","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","removeNode","needsReposition","reposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition","findCaretPosOutsideElmAfterDelete","setSelection$1","eqRawNode","paddEmptyBlock","preserveEmptyCaret","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement$2","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","strongRtl","hasStrongRtl","isInlineTarget","isRtl","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","execCommandIgnoreInputEvents","inputBlocker","execEditorDeleteCommand","execNativeDeleteCommand","execNativeForwardDeleteCommand","isBeforeRoot","isTextBlockOrListItem","getParentBlock$2","paddEmptyBody","moveSelection","willDeleteLastPositionInElement","fromPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","freefallRtl","deleteRangeContents","lastBlock","additionalCleanupNodes","ancestor$1","isRootFromElement","getTableCells","table","getTable$1","selectionInTableWithNestedTable","details","startTable","endTable","isStartTableParentOfEndTable","isEndTableParentOfStartTable","adjustQuirksInDetails","getTableDetailsFromRange","isStartInTable","isEndInTable","isSameTable","tableCellRng","tableSelection","cells","deleteAction","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","rows","getCellRng","startCell","endCell","getCellRangeFromStartTable","getCellRangeFromEndTable","getTableSelectionFromCellRng","getTableSelections","selectionDetails","sameTableSelection","startTableSelection","endTableSelection","getCellIndex","getSelectedCells","startIndex","endIndex","isSingleCellTableContentSelected","optCellRng","unselectCells","otherContentRng","handleSingleTable","handleMultiTable","startTableSelectedCells","endTableSelectedCells","getActionFromRange","cleanCells","getOutsideBlock","handleEmptyBlock","startInTable","emptyBlock","deleteContentInsideCell","isFirstCellInSelection","insideTableRng","deleteCellContents","collapseAndRestoreCellSelection","emptySingleTableCells","outsideDetails","editorRng","cellsToClean","outsideBlock","endPointCell","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","startTableCellsToClean","endTableCellsToClean","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$3","getParentCell","deleteBetweenCells","fromCell","toCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","deleteCaret$3","backspaceDelete$a","getContentEditableRoot$1","internalAttributesPrefixes","each$9","ElementUtils","internalAttributes","compare","attribs","isAttributeInternal","compareObjects","obj1","obj2","attributeName","isHeading","isSummary","traverse","matchNode$1","nodeFilters","attributeFilters","nl","al","findMatchingNodes","childNode","runFilters","matchRecord","filteringAttributes","filter$2","paddEmptyNode","astNode","isPaddedWithNbsp","hasOnlyChild","isPadded","isLineBreakNode","findClosestEditingHost","editableNode","removeOrUnwrapInvalidNode","originalNodeParent","cleanInvalidNodes","onCreate","textBlockElements","nonSplittableElements","fixed","isSplittableElement","newParent","isInvalid","hasClosest","parentName","createRange","normalizeBlockSelectionRange","newEndPos","normalize","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","isListFragment","cleanupDomFragment","domFragment","toDomFragment","serializer","listItems","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","newCaretPos","findLastOf","insertMiddle","insertBefore$2","insertAfter$2","insertAtCaret$1","liTarget","liElms","BEGINNING","END","isAt","caretWalker","newPosNode","mergeableWrappedElements","shouldPasteContentOnly","isPastingSingleElement","isWrappedElement","isContentEditable","isPastingInTheSameBlockTag","isPastingInContentEditable","isTableCell","isTableCellContentSelected","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","merge","textInlineElements","elementUtils","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","_c","nextRng","parentEditableElm","findNextCaretRng","isCell","deleteSelectedContent","findMarkerNode","markerNode","notHeadingsInSummary","insertHtmlAtCaret","parser","bookmarkHtml","caretElement","parserArgs","editingHost","toExtract","isTreeNode","setEditorHtml","noSelection","setContentString","padd","forcedRootBlockName","trimmedHtml","setContentTree","setContentInternal","ensureIsRoot","transform","transformed","closest$1","isEq$3","matchesUnInheritedFormatSelector","matchParents","similar","matchedNode","matchNode","matchName","matchItems","itemName","matchAttributes","expectedValue","isEmptyValue","match$2","matchAll","matchedFormatNames","checkedMap","closest","rawElm","canApply","matchAllOnNode","formatNames","matchSimilar","ZWSP","importNode","ownerDocument","findFirstTextNode","createCaretContainer","fill","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","cleanFormatNode","formatter","validFormats","matchedFormats","fmtName","clonedFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","parentsAfter","newCaretContainer","cleanedFormatNode","caretTextNode","disableCaretContainer","keyCode","endsWithNbsp","setup$v","createCaretFormat","innerMost","replaceWithCaretFormat","createCaretFormatAtStart$1","isFormatElement","inlineElements","postProcessHooks","isPre","addPostProcessHook","postProcess$1","hasPreSibling","blocks","pre","joinPre","pre1","pre2","sPre2","preBlocks","listItemStyles","hasListStyles","fmt","findExpandedListItemFormat","getExpandedListItemFormat","isRngStartAtStartOfElement","isRngEndAtEndOfElement","isEditableListItem","getFullySelectedBlocks","middle","getFullySelectedListItems","getPartiallySelectedListItems","each$8","isElementNode","findElementSibling","mergeSiblingsNodes","isPrevEditable","isNextEditable","tmpSibling","mergeSiblings","clearChildStyles","_value","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$7","isEq$2","isTableCellOrRow","isChildOfInlineParent","getContainer","lastIdx","normalizeTableSelection","wrap$1","wrapWithSiblings","isColorFormatAndAnchor","rootBlockElm","forcedRootBlock","processFormatAttrOrStyle","removeEmptyStyleAttributeIfNeeded","removeStyles","compareNode","stylesModified","styleName","styleValue","normalizedStyleValue","removeListStyleFormats","liFmt","removeNodeFormatInternal","preserveAttributes","attrsToPreserve","currentValue","valueOut","findFormatRoot","formatRoot","removeNodeFormatFromClone","newName","wrapAndSplit","lastClone","firstClone","formatRootParent","removeFormatInternal","splitToFormatRoot","isRemoveBookmarkNode","removeFormatOnNode","removeNodeFormat","currentNodeMatches","removeRngStyle","removeFormat$1","each$6","mergeTextDecorationsAndColor","processTextDecorationsAndColor","parentTextDecoration","mergeBackgroundColorAndFontSize","hasFontSize","mergeSubSup","inverseTagDescendants","mergeWithChildren","mergeWithParents","each$5","canFormatBR","validBRParentElements","hasCaretNodeSibling","applyStyles","styleVal","applyFormatAction","isCollapsed","setElementFormat","applyNodeStyle","found","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","isMatchingWrappingBlock","canRenameBlock","isEditableDescendant","isValidBlockFormatForNode","canWrapNode","isWrappableNoneditableElm","isValidWrapNode","isCaret","isCorrectFormatForNode","currentWrapElm","lastContentEditable","contentEditableValue","getChildCount","mergeStyles","childCount","fake","applyFormat$1","hasVars","setup$u","registeredFormatListeners","updateAndFireChangeCallbacks","nodeOrRange","fallbackElement","matchingNode","matchingFormat","registeredCallbacks","runIfChanged","spec","isSet","addListeners","formatChangeItems","getCurrent","toAppendTo","removeListeners","formatChangedInternal","toggle","explode$1","create$8","filters","newCallbacks","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeFilter","convertToSTag","addFilters","register$5","addNodeFilter","htmlParser","blockElements","prevName","lastParent","blobUriToBlob","extractBase64Data","parseDataUri","uri","base64Encoded","extractedData","buildBlob","dataUriToBlob","uriToBlob","blobToDataUri","blob","reader","count$1","uniqueId$1","processDataUri","dataUri","base64Only","generateBlobInfo","base64","createBlobInfo$1","blobCache","blobInfo","dataUriToBlobInfo","imageToBlobInfo","imageSrc","invalidDataUri","isBogusImage","isInternalImageSource","registerBase64ImageFilter","processImage","inputSrc","isMimeType","mime","createSafeEmbed","src","sandboxIframes","embed","register$4","appendRel","rel","addNoOpener","newRel","classValue","validClassesMap","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create$7","apply","construct","fun","thisValue","Func","arrayForEach","unapply","arrayPop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","unconstruct","_len","_key","_len2","_key2","addToSet","transformCaseFunc","_transformCaseFunc","lcElement","object","newObject","lookupGetter","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","EXPRESSIONS","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","ATTR_NAME","policyName","createDOMPurify","window","DOMPurify","originalDocument","currentScript","document","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","leadingWhitespace","dirtyPayload","_createIterator","_isClobbered","_isNode","_executeHook","entryPoint","_sanitizeElements","_basicCustomElementTest","_isValidAttribute","lcTag","_sanitizeAttributes","hookEvent","namespaceURI","initValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","hookFunction","purify","each$4","queryParts","DEFAULT_PORTS","safeSvgDataUrlElements","blockSvgDataUris","allowSvgDataUrls","decodeUri","encodedUri","isInvalidUri","decodedUri","URI","uriComponents","baseUri","isProtocolRelative","urlMatch","part","pathMatch","relativeUri","tu","uu","noHost","absoluteUri","defaultPort","breakPoint","normalizedBase","nb","normalizedPath","baseParts","pathParts","outPath","noProtoHost","filteredUrlAttrs","internalElementAttr","processNode","_d","lcTagName","isInternalElement","bogus","processAttr","ele","shouldKeepAttribute","isBooleanAttribute","isRequiredAttributeOfInternalElement","filterAttributes","setupPurify","namespaceTracker","purify$1","getPurifyConfig","mimeType","config","sanitizeNamespaceElement","xlinkAttrs","getSanitizer","_mimeType","makeMap","extend$1","transferChildren","nativeParent","nsSanitizer","isSpecial","nativeChild","walkTree","preprocessors","postprocessors","traverseOrder","postprocess","whitespaceCleaner","textRootBlockElements","allWhiteSpaceRegExp","startWhiteSpaceRegExp","endWhiteSpaceRegExp","hasWhitespaceParent","isTextRootBlockEmpty","isAtEdgeOfBlock","neighbour","isNodeEmpty","getRootBlockName","DomParser","nodeFilterRegistry","attributeFilterRegistry","defaultedSettings","sanitizer","parseAndSanitizeWithContext","rootName","isSpecialRoot","wrappedHtml","getNodeFilters","removeNodeFilter","addAttributeFilter","getAttributeFilters","removeAttributeFilter","findInvalidChildren","isWrappableNode","addRootBlocks","rootBlockName","rootBlockNode","rootBlock","exports","whitespacePre","whitespacePost","invalidFinder","matchFinder","topLevelChildren","otherChildren","serializeContent","withSerializedContent","fireEvent","parserSettings","serializedContent","eventArgs","preProcessGetContent","postProcessGetContent","preProcessSetContent","processedEventArgs","postProcessSetContent","tableModel","tableRow","cellPosition","getSpan","td","fillout","rowspan","colspan","y2","x2","cellExists","skipCellsX","getWidth","row","findElementPos","extractRows","sx","sy","ex","ey","newRows","slice","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","fromDom","tableElm","toDom","subsection","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listElm","listStyles","_style","wrap","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","firstCell","lastCell","fullTableModel","sectionedTableModel","getSelectionFragment","read$3","isCollapsibleWhitespace","getInnerText","bin","getContextNodeName","parentBlockOpt","getTextContent","contextNodeName","rangeContentClone","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","extractSelectedContent","setupArgs$3","getSelectedContentInternal","defaultedArgs","updatedArgs","KEEP","INSERT","DELETE","diff","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","script","getMiddleSnake","i2","buildSnake","sum","getOuterHtml","insertAt","removeAt","applyDiff","read$2","trimZwsp","write","fragments","currentFragments","lazyTempDocument","hasIframes","createFragmentedLevel","createCompleteLevel","createFromEditor","applyToEditor","level","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$1","isUnlocked","locks","setTyping","undoManager","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange$1","beforeBookmark","addUndoLevel$1","currentLevel","newLevel","lastLevel","bm","customUndoRedoLevels","clear$1","extra$1","callback1","callback2","redo$1","undo$1","reset$1","hasUndo$1","hasRedo$1","transact$1","ignore$1","addVisualInternal","matchedElm","makePlainAdaptor","makeRtcAdaptor","rtcEditor","defaultVars","init","autocompleter","_undoManager","_locks","_index","_node","_similar","_rfl","_details","_format","makeNoopAdaptor","nul","isRtc","getRtcSetup","rtcPlugin","setup$t","editorCast","setup","getRtcInstanceWithFallback","getRtcInstanceWithError","rtcInstance","beforeChange","addUndoLevel","undo","redo","clear","reset","hasUndo","hasRedo","transact","ignore","extra","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","applyFormat","removeFormat","toggleFormat","formatChanged","getContent$2","setContent$2","insertContent$1","getSelectedContent","addVisual$1","bindEvents","addAutocompleterDecoration","removeAutocompleterDecoration","getContent$1","removeEmpty","walkPastBookmark","merge$1","outer","inner","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","rngSetContent","prevText","nextText","setupArgs$2","cleanContent","contextBlock","contextArgs","setContent$1","cleanedContent","deleteFromCallbackMap","SelectorChanged","selectorChangedData","currentSelectors","findMatchingNode","matchedSelectors","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","selectorChangedWithUnbind","setCursorLocation","setRng","getContent","setContent","getRng$1","bookmarkManager","select$1","getSel","isEditable","fakeSelectedElements","tryCompareBoundaryPoints","how","sourceRange","destinationRange","setNode","getSelectedBlocks$1","isForward","anchorNode","focusNode","anchorRange","focusRange","scrollContainer","controlSelection","register$3","trimTrailingBr","isBr","brNode1","brNode2","preProcess$1","oldDoc","clonedNode","impl","shouldFireEvent","process$1","addTempAttr","postProcess","getHtmlFromNode","parseHtml","serializeNode","toHtml","DomSerializerImpl","serialize","DomSerializer","domSerializer","defaultFormat$1","setupArgs$1","defaultFormat","setupArgs","removedOptions","deprecatedOptions","removedPlugins","deprecatedPlugins","getMatchingOptions","searchingFor","settingNames","setting","getRemovedOptions","getDeprecatedOptions","getMatchingPlugins","plugins","pluginNames","plugin","getRemovedPlugins","getDeprecatedPlugins","entry","logRemovedWarnings","rawOptions","normalizedOptions","hasRemovedPlugins","hasRemovedOptions","isLegacyMobileTheme","listJoiner","themesMessage","pluginsMessage","optionsMessage","getPluginDescription","logDeprecatedWarnings","hasDeprecatedPlugins","hasDeprecatedOptions","logWarnings","DOM$8","restoreOriginalStyles","safeDestroy","clearDomReferences","restoreForm","form","remove$1","_selectionOverrides","editorUpload","destroy","automatic","IconManager","iconPack","ModelManager","getProp","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect","isInsideElementContentArea","bodyElm","clientWidth","clientHeight","transpose","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","NotificationManagerImpl","unimplemented","NotificationManager","notifications","getImplementation","theme","getTopNotification","notification","addNotification","closeNotification","otherNotification","open","close","getNotifications","serviceMessage","PluginManager","ThemeManager","WindowManagerImpl","WindowManager","dialogs","funcBind","fireOpenEvent","dialog","fireCloseEvent","addDialog","closeDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","openDialog","params","openUrl","alert","windowManagerImpl","confirm","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","themeLoadError","modelLoadError","pluginInitError","initError","console","isContentCssSkinName","toContentSkinResourceName","isBundledCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","skinUrl","contentCssFile","appendContentCssFromSettings","getAllImages","ImageScanner","uploadStatus","cachedPromises","images","promises","imageInfo","newPromise","UploadStatus","blobUriStatuses","createStatus","resultUri","hasBlobUri","blobUri","seed","rnd","uuid","BlobCache","cache","mimeToExt","filename","toBlobInfo","findFirst","cachedBlobInfo","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","progress","xhr","json","formData","uploadHandler","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","percent","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","isEmptyForPadding","addPaddingToEmpty","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","image","uploadImages","scanForImages","imageInfos","imagesToRemove","shouldDispatchChange","filteredResult","uploadInfo","removed","sugarElement","parentOpt","uploadImagesAuto","isValidDataUriImage","imgElm","addFilter","resultItem","replaceBlobUris","get$1","strike","_fmt","_itemName","genericBase","cellBase","cellFormats","FormatRegistry","register","unregister","each$3","isPreviewItem","parsedSelectorToHtml","ancestry","createElement","sItem","getRequiredParent","elmRule","parentsRequired","wrapInHtml","ancestors","parentCandidate","ancestorName","parentRequired","siblingElm","parentSiblings","parseSelectorItem","$0","$3","$4","parseSelector","getCssText","previewCss","previewStyles","removeVars","getComputedStyle","preview","previewFrag","previewElm","rawParentFontSize","parentFontSize","setup$s","Formatter","formatChangeState","shouldIgnoreCommand","registerEvents","isFirstTypedCharacter","addNonTypingUndoLevel","isMeta","modKey","isInsertReplacementText","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","setup$r","placeholder","updatePlaceholder","showPlaceholder","blockPosition","blockBoundary","getBlockPosition","containerElm","isDifferentBlocks","getClosestHost","hasSameHost","isEditable$1","hasValidBlocks","isValidBlock","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","newFromBlockDescendants","helper","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$9","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$2","backspaceDelete$8","_forward","showCaret","scrollIntoView","getNodeRange","selectNode","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","normalizedNextCaretPosition","backspaceDelete$7","getEdgeCefPosition","atStart","isCefAtEdgeSelected","isCompoundElement","DeleteAction","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","read","deleteElement$1","moveToElement","moveToPosition","getAncestorCe","backspaceDeleteCaret","deleteOffscreenSelection","backspaceDeleteRange","paddEmptyElement","backspaceDelete$6","deleteCaret$2","backspaceDelete$5","isText$2","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertBefore$1","insertAfter$1","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","getElement","readLocation","getName","outside","inside","isEq","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation$1","hasSelectionModifyApi","moveRel","moveByWord","BreakType","flip","positions","walk$1","getBreakType","currentPos","getPositionsUntil","breakType","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isAtFirstLine","isAtLastLine","getFirstLinePositions","getLastLinePositions","getClosestPositionAbove","getClosestPositionBelow","isContentEditableFalse$4","distanceToRectLeft$1","distanceToRectRight$1","isNodeClientRect","findClosestClientRect","oldClientRect","oldDistance","newDistance","getNodeClientRects","toArrayWithNode","VDirection","findUntil","walkUntil","isAboveFn","isBeflowFn","line","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","downUntil","getLastClientRect","positionsUntil","isBelowFn","isAboveLine","isLine","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","isElement","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","host","lineInfo","moveToLineEndPoint$3","isElementPosition","setCaretPosition","setSelected","renderCaretLocation","getPositionFromRange","findLocation","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","caretValue","renderInsideInlineCaret","inlines","_inline","move$3","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope","backspaceDeleteCollapsed","toPosition","backspaceDelete$4","hasMultipleChildren","getParentsUntil","hasOnlyOneChild","getParentInlinesUntilMultichildInline","getParentInlines","getFormatNodes","parentInlines","isFormatElement$1","getFormatNodesAtStart","deleteLastPosition","deleteCaret$1","isBrInEmptyElement","isEmptyCaret","createCaretFormatAtStart","updateCaretFormat","updateFormats","missingFormats","rangeStartsAtTextContainer","rangeStartsAtStartOfTextContainer","rangeStartParentIsFormatElement","startParent","rangeStartAndEndHaveSameParent","endParent","rangeEndsAtEndOfEndContainer","rangeEndsAtEndOfStartContainer","rangeEndsAfterEndOfStartContainer","rangeEndsAtOrAfterEndOfStartContainer","requiresDeleteRangeOverride","deleteRange$1","backspaceDelete$3","hasAncestorInlineCaret","hasAncestorInlineCaretAtStart","requiresRefreshCaretOverride","refreshCaret","deleteElement","deleteCaret","isNearMedia","backspaceDelete$2","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","unit","parsedValue","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentation","indentUnit","indentValue","outdent","backspaceDelete$1","findAction","deleteCommand","forwardDeleteCommand","setup$q","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","isFarEnough","distX","distY","setup$p","startData","longpressFired","debounceLongpress","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","createRootBlock","rootNodeName","restoreSelection","insertEmptyLine","setup$o","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","convertRegExpsToNonEditable","nonEditableRegExps","setup$n","contentEditableAttrName","editClass","nonEditClass","hasEditClass","hasNonEditClass","findBlockCaretContainer","showBlockCaretContainer","blockCaretContainer","handleBlockContainer","setup$m","isContentEditableFalse$3","moveToCeFalseHorizontally","moveToCeFalseVertically","createTextBlock","textBlock","exitPreBlock","getVisualCaretPosition$1","newBlock","getHorizontalRange","getVerticalRange","down","flipDirection","moveH$2","moveV$4","moveToLineEndPoint$1","selectToEndPoint","curRng","isTarget","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","moveV$3","moveUp","summary","moveDown","move$2","moveV$2","baseKeyPattern","defaultPatterns","defaultDelayedPatterns","matchesEvent","match$1","matchDelayed","execute","executeWithDelayedAction","moveH$1","moveV$1","moveToLineEndPoint","CellLocation","firstLayer","filterFirstLayer","lookup$1","tags","isRootOrUpperTable","isEligible","newIndex","detect","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","newDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","isAbove","isBelow","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","getTable","previous","renderBlock","insertFn","navigateVertically","move$1","mover","moveH","moveV","getCellFirstCursorPosition","tabGo","_current","tabForward","tabBackward","handleTab","rootElements","executeKeydownOverride$4","isMac","setup$l","DOM$7","alwaysNext","textBefore","textAfter","scanLeft","scanRight","repeatLeft","isValidTextRange","getText","isWhitespace","stripTrigger","trigger","findTrigger","firstChar","findStart","initRange","minChars","buffer","findTriggerIndex","spot","isText$1","toLast","toLeaf","isPreviousCharContent","leaf","_element","isStartOfWord","getTriggerContext","database","getDatabase","lookupWithContext","fetchOptions","startText","autocompleters","lookupData","ac","SimpleResultType","fold$1","partition","mapError","bind$1","bindError","svalue","serror","SimpleResult","formatObj","formatErrors","getErrorInfo","missingRequired","missingKey","missingBranch","branch","custom","chooseFrom","choose$1","chosen","old","deepMerge","baseMerge","merger","objects","curObject","required","defaultedThunk","fallbackThunk","defaulted$1","fallback","asOption","mergeValues","mergeErrors","ResultCombine","partitions","field$1","newKey","presence","customField$1","instantiator","fold","ifField","ifCustom","validator","extract","anyValue$1","requiredAccess","bundle","fallbackAccess","optionAccess","optionDefaultedAccess","opt","extractField","av","bundleAsOption","optValue","ov","extractFields","fields","objOf","_okey","_presence","_instantiator","arrOf","valueOf","extractValue","errs","asRaw","formatError","errInfo","choose","anyValue","typedValue","expectedType","actualType","number","boolean","functionProcessor","customField","validateEnum","requiredOf","requiredString","requiredFunction","requiredArrayOf","optionOf","optionString","optionFunction","defaulted","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedArrayOf","fetch$1","onAction","onSetup","optionalText","optionalIcon","optionalTooltip","optionalLabel","active","enabled","primary","defaultedColumns","defaultedType","autocompleterSchema","createAutocompleter","baseToolbarButtonFields","baseToolbarToggleButtonFields","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","register$2","popups","dataset","popup","triggers","datasetValues","dv","setupEditorInput","update","setup$k","activeAutocompleter","uiActive","isActive","cancelIfNecessary","commenceIfNecessary","getAutocompleters","doLookup","newContext","lookupInfo","_ui","isSafari","emptyNodeContents","isEntireNodeSelected","getParentDetailsElementAtPos","isInDetailsElement","getDetailsElements","startDetails","endDetails","startSummary","isCaretInTheBeginningOf","isCaretInTheEndOf","isCaretAtStartOfSummary","detailsElements","isCaretAtEndOfSummary","isCaretInFirstPositionInBody","isCaretInLastPositionInBody","setCaretToPosition","moveCaretToDetailsPos","isPartialDelete","containsStart","containsEnd","startInSummary","endInSummary","isPartiallySelectedDetailsElements","shouldPreventDeleteIntoDetails","granularity","parentDetailsAtCaret","inEmptyParentBlock","isFirstBlock","isLastBlock","parentDetailsAtNewPos","shouldPreventDeleteSummaryAction","detailElements","shouldPreventDeleteAction","handleDeleteActionSafari","anchorOffset","focusOffset","applySelection","updateSelection","appendAllChildNodes","backspaceDelete","createAndFireInputEvent","eventType","inputType","specifics","overrides","fireInputEvent","fireBeforeInputEvent","platform$2","isMacOSOriOS","isFirefox","executeKeydownOverride$3","unmodifiedGranularity","getModifiedGranularity","isWord","applyAction","executeKeyupOverride","isBackspaceKeydown","setup$j","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$1","getParentBlockName","isListItemParentBlock","applyAttributes","forcedRootBlockAttrs","attrStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","createNewBlock","keepStyles","newBlockName","parentBlockName","getDetailsRoot","isAtDetailsEdge","isLastEmptyBlockInDetails","shiftKey","insertNewLine","hasFirstChild","isFirstChild","hasParent","isListBlock","isListItem","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","getStyles","insert$4","containerParent","parentBlockStyles","tmpRng","previousChildren","isWithinNonEditableList","parentList","isEmptyAnchor","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","wrapSelfAndSiblingsInDefaultBlock","startNodeName","startNodeParent","addBrToBlockIfNeeded","shouldEndContainer","optionValue","blockbreak","isAfterLastNodeInContainer","isCef","collapsedAndCef","createNewBlock$1","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","ctrlKey","liBlock","parentBlockParent","isNearChildren","hasRightSideContent","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","linebreak","anchorLocation","matchesSelector","shouldInsertBr","shouldBlockNewLine$1","newLineAction","shouldBlockNewLine","_shiftKey","inListBlock","requiredState","inBlock","inCefBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre","inBrContext","hasShiftKey","_editor","canInsertIntoEditableRoot","rootEditable","isInRootWithEmptyOrCEF","isCefOpt","predicates","getAction","insertBreak","insert$1","logicalAction","platform$1","isIOSSafari","handleEnterKeyEvent","isCaretAfterKoreanCharacter","koreanCharRegex","setup$i","iOSSafariKeydownBookmark","iOSSafariKeydownOverride","iOSSafariKeyupOverride","executeKeydownOverride$2","setup$h","setup$g","platform","executeKeyupAction","stopImmediatePropagation","isPageUpDown","setNodeChangeBlocker","blocked","setup$f","setup$e","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","insertSpaceOrNbspAtPosition","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection","isInsideSummary","domUtils","insertSpaceOrNbspAtSelection","insertSpaceInSummaryAtSelectionOnFirefox","insertSpaceThunk","executeKeydownOverride$1","setup$d","tableTabNavigation","executeKeydownOverride","setup$c","setup$b","NodeChange","lastRng","nativeRng","fakeRng","currentPath","imageId","getDragImage","transfer","setDragImage","imageData","eventId","getEvent","mkSetEventFn","setEvent","setDragstartEvent","setDropEvent","setDragendEvent","isInDragStartEvent","createEmptyFileList","modeId","getMode","mkSetModeFn","setMode$1","setReadWriteMode","setReadOnlyMode","setProtectedMode","checkMode","expectedMode","isInReadWriteMode","isInProtectedMode","normalizeItems","dataTransfer","itemsImpl","validDropEffects","validEffectAlloweds","createDataTransfer","dataTransferImpl","dropEffect","effectAllowed","effect","allowed","cloneDataTransfer","originalMode","file","getHtmlData","setHtmlData","internalMimeType","internalHtmlMime","internalMark","mark","unmark","isMarked","isPlainText","openContainer","rootTag","rootAttrs","toBlockElements","tagOpen","tagClose","paragraphs","stitch","pasteBinDefaultContent","create$6","lastRngCell","pasteBinElm","getEl","pasteBinClone","isPasteBin","getHtml","copyAndRemove","toElm","fromElm","pasteBinClones","dirtyWrappers","cleanWrapper","isDefaultPasteBinContent","PasteBin","filter$1","innerText","voidElements","ignoreElements","trimHtml","s1","s2","createIdGenerator","getImageMimeType","lowerExt","mimeOverrides","preProcess","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","pasteHtml$1","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","insertContent","pasteAsText","createPasteDataTransfer","doPaste","shouldSimulateInputEvent","doPasteAction","pasteHtml","internalFlag","pasteText","encodedText","getDataTransferItems","contentType","hasContentType","clipboardContent","hasHtmlOrText","extractFilename","createBlobInfo","useFileName","pasteImage","imageItem","existingBlobInfo","isClipboardEvent","readFilesAsDataUris","allowedExtensions","extension","getImagesFromDataTransfer","pasteImageData","fileResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","insertClipboardContent","plainTextMode","isInternal","isPlainTextHtml","isAbsoluteUrl$1","registerEventHandlers","pasteBin","pasteFormat","keyboardPastePlainTextState","getLastRng","registerDataImageFilter","isWebKitFakeUrl","isDataUri","isPasteInsert","registerEventsAndFilters","togglePlainTextPaste","register$1","setHtml5Clipboard","clipboardData","setClipboardData","offscreenRange","getData","isTableSelection","hasSelectedContent","cut","getCaretRangeFromEvent","isPlainTextFileUrl","plainTextContent","setFocusedRange","hasImage","needsCustomInternalDrop","dropContent","parentTransparent","setupSummaryDeleteByDragFix","hasNoSummary","brokenDetailElements","setup$a","draggingInternallyState","internalContent","needsInternalDrop","isInternalDrop","trimmedContent","setup$9","processEvent","addPreProcessFilter","filterFunc","rgbRegExp","rgbToHex","removeWebKitStyles","webKitStylesOption","webKitStyles","inputStyles","outputStyles","inputValue","compareInput","outputStyle","setup$8","setup$7","preventSummaryToggle","filterDetails","initialStateOption","serializedStateOption","setup$6","isText","isContentEditableFalse$2","isContentEditableTrue","getClosestScope","getClosestCef","findEdgeCaretCandidate","findClosestBlockRange","startRng","clickNode","cef","onTripleClickSelect","setup$5","FakeCaretPosition","distanceToRectLeft","distanceToRectRight","isInsideY","collidesY","isOverlapping","overlap","splitRectsPerAxis","intersectingRects","boundingRect","horizontal","vertical","clientInfo","horizontalDistance","_y","closestChildCaretCandidateNodeRect","caretCandidateRect","getClosestTextNode","distance","findClosestCaretCandidateNodeRect","sortedRects","horizontalRects","verticalRects","above","below","traverseUp","prevScope","isDragGhostContainer","childNodesWithoutGhost","uncheckedChildren","newScope","closestCaretCandidateNodeRect","ownerDoc","closestFakeCaretCandidate","getAbsolutePosition","docElem","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","getTargetProps","makeDndEventFromMouseEvent","makeDndEvent","makeDataTransferCopyForDragEvent","makeDragEvent","dataTransferForDispatch","scrollPixelsPerInterval","scrollIntervalValue","mouseRangeToTriggerScrollInsideEditor","mouseRangeToTriggerScrollOutsideEditor","isContentEditableFalse$1","isDraggable","isValidDropTarget","dragElement","createGhost","clonedElm","appendGhostToBody","scrollEditor","amount","scrollRight","scrollUp","scrollDown","moveGhost","maxX","maxY","mouseY","mouseX","contentAreaContainer","mouseEventOriginatedFromWithinTheEditor","overflowX","outerMouseY","outerMouseX","removeElement","removeElementWithPadding","isLeftMouseButtonPressed","applyRelPos","ceElm","elmPos","placeCaretAt","caretInfo","dispatchDragEvent","move","throttledPlaceCaretAt","state_","movement","targetPos","getRawTarget","drop","dropTarget","removeDragState","stopDragging","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockUnsupportedFileDrop","preventFileDrop","preventFileDropIfUIElement","editorRoot","eventNames","init$2","setup$4","renderFocusCaret","setup$3","isContentEditableFalse","getContentEditableRoot","SelectionOverrides","realSelectionId","selectedElement","isFakeSelectionElement","isFakeSelectionTargetElement","setRange","removeElementSelection","contentEditableRoot","setElementSelection","hideFakeCaret","closestContentEditable","normalizeVoidElementSelection","isRangeInCaretContainer","isWithinCaretContainer","setupOffscreenSelection","targetClone","realSelectionContainer","selectElement","nodeElm","afterNode","getNormalizedTextOffset","generatePath","generatePathRange","resolvePath","nodePath","optNode","resolvePathRange","generatePathRangeFromRange","cleanEmptyNodes","deleteRng","clean","getParentBlock","resolveFromDynamicPatterns","patternSet","beforeText","dynamicPatterns","getBeforeText","startsWithSingleSpace","stripPattern","textContent","applyPattern$1","isBlockFormatName","formatSet","sortPatterns$1","findPattern$1","sortedPatterns","nuText","findPatterns$1","normalizedMatches","blockText","applyMatches$1","newMarker","rangeFromMarker","createMarker","markerPrefix","pathRange","textEnd","textStart","startParentNode","endParentNode","removeMarker","isReplacementPattern","matchesPattern","patternContent","searchText","startEndIndex","findPatternStartFromSpot","startPattern","startPatternIndex","nextSpot","findPatternStart","requireGap","startRange","findPattern","endPathRng","resultsOpt","findPatternsRec","startPathRng","endSpot","patternsWithoutCurrent","applyPattern","patternRange","applyReplacementPattern","markerRange","applyPatternWithContent","startMarker","endMarker","markerEndRange","markerStartRange","patternMarker","addMarkers","matchesWithEnds","sortPatterns","getBestMatches","matchesWithSortedPatterns","hasSameMatches","sortedMatch","findPatterns","applyMatches","matchesWithMarkers","handleEnter","dynamicPatternSet","inlineMatches","blockMatches","handleInlineKey","checkKeyEvent","codes","checkKeyCode","checkCharCode","setup$2","charCodes","keyCodes","getPatternSet","hasDynamicPatterns","handleInlineTrigger","setup$1","Quirks","each","BACKSPACE","isGecko","isWebKit","isiOS","setEditorCommandState","isDefaultPrevented","emptyEditorWhenDeleting","serializeRng","contents","allContentsSelected","allRng","allSelection","selectAll","documentElementEditingFocus","removeHrOnBackspace","previousSibling","selectControlElements","visualAidsAnchorClass","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","isAllContentSelected","showBrokenImageIcon","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","refreshContentEditable","setupRtc","dropDragEndEvent","DOM$6","appendStyle","getRootName","removeUndefined","mkParserSettings","mkSchemaSettings","mkSerializerSettings","createParser","autoFocus","moveSelectionToFirstCaretPosition","initEditor","initInstanceCallback","getStyleSheetLoader$1","makeStylesheetLoadingPromises","framedFonts","bundledCss","normalCss","loadContentCss","fontCss","removeCss","loaded","contentCssText","allStylesheets","contentStyle","preInit","directionality","protect","loadInitialContent","initEditorWithInitialContent","startProgress","canceled","progressTimeout","contentBodyLoaded","setupRtcThunk","cancelProgress","_rtcMode","DOM$5","createIframeElement","title","customAttrs","tabindex","iframe","getIframeHtml","iframeHTML","bodyId","bodyClass","translatedAriaText","createIframe","boxInfo","iframeTitle","ifr","setupIframeBody","ready","init$1","DOM$4","initPlugin","initializedPlugins","Plugin","pluginUrl","pluginInstance","trimLegacyPrefix","initPlugins","initIcons","iconPackName","currentIcons","loadIcons","svgData","icon","initTheme","Theme","initModel","model","Model","renderFromLoadedTheme","render","renderThemeFalse","renderFromThemeFunc","createThemeFalseResult","renderThemeFalseIframe","iframeContainer","renderThemeUi","augmentEditorUiApi","uiApiFacade","renderInfo","DOM$3","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","loadTheme","themeUrl","loadModel","modelUrl","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","urlMeta","loadPlugins","loadPlugin","isThemeLoaded","isModelLoaded","loadScripts","getStyleSheetLoader","snapshot","setEditableRoot","hasEditableRoot","sectionResult","sections","deviceDetection","normalizePlugins","trimmedPlugins","extractSections","getSection","defaults","sectionOptions","hasSection","getSectionConfig","getMobileOverrideOptions","mobileOptions","getExternalPlugins","overrideOptions","userDefinedExternalPlugins","combinePlugins","forcedPlugins","getPlatformPlugins","isMobileDevice","desktopPlugins","mobilePlugins","processPlugins","defaultOverrideOptions","mobileConfig","platformPlugins","combinedPlugins","isOnMobile","combineOptions","defaultOptions","deviceOverrideOptions","extendedOptions","normalizeOptions","addVisual","registerExecCommands$3","toggleAlign","align","registerQueryStateCommands$1","alignStates","registerCommands$b","registerCommands$a","trimOrPadLeftRight","processValue$1","trimOrPad","insertAtCaret","insertedContent","registerCommands$9","_command","legacyPropNames","isFont","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","fontFamily","getComputedFontProp","getFontProp","getFontSize","getFontFamily","findFirstCaretElement","getCaretElement","bindRange","mapRange","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","font","fonts","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","lineHeightQuery","specifiedStyle","computedStyle","lineHeight","fontSize","lineHeightAction","registerExecCommands$2","lang","registerQueryValueCommands","isFormatMatch","registerCommands$8","registerCommands$7","registerCommands$6","registerCommands$5","applyLinkToSelection","linkDetails","anchor","registerExecCommands$1","listParent","registerQueryStateCommands","list","registerCommands$4","getTopParentBlock","topParentBlock","insert","insertBefore","registerCommands$3","registerCommands$2","registerCommands$1","registerExecCommands","registerCommands","selectionSafeCommands","isSelectionSafeCommand","EditorCommands","lowerCaseCommand","commandList","commands","internalContentEditableAttr","setContentEditable","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","isReadOnly","registerFilters","registerReadOnlyContentFilters","isClickEvent","allowedEvents","isReadOnlyAllowedEvent","getAnchorHrefOpt","processReadonlyEvents","href","targetEl","registerReadOnlySelectionBlockers","nativeEvents","EventDispatcher","wrappedCallback","currentName","bindingName","filteredHandlers","binding","getEventDispatcher","Observable","bubble","dispatcherArgs","DOM$2","customEventRootDelegates","getEventTarget","eventName","eventRoot","isListening","bindEventDelegate","eventRootElm","delegate","editors","EditorObservable","stringListProcessor","getBuiltInProcessor","processValue","isBuiltInSpec","getErrorMessage","additionalText","isValidResult","processor","processDefaultValue","create$5","initialOptions","setValue","isRegistered","registered","defaultModes","switchToMode","activeMode","availableModes","oldMode","newMode","setMode","registerMode","create$4","each$2","explode","keyCodeLookup","modifierNames","isModifier","parseShortcut","shortcut","Shortcuts","cmdFunc","shortcuts","create$3","buttons","menuItems","icons","contextMenus","contextToolbars","sidebars","views","addIcon","bridge","DOM$1","extend","each$1","Editor","setupCallback","loadArgs","getArgs","saveArgs","initialContent","oldState","urlConverterCallback","urlObject","DOM","boundGlobalEvents","beforeUnloadDelegate","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","isQuirksMode","baseURL","documentBaseURL","srcScript","pluginBaseUrls","pluginBaseUrl","pluginName","invalidInlineTargets","isInvalidInlineTarget","createId","execCallback","findTargets","provideResults","initEditors","initCount","createEditor","existingEditor","editorId","editorOptions","FakeClipboard","dataValue","FakeClipboardItem","round","relativePosition","targetW","targetH","relChars","create$2","findBestRelativePosition","constrainRect","rels","inflate","intersect","cropRect","x1","y1","clamp","clampRect","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","Rect","awaiter","resolveCb","rejectCb","timeout","complete","completer","Resource","tasks","resultFns","resources","loadErrMsg","runErrMsg","task","waiter","storage","localStorage","LocalStorage","publicApi","tinymce$1","exportToModuleLoaders","tinymce","module","global$1","range$1","get$d","get$c","setOptions","all$1","owner","children$2","child$2","after$5","appendAt","copy$2","cloneChildren","mutate$1","validSectionList","isValidSection","grid","columns","address","column","detail","detailnew","isNew","extended","isLocked","rowdetail","section","rowdetailnew","elementnew","rowcells","startRow","startCol","finishRow","finishCol","columnext","colgroup","body$1","getBody$1","ancestors$4","ancestors$3","bindFrom","toFloat","getRaw$2","copy$1","source","sourceDom","targetDom","getAttrValue","hasColspan","cellOrCol","hasRowspan","getCssValue","minWidth","minHeight","cells$1","columns$1","columnGroups","columnGroup","rows$1","fromRowsOrColGroups","getParentSection","fromTable$1","fromPastedRows","Dimension","px","calcContentBoxSize","upper","lower","paddingUpper","paddingLower","borderUpper","borderLower","getCalculatedWidth","boxSizing","getHeight$1","getInnerWidth","api$2","getOuter$2","getInner","getRuntime$1","addCells","gridRow","existingCells","newCells","setCells","addCell","mutateCell","mapCells","getCell","getCellElement","cellLength","extractGridDetails","cloneRow","cloneCell","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","locked","lockedArr","getAt","warehouse","findItem","filterItems","generateColumns","rowData","columnsGroup","columnIndex","colIndex","access","lockedColumns","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","colgroups","Warehouse","isValidCell","cols","rowsArr","col","decide","getBlock","getFallback","deduce","extras","onDirection","isLtr","getDirection","getOuter$1","getRuntime","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop$1","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","negate","step","optElements","units","decimalDigits","exponentPart","dot","float","isUnit","accepted","check","parse","unitRaw","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","setHeight","getHeightValue","convert","getter","setter","newSize","total","normalizePixelSize","getTotalHeight","getRawWidth$1","getRawHeight","getPercentageWidth","getPixelWidth$1","getHeight","getGenericWidth","setGenericWidth","getPixelTableWidth","getPercentTableWidth","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","justCols","isValidColumn","supportsColWidths","getDimension","cellOpt","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","tableSize","cellWidth","getPixelWidths","getHeightFrom","getPixelHeights","getRawHeights","widthLookup","noneSize","zero","percentageSize","getFloatWidth","_delta","currentWidth","change","newWidth","pixelSize","chooseSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","allCells","findSelectedStats","house","isSelected","totalColumns","endRow","endCol","makeCell","seenSelected","rowIndex","fillInGaps","stats","totalRows","replica","widthDelta","emptyRows","getTableWidthDelta","colWidths","allColsWidth","extract$1","selectedSelector","replicaHouse","replicaStats","unselectedCells","transferableAttributes","createCell","createCol","createColgroup","createRow$1","replace$1","pasteReplace","cloneFormats","oldCell","newCell","firstText","formatSelector","clonedFormat","cloneAppropriateAttributes","validAttributes","attribute","cellOperations","formatsToClone","cloneCss","paste$1","defaultWidth","getPixelForcedWidth","determineDefaultTableStyles","defaultStyles","isTableResponsiveForced","shouldStyleWithCss","isTablePixelsForced","determineDefaultTableAttributes","defaultAttributes","getTableCloneElements","hasTableObjectResizing","objectResizing","getTableHeaderType","getTableColumnResizingBehaviour","isPreserveTableColumnResizing","isResizeTableColumnResizing","getTableSizingMode","isTablePercentagesForced","hasTableResizeBars","shouldMergeContentOnPaste","getTableDefaultAttributes","getTableDefaultStyles","tableUseColumnGroup","getBody","getIsRoot","removeDataStyle","removeStyleAttribute","getSelectionStart","getPixelWidth","getPixelHeight","getRawWidth","isPercentage$1","isPixel","isInEditableContext$1","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","finishCell","startCoords","finishCoords","fc","getBox$1","moveBy$1","intercepts$1","parentCell","innerCell","isContainedBy","c1","c2","moveBy","deltaRow","deltaColumn","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","getBox","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","getLanguage","universe","look","tail","oneAll","unsafeOne","commonElement","ancestors$2","ps1","ps2","prune","ind","pruned1","pruned2","shared","sharedOne$1","ancestors$1","universe$3","sharedOne","_universe","lookupTable","rootTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","getLast","boxes","lastSelectedSelector","getEdges","firstSelectedSelector","expandTo","identified","shiftSelection","retrieve","retrieveBox","edges","sectionSelector","firstAncestor","lastAncestor","fA","lA","unmergable","hasSpan","hasRowOrColSpan","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","forMenu","paste","clipboard","generators","pasteRows","_cell","getSelectionCellFallback","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","getCellsFromFakeSelection","extractSelected","serializeElements","actions","multiCellContext","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","halve","main","surround","sizes","clampDeltaHelper","minCellSize","clampNegativeDelta","clampDelta","resizeTable","calcFixedDeltas","clampedDelta","calcRelativeDeltas","newThis","calcLeftEdgeDeltas","isRelative","resizer","_prev","totalWidth","pixelDelta","newSizes","preserveTable","isLastColumn","maxDelta","_minCellSize","_totalWidth","_pixelDelta","_isRelative","getGridSize","isHeaderCell","isHeaderCells","getRowHeaderType","isHeaderRow","getRowType","findCommonCellType","headerCells","findCommonRowType","rowTypes","hasHeader","hasFooter","hasBody","findTableRowHeaderType","rowType","transformCell","substitution","transformRow","fixedCell","sectionCells","TableSection","setIfNot","generateSection","sectionName","newSection","render$1","syncRows","gridSection","syncColGroup","colGroup","renderSection","sectionElems","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","columnGroupsSection","clonedCell","getColumn","getRow","findDiff","comp","subgrid","isColRow","toDetails","seen","updateSeen","toGrid","colgroupCols","rowCells","rowDetail","fromWarehouse","toDetailList","findInWarehouse","extractCells","cell$1","lc","adjustment","postAction","genWrappers","behaviours","tableSection","newElements","tableSizing","resizing","onPaste","onPasteByEditor","onMergable","_warehouse","onUnmergable","onCells","onUnlockedCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","merge$2","unmerge","currentCell","currentCellElm","isToReplace","uniqueCells","splitCols","prevCell","substitute","splitRows","rowPrevCells","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","generateElements","generator","rowFill","exampleRow","colFill","newChildren","lockedColFill","colNum","newChild","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","mergeTables","gridBRows","mergeHeight","mergeWidth","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","getValidStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getLockedColumnsWithinBounds","validStartAddress","lockedColumnsWithinBounds","fittedGrid","newLockedColumnsWithinBounds","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","insertRowAt","example","newRow","getElementFor","withinSpan","insertColumnAt","deleteColumnsAt","deleteRowsAt","notInStartRow","notInStartColumn","isDuplicatedCell","rowReplacerPredicate","targetRow","columnHeaders","_rowIndex","columnReplacePredicate","targetColumn","rowHeaders","_colIndex","determineScope","applyScope","isInHeader","getScope","rowScopeGenerator","columnScopeGenerator","replaceIn","replacer","genScope","shouldReplace","getColumnCells","getRowCells","replaceColumns","indexes","shouldReplaceCell","scopeGenerator","replaceRows","newGrid","replaceCells","targetCells","ColumnContext","neighbours","determine","resize","onOnly","onLeft","onMiddle","onRight","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","groups","recalculateHeightForCells","heights","matchRowHeight","sumUp","recalculate","recalculateAndApply","adjustWidth","clampedStep","deltas","newWidths","dx","adjustHeight","newHeights","dy","newCellSizes","newRowSizes","adjustAndRedistributeWidths$1","_table","resizeBehaviour","tablePixelWidth","adjustWidthTo","_info","uniqueColumns","currentDetail","isCol","isColgroup","isRow$1","elementToData","modification","toData","nuCell","nuRow","recent","transform$1","makeNew","getScopeAttribute","Generators","getScopeProperty","stringAttributes","baseScope","blockList","isList$1","isEmptyTag$1","universe$1","advancedBr","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","outcome","cursor","findEditableCursorPosition","elementFromGrid","cursorElement","uniqueRows","opInsertRowsBefore","targetIndex","opInsertRowsAfter","newG","opInsertColumnsBefore","extractDetail","opInsertColumnsAfter","opMakeColumnsHeader","initialGrid","columnIndexes","opMakeCellsHeader","opUnmakeColumnsHeader","opUnmakeCellsHeader","makeRowsSection","rowIndexes","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","opEraseColumns","_comparator","_genWrappers","maxColIndex","opEraseRows","maxRowIndex","opMergeCells","opUnmergeCells","opPasteCells","pasteDetails","wh","gridifyRows","opPasteColsBefore","mergedGrid","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnsType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","opGetCellsType","opGetRowsType","minRowRange","maxRowRange","selectedRows","adjustAndRedistributeWidths","firstColumnIsLocked","lastColumnIsLocked","getColumnsWidth","uniqueCols","colWidth","insertColumnsExtractor","eraseColumnsExtractor","pasteColumnsExtractor","headerCellGenerator","bodyCellGenerator","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnsHeader","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","unmergeCells","pasteCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","getCellsType","getRowsType","fireNewRow","fireNewCell","fireTableModified","fireTableSelectionChange","otherCells","fireTableSelectionClear","styleModified","structureModified","styleAndStructureModified","TableActions","resizeHandler","cellSelectionHandler","isTableBody","lastRowGuard","lastColumnGuard","colMutationOp","getTableSectionType","setSelectionFromAction","des","guard","noEvents","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","makeCellsHeader$1","unmakeCellsHeader$1","makeColumnsHeader$1","unmakeColumnsHeader$1","makeRowsHeader$1","makeRowsBody$1","makeRowsFooter$1","constrainSpan","currentColspan","isColInRange","generateColGroup","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateRows","cellsToCopy","copiedCells","fakeTR","copyCols","fakeColGroups","fakeRows","copyRows","slicedGrid","filteredGrid","slicedDetails","adt$5","validateFor","rawAmount","Size","redistributeToPercent","pc","redistributeToPx","newTotalWidth","scale","redistributeEmpty","newWidthType","pixels","redistributeValues","_pc","redistribute$1","newType","floats","roundDown","floored","scan","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","nuWidths","newHeight","hUnit","totalHeight","oldHeights","nuHeights","isPercentSizing","isPixelSizing","isNoneSizing","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","convertToNoneSize","rowElements","DefaultRenderOptions","tableHeaderCell","tableCell","tableColumn","createRow","createGroupRow","createRows","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRows","tbody","numRows","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","colHeaders","insertTable","checkInput","headerRows","headerColumns","global","tableTypeBase","tableTypeRow","tableTypeColumn","setData","fakeClipboardItem","clearData","setRows","rowsOpt","clearRows","getRows","setColumns","columnsOpt","clearColumns","getColumns","getSelectionStartCellOrCaption","getSelectionStartCell","eraseTable","cellOrCaption","setSizingMode","sizing","getTableFromCell","performActionOnSelection","toggleTableClass","toggleTableCellClass","formatterAction","toggleCaption","postExecute","_data","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","actOnType","getFormatName","validArgs","registerQueryCommands","lookupOnSelection","adt$4","cata$1","Response","selectNodeContents","selectNodeContentsUsing","toRect","getFirstRect$1","asLtrRange","Situs","convertToRange","makeSitus","sync","selectRange","cellSel","selected","newSels","backtrack","_direction","transition","sidestep","advance","successors","rules","succ","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","seekLeft","seekRight","beforeBounds","afterBounds","isRow","BeforeAfter","beforeOffset","afterOffset","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","inParent","indexInParent","gatherer","cand","gather","handleBr","handleParent","adjacent","tryBr","tgt","analysis","_message","translate","xDelta","yDelta","getTop","getBottom","getPartialBox","toCaret","getElemBox","getBoxAt","getEntireBox","JUMP_SIZE","NUM_RETRIES","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","upMovement","higherCaret","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","guess","newCaret","checkScroll","adjusted","retry","moved","Retries","MAX_RETRIES","findSpot","brNeighbour","tryCursor","situs","tryAgain","tryAt","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","isInEditableContext","MouseSelection","clearstate","singleCell","isNonEditableCell","isCellClosestContentEditable","up","isKey","keycode","isUp","isDown","isNavigation","ltr","rtl","by","makeRange","same","getNativeSelection","doSetNativeRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setExact","setRelative","firstRng","doGetExact","setToElement","selectNodeContents$1","getExact","getFirstRect","WindowBridge","exactAdt","rc","mouse","isEditableNode","isEditableSelection","keyboard","clearToNavigate","realEvent","update$1","attempts","external","add$1","removeClasses","SelectionAnnotation","addSelectionClass","removeSelectionClasses","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","clearBeforeUpdate","onMultiple","onSingle","none","multiple","single","Selections","lazyRoot","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","upOrLeftCells","downOrRightCells","fromRawEvent$1","hasInternalTarget","TableCellSelectionHandler","cellSelection","syncSelection","mouseHandlers","keyHandlers","external$1","handleResponse","response","keyup","wrappedEvent","keydown","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","doubleTap","lastTarget","lastTimeStamp","lT","lTS","Event","create$1","typeDefs","reqMessage","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","handleUnsupported","baseWith","req","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","InDrag","onEvent","NoDrag","Movement","noDragState","inDragState","dragState","mutation","sink","throttledDrop","mousemove","off","runIfActive","namespace","dashNamespace","Blocker","MouseDrag","dragApi","blocker","mdown","mup","mmove","mout","Mutation","BarMutation","bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","resizableRows","resizableColumns","resizableCols","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","warhouse","resizableRowBars","resizableRowPositions","_pos","barIndex","resizableColBars","resizableColPositions","refresh","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","newX","oldX","mousedown","findClosestEditableTable","mouseover","destroy$1","refresh$1","tbl","TableResize","lazySizing","hdirection","vdirection","manager","_event","ResizeWire","chrome","createContainer","barResizerPrefix","syncPixels","computedWidth","TableResizeHandler","tableResize","resizeWire","startRawW","lazyResizingBehaviour","getNumColumns","afterCornerResize","isRightEdgeResize","percentW","targetPercentW","sz","rawWire","rawTable","setupTable","DomModel","applyListFormat","listName","getNumberStyles","getBulletStyles","isCustomList","isChildOfBody","regex","isListNode","isTableCellNode","inList","getSelectedStyleType","isWithinNonEditable","setNodeChangeHandler","nodeChangeHandler","initialNode","styleValueToText","makeSetupHandler","updateButtonState","addSplitButton","tooltip","iconStyle","iconName","itemValue","displayText","_splitButtonApi","listStyle","addButton","addControl","global$2","allowHtmlInNamedAnchor","namedAnchorSelector","isEmptyString","getIdFromAnchor","isAnchor","isEmptyNamedAnchor","removeEmptyNamedAnchorsInSelection","isValidId","getNamedAnchor","getId","createAnchor","updateAnchor","anchorElement","insertAnchor","newId","currentId","isNamedAnchorNode","isEmptyNamedAnchorNode","registerFormats","onSetupEditable","nodeChanged","buttonApi","unbindSelectorChanged","unbindEditableChanged","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","allowUnsafeLinkTarget","isTextNode","isBracketOrSpace","hasProtocol","isPunctuation","findChar","tempOffset","parseCurrentLine","autoLinkPattern","startSpot","convertToLink","defaultLinkTarget","handleSpacebar","handleBracket","global$4","global$3","fireRestoreDraft","fireStoreDraft","fireRemoveDraft","timeString","multiples","parsedTime","timeProcessor","shouldAskBeforeUnload","shouldRestoreWhenEmpty","getAutoSaveInterval","getAutoSaveRetention","getAutoSavePrefix","hasDraft","removeDraft","storeDraft","restoreDraft","startStoreDraft","interval","restoreLastDraft","editorEventCallback","fireInsertCustomChar","insertChar","evtChr","charMapProcessor","getCharMap$1","getCharMapAppend","UserDefined","getDefaultCharMap","charmapFilter","charmap","getCharsFromOption","extendCharMap","userCharMap","userCharMapAppend","userDefinedGroup","cg","getCharMap","fromCodePoint","charMatches","charCode","lowerCasePattern","patternName","charMap","makeGroupItems","makeTabs","charGroup","makePanel","makeTabPanel","currentTab","scanAndSet","dialogApi","updateFilter","initialData","bridgeSpec","changeData","_maxResults","_reject","autocompleteApi","getParentElement","getNormalizedBlock","setDirOnElements","blockElement","isBlockElementListItem","normalizedBlock","listItem","setDir","getNodeChangeHandler","insertEmoticon","DEFAULT_ID","getEmojiDatabase","getEmojiDatabaseUrl","getEmojiDatabaseId","getAppendedEmoji","getEmojiImageUrl","ALL_CATEGORY","categoryNameMap","translateCategory","categories","getUserDefinedEmoji","userDefinedEmoticons","initDatabase","databaseUrl","databaseId","emojiImagesUrl","getEmoji","lib","processEmojis","emojis","cats","userEmojis","listCategory","category","listAll","listCategories","waitForLoad","hasLoaded","emojiMatches","emoji","emojisFrom","maxResults","reachedLimit","initialState","dialogData","searchField","resultsField","getInitialState","actionData","_err","fullscreenState","unbindable","siblings$2","detect$3","fireFullscreenStateChanged","getFullscreenNative","getFullscreenRoot","getFullscreenElement","getFullscreenchangeEventName","requestFullscreen","sugarElem","exitFullscreen","sugarDoc","isFullscreenElement","siblings$1","siblingStyles","ancestorPosition","ancestorStyles","bgFallback","isAndroid","matchColor","editorBody","clobberStyles","gatherSiblings","clobber","clobberStyle","backup","bgColor","restoreStyles","clobberedEls","getScrollPos","setScrollPos","viewportUpdate","editorContainer","resizeBinder","scrollBinder","refreshScroll","refreshVisualViewport","toggleFullscreen","editorContainerS","fullscreenRoot","fullscreenInfo","editorContainerStyle","iframeStyle","handleClasses","fullscreenChangeHandler","_evt","newFullScreenInfo","generate","customTabs","currentCustomTabs","dialogOpener","getHelpTabs","getForcedPlugins","pLoadHtmlByLangCode","langCode","pLoadI18nHtml","initI18nLoad","pTab","convertText","updated","segment","tab$2","shortcutList","shortcutText","tab$1","availablePlugins","premiumPlugins","sortedPremiumPlugins","premiumPluginList","makeLink","identifyUnknownPlugin","getMetadata","metadata","getPluginData","getPluginKeys","pluginLister","pluginKeys","sortedPluginData","pd1","pd2","pluginLis","pluginsString","tab","changeLogLink","parseHelpTabsSetting","tabsFromSettings","tabs","newTabs","getNamesFromTabs","pParseCustomTabs","nav","versions","foundTabs","hasDimensions","hasAdvTab","hasUploadTab","getPrependUrl","getClassList","hasDescription","hasImageTitle","hasImageCaption","getImageList","showAccessibilityOptions","hasUploadUrl","hasUploadHandler","parseIntAndGetMax","val1","val2","getImageSize","dimensions","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","selectImage","isPlaceholderImage","isSafeImageUrl","getHspace","getVspace","getBorder","hasCaption","updateAttrib","wrapInFigure","figureElm","removeFigure","normalizeStyle","normalizeCss","setSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","getIsDecorative","getAlt","defaultData","getStyleValue","setAlt","figure","updateProp","oldData","newData","alt","isDecorative","sugarImage","updateAlt","_name","normalizeCss$1","mergedCss","compressed","getSelectedImage","splitTextBlock","readImageDataFromSelection","insertImageAtCaret","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","sanitizeImageData","insertOrUpdateImage","partialData","sanitizedData","getValue","sanitizeList","extractor","sanitize","isGroup","findEntryDelegate","ListUtils","optList","AdvTab","urlListSanitizer","futureImageList","hasAdvTab$1","hasUploadTab$1","hasUploadUrl$1","hasUploadHandler$1","hasDescription$1","hasImageTitle$1","hasDimensions$1","hasImageCaption$1","hasAccessibilityOptions","automaticUploads","prependURL","preUrl","makeItems","imageUrl","imageDescription","imageTitle","imageDimensions","getDialogContainerType","useColumns","MainTab","UploadTab","createState","fromImageData","toImageData","removeEmptyAlt","addPrependUrl2","srcURL","prependUrl","addPrependUrl","formFillFromMeta2","meta","formFillFromMeta","calculateImageSize","helpers","updateImagesDropdown","changeSrc","changeImages","changeFileInput","finalize","updateSrcAndSwitchTab","dataUrl","changeHandler","closeHandler","makeDialogBody","submitHandler","finalData","imageSize","createBlobCache","addToBlobCache","alertErr","uploadImage","Dialog","hasImageClass","toggleContentEditableState","toggleContentEditable","unbindEditable","filterProcessor","shouldMergeClasses","shouldImportExclusive","getSelectorConverter","getSelectorFilter","getCssGroups","shouldAppend","getFileFilter","getSkin","getSkinUrl","ungroupedOrder","groupOrder","groupTitle","itemInfo","internalEditorStyle","removeCacheSuffix","isSkinContentCss","skin","skinUrlBase","contentSkinUrlPart","compileFilter","isCssImportRule","isCssPageRule","getSelectors","fileFilter","selectors","contentCSSUrls","styleSheet","imported","cssRule","defaultConvertSelectorToFormat","selectorText","inlineSelectorElements","getGroupsBySelector","compileUserDefinedGroups","isExclusiveMode","isUniqueSelector","globallyUniqueSelectors","markUniqueSelector","convertSelectorToFormat","selectorConverter","converter","selectorFilter","processSelector","selectorGroups","menuItem","getDateFormat","getTimeFormat","shouldInsertTimeElement","getDefaultDateTime","daysShort","daysLong","monthsShort","monthsLong","addZeros","getDateTime","date","timeElm","computerTime","userTime","newTimeElm","insertDateTime","_api","makeMenuItemHandler","global$5","assumeExternalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","useQuickLink","sanitizeWith","extracter","ListOptions","isLink","getHref","collectNodesInRange","applyRelTargetRules","isUnsafe","addTargetRules","removeTargetRules","newRels","trimCaretContainers","getAnchorElement","getLinksInSelection","isImageFigure","isInAnchor","getAnchorText","anchorElm","getLinks$1","hasLinks","hasLinksInSelection","isOnlyTextSelected","inlineTextElements","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","updateLink","linkImageFigure","linkDomMutation","attachState","unlinkSelection","startAnchorElm","endAnchorElm","unlinkDomMutation","unlinkImageFigure","unwrapOptions","_k","sanitizeData","uriOptions","unlink","fig","isListGroup","findTextByValue","catalog","persistentText","fieldName","hasPersistentText","findCatalog","catalogs","DialogChanges","linkCatalog","persistentData","getTitleFromUrlChange","getTextFromUrlChange","onUrlChange","onCatalogChange","delayedConfirm","tryEmailTransform","tryProtocolTransform","defaultLinkProtocol","DialogConfirms","AnchorListOptions","anchorNodes","anchors","ClassListOptions","parseJson","LinkListOptions","linkList","optItems","RelOptions","initialTarget","isTargetBlank","enforceSafe","safeRelExtractor","fallbacks","TargetOptions","nonEmptyAttr","extractFromAnchor","linkClass","DialogInfo","linkNode","links","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","onSubmit","urlInput","titleText","dialogDelta","open$1","appendClickRemove","getLink","getSelectedLink","hasOnlyAltModifier","gotoLink","gotoSelectedLink","setupGotoLinks","toggleState","toggler","toggleLinkState","updateState","toggleLinkMenuState","hasExactlyOneLinkInSelection","toggleGotoLinkState","toggleUnlinkState","hasLinks$1","updateEnabled","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","getLinkText","onlyText","formApi","global$7","groupBy","wasType","global$6","isTextNode$1","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isVoid","keepBookmarks","shouldIndentOnTab","contentNode","blockAttrs","hasContentNode","splitList","removeAndKeepBookmarks","bookmarks","isDescriptionDetail","isDescriptionTerm","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","getNormalizedPoint","outRng","rangeStart","rangeEnd","listNames","listSelector","getParentList","selectionStart","getClosestListHost","isParentListSelected","findSubLists","getSelectedSubLists","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","getClosestEditingHost","parentTableCell","isListHost","isListInsideAnLiWithFirstAndLastNotListElement","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getParentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","listRoots","selectionIsWithinNonEditableList","fireListEvent","hasFirstChildList","hasLastChildList","isEntryList","isEntryNoList","isEntryComment","isIndented","cloneItemContent","createEntry","depth","joinSegment","joinSegments","segments","appendSegments","head$1","createSegment","listType","createSegments","populateSegments","normalizeSegment","createItem","appendItem","createInPreviousLiItem","writeShallow","cast","newCast","writeDeep","composeList","firstCommentEntryOpt","firstCommentEntry","fistCast","indentEntry","cloneListProperties","cleanListProperties","closestSiblingEntry","normalizeEntries","matchingEntry","entryToEntryNoList","isInPreviousLi","parseSingleItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","parseItem","parsedSiblings","parsedSibling","newDepth","parseLists","initialDepth","outdentedComposer","normalizedEntries","indentedComposer","composeEntries","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","selectionIndentation","isHandled","handleIndentation","indentListSelection","outdentListSelection","flattenListSelection","createBookmark","setupEndPoint","offsetNode","resolveBookmark","listToggleActionFromListName","updateListStyle","updateListAttrs","updateListWithDetails","getEndPointNode","findBlockAncestor","findBetterContainer","getSelectedTextBlocks","hasCompatibleStyle","sib","sibStyle","detailStyle","getRootSearchStart","applyList","listItemName","selectedTextBlocks","listBlock","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","liSibling","updateList$1","newList","updateCustomList","toggleMultipleLists","parentIsList","hasListStyleDetail","allLists","updateFunction","toggleSingleList","toggleList","_detail","selectedSubLists","normalizeList","normalizeLists","findNextCaretContainer","nonEmptyBlocks","hasOnlyOneBlockChild","isUnwrappable","unwrapSingleBlockChild","moveChildren","mergeLiElements","listNode","ul","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","otherLi","willMergeParentIntoChild","oldParentElRef","removeBlock","backspaceDeleteIntoListCaret","findValidElement","findRoot","otherLiCell","caretCell","hasListSelection","updateList","parseAlphabeticBase26","charValue","composeAlphabeticBase26","remainder","quotient","isUppercase","isLowercase","isNumeric","deduceListType","parseStartValue","parseDetail","currentList","queryListCommandState","registerDialog","nodeBuffer","wrapInvalidChildren","insertListItem","reducer","restBuffer","setupTabKey","setupToggleButtonHandler","toggleButtonHandler","exec","setupMenuButtonHandler","listProperties","getAudioTemplateCallback","getVideoTemplateCallback","getIframeTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","trimPx","getEphoxEmbedData","htmlToData","mimes","fileEnd","Parser","addPx","updateEphoxEmbed","sources","updateHtml","updateAll","numSources","sourceCount","urlPatterns","getProtocol","protocolMatches","getUrl","protocol","newUrl","matchPattern","iframeTemplateCallback","allowFullscreen","getFlashHtml","getAudioHtml","audioTemplateCallback","getVideoHtml","videoTemplateCallback","dataToHtml","dataIn","isMediaElement","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","getDimensions","dims","handleError","errorMessage","getEditorData","snippet","isEmbedIframe","addEmbedHtml","nuData","selectPlaceholder","beforeObjects","afterObjects","handleInsert","mediaDataType","shouldInsertAsNewIframe","prevData","submitForm","showDialog","editorData","currentData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","sizeInput","generalTab","embedTab","advancedFormItems","advancedTab","showDialog$1","isLiveEmbedNode","dimension","setDimensions","previewNode","useDefaults","fallbackHeight","defaultHeight","appendNodeContent","createPlaceholderNode","placeHolder","retainAttributesAndInnerHtml","createPreviewNode","previewWrapper","sanitizedHtml","shimNode","sourceNode","innerHtml","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","parseAndSanitize","getEditorOption","boolAttrs","realElmName","realElm","getKeyboardSpaces","wrapNbsps","stringRepeat","repeats","isVisualCharsEnabled","insertNbsp","times","nbspSpan","spaces","getSeparatorHtml","shouldSplitBlock","pageBreakClass","getPlaceholderHtml","separatorHtml","shouldSplitBlock$1","pageBreakSeparatorRegExp","getPreviewHtml","headHtml","cors","preventClicksOnLinksScript","dirAttr","toolbarProcessor","defaultSelectionToolbar","defaultInsertToolbar","defaultImageToolbar","getTextSelectionToolbarItems","getInsertToolbarItems","getImageToolbarItems","insertBlob","blobToBase64","pickFile","resolved","fileInput","resolveFileInput","cancelHandler","addToEditor$1","insertToolbarItems","sugarNode","addToEditor","isPagebreak","imageToolbarItems","textToolbarItems","enableWhenDirty","getOnSaveCallback","getOnCancelCallback","displayErrorMessage","save","formObj","onSaveCallback","onCancelCallback","stateToggle","punctuation$1","punctuation","compareDocumentPosition","documentPositionPreceding","isSimpleBoundary","isContentEditableTrueInCef","nuSection","walkerFn","skipStart","collectTextToBoundary","finishSection","collectRangeSections","ceTrueNode","fromRng","fromNode","fromNodes","matchedText","matchStart","matchFinish","nodePositions","matchIdx","replacementNode","findAndMark","textSections","findAndMarkInSelection","getElmIndex","markAllMatches","currentSearchState","findSpansByIndex","spans","searchState","testIndex","escapeSearchText","wholeWord","wordRegex","matchCase","escapedText","isForwardSelection","isMatchSpan","matchIndex","currentIndex","currentMatchIndex","nextIndex","keepEditorSelection","hasNext","hasPrev","currentState","selectedText","updateButtonStates","updateSearchState","disableAll","disable","toggleNotFoundAlert","getDialogSpec","focusButtonIfRequired","doFind","getPanelItems","showNoMatchesAlertBanner","flatten$1","children$3","child$3","getNodeName","removePxSuffix","addPxSuffix","getSelectionEnd","oot","getTDTHOverallStyle","firstChildStyle","currentStyle","setAlign","setVAlign","defaultTableToolbar","defaultCellBorderWidths","defaultCellBorderStyles","determineDefaultStyles","isResponsiveForced","isPixelsForced","determineDefaultAttributes","getTableBorderWidths","getTableBorderStyles","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","getCellClassList","getRowClassList","getTableClassList","getToolbar","getTableBackgroundColorMap","getTableBorderColorMap","getDefaultStyles","getDefaultAttributes","getRowsFromSelection","verticalAlignValues","shorthandRegex","longformRegex","isHexString","fromString$1","anyToHex","canvas","canvasContext","onSetupToggle","formatValue","boundCallback","isNone","checkNode","buildListItems","buildMenuItems","applyTableCellStyle","filterNoneItem","generateMenuItemsCallback","buildColorMenu","colorList","colorMap","changeRowHeader","changeColumnHeader","getClassList$1","getItems$2","getAdvancedTab","dialogName","advTabItems","DomModifier","getRowType$1","extractAdvancedStyles","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAlignment","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","borderWidth","border","advStyle","getCellPaddingCellSpacing","spacing","cellspacing","padding","cellpadding","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","colElm","cellA","cellB","updateSimpleProps$1","modifier","colModifier","shouldUpdate","updateAdvancedProps$1","applyStyleData$1","wasChanged","isSingleCell","cellElm","shouldOverrideCurrentValue","applyStructureData$1","applyCellData","modifiedData","onSubmitCellForm","getData$1","cellsData","open$2","dialogTabPanel","dialogPanel","formChildren","getItems$1","updateSimpleProps","updateAdvancedProps","applyStyleData","rowElm","applyStructureData","applyRowData","typeModified","onSubmitRowForm","rowsData","getItems","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","styleTDTH","applyDataToElement","shouldApplyOnCell","shouldStyleWithCss$1","hasAdvancedTableTab$1","cellStyles","advData","onSubmitTableForm","applicableCellProperties","captionElm","captionModified","generalPanel","nonAdvancedForm","advancedForm","dialogBody","runAction","noMenu","getSelectionTargets","changeHandlers","isCaption","isDisabledForSelection","startCellOrCaption","getExtractedDetails","resetTargets","setupHandler","isDisabled","onSetupWithToggle","isDisabledFromLocked","lockedDisable","onSetupTable","onSetupCellOrRow","onSetupColumn","onSetupPasteable","getClipboardData","onSetupPasteableColumn","onSetupMergeable","_targets","onSetupUnmergeable","onSetupTableWithCaption","onSetupTableHeaders","onSetupTableRowHeaders","onSetupTableColumnHeaders","onSetupEditable$1","addButtons","selectionTargets","addButtonIfRegistered","addToggleButtonIfRegistered","tableClassList","tableCellClassList","addToolbars","isEditableTable","toolbar","addMenuItems","addMenuIfRegistered","addToggleMenuIfRegistered","insertTableAction","hasRowMenuItems","hasColumnMenuItems","hasCellMenuItems","Plugin$1","fireVisualBlocks","toggleVisualBlocks","enabledState","isEnabledByDefault","toggleActiveState","fireVisualChars","charMapToRegExp","regExp","charMapToSelector","regExpGlobal","nbspClass","wrapCharWithSpan","isWrappedNbsp","isMatch","isChildEditable","filterEditableDescendants","findParentElm","replaceWithSpans","nodeList","withSpans","applyVisualChars","toggleVisualChars","debouncedToggle","enabledStated","regExps","characterIndices","SETS$1","EMPTY_STRING$1","PUNCTUATION$1","WHITESPACE$1","SETS","OTHER","getType","setsLength","memoize","classify","characters","memoized","isWordBoundary","nextType","nextNextType","prevType","EMPTY_STRING","WHITESPACE","PUNCTUATION","isProtocol","findWordEnd","findUrlEnd","findWordsWithIndices","sChars","characterMap","words","indices","word","startOfWord","endOfWord","endOfUrl","getDefaultOptions","getWordsWithIndices","extractedChars","getWords","removeZwsp$1","txt","treeWalker","strLen","countWords","countCharacters","countCharactersWithoutSpaces","createBodyCounter","createSelectionCounter","createBodyWordCounter","fireWordCountUpdate","updateCount","debouncedUpdate","isVue3","Component","defineComponent","emit","expose","loading","ref","uuidv4","preventSettingContent","preventUpdatingModelValue","Disabled","conclude","globalProps","OutputFormat","Options","watch","onContentChange","newContent","newModelValue","previousValue","onUnmounted","onMounted","intersectionObserver","unref","withInstall","sfc","app","resolveConfig","ComponentWithInstall"],"mappings":"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A,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKmC,KAAQnC,GAAO;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKoC,KAAapC,GAAO;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKqC,KAAgBrC,GAAO;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKsC,KAAWtC,GAAO;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKuC,KAAmBvC,GAAO;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACK58E,KAAO48E,GAAO,CAAC,OAAO,CAAC,GACvBl9E,KAAOk9E,GAAO;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKwC,KAAMxC,GAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACKyC,KAASzC,GAAO;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACK0C,KAAM1C,GAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK,GACK2C,KAAgB1C,GAAK,2BAA2B,GAChD2C,KAAW3C,GAAK,uBAAuB,GACvC4C,KAAc5C,GAAK,eAAe,GAClC6C,KAAY7C,GAAK,4BAA4B,GAC7C8C,KAAY9C,GAAK,gBAAgB,GACjC+C,KAAiB/C,GAAK,2FAA2F,GACjHgD,KAAoBhD,GAAK,uBAAuB,GAChDiD,KAAkBjD,GAAK,6DAA6D,GACpFkD,KAAelD,GAAK,SAAS;AACnC,QAAImD,KAAc,OAAO,OAAO;AAAA,MAC9B,WAAW;AAAA,MACX,eAAeT;AAAA,MACf,UAAUC;AAAA,MACV,aAAaC;AAAA,MACb,WAAWC;AAAA,MACX,WAAWC;AAAA,MACX,gBAAgBC;AAAA,MAChB,mBAAmBC;AAAA,MACnB,iBAAiBC;AAAA,MACjB,cAAcC;AAAA,IACpB,CAAK;AACD,UAAME,KAAY,MAAM,OAAO,SAAW,MAAc,OAAO,QACzDC,KAA4B,SAAmCC,GAAcC,GAAmB;AACpG,UAAI,OAAOD,KAAiB,YAAY,OAAOA,EAAa,gBAAiB;AAC3E,eAAO;AAET,UAAI7oF,IAAS;AACb,YAAM+oF,IAAY;AAClB,MAAID,KAAqBA,EAAkB,aAAaC,CAAS,MAC/D/oF,IAAS8oF,EAAkB,aAAaC,CAAS;AAEnD,YAAMC,IAAa,eAAehpF,IAAS,MAAMA,IAAS;AAC1D,UAAI;AACF,eAAO6oF,EAAa,aAAaG,GAAY;AAAA,UAC3C,WAAW5gF,GAAM;AACf,mBAAOA;AAAA,UACR;AAAA,UACD,gBAAgBmmB,GAAW;AACzB,mBAAOA;AAAA,UACR;AAAA,QACX,CAAS;AAAA,MACF,QAAW;AACV,uBAAQ,KAAK,yBAAyBy6D,IAAa,wBAAwB,GACpE;AAAA,MACR;AAAA,IACP;AACI,aAASC,KAAkB;AACzB,UAAIC,IAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIP,GAAS;AAC1F,YAAMQ,IAAY,CAAAr6F,OAAQm6F,GAAgBn6F,EAAI;AAG9C,UAFAq6F,EAAU,UAAU,SACpBA,EAAU,UAAU,IAChB,CAACD,KAAU,CAACA,EAAO,YAAYA,EAAO,SAAS,aAAa;AAC9D,eAAAC,EAAU,cAAc,IACjBA;AAET,YAAMC,IAAmBF,EAAO,UAC1BG,IAAgBD,EAAiB;AACvC,UAAI,EAAC,UAAAE,EAAQ,IAAIJ;AACjB,YAAM,EAAC,kBAAAK,GAAkB,qBAAAC,GAAqB,MAAAC,GAAM,SAAAC,GAAS,YAAAC,GAAY,cAAAC,IAAeV,EAAO,gBAAgBA,EAAO,iBAAiB,iBAAAW,GAAiB,WAAAC,GAAW,cAAAjB,EAAY,IAAIK,GAC7Ka,IAAmBL,EAAQ,WAC3BM,IAAY3C,GAAa0C,GAAkB,WAAW,GACtDE,IAAiB5C,GAAa0C,GAAkB,aAAa,GAC7D1jD,KAAgBghD,GAAa0C,GAAkB,YAAY,GAC3DG,KAAgB7C,GAAa0C,GAAkB,YAAY;AACjE,UAAI,OAAOP,KAAwB,YAAY;AAC7C,cAAMW,KAAWb,EAAS,cAAc,UAAU;AAClD,QAAIa,GAAS,WAAWA,GAAS,QAAQ,kBACvCb,IAAWa,GAAS,QAAQ;AAAA,MAE/B;AACD,UAAIC,IACAC,KAAY;AAChB,YAAM,EAAC,gBAAAC,IAAgB,oBAAAC,IAAoB,wBAAAC,IAAwB,sBAAAC,GAAoB,IAAInB,GACrF,EAAC,YAAA1T,GAAU,IAAIwT;AACrB,UAAIsB,KAAQ,CAAA;AACZ,MAAAvB,EAAU,cAAc,OAAOlE,MAAY,cAAc,OAAOiF,MAAkB,cAAcI,MAAkBA,GAAe,uBAAuB;AACxJ,YAAM,EAAC,eAAArC,IAAe,UAAAC,IAAU,aAAAC,IAAa,WAAAC,IAAW,WAAAC,IAAW,mBAAAE,IAAmB,iBAAAC,GAAe,IAAIE;AACzG,UAAI,EAAC,gBAAgBiC,GAAgB,IAAIjC,IACrCkC,KAAe;AACnB,YAAMC,KAAuB9D,GAAS,IAAI;AAAA,QACxC,GAAGS;AAAA,QACH,GAAGC;AAAA,QACH,GAAGC;AAAA,QACH,GAAGE;AAAA,QACH,GAAGl/E;AAAA,MACX,CAAO;AACD,UAAIoiF,KAAe;AACnB,YAAMC,KAAuBhE,GAAS,IAAI;AAAA,QACxC,GAAG3+E;AAAA,QACH,GAAG0/E;AAAA,QACH,GAAGC;AAAA,QACH,GAAGC;AAAA,MACX,CAAO;AACD,UAAIgD,KAA0B,OAAO,KAAK,OAAO,OAAO,MAAM;AAAA,QAC5D,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,OAAO;AAAA,QACR;AAAA,QACD,oBAAoB;AAAA,UAClB,UAAU;AAAA,UACV,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,OAAO;AAAA,QACR;AAAA,QACD,gCAAgC;AAAA,UAC9B,UAAU;AAAA,UACV,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,OAAO;AAAA,QACR;AAAA,MACF,CAAA,CAAC,GACEC,KAAc,MACdC,KAAc,MACdC,KAAkB,IAClBC,KAAkB,IAClBC,KAA0B,IAC1BC,KAA2B,IAC3BC,KAAqB,IACrBC,KAAiB,IACjBC,KAAa,IACbC,KAAa,IACbC,KAAa,IACbC,KAAsB,IACtBC,KAAsB,IACtBC,KAAe,IACfC,KAAuB;AAC3B,YAAMC,KAA8B;AACpC,UAAIC,KAAe,IACfC,KAAW,IACXC,KAAe,CAAA,GACfC,KAAkB;AACtB,YAAMC,KAA0BtF,GAAS,IAAI;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO;AACD,UAAIuF,KAAgB;AACpB,YAAMC,KAAwBxF,GAAS,IAAI;AAAA,QACzC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO;AACD,UAAIyF,KAAsB;AAC1B,YAAMC,KAA8B1F,GAAS,IAAI;AAAA,QAC/C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,GACK2F,KAAmB,sCACnBC,KAAgB,8BAChBC,KAAiB;AACvB,UAAIC,KAAYD,IACZE,KAAiB,IACjBC,KAAqB;AACzB,YAAMC,KAA6BjG,GAAS,IAAI;AAAA,QAC9C2F;AAAA,QACAC;AAAA,QACAC;AAAA,MACD,GAAEzG,EAAc;AACjB,UAAI8G;AACJ,YAAMC,KAA+B;AAAA,QACnC;AAAA,QACA;AAAA,MACR,GACYC,KAA4B;AAClC,UAAInG,IACAoG,KAAS;AACb,YAAMC,KAAc/D,EAAS,cAAc,MAAM,GAC3CgE,KAAoB,SAA2BC,IAAW;AAC9D,eAAOA,cAAqB,UAAUA,cAAqB;AAAA,MACnE,GACYC,KAAe,SAAsBC,IAAK;AAC9C,YAAI,EAAAL,MAAUA,OAAWK,KA4GzB;AAAA,eAzGI,CAACA,MAAO,OAAOA,MAAQ,cACzBA,KAAM,CAAA,IAERA,KAAMj6F,GAAMi6F,EAAG,GACfR,KAAoBC,GAA6B,QAAQO,GAAI,iBAAiB,MAAM,KAAKR,KAAoBE,KAA4BF,KAAoBQ,GAAI,mBACjKzG,KAAoBiG,OAAsB,0BAA0B9G,KAAiBD,IACrF0E,KAAe,kBAAkB6C,KAAM1G,GAAS,CAAA,GAAI0G,GAAI,cAAczG,EAAiB,IAAI6D,IAC3FC,KAAe,kBAAkB2C,KAAM1G,GAAS,CAAA,GAAI0G,GAAI,cAAczG,EAAiB,IAAI+D,IAC3FgC,KAAqB,wBAAwBU,KAAM1G,GAAS,CAAA,GAAI0G,GAAI,oBAAoBtH,EAAc,IAAI6G,IAC1GR,KAAsB,uBAAuBiB,KAAM1G,GAASvzF,GAAMi5F,EAA2B,GAAGgB,GAAI,mBAAmBzG,EAAiB,IAAIyF,IAC5IH,KAAgB,uBAAuBmB,KAAM1G,GAASvzF,GAAM+4F,EAAqB,GAAGkB,GAAI,mBAAmBzG,EAAiB,IAAIuF,IAChIH,KAAkB,qBAAqBqB,KAAM1G,GAAS,CAAA,GAAI0G,GAAI,iBAAiBzG,EAAiB,IAAIqF,IACpGpB,KAAc,iBAAiBwC,KAAM1G,GAAS,CAAA,GAAI0G,GAAI,aAAazG,EAAiB,IAAI,IACxFkE,KAAc,iBAAiBuC,KAAM1G,GAAS,CAAA,GAAI0G,GAAI,aAAazG,EAAiB,IAAI,IACxFmF,KAAe,kBAAkBsB,KAAMA,GAAI,eAAe,IAC1DtC,KAAkBsC,GAAI,oBAAoB,IAC1CrC,KAAkBqC,GAAI,oBAAoB,IAC1CpC,KAA0BoC,GAAI,2BAA2B,IACzDnC,KAA2BmC,GAAI,6BAA6B,IAC5DlC,KAAqBkC,GAAI,sBAAsB,IAC/CjC,KAAiBiC,GAAI,kBAAkB,IACvC9B,KAAa8B,GAAI,cAAc,IAC/B7B,KAAsB6B,GAAI,uBAAuB,IACjD5B,KAAsB4B,GAAI,uBAAuB,IACjD/B,KAAa+B,GAAI,cAAc,IAC/B3B,KAAe2B,GAAI,iBAAiB,IACpC1B,KAAuB0B,GAAI,wBAAwB,IACnDxB,KAAewB,GAAI,iBAAiB,IACpCvB,KAAWuB,GAAI,YAAY,IAC3B9C,KAAmB8C,GAAI,sBAAsBnF,IAC7CuE,KAAYY,GAAI,aAAab,IAC7B5B,KAA0ByC,GAAI,2BAA2B,IACrDA,GAAI,2BAA2BH,GAAkBG,GAAI,wBAAwB,YAAY,MAC3FzC,GAAwB,eAAeyC,GAAI,wBAAwB,eAEjEA,GAAI,2BAA2BH,GAAkBG,GAAI,wBAAwB,kBAAkB,MACjGzC,GAAwB,qBAAqByC,GAAI,wBAAwB,qBAEvEA,GAAI,2BAA2B,OAAOA,GAAI,wBAAwB,kCAAmC,cACvGzC,GAAwB,iCAAiCyC,GAAI,wBAAwB,iCAEnFlC,OACFH,KAAkB,KAEhBQ,OACFD,KAAa,KAEXQ,OACFvB,KAAe7D,GAAS,CAAA,GAAI,CAAC,GAAGr+E,EAAI,CAAC,GACrCoiF,KAAe,CAAA,GACXqB,GAAa,SAAS,OACxBpF,GAAS6D,IAAcpD,EAAM,GAC7BT,GAAS+D,IAAc1iF,EAAI,IAEzB+jF,GAAa,QAAQ,OACvBpF,GAAS6D,IAAcnD,EAAK,GAC5BV,GAAS+D,IAAchD,EAAG,GAC1Bf,GAAS+D,IAAc9C,EAAG,IAExBmE,GAAa,eAAe,OAC9BpF,GAAS6D,IAAclD,EAAU,GACjCX,GAAS+D,IAAchD,EAAG,GAC1Bf,GAAS+D,IAAc9C,EAAG,IAExBmE,GAAa,WAAW,OAC1BpF,GAAS6D,IAAchD,EAAQ,GAC/Bb,GAAS+D,IAAc/C,EAAM,GAC7BhB,GAAS+D,IAAc9C,EAAG,KAG1ByF,GAAI,aACF7C,OAAiBC,OACnBD,KAAep3F,GAAMo3F,EAAY,IAEnC7D,GAAS6D,IAAc6C,GAAI,UAAUzG,EAAiB,IAEpDyG,GAAI,aACF3C,OAAiBC,OACnBD,KAAet3F,GAAMs3F,EAAY,IAEnC/D,GAAS+D,IAAc2C,GAAI,UAAUzG,EAAiB,IAEpDyG,GAAI,qBACN1G,GAASyF,IAAqBiB,GAAI,mBAAmBzG,EAAiB,GAEpEyG,GAAI,oBACFrB,OAAoBC,OACtBD,KAAkB54F,GAAM44F,EAAe,IAEzCrF,GAASqF,IAAiBqB,GAAI,iBAAiBzG,EAAiB,IAE9DiF,OACFrB,GAAa,OAAO,IAAI,KAEtBY,MACFzE,GAAS6D,IAAc;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,UACZ,CAAW,GAECA,GAAa,UACf7D,GAAS6D,IAAc,CAAC,OAAO,CAAC,GAChC,OAAOK,GAAY,QAEjBwC,GAAI,sBAAsB;AAC5B,gBAAI,OAAOA,GAAI,qBAAqB,cAAe;AACjD,oBAAMhH,GAAgB,6EAA6E;AAErG,gBAAI,OAAOgH,GAAI,qBAAqB,mBAAoB;AACtD,oBAAMhH,GAAgB,kFAAkF;AAE1G,YAAA2D,KAAqBqD,GAAI,sBACzBpD,KAAYD,GAAmB,WAAW,EAAE;AAAA,UACtD;AACU,YAAIA,OAAuB,WACzBA,KAAqBxB,GAA0BC,GAAcQ,CAAa,IAExEe,OAAuB,QAAQ,OAAOC,MAAc,aACtDA,KAAYD,GAAmB,WAAW,EAAE;AAGhD,UAAI9E,MACFA,GAAOmI,EAAG,GAEZL,KAASK;AAAA;AAAA,MACjB,GACYC,KAAiC3G,GAAS,IAAI;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,GACK4G,KAA0B5G,GAAS,IAAI;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,GACK6G,KAA+B7G,GAAS,IAAI;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,GACK8G,KAAe9G,GAAS,CAAE,GAAEU,EAAK;AACvC,MAAAV,GAAS8G,IAAcnG,EAAU,GACjCX,GAAS8G,IAAclG,EAAa;AACpC,YAAMmG,KAAkB/G,GAAS,CAAE,GAAEa,EAAQ;AAC7C,MAAAb,GAAS+G,IAAiBjG,EAAgB;AAC1C,YAAMkG,KAAuB,SAA8BloF,IAAS;AAClE,YAAImE,KAASkgF,GAAcrkF,EAAO;AAClC,SAAI,CAACmE,MAAU,CAACA,GAAO,aACrBA,KAAS;AAAA,UACP,cAAc6iF;AAAA,UACd,SAAS;AAAA,QACrB;AAEQ,cAAMmB,KAAU9H,GAAkBrgF,GAAQ,OAAO,GAC3CooF,KAAgB/H,GAAkBl8E,GAAO,OAAO;AACtD,eAAK+iF,GAAmBlnF,GAAQ,YAAY,IAGxCA,GAAQ,iBAAiB8mF,KACvB3iF,GAAO,iBAAiB4iF,KACnBoB,OAAY,QAEjBhkF,GAAO,iBAAiB0iF,KACnBsB,OAAY,UAAUC,OAAkB,oBAAoBP,GAA+BO,EAAa,KAE1G,EAAQJ,GAAaG,EAAO,IAEjCnoF,GAAQ,iBAAiB6mF,KACvB1iF,GAAO,iBAAiB4iF,KACnBoB,OAAY,SAEjBhkF,GAAO,iBAAiB2iF,KACnBqB,OAAY,UAAUL,GAAwBM,EAAa,IAE7D,EAAQH,GAAgBE,EAAO,IAEpCnoF,GAAQ,iBAAiB+mF,KACvB5iF,GAAO,iBAAiB2iF,MAAiB,CAACgB,GAAwBM,EAAa,KAG/EjkF,GAAO,iBAAiB0iF,MAAoB,CAACgB,GAA+BO,EAAa,IACpF,KAEF,CAACH,GAAgBE,EAAO,MAAMJ,GAA6BI,EAAO,KAAK,CAACH,GAAaG,EAAO,KAEjG,GAAAf,OAAsB,2BAA2BF,GAAmBlnF,GAAQ,YAAY,KA7BnF;AAAA,MAiCjB,GACYqoF,KAAe,SAAsB1lF,IAAM;AAC/C,QAAAy9E,GAAUkD,EAAU,SAAS,EAAE,SAAS3gF,GAAM,CAAA;AAC9C,YAAI;AACF,UAAAA,GAAK,WAAW,YAAYA,EAAI;AAAA,QACjC,QAAW;AACV,UAAAA,GAAK,OAAM;AAAA,QACZ;AAAA,MACT,GACY2lF,KAAmB,SAA0BnzF,IAAMwN,IAAM;AAC7D,YAAI;AACF,UAAAy9E,GAAUkD,EAAU,SAAS;AAAA,YAC3B,WAAW3gF,GAAK,iBAAiBxN,EAAI;AAAA,YACrC,MAAMwN;AAAA,UAClB,CAAW;AAAA,QACF,QAAW;AACV,UAAAy9E,GAAUkD,EAAU,SAAS;AAAA,YAC3B,WAAW;AAAA,YACX,MAAM3gF;AAAA,UAClB,CAAW;AAAA,QACF;AAED,YADAA,GAAK,gBAAgBxN,EAAI,GACrBA,OAAS,QAAQ,CAAC8vF,GAAa9vF,EAAI;AACrC,cAAI2wF,MAAcC;AAChB,gBAAI;AACF,cAAAsC,GAAa1lF,EAAI;AAAA,YAClB,QAAW;AAAA,YACX;AAAA;AAED,gBAAI;AACF,cAAAA,GAAK,aAAaxN,IAAM,EAAE;AAAA,YAC3B,QAAW;AAAA,YACX;AAAA,MAGb,GACYozF,KAAgB,SAAuBC,IAAO;AAClD,YAAIhjF,IACAijF;AACJ,YAAI5C;AACF,UAAA2C,KAAQ,sBAAsBA;AAAA,aACzB;AACL,gBAAM5pE,KAAU2hE,GAAYiI,IAAO,aAAa;AAChD,UAAAC,KAAoB7pE,MAAWA,GAAQ,CAAC;AAAA,QACzC;AACD,QAAIwoE,OAAsB,2BAA2BJ,OAAcD,OACjEyB,KAAQ,mEAAmEA,KAAQ;AAErF,cAAME,KAAenE,KAAqBA,GAAmB,WAAWiE,EAAK,IAAIA;AACjF,YAAIxB,OAAcD;AAChB,cAAI;AACF,YAAAvhF,KAAM,IAAIy+E,EAAW,EAAC,gBAAgByE,IAActB,EAAiB;AAAA,UACtE,QAAW;AAAA,UACX;AAEH,YAAI,CAAC5hF,MAAO,CAACA,GAAI,iBAAiB;AAChC,UAAAA,KAAMi/E,GAAe,eAAeuC,IAAW,YAAY,IAAI;AAC/D,cAAI;AACF,YAAAxhF,GAAI,gBAAgB,YAAYyhF,KAAiBzC,KAAYkE;AAAA,UAC9D,QAAW;AAAA,UACX;AAAA,QACF;AACD,cAAMv9E,KAAO3F,GAAI,QAAQA,GAAI;AAI7B,eAHIgjF,MAASC,MACXt9E,GAAK,aAAas4E,EAAS,eAAegF,EAAiB,GAAGt9E,GAAK,WAAW,CAAC,KAAK,IAAI,GAEtF67E,OAAcD,KACTnC,GAAqB,KAAKp/E,IAAKmgF,KAAiB,SAAS,MAAM,EAAE,CAAC,IAEpEA,KAAiBngF,GAAI,kBAAkB2F;AAAA,MACtD,GACYw9E,KAAkB,SAAyB1/F,IAAM;AACrD,eAAOy7F,GAAmB,KAAKz7F,GAAK,iBAAiBA,IAAMA,IAAM66F,EAAW,eAAeA,EAAW,eAAeA,EAAW,WAAW,MAAM,EAAK;AAAA,MAC9J,GACY8E,KAAe,SAAsB33E,IAAK;AAC9C,eAAOA,cAAe+yE,MAAoB,OAAO/yE,GAAI,YAAa,YAAY,OAAOA,GAAI,eAAgB,YAAY,OAAOA,GAAI,eAAgB,cAAc,EAAEA,GAAI,sBAAsB8yE,MAAiB,OAAO9yE,GAAI,mBAAoB,cAAc,OAAOA,GAAI,gBAAiB,cAAc,OAAOA,GAAI,gBAAiB,YAAY,OAAOA,GAAI,gBAAiB,cAAc,OAAOA,GAAI,iBAAkB;AAAA,MACzZ,GACY43E,KAAU,SAAiBvH,IAAQ;AACvC,eAAO,OAAOsC,KAAS,WAAWtC,cAAkBsC,IAAOtC,MAAU,OAAOA,MAAW,YAAY,OAAOA,GAAO,YAAa,YAAY,OAAOA,GAAO,YAAa;AAAA,MAC7K,GACYwH,KAAe,SAAsBC,IAAYn0C,IAAatrB,IAAM;AACxE,QAAKu7D,GAAMkE,EAAU,KAGrB9I,GAAa4E,GAAMkE,EAAU,GAAG,CAAA17D,OAAQ;AACtC,UAAAA,GAAK,KAAKi2D,GAAW1uC,IAAatrB,IAAMi+D,EAAM;AAAA,QACxD,CAAS;AAAA,MACT,GACYyB,KAAoB,SAA2Bp0C,IAAa;AAChE,YAAIjrC;AAEJ,YADAm/E,GAAa,0BAA0Bl0C,IAAa,IAAI,GACpDg0C,GAAah0C,EAAW;AAC1B,iBAAAyzC,GAAazzC,EAAW,GACjB;AAET,cAAMuzC,KAAUhH,GAAkBvsC,GAAY,QAAQ;AAKtD,YAJAk0C,GAAa,uBAAuBl0C,IAAa;AAAA,UAC/C,SAAAuzC;AAAA,UACA,aAAapD;AAAA,QACvB,CAAS,GACGnwC,GAAY,mBAAmB,CAACi0C,GAAQj0C,GAAY,iBAAiB,MAAM,CAACi0C,GAAQj0C,GAAY,OAAO,KAAK,CAACi0C,GAAQj0C,GAAY,QAAQ,iBAAiB,MAAM+rC,GAAW,WAAW/rC,GAAY,SAAS,KAAK+rC,GAAW,WAAW/rC,GAAY,WAAW;AAC/P,iBAAAyzC,GAAazzC,EAAW,GACjB;AAET,YAAI,CAACmwC,GAAaoD,EAAO,KAAK/C,GAAY+C,EAAO,GAAG;AAClD,cAAI,CAAC/C,GAAY+C,EAAO,KAAKc,GAAwBd,EAAO,MACtDhD,GAAwB,wBAAwB,UAAUxE,GAAWwE,GAAwB,cAAcgD,EAAO,KAElHhD,GAAwB,wBAAwB,YAAYA,GAAwB,aAAagD,EAAO;AAC1G,mBAAO;AAEX,cAAI/B,MAAgB,CAACG,GAAgB4B,EAAO,GAAG;AAC7C,kBAAM11E,KAAa4xE,GAAczvC,EAAW,KAAKA,GAAY,YACvD5X,KAAawD,GAAcoU,EAAW,KAAKA,GAAY;AAC7D,gBAAI5X,MAAcvqB,IAAY;AAC5B,oBAAMunE,KAAah9C,GAAW;AAC9B,uBAASrsD,KAAIqpG,KAAa,GAAGrpG,MAAK,GAAG,EAAEA;AACrC,gBAAA8hC,GAAW,aAAa0xE,EAAUnnD,GAAWrsD,EAAC,GAAG,EAAI,GAAGyzG,EAAexvC,EAAW,CAAC;AAAA,YAEtF;AAAA,UACF;AACD,iBAAAyzC,GAAazzC,EAAW,GACjB;AAAA,QACR;AAKD,eAJIA,cAAuBivC,KAAW,CAACqE,GAAqBtzC,EAAW,MAIlEuzC,OAAY,cAAcA,OAAY,aAAaA,OAAY,eAAexH,GAAW,+BAA+B/rC,GAAY,SAAS,KAChJyzC,GAAazzC,EAAW,GACjB,OAEL8wC,MAAsB9wC,GAAY,aAAa,MACjDjrC,KAAUirC,GAAY,aACtBjrC,KAAU62E,GAAc72E,IAASy4E,IAAe,GAAG,GACnDz4E,KAAU62E,GAAc72E,IAAS04E,IAAU,GAAG,GAC9C14E,KAAU62E,GAAc72E,IAAS24E,IAAa,GAAG,GAC7C1tC,GAAY,gBAAgBjrC,OAC9By2E,GAAUkD,EAAU,SAAS,EAAE,SAAS1uC,GAAY,UAAW,EAAA,CAAE,GACjEA,GAAY,cAAcjrC,MAG9Bm/E,GAAa,yBAAyBl0C,IAAa,IAAI,GAChD;AAAA,MACf,GACYs0C,KAAoB,SAA2BC,IAAOv0D,IAAQlrC,IAAO;AACzE,YAAIu8F,OAAiBrxD,OAAW,QAAQA,OAAW,YAAYlrC,MAAS+5F,KAAY/5F,MAAS89F;AAC3F,iBAAO;AAET,YAAI,EAAAjC,MAAmB,CAACF,GAAYzwD,EAAM,KAAK+rD,GAAW4B,IAAW3tD,EAAM;AACtE,cAAI,EAAA0wD,MAAmB3E,GAAW6B,IAAW5tD,EAAM;AACnD,gBAAI,CAACqwD,GAAarwD,EAAM,KAAKywD,GAAYzwD,EAAM;AAClD,kBAAI,EAAAq0D,GAAwBE,EAAK,MAAMhE,GAAwB,wBAAwB,UAAUxE,GAAWwE,GAAwB,cAAcgE,EAAK,KAAKhE,GAAwB,wBAAwB,YAAYA,GAAwB,aAAagE,EAAK,OAAOhE,GAAwB,8BAA8B,UAAUxE,GAAWwE,GAAwB,oBAAoBvwD,EAAM,KAAKuwD,GAAwB,8BAA8B,YAAYA,GAAwB,mBAAmBvwD,EAAM,MAAMA,OAAW,QAAQuwD,GAAwB,mCAAmCA,GAAwB,wBAAwB,UAAUxE,GAAWwE,GAAwB,cAAcz7F,EAAK,KAAKy7F,GAAwB,wBAAwB,YAAYA,GAAwB,aAAaz7F,EAAK;AAE3yB,uBAAO;AAAA,uBAEA,CAAAi9F,GAAoB/xD,EAAM;AAChC,kBAAI,CAAA+rD,GAAWmE,IAAkBtE,GAAc92F,IAAOi5F,IAAiB,EAAE,CAAC;AAC1E,oBAAK,GAAA/tD,OAAW,SAASA,OAAW,gBAAgBA,OAAW,WAAWu0D,OAAU,YAAY1I,GAAc/2F,IAAO,OAAO,MAAM,KAAK+8F,GAAc0C,EAAK;AAC1J,sBAAI,EAAA3D,MAA2B,CAAC7E,GAAW+B,IAAmBlC,GAAc92F,IAAOi5F,IAAiB,EAAE,CAAC;AACvG,wBAAIj5F;AACP,6BAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAET,eAAO;AAAA,MACf,GACYu/F,KAA0B,SAAiCd,IAAS;AACxE,eAAOA,GAAQ,QAAQ,GAAG,IAAI;AAAA,MACtC,GACYiB,KAAsB,SAA6Bx0C,IAAa;AACpE,YAAIvzC,IACA3X,IACAkrC,IACArzC;AACJ,QAAAunG,GAAa,4BAA4Bl0C,IAAa,IAAI;AAC1D,cAAM,EAAC,YAAAr1B,GAAU,IAAIq1B;AACrB,YAAI,CAACr1B;AACH;AAEF,cAAM8pE,KAAY;AAAA,UAChB,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,mBAAmBpE;AAAA,QAC7B;AAEQ,aADA1jG,KAAIg+B,GAAW,QACRh+B,QAAK;AACV,UAAA8f,KAAOke,GAAWh+B,EAAC;AACnB,gBAAM,EAAC,MAAA4T,IAAM,cAAAm0F,GAAY,IAAIjoF;AAC7B,UAAA3X,KAAQyL,OAAS,UAAUkM,GAAK,QAAQq/E,GAAWr/E,GAAK,KAAK;AAC7D,gBAAMkoF,KAAY7/F;AAQlB,cAPAkrC,KAASusD,GAAkBhsF,EAAI,GAC/Bk0F,GAAU,WAAWz0D,IACrBy0D,GAAU,YAAY3/F,IACtB2/F,GAAU,WAAW,IACrBA,GAAU,gBAAgB,QAC1BP,GAAa,yBAAyBl0C,IAAay0C,EAAS,GAC5D3/F,KAAQ2/F,GAAU,WACdA,GAAU;AACZ;AAEF,cAAI,CAACA,GAAU,UAAU;AACvB,YAAAf,GAAiBnzF,IAAMy/C,EAAW;AAClC;AAAA,UACD;AACD,cAAI,CAAC6wC,MAA4B9E,GAAW,QAAQj3F,EAAK,GAAG;AAC1D,YAAA4+F,GAAiBnzF,IAAMy/C,EAAW;AAClC;AAAA,UACD;AACD,UAAI8wC,OACFh8F,KAAQ82F,GAAc92F,IAAO04F,IAAe,GAAG,GAC/C14F,KAAQ82F,GAAc92F,IAAO24F,IAAU,GAAG,GAC1C34F,KAAQ82F,GAAc92F,IAAO44F,IAAa,GAAG;AAE/C,gBAAM6G,KAAQhI,GAAkBvsC,GAAY,QAAQ;AACpD,cAAI,CAACs0C,GAAkBC,IAAOv0D,IAAQlrC,EAAK,GAAG;AAC5C,YAAA4+F,GAAiBnzF,IAAMy/C,EAAW;AAClC;AAAA,UACD;AAKD,cAJIsxC,OAAyBtxD,OAAW,QAAQA,OAAW,YACzD0zD,GAAiBnzF,IAAMy/C,EAAW,GAClClrD,KAAQy8F,KAA8Bz8F,KAEpC66F,MAAsB,OAAOvB,KAAiB,YAAY,OAAOA,EAAa,oBAAqB,cACjG,CAAAsG;AAEF,oBAAQtG,EAAa,iBAAiBmG,IAAOv0D,EAAM,GAAC;AAAA,cACpD,KAAK,eAAe;AAChB,gBAAAlrC,KAAQ66F,GAAmB,WAAW76F,EAAK;AAC3C;AAAA,cACD;AAAA,cACH,KAAK,oBAAoB;AACrB,gBAAAA,KAAQ66F,GAAmB,gBAAgB76F,EAAK;AAChD;AAAA,cACD;AAAA,YACF;AAGL,cAAIA,OAAU6/F;AACZ,gBAAI;AACF,cAAID,KACF10C,GAAY,eAAe00C,IAAcn0F,IAAMzL,EAAK,IAEpDkrD,GAAY,aAAaz/C,IAAMzL,EAAK;AAAA,YAEvC,QAAW;AACV,cAAA4+F,GAAiBnzF,IAAMy/C,EAAW;AAAA,YACnC;AAAA,QAEJ;AACD,QAAAk0C,GAAa,2BAA2Bl0C,IAAa,IAAI;AAAA,MACjE,GACY40C,KAAqB,SAASA,GAAmB3/E,IAAU;AAC/D,YAAI4/E;AACJ,cAAMC,KAAiBf,GAAgB9+E,EAAQ;AAE/C,aADAi/E,GAAa,2BAA2Bj/E,IAAU,IAAI,GAC/C4/E,KAAaC,GAAe;AAEjC,UADAZ,GAAa,0BAA0BW,IAAY,IAAI,GACnD,CAAAT,GAAkBS,EAAU,MAG5BA,GAAW,mBAAmB/F,KAChC8F,GAAmBC,GAAW,OAAO,GAEvCL,GAAoBK,EAAU;AAEhC,QAAAX,GAAa,0BAA0Bj/E,IAAU,IAAI;AAAA,MAC7D;AACM,aAAAy5E,EAAU,WAAW,SAAUkF,IAAO;AACpC,YAAIZ,KAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAA,GAC1Ez8E,IACAw+E,IACA/0C,IACAg1C;AAKJ,YAJA3C,KAAiB,CAACuB,IACdvB,OACFuB,KAAQ,UAEN,OAAOA,MAAU,YAAY,CAACK,GAAQL,EAAK;AAC7C,cAAI,OAAOA,GAAM,YAAa;AAE5B,gBADAA,KAAQA,GAAM,YACV,OAAOA,MAAU;AACnB,oBAAM5H,GAAgB,iCAAiC;AAAA;AAGzD,kBAAMA,GAAgB,4BAA4B;AAGtD,YAAI,CAAC0C,EAAU;AACb,iBAAOkF;AAST,YAPK5C,MACH+B,GAAaC,EAAG,GAElBtE,EAAU,UAAU,IAChB,OAAOkF,MAAU,aACnBnC,KAAW,KAETA;AACF,cAAImC,GAAM,UAAU;AAClB,kBAAML,KAAUhH,GAAkBqH,GAAM,QAAQ;AAChD,gBAAI,CAACzD,GAAaoD,EAAO,KAAK/C,GAAY+C,EAAO;AAC/C,oBAAMvH,GAAgB,yDAAyD;AAAA,UAElF;AAAA,mBACQ4H,cAAiB5E;AAC1B,UAAAz4E,KAAOo9E,GAAc,SAAS,GAC9BoB,KAAex+E,GAAK,cAAc,WAAWq9E,IAAO,EAAI,GACpDmB,GAAa,aAAa,KAAKA,GAAa,aAAa,UAElDA,GAAa,aAAa,SADnCx+E,KAAOw+E,KAIPx+E,GAAK,YAAYw+E,EAAY;AAAA,aAE1B;AACL,cAAI,CAAC7D,MAAc,CAACJ,MAAsB,CAACC,MAAkB6C,GAAM,QAAQ,GAAG,MAAM;AAClF,mBAAOjE,MAAsByB,KAAsBzB,GAAmB,WAAWiE,EAAK,IAAIA;AAG5F,cADAr9E,KAAOo9E,GAAcC,EAAK,GACtB,CAACr9E;AACH,mBAAO26E,KAAa,OAAOE,KAAsBxB,KAAY;AAAA,QAEhE;AACD,QAAIr5E,MAAQ06E,MACVwC,GAAal9E,GAAK,UAAU;AAE9B,cAAM0+E,KAAelB,GAAgBtC,KAAWmC,KAAQr9E,EAAI;AAC5D,eAAOypC,KAAci1C,GAAa;AAChC,UAAIb,GAAkBp0C,EAAW,MAG7BA,GAAY,mBAAmB8uC,KACjC8F,GAAmB50C,GAAY,OAAO,GAExCw0C,GAAoBx0C,EAAW;AAEjC,YAAIyxC;AACF,iBAAOmC;AAET,YAAI1C,IAAY;AACd,cAAIC;AAEF,iBADA6D,KAAajF,GAAuB,KAAKx5E,GAAK,aAAa,GACpDA,GAAK;AACV,cAAAy+E,GAAW,YAAYz+E,GAAK,UAAU;AAAA;AAGxC,YAAAy+E,KAAaz+E;AAEf,kBAAI85E,GAAa,cAAcA,GAAa,oBAC1C2E,KAAa7Z,GAAW,KAAKwT,GAAkBqG,IAAY,EAAI,IAE1DA;AAAA,QACR;AACD,YAAIE,KAAiBnE,KAAiBx6E,GAAK,YAAYA,GAAK;AAC5D,eAAIw6E,MAAkBZ,GAAa,UAAU,KAAK55E,GAAK,iBAAiBA,GAAK,cAAc,WAAWA,GAAK,cAAc,QAAQ,QAAQw1E,GAAWiC,IAAcz3E,GAAK,cAAc,QAAQ,IAAI,MAC/L2+E,KAAiB,eAAe3+E,GAAK,cAAc,QAAQ,OAAO;AAAA,IAAQ2+E,KAExEpE,OACFoE,KAAiBtJ,GAAcsJ,IAAgB1H,IAAe,GAAG,GACjE0H,KAAiBtJ,GAAcsJ,IAAgBzH,IAAU,GAAG,GAC5DyH,KAAiBtJ,GAAcsJ,IAAgBxH,IAAa,GAAG,IAE1DiC,MAAsByB,KAAsBzB,GAAmB,WAAWuF,EAAc,IAAIA;AAAA,MAC3G,GACMxG,EAAU,YAAY,SAAUsE,IAAK;AACnC,QAAAD,GAAaC,EAAG,GAChBhC,KAAa;AAAA,MACrB,GACMtC,EAAU,cAAc,WAAY;AAClC,QAAAiE,KAAS,MACT3B,KAAa;AAAA,MACrB,GACMtC,EAAU,mBAAmB,SAAU15F,IAAKyX,IAAM3X,IAAO;AACvD,QAAK69F,MACHI,GAAa,CAAE,CAAA;AAEjB,cAAMwB,KAAQhI,GAAkBv3F,EAAG,GAC7BgrC,KAASusD,GAAkB9/E,EAAI;AACrC,eAAO6nF,GAAkBC,IAAOv0D,IAAQlrC,EAAK;AAAA,MACrD,GACM45F,EAAU,UAAU,SAAUyF,IAAYgB,IAAc;AACtD,QAAI,OAAOA,MAAiB,eAG5BlF,GAAMkE,EAAU,IAAIlE,GAAMkE,EAAU,KAAK,CAAA,GACzC3I,GAAUyE,GAAMkE,EAAU,GAAGgB,EAAY;AAAA,MACjD,GACMzG,EAAU,aAAa,SAAUyF,IAAY;AAC3C,YAAIlE,GAAMkE,EAAU;AAClB,iBAAO5I,GAAS0E,GAAMkE,EAAU,CAAC;AAAA,MAE3C,GACMzF,EAAU,cAAc,SAAUyF,IAAY;AAC5C,QAAIlE,GAAMkE,EAAU,MAClBlE,GAAMkE,EAAU,IAAI;MAE9B,GACMzF,EAAU,iBAAiB,WAAY;AACrC,QAAAuB,KAAQ,CAAA;AAAA,MAChB,GACavB;AAAA,IACR;AACD,QAAI0G,KAAS5G;AAEb,UAAM6G,KAAShsF,GAAM,MAAMyjC,KAAOzjC,GAAM,MAClCisF,KAAa;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,GACUC,KAAgB;AAAA,MACpB,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,IACd,GACUC,KAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,IACN,GACUC,KAAmB,CAACC,GAAkBnC,MACtCx4F,GAAc26F,CAAgB,IACzB,CAACA,IAED36F,GAAcw4F,CAAO,IAAI,CAACj2F,EAAWk4F,IAAwBjC,CAAO,IAAI,IAG7EoC,KAAY,CAAAC,MAAc;AAC9B,UAAI;AACF,eAAO,mBAAmBA,CAAU;AAAA,MACrC,QAAY;AACX,eAAO,SAASA,CAAU;AAAA,MAC3B;AAAA,IACP,GACUC,KAAe,CAAC3wE,GAAU6iE,GAAKwL,MAAY;AAC/C,YAAMuC,IAAaH,GAAU5N,CAAG,EAAE,QAAQ,OAAO,EAAE;AACnD,aAAI7iE,EAAS,oBACJ,KACE,4BAA4B,KAAK4wE,CAAU,IAC7C,KACE5wE,EAAS,uBACX,KACE,iBAAiB,KAAK4wE,CAAU,IAClCL,GAAiBvwE,EAAS,qBAAqBquE,CAAO,KAAK,yBAAyB,KAAKuC,CAAU,IAEnG,UAAU,KAAKA,CAAU;AAAA,IAExC;AAAA,IACI,MAAMC,GAAI;AAAA,MACR,OAAO,aAAahO,GAAK;AACvB,YAAI9xF;AACJ,cAAM+/F,IAAgB,mBAAmBjO,CAAG,EAAE,MAAM,GAAG,GACjD/9D,IAAU,eAAe,KAAKgsE,EAAc,CAAC,CAAC;AACpD,eAAIhsE,MACF/zB,IAAO+zB,EAAQ,CAAC,IAEX;AAAA,UACL,MAAA/zB;AAAA,UACA,MAAM+/F,EAAc,CAAC;AAAA,QAC/B;AAAA,MACO;AAAA,MACD,OAAO,UAAUjO,GAAKvtD,GAASzmC,IAAU,CAAA,GAAI;AAC3C,YAAIA,EAAQ;AACV,iBAAO;AACF;AACL,gBAAM+hG,IAAazsE,GAAS,OAAO0+D,CAAG,EAAE,QAAQ,uBAAuB,EAAE;AACzE,iBAAO,CAAC8N,GAAa9hG,GAAS+hG,GAAYt7D,CAAO;AAAA,QAClD;AAAA,MACF;AAAA,MACD,OAAO,mBAAmBo8B,GAAK;AAC7B,YAAI7yE;AACJ,YAAIw9C;AACJ,eAAIq1B,EAAI,SAAS,QAAQ,MAAM,MAAM,KAAKA,EAAI,aAAa,UACzDr1B,KAAWx9C,IAAK6yE,EAAI,UAAU,QAAQ7yE,MAAO,SAASA,IAAK,KAE3Dw9C,IAAUq1B,EAAI,WAAW,OAAOA,EAAI,OAAOA,EAAI,UAE7C,yBAAyB,KAAKr1B,CAAO,MACvCA,IAAUA,EAAQ,QAAQ,YAAY,EAAE,EAAE,QAAQ,iBAAiB,EAAE,GAChE,UAAU,KAAKA,CAAO,MACzBA,KAAW,OAGRA;AAAA,MACR;AAAA,MACD,YAAYh4B,GAAK2b,IAAW,IAAI;AAC9B,aAAK,OAAO,IACZ,KAAK,YAAY,IACjB3b,IAAMujC,GAAKvjC,CAAG,GACd,KAAK,WAAW2b;AAChB,cAAM+wE,IAAU/wE,EAAS,UACnBuN,IAAO;AACb,YAAI,yBAAyB,KAAKlpB,CAAG,KAAK,QAAQ,KAAKA,CAAG,GAAG;AAC3D,UAAAkpB,EAAK,SAASlpB;AACd;AAAA,QACD;AACD,cAAM2sF,IAAqB3sF,EAAI,QAAQ,IAAI,MAAM;AAIjD,YAHIA,EAAI,QAAQ,GAAG,MAAM,KAAK,CAAC2sF,MAC7B3sF,KAAO0sF,KAAUA,EAAQ,YAAY,UAAmB,gBAAgB1sF,IAEtE,CAAC,iBAAiB,KAAKA,CAAG,GAAG;AAC/B,gBAAMg4B,IAAU00D,IAAUA,EAAQ,OAAO,IAAIF,GAAI,SAAS,SAAS,IAAI,EAAE;AACzE,eAAKE,KAAY,OAA6B,SAASA,EAAQ,cAAc;AAC3E,YAAA1sF,IAAM,eAAekpB,EAAK,UAAU8O,GAASh4B,CAAG;AAAA,eAC3C;AACL,kBAAMmqB,IAAQ,oBAAoB,KAAKnqB,CAAG;AAC1C,YAAImqB,MACFnqB,KAAO0sF,KAAWA,EAAQ,YAAY,UAAU,gBAAgBxjE,EAAK,UAAU8O,GAAS7N,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC;AAAA,UAE9G;AAAA,QACF;AACD,QAAAnqB,IAAMA,EAAI,QAAQ,OAAO,UAAU;AACnC,cAAM4sF,IAAW,uNAAuN,KAAK5sF,CAAG;AAChP,QAAI4sF,KACFd,GAAOC,IAAY,CAACpoG,GAAGnR,MAAM;AAC3B,cAAIq6G,IAAOD,EAASp6G,CAAC;AACrB,UAAIq6G,MACFA,IAAOA,EAAK,QAAQ,eAAe,IAAI,IAEzC3jE,EAAKvlC,CAAC,IAAIkpG;AAAA,QACtB,CAAW,GAECH,MACGxjE,EAAK,aACRA,EAAK,WAAWwjE,EAAQ,WAErBxjE,EAAK,aACRA,EAAK,WAAWwjE,EAAQ,WAEtB,CAACxjE,EAAK,QAAQA,EAAK,SAAS,eAC9BA,EAAK,OAAOwjE,EAAQ,QAElB,CAACxjE,EAAK,QAAQA,EAAK,SAAS,gBAC9BA,EAAK,OAAOwjE,EAAQ,OAEtBxjE,EAAK,SAAS,KAEZyjE,MACFzjE,EAAK,WAAW;AAAA,MAEnB;AAAA,MACD,QAAQnpB,GAAM;AACZ,cAAM+sF,IAAY,mBAAmB,KAAK/sF,CAAI;AAC9C,QAAI+sF,MACF,KAAK,OAAOA,EAAU,CAAC,GACvB,KAAK,YAAYA,EAAU,CAAC,GAC5B,KAAK,OAAOA,EAAU,CAAC,IAEzB,KAAK,SAAS,IACd,KAAK,OAAM;AAAA,MACZ;AAAA,MACD,WAAWtO,GAAK;AACd,YAAIA,MAAQ;AACV,iBAAOA;AAET,cAAMuO,IAAc,IAAIP,GAAIhO,GAAK,EAAE,UAAU,KAAI,CAAE;AACnD,YAAIuO,EAAY,SAAS,cAAc,KAAK,SAASA,EAAY,QAAQA,EAAY,QAAQ,KAAK,SAASA,EAAY,QAAQ,KAAK,aAAaA,EAAY,YAAYA,EAAY,aAAa;AAChM,iBAAOA,EAAY;AAErB,cAAMC,IAAK,KAAK,OAAM,GAAIC,IAAKF,EAAY;AAC3C,YAAIC,MAAOC,KAAMD,EAAG,OAAOA,EAAG,SAAS,CAAC,MAAM,OAAOA,EAAG,OAAO,GAAGA,EAAG,SAAS,CAAC,MAAMC;AACnF,iBAAOD;AAET,YAAI3nD,IAAS,KAAK,UAAU,KAAK,MAAM0nD,EAAY,IAAI;AACvD,eAAIA,EAAY,UACd1nD,KAAU,MAAM0nD,EAAY,QAE1BA,EAAY,WACd1nD,KAAU,MAAM0nD,EAAY,SAEvB1nD;AAAA,MACR;AAAA,MACD,WAAWm5C,GAAK0O,GAAQ;AACtB,cAAMC,IAAc,IAAIX,GAAIhO,GAAK,EAAE,UAAU,KAAI,CAAE;AACnD,eAAO2O,EAAY,OAAOD,KAAU,KAAK,aAAaC,CAAW,CAAC;AAAA,MACnE;AAAA,MACD,aAAa3O,GAAK;AAChB,YAAI,KAAK,QAAQA,EAAI,QAAQ,KAAK,YAAYA,EAAI,UAAU;AAC1D,cAAI,KAAK,QAAQA,EAAI;AACnB,mBAAO;AAET,gBAAM4O,IAAc,KAAK,WAAWpB,GAAc,KAAK,QAAQ,IAAI;AACnE,cAAIoB,MAAgB,KAAK,QAAQA,OAAiB5O,EAAI,QAAQ4O;AAC5D,mBAAO;AAAA,QAEV;AACD,eAAO;AAAA,MACR;AAAA,MACD,UAAUhoF,GAAMrF,GAAM;AACpB,YAAIstF,IAAa,GAAGp1F,IAAM,IAAIzlB,GAAG4Q;AACjC,cAAMkqG,IAAiBloF,EAAK,UAAU,GAAGA,EAAK,YAAY,GAAG,CAAC,EAAE,MAAM,GAAG,GACnE9F,IAAQS,EAAK,MAAM,GAAG;AAC5B,YAAIutF,EAAe,UAAUhuF,EAAM;AACjC,eAAK9sB,IAAI,GAAG4Q,IAAIkqG,EAAe,QAAQ96G,IAAI4Q,GAAG5Q;AAC5C,gBAAIA,KAAK8sB,EAAM,UAAUguF,EAAe96G,CAAC,MAAM8sB,EAAM9sB,CAAC,GAAG;AACvD,cAAA66G,IAAa76G,IAAI;AACjB;AAAA,YACD;AAAA;AAGL,YAAI86G,EAAe,SAAShuF,EAAM;AAChC,eAAK9sB,IAAI,GAAG4Q,IAAIkc,EAAM,QAAQ9sB,IAAI4Q,GAAG5Q;AACnC,gBAAIA,KAAK86G,EAAe,UAAUA,EAAe96G,CAAC,MAAM8sB,EAAM9sB,CAAC,GAAG;AAChE,cAAA66G,IAAa76G,IAAI;AACjB;AAAA,YACD;AAAA;AAGL,YAAI66G,MAAe;AACjB,iBAAOttF;AAET,aAAKvtB,IAAI,GAAG4Q,IAAIkqG,EAAe,UAAUD,IAAa,IAAI76G,IAAI4Q,GAAG5Q;AAC/D,UAAAylB,KAAO;AAET,aAAKzlB,IAAI66G,IAAa,GAAGjqG,IAAIkc,EAAM,QAAQ9sB,IAAI4Q,GAAG5Q;AAChD,UAAIA,MAAM66G,IAAa,IACrBp1F,KAAO,MAAMqH,EAAM9sB,CAAC,IAEpBylB,KAAOqH,EAAM9sB,CAAC;AAGlB,eAAOylB;AAAA,MACR;AAAA,MACD,UAAUmN,GAAMrF,GAAM;AACpB,YAAIwtF,IAAK;AACT,cAAM/9G,IAAK,MAAM,KAAKuwB,CAAI,IAAI,MAAM,IAC9ButF,IAAiBloF,EAAK,MAAM,GAAG,GAC/BooF,IAAiBztF,EAAK,MAAM,GAAG,GAC/B0tF,IAAY,CAAA;AAClB,QAAA3B,GAAOwB,GAAgB,CAAAzuG,MAAK;AAC1B,UAAIA,KACF4uG,EAAU,KAAK5uG,CAAC;AAAA,QAE5B,CAAS;AACD,cAAM6uG,IAAY,CAAA;AAClB,iBAASl7G,IAAIg7G,EAAe,SAAS,GAAGh7G,KAAK,GAAGA;AAC9C,cAAI,EAAAg7G,EAAeh7G,CAAC,EAAE,WAAW,KAAKg7G,EAAeh7G,CAAC,MAAM,MAG5D;AAAA,gBAAIg7G,EAAeh7G,CAAC,MAAM,MAAM;AAC9B,cAAA+6G;AACA;AAAA,YACD;AACD,gBAAIA,IAAK,GAAG;AACV,cAAAA;AACA;AAAA,YACD;AACD,YAAAG,EAAU,KAAKF,EAAeh7G,CAAC,CAAC;AAAA;AAElC,cAAMA,IAAIi7G,EAAU,SAASF;AAC7B,YAAII;AACJ,eAAIn7G,KAAK,IACPm7G,IAAUz4F,GAAQw4F,CAAS,EAAE,KAAK,GAAG,IAErCC,IAAUF,EAAU,MAAM,GAAGj7G,CAAC,EAAE,KAAK,GAAG,IAAI,MAAM0iB,GAAQw4F,CAAS,EAAE,KAAK,GAAG,GAE3EC,EAAQ,QAAQ,GAAG,MAAM,MAC3BA,IAAU,MAAMA,IAEdn+G,KAAMm+G,EAAQ,YAAY,GAAG,MAAMA,EAAQ,SAAS,MACtDA,KAAWn+G,IAENm+G;AAAA,MACR;AAAA,MACD,OAAOC,IAAc,IAAO;AAC1B,YAAIl7G;AACJ,gBAAI,CAAC,KAAK,UAAUk7G,OAClBl7G,IAAI,IACCk7G,MACC,KAAK,WACPl7G,KAAK,KAAK,WAAW,QAErBA,KAAK,MAEH,KAAK,aACPA,KAAK,KAAK,WAAW,MAEnB,KAAK,SACPA,KAAK,KAAK,OAER,KAAK,SACPA,KAAK,MAAM,KAAK,QAGhB,KAAK,SACPA,KAAK,KAAK,OAER,KAAK,UACPA,KAAK,MAAM,KAAK,QAEd,KAAK,WACPA,KAAK,MAAM,KAAK,SAElB,KAAK,SAASA,IAET,KAAK;AAAA,MACb;AAAA,IACF;AAED,UAAMm7G,KAAmB/tF,GAAM,QAAQ,8DAA8D,GAC/FguF,KAAsB;AAC5B,QAAIn0D,KAAM;AACV,UAAMo0D,KAAc,CAACvpF,GAAMmX,GAAUrI,GAAQtS,GAAOurB,MAAQ;AAC1D,UAAI/xC,GAAIw2C,GAAIw9C,GAAIwf;AAChB,YAAM39B,IAAW10C,EAAS,UACpBoI,IAAkBzQ,EAAO;AAC/B,MAAI9O,EAAK,aAAahD,MAAW,CAACma,EAAS,8BAA8B,SAAS,MAAMnhC,IAAKgqB,EAAK,eAAe,QAAQhqB,MAAO,SAASA,IAAK,EAAE,MAC9IgqB,EAAK,YAAY,MAAMA,EAAK;AAE9B,YAAMypF,KAAaj9D,IAAKzE,KAAQ,OAAyB,SAASA,EAAI,aAAa,QAAQyE,MAAO,SAASA,IAAKxsB,EAAK,SAAS;AAC9H,UAAIxD,MAAU,UAAUsS,EAAO,QAAQtS,CAAK,GAAG;AAC7C,QAAIxP,GAAc+6B,CAAG,MACnBA,EAAI,YAAY0hE,CAAS,IAAI;AAE/B;AAAA,MACD;AACD,UAAIzpF,EAAK,aAAa7C,MAAWssF,MAAc;AAC7C;AAEF,YAAMpsF,IAAU8C,EAAa,QAAQH,CAAI,GACnC0pF,IAAoBprF,GAAMjB,GAASisF,EAAmB,GACtDK,IAAQvrF,GAAMf,GAAS,gBAAgB;AAC7C,UAAI,CAACqsF,KAAqBj9F,GAASk9F,CAAK,GAAG;AACzC,QAAIA,MAAU,QACZnjF,GAASnJ,CAAO,IAEhBoJ,GAAOpJ,CAAO;AAEhB;AAAA,MACD;AACD,YAAM2e,IAAOlN,EAAO,eAAe26E,CAAS;AAC5C,UAAI59B,KAAY,CAAC7vC,GAAM;AACrB,QAAIppB,GAAM2sB,GAAiBkqE,CAAS,IAClCjjF,GAASnJ,CAAO,IAEhBoJ,GAAOpJ,CAAO;AAEhB;AAAA,MACR;AACQ,QAAIrQ,GAAc+6B,CAAG,MACnBA,EAAI,YAAY0hE,CAAS,IAAI;AAGjC,UAAI59B,KAAY7vC,KAAQ,CAAC0tE,GAAmB;AAS1C,YARAh6F,GAAQs6E,IAAKhuD,EAAK,sBAAsB,QAAQguD,MAAO,SAASA,IAAK,CAAA,GAAI,CAAAtrE,MAAQ;AAC/E,UAAAT,GAAMZ,GAASqB,EAAK,MAAMA,EAAK,UAAU,WAAW,OAAQy2B,IAAK,KAAMz2B,EAAK,KAAK;AAAA,QAC3F,CAAS,GACDhP,GAAQ85F,IAAKxtE,EAAK,uBAAuB,QAAQwtE,MAAO,SAASA,IAAK,CAAA,GAAI,CAAA9qF,MAAQ;AAChF,UAAKJ,GAAMjB,GAASqB,EAAK,IAAI,KAC3BT,GAAMZ,GAASqB,EAAK,MAAMA,EAAK,UAAU,WAAW,OAAQy2B,IAAK,KAAMz2B,EAAK,KAAK;AAAA,QAE7F,CAAS,GACGsd,EAAK,sBAAsB,CAACxsB,EAAOwsB,EAAK,oBAAoB,CAAAtd,MAAQJ,GAAMjB,GAASqB,CAAI,CAAC,GAAG;AAC7F,UAAA+H,GAAOpJ,CAAO;AACd;AAAA,QACD;AACD,YAAI2e,EAAK,oBAAoBxd,GAAQnB,CAAO,GAAG;AAC7C,UAAAoJ,GAAOpJ,CAAO;AACd;AAAA,QACD;AACD,QAAI2e,EAAK,cAAcA,EAAK,eAAeytE,KACzC7xD,GAAOv6B,GAAS2e,EAAK,UAAU;AAAA,MAElC;AAAA,IACP,GACU4tE,KAAc,CAACC,GAAK1yE,GAAUrI,GAAQtS,GAAOurB,MAAQ;AACzD,YAAMy9D,IAAUqE,EAAI,QAAQ,YAAW,GACjC,EAAC,UAAA1+E,GAAU,WAAAE,EAAS,IAAI0c;AAC9B,MAAAA,EAAI,WAAW+hE,GAAoB3yE,GAAUrI,GAAQtS,GAAOgpF,GAASr6E,GAAUE,CAAS,GACpF0c,EAAI,YACNA,EAAI,kBAAkB5c,CAAQ,IAAI,IAC9B4+E,GAAmB5+E,GAAU2D,CAAM,MACrCiZ,EAAI,YAAY5c,IAEdgM,EAAS,uBAAuBhgB,GAAWkU,GAAW,oBAAoB,MAC5E0c,EAAI,gBAAgB,OAEbiiE,GAAqCH,GAAK1+E,CAAQ,MAC3D4c,EAAI,gBAAgB;AAAA,IAE5B,GACU+hE,KAAsB,CAAC3yE,GAAUrI,GAAQtS,GAAOgpF,GAASr6E,GAAUE,MACnE7O,MAAU,UAAU,CAACgX,GAAyBgyE,CAAO,IAChD,KAEF,EAAEr6E,KAAYk+E,MAAoBvB,GAAa3wE,GAAU9L,GAAWm6E,CAAO,OAAO,CAACruE,EAAS,YAAYrI,EAAO,QAAQ02E,GAASr6E,CAAQ,KAAKhU,GAAWgU,GAAU,OAAO,KAAKhU,GAAWgU,GAAU,OAAO,IAE7M6+E,KAAuC,CAACH,GAAK1+E,MAAa0+E,EAAI,aAAaP,EAAmB,MAAMn+E,MAAa,QAAQA,MAAa,WAAWA,MAAa,UAC9J4+E,KAAqB,CAAC5+E,GAAU2D,MAAW3D,KAAY2D,EAAO,gBAC9Dm7E,KAAmB,CAACJ,GAAK1yE,GAAUrI,GAAQtS,MAAU;AACzD,YAAM,EAAC,YAAAogB,EAAU,IAAIitE;AACrB,eAAS77G,IAAI4uC,EAAW,SAAS,GAAG5uC,KAAK,GAAGA,KAAK;AAC/C,cAAM0wB,IAAOke,EAAW5uC,CAAC,GACnBm9B,IAAWzM,EAAK,MAChB2M,IAAY3M,EAAK;AACvB,QAAI,CAACorF,GAAoB3yE,GAAUrI,GAAQtS,GAAOqtF,EAAI,QAAQ,YAAW,GAAI1+E,GAAUE,CAAS,KAAK,CAAC2+E,GAAqCH,GAAK1+E,CAAQ,IACtJ0+E,EAAI,gBAAgB1+E,CAAQ,IACnB4+E,GAAmB5+E,GAAU2D,CAAM,KAC5C+6E,EAAI,aAAa1+E,GAAUA,CAAQ;AAAA,MAEtC;AAAA,IACP,GACU++E,KAAc,CAAC/yE,GAAUrI,GAAQq7E,MAAqB;AAC1D,YAAMC,IAAW/C;AACjB,aAAA+C,EAAS,QAAQ,uBAAuB,CAACP,GAAK9hE,MAAQ;AACpD,QAAAwhE,GAAYM,GAAK1yE,GAAUrI,GAAQq7E,EAAiB,MAAMN,CAAG,GAAG9hE,CAAG;AAAA,MAC3E,CAAO,GACDqiE,EAAS,QAAQ,yBAAyB,CAACP,GAAK9hE,MAAQ;AACtD,QAAA6hE,GAAYC,GAAK1yE,GAAUrI,GAAQq7E,EAAiB,QAAO,GAAIpiE,CAAG;AAAA,MAC1E,CAAO,GACMqiE;AAAA,IACb,GACUC,KAAkB,CAAClzE,GAAUmzE,MAAa;AAW9C,YAAMC,IAAS,EAAE,GAVQ;AAAA,QACvB,UAAU;AAAA,QACV,yBAAyB;AAAA,QACzB,cAAc;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,QACD,cAAc,CAAE;AAAA,MACxB;AAEM,aAAAA,EAAO,oBAAoBD,GACvBnzE,EAAS,oBACXozE,EAAO,qBAAqB,OACnBpzE,EAAS,yBAClBozE,EAAO,qBAAqB,6BAEvBA;AAAA,IACb,GACUC,KAA2B,CAAAX,MAAO;AACtC,YAAMY,IAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,EAAQ,IAAI,CAAAj4F,MAAQ,SAAUA,CAAI,EAAG,GACzB+3F,IAAS;AAAA,QACb,UAAU;AAAA,QACV,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,YAAY;AAAA,QACb;AAAA,QACD,cAAcE;AAAA,MACtB;AACM,aAAApD,KAAS,SAASwC,GAAKU,CAAM,GACtBV,EAAI;AAAA,IACjB,GACUa,KAAe,CAACvzE,GAAUrI,MAAW;AACzC,YAAMq7E,IAAmBv2E;AACzB,UAAIuD,EAAS,UAAU;AACrB,cAAMkwE,IAAS6C,GAAY/yE,GAAUrI,GAAQq7E,CAAgB;AAM7D,eAAO;AAAA,UACL,qBAN0B,CAAC3hF,GAAM8hF,MAAa;AAC9C,YAAAjD,EAAO,SAAS7+E,GAAM6hF,GAAgBlzE,GAAUmzE,CAAQ,CAAC,GACzDjD,EAAO,UAAU,IACjB8C,EAAiB,MAAK;AAAA,UAChC;AAAA,UAGU,0BAAAK;AAAA,QACV;AAAA,MACA;AAcQ,eAAO;AAAA,UACL,qBAd0B,CAAChiF,GAAMmiF,MAAc;AAC/C,kBAAMzD,IAAe,SAAS,mBAAmB1+E,GAAM,WAAW,eAAe,WAAW,eAAe,WAAW,SAAS;AAC/H,gBAAIxI;AACJ,mBAAOA,IAAOknF,EAAa,cAAY;AACrC,oBAAMnzE,IAAeo2E,EAAiB,MAAMnqF,CAAI;AAChD,cAAAupF,GAAYvpF,GAAMmX,GAAUrI,GAAQiF,CAAY,GAC5CxJ,GAAYvK,CAAI,KAClBiqF,GAAiBjqF,GAAMmX,GAAUrI,GAAQiF,CAAY;AAAA,YAExD;AACD,YAAAo2E,EAAiB,MAAK;AAAA,UAChC;AAAA,UAIU,0BAH+B98F;AAAA,QAIzC;AAAA,IAEA,GAEUu9F,KAAUtvF,GAAM,SAASuvF,KAAWvvF,GAAM,QAC1CwvF,KAAmB,CAACtpF,GAAQupF,GAAcxrE,GAAiByrE,MAAgB;AAC/E,YAAM1kB,IAAa9kE,EAAO,MACpBypF,IAAY3kB,KAAc/mD,KAAmB+mD,MAAe,WAAWA,MAAe,YACtFjsC,IAAa0wD,EAAa;AAChC,eAAS3wG,IAAK,GAAGuqF,IAAKtqC,EAAW,QAAQjgD,IAAKuqF,GAAIvqF,KAAM;AACtD,cAAM8wG,IAAc7wD,EAAWjgD,CAAE,GAC3B8pB,IAAQ,IAAIysD,GAAQu6B,EAAY,SAAS,YAAa,GAAEA,EAAY,QAAQ;AAClF,YAAI3gF,GAAY2gF,CAAW,GAAG;AAC5B,gBAAMtuE,IAAasuE,EAAY;AAC/B,mBAAS3wG,IAAK,GAAGqqF,IAAKhoD,EAAW,QAAQriC,IAAKqqF,GAAIrqF,KAAM;AACtD,kBAAMmkB,IAAOke,EAAWriC,CAAE;AAC1B,YAAA2pB,EAAM,KAAKxF,EAAK,MAAMA,EAAK,KAAK;AAAA,UACjC;AACD,UAAI8U,GAAyBtP,EAAM,IAAI,MACrC8mF,EAAYE,CAAW,GACvBhnF,EAAM,QAAQgnF,EAAY;AAAA,QAEtC;AAAe,UAAIv/E,GAASu/E,CAAW,KAC7BhnF,EAAM,QAAQgnF,EAAY,MACtBD,MACF/mF,EAAM,MAAM,QAEL4H,GAAUo/E,CAAW,KAAKt/E,GAAQs/E,CAAW,KAAKr/E,GAAKq/E,CAAW,OAC3EhnF,EAAM,QAAQgnF,EAAY;AAE5B,QAAK13E,GAAyBtP,EAAM,IAAI,KACtC4mF,GAAiB5mF,GAAOgnF,GAAa3rE,GAAiByrE,CAAW,GAEnExpF,EAAO,OAAO0C,CAAK;AAAA,MACpB;AAAA,IACP,GACUinF,KAAW,CAAC7kG,GAAM8kG,GAAeC,MAAmB;AACxD,YAAMC,IAAgB,CAAA;AACtB,eAAStrF,IAAO1Z,GAAM60D,IAAWn7C,GAAMA,GAAMm7C,IAAWn7C,GAAMA,IAAOA,EAAK,KAAI,GAAI;AAChF,cAAMyR,IAAWzR;AACjB,QAAAtQ,EAAO07F,GAAe,CAAAnlC,MAAcA,EAAWx0C,CAAQ,CAAC,GACpD1kB,GAAW0kB,EAAS,MAAM,KAAKA,MAAanrB,IAC9C0Z,IAAOm7C,IAEPmwC,EAAc,KAAK75E,CAAQ;AAAA,MAE9B;AACD,eAASzjC,IAAIs9G,EAAc,SAAS,GAAGt9G,KAAK,GAAGA,KAAK;AAClD,cAAMgyB,IAAOsrF,EAAct9G,CAAC;AAC5B,QAAA0hB,EAAO27F,GAAgB,CAAAE,MAAeA,EAAYvrF,CAAI,CAAC;AAAA,MACxD;AAAA,IACP,GACUwrF,KAAoB,CAACllG,GAAMwoB,GAAQqI,GAAUrtB,MAAS;AAC1D,YAAM+hE,IAAW10C,EAAS,UACpBgY,IAAmBrgB,EAAO,uBAC1BogB,IAAqBpgB,EAAO,yBAC5B4qE,IAAgBmR,GAASD,GAAQ,8CAA8C,GAAG97E,EAAO,iBAAgB,CAAE,GAC3G28E,IAAwBzsE,GAAyBlQ,CAAM,GACvD48E,IAAsB,eACtBC,IAAwB,eACxBC,IAAsB,eACtBC,IAAsB,CAAA7rF,OAAQ;AAClC,YAAIyR,KAAWzR,GAAK;AACpB,eAAOhT,GAAcykB,EAAQ,KAAG;AAC9B,cAAIA,GAAS,QAAQyd;AACnB,mBAAO;AAEP,UAAAzd,KAAWA,GAAS;AAAA,QAEvB;AACD,eAAO;AAAA,MACf,GACYq6E,IAAuB,CAAA9rF,OAAQ;AACnC,YAAIyR,KAAWzR;AACf,eAAOhT,GAAcykB,EAAQ,KAAG;AAC9B,cAAIA,GAAS,QAAQg6E;AACnB,mBAAOx8D,GAAQngB,GAAQqgB,GAAkBD,GAAoBzd,EAAQ;AAErE,UAAAA,KAAWA,GAAS;AAAA,QAEvB;AACD,eAAO;AAAA,MACf,GACY0D,IAAU,CAAAnV,OAAQA,GAAK,QAAQ05E,KAAiBtjE,GAAsBtH,GAAQ9O,EAAI,KAAKwT,GAAyBxT,GAAK,IAAI,KAAKA,GAAK,WAAW1Z,GAC9IylG,IAAkB,CAAC/rF,IAAMhJ,OAAU;AACvC,cAAMg1F,KAAYh1F,KAAQgJ,GAAK,OAAOA,GAAK;AAC3C,eAAIhT,GAAcg/F,EAAS,KAAKj/F,GAAWiT,GAAK,MAAM,IAC7C,KAEFmV,EAAQnV,GAAK,MAAM,MAAMA,GAAK,WAAW1Z,KAAQwD,EAAK,kBAAkB;AAAA,MACvF;AAkDM,aAAO;AAAA,QAjDY,CAAAkW,OAAQ;AACzB,cAAIhqB;AACJ,cAAIgqB,GAAK,SAAS,KACZ,CAAC6rF,EAAoB7rF,EAAI,GAAG;AAC9B,gBAAIE,MAAQlqB,KAAKgqB,GAAK,WAAW,QAAQhqB,OAAO,SAASA,KAAK;AAC9D,YAAAkqB,KAAOA,GAAK,QAAQwrF,GAAqB,GAAG,IACxClmB,GAAgBxlE,GAAK,MAAMmV,CAAO,KAAK42E,EAAgB/rF,IAAM,EAAI,OACnEE,KAAOA,GAAK,QAAQyrF,GAAuB,EAAE,IAE3CzrF,GAAK,WAAW,IAClBF,GAAK,OAAM,IAEXA,GAAK,QAAQE;AAAA,UAEhB;AAAA,QAEX;AAAA,QAC0B,CAAAF,OAAQ;AAC1B,cAAIhqB;AACJ,cAAIgqB,GAAK,SAAS,GAAG;AACnB,kBAAM0zD,KAAc5kD,EAAO,eAAe9O,GAAK,IAAI;AACnD,gBAAI6rD,KAAY6H,IAAa;AAC3B,oBAAMu4B,KAAch9D,GAAQngB,GAAQqgB,GAAkBD,GAAoBlvB,EAAI;AAC9E,cAAI0zD,GAAY,oBAAoBu4B,MAAeH,EAAqB9rF,EAAI,IAC1EmlE,GAAchuD,GAAUrtB,GAAMqrB,GAASnV,EAAI,IAClC0zD,GAAY,eAAeu4B,KAChC92E,EAAQnV,EAAI,IACdA,GAAK,OAAM,IAEXA,GAAK,OAAM,IAEJ0zD,GAAY,cAAcu4B,MAAe5mB,GAAiBrlE,EAAI,MACvEmlE,GAAchuD,GAAUrtB,GAAMqrB,GAASnV,EAAI;AAAA,YAE9C;AAAA,UACX,WAAmBA,GAAK,SAAS,KACnB,CAAC6rF,EAAoB7rF,EAAI,GAAG;AAC9B,gBAAIE,MAAQlqB,KAAKgqB,GAAK,WAAW,QAAQhqB,OAAO,SAASA,KAAK;AAC9D,aAAIgqB,GAAK,QAAQmV,EAAQnV,GAAK,IAAI,KAAK+rF,EAAgB/rF,IAAM,EAAK,OAChEE,KAAOA,GAAK,QAAQ0rF,GAAqB,EAAE,IAEzC1rF,GAAK,WAAW,IAClBF,GAAK,OAAM,IAEXA,GAAK,QAAQE;AAAA,UAEhB;AAAA,QAEX;AAAA,MAIA;AAAA,IACA,GACUgsF,KAAmB,CAAC/0E,GAAUrtB,MAAS;AAC3C,UAAI9T;AACJ,YAAMwc,KAAQxc,IAAK8T,EAAK,uBAAuB,QAAQ9T,MAAO,SAASA,IAAKmhC,EAAS;AACrF,aAAI3kB,MAAS,KACJ,KACEA,MAAS,KACX,MAEAA;AAAA,IAEf,GACU25F,KAAY,CAACh1E,IAAW,CAAE,GAAErI,IAASsQ,GAAM,MAAO;AACtD,YAAMgtE,IAAqBxT,MACrByT,IAA0BzT,MAC1B0T,IAAoB;AAAA,QACxB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV,GAAGn1E;AAAA,MACX,GACYuzD,IAAS,IAAI,aACb6hB,IAAY7B,GAAa4B,GAAmBx9E,CAAM,GAClD09E,IAA8B,CAAC5sF,IAAM6sF,IAAU9pD,KAAS,WAAW;AACvE,cAAM2nD,KAAW3nD,OAAW,UAAU,0BAA0B,aAC1D+pD,KAAgB95F,GAAMkc,EAAO,mBAAkB,GAAI29E,GAAS,YAAW,CAAE,GACzEzlF,KAAU0lF,KAAgB,IAAKD,EAAU,IAAI7sF,EAAI,KAAO6sF,QAAe7sF,IACvE+sF,KAAchqD,OAAW,UAAU,iEAAkE37B,qBAA2B,SAAUA,EAAO,WACjJwB,KAAOkiE,EAAO,gBAAgBiiB,IAAarC,EAAQ,EAAE;AAC3D,eAAAiC,EAAU,oBAAoB/jF,IAAM8hF,EAAQ,GACrCoC,KAAgBlkF,GAAK,aAAaA;AAAA,MACjD,GACYgxE,IAAgB4S,EAAmB,WACnCQ,IAAiBR,EAAmB,YACpCS,IAAmBT,EAAmB,cACtCU,IAAqBT,EAAwB,WAC7CU,IAAsBV,EAAwB,YAC9CW,IAAwBX,EAAwB,cAChDY,IAAsB,CAACjtF,IAAMsV,OAAoB;AACrD,QAAI8wD,GAAUt3D,GAAQ9O,EAAI,KACxBsV,GAAgB,KAAKtV,EAAI;AAAA,MAEnC,GACYktF,IAAkB,CAACxT,IAAe15E,OAAS;AAC/C,cAAM0pF,KAAoBj9F,GAASuT,GAAK,KAAKspF,EAAmB,CAAC,GAC3DpuB,KAAkBl7D,GAAK,SAAS,KAAM,CAACpN,GAAM8mF,IAAe15E,GAAK,IAAI,KAAK,CAACoW,GAAsBtH,GAAQ9O,EAAI,KAAM,CAACwT,GAAyBxT,GAAK,IAAI;AAC5J,eAAOA,GAAK,SAAS,KAAKk7D,MAAmB,CAACwuB;AAAA,MACtD,GACYyD,IAAgB,CAACnjF,IAAUojF,OAAkB;AACjD,cAAM1T,KAAgBmR,GAASD,GAAQ,8CAA8C,GAAG97E,EAAO,iBAAgB,CAAE,GAC3G68E,KAAwB,eACxBC,KAAsB;AAC5B,YAAI5rF,KAAOgK,GAAS,YAAYqjF,KAAgB;AAChD,cAAMtuD,KAAO,CAAAuuD,OAAa;AACxB,cAAIt3G,IAAIw2C;AACR,UAAI8gE,OACFttF,KAAOstF,GAAU,YACbttF,MAAQA,GAAK,SAAS,MACxBA,GAAK,SAAShqB,KAAKgqB,GAAK,WAAW,QAAQhqB,OAAO,SAAS,SAASA,GAAG,QAAQ21G,IAAuB,EAAE,IAE1G3rF,KAAOstF,GAAU,WACbttF,MAAQA,GAAK,SAAS,MACxBA,GAAK,SAASwsB,KAAKxsB,GAAK,WAAW,QAAQwsB,OAAO,SAAS,SAASA,GAAG,QAAQo/D,IAAqB,EAAE;AAAA,QAGpH;AACQ,YAAK98E,EAAO,aAAa9E,GAAS,MAAMojF,GAAc,YAAW,CAAE,GAGnE;AAAA,iBAAOptF,MAAM;AACX,kBAAMyZ,KAAOzZ,GAAK;AAClB,YAAIktF,EAAgBxT,IAAe15E,EAAI,KAChCqtF,OACHA,KAAgB,IAAI18B,GAAQy8B,IAAe,CAAC,GAC5CC,GAAc,KAAKf,EAAkB,uBAAuB,GAC5DtiF,GAAS,OAAOqjF,IAAertF,EAAI,IACnCqtF,GAAc,OAAOrtF,EAAI,MAK3B++B,GAAKsuD,EAAa,GAClBA,KAAgB,OAElBrtF,KAAOyZ;AAAA,UACR;AACD,UAAAslB,GAAKsuD,EAAa;AAAA;AAAA,MAC1B,GA+CYE,KAAU;AAAA,QACd,QAAAz+E;AAAA,QACA,oBAAAg+E;AAAA,QACA,qBAAAC;AAAA,QACA,uBAAAC;AAAA,QACA,eAAAxT;AAAA,QACA,gBAAAoT;AAAA,QACA,kBAAAC;AAAA,QACA,OAtDY,CAACjtF,IAAM9V,KAAO,CAAA,MAAO;AACjC,cAAI9T;AACJ,gBAAM61E,KAAWygC,EAAkB,UAC7BG,MAAYz2G,KAAK8T,GAAK,aAAa,QAAQ9T,OAAO,SAASA,KAAKs2G,EAAkB,WAClFjvF,KAAUmvF,EAA4B5sF,IAAM6sF,IAAU3iG,GAAK,MAAM;AACvE,UAAA8rB,GAAe9G,GAAQzR,EAAO;AAC9B,gBAAM2M,KAAW,IAAI2mD,GAAQ87B,IAAU,EAAE;AACzC,UAAA3B,GAAiB9gF,IAAU3M,IAASyR,EAAO,sBAAsBy9E,EAAU,wBAAwB,GACnGlvF,GAAQ,YAAY;AACpB,gBAAM,CAACmwF,IAAeC,EAAc,IAAIjC,GAAkBxhF,IAAU8E,GAAQw9E,GAAmBxiG,EAAI,GAC7FwrB,KAAkB,CAAA,GAClBo4E,KAAgB7hC,KAAW,CAAA7rD,OAAQitF,EAAoBjtF,IAAMsV,EAAe,IAAIjoB,IAChF4uB,KAAU;AAAA,YACd,OAAO,CAAE;AAAA,YACT,YAAY,CAAE;AAAA,UACxB,GACc0xE,KAAc,CAAA3tF,OAAQwkE,GAAYooB,EAAgB,GAAEG,EAAqB,GAAE/sF,IAAMic,EAAO;AAS9F,cARAkvE,GAASnhF,IAAU;AAAA,YACjBwjF;AAAA,YACAG;AAAA,UACV,GAAW;AAAA,YACDF;AAAA,YACAC;AAAA,UACV,CAAS,GACDp4E,GAAgB,QAAO,GACnBu2C,MAAYv2C,GAAgB,SAAS;AACvC,gBAAIxrB,GAAK,SAAS;AAChB,oBAAM;AAAA,gBACJ,MAAM8jG;AAAA,gBACN,MAAMC;AAAA,cACpB,IAAgBj+F,GAAY0lB,IAAiB,CAAApR,OAASA,GAAM,WAAW8F,EAAQ;AACnE,cAAA67D,GAAkBgoB,IAAe/+E,GAAQ9E,IAAU2jF,EAAW,GAC9D7jG,GAAK,UAAU8jG,GAAiB,SAAS;AAAA,YACrD;AACY,cAAA/nB,GAAkBvwD,IAAiBxG,GAAQ9E,IAAU2jF,EAAW;AAGpE,gBAAMP,KAAgBlB,GAAiBI,GAAmBxiG,EAAI;AAC9D,iBAAIsjG,OAAkBpjF,GAAS,SAAS,UAAUlgB,GAAK,kBACrDqjG,EAAcnjF,IAAUojF,EAAa,GAElCtjG,GAAK,WACRi7E,GAAW9oD,IAASnyB,EAAI,GAEnBkgB;AAAA,QACf;AAAA,MAUA;AACM,aAAAkyE,GAAWqR,IAASjB,CAAiB,GACrC/S,GAAWgU,IAASjB,GAAmBx9E,CAAM,GACtCy+E;AAAA,IACb,GAEUO,KAAmB,CAAA9mF,MAAWgkE,GAAWhkE,CAAO,IAAIssD,GAAe,EAAE,UAAU,GAAK,CAAE,EAAE,UAAUtsD,CAAO,IAAIA,GAC7G+mF,KAAwB,CAAC/mF,GAASgnF,GAAWC,MAAmB;AACpE,YAAMC,IAAoBJ,GAAiB9mF,CAAO,GAC5CmnF,IAAYH,EAAUE,CAAiB;AAC7C,UAAIC,EAAU;AACZ,eAAOA;AACF,UAAInjB,GAAWhkE,CAAO;AAC3B,YAAImnF,EAAU,YAAYD,GAAmB;AAC3C,gBAAMlkF,IAAWmiF,GAAU;AAAA,YACzB,UAAU;AAAA,YACV,mBAAmB;AAAA,YACnB,GAAG8B;AAAA,UACf,CAAW,EAAE,MAAME,EAAU,SAAS,EAAE,SAASnnF,EAAQ,KAAI,CAAE;AACrD,iBAAO;AAAA,YACL,GAAGmnF;AAAA,YACH,SAASnkF;AAAA,UACrB;AAAA,QACA;AACU,iBAAO;AAAA,YACL,GAAGmkF;AAAA,YACH,SAAAnnF;AAAA,UACZ;AAAA;AAGQ,eAAOmnF;AAAA,IAEf,GACUC,KAAuB,CAACh/E,GAAQtlB,MAAS;AAC7C,UAAIA,EAAK;AACP,eAAOk3C,GAAO,MAAMl3C,CAAI;AACnB;AACL,cAAMqkG,IAAYzvC,GAAqBtvC,GAAQtlB,CAAI;AACnD,eAAIqkG,EAAU,uBACLntD,GAAO,MAAM2d,GAAevvC,GAAQ;AAAA,UACzC,SAAS;AAAA,UACT,GAAG++E;AAAA,QACf,CAAW,EAAE,OAAO,IAEHntD,GAAO,MAAMmtD,CAAS;AAAA,MAEhC;AAAA,IACP,GACUE,KAAwB,CAACj/E,GAAQpI,GAASld,MAC1CA,EAAK,YACAkd,IAEoB+mF,GAAsB/mF,GAAS,CAAAA,MAAW23C,GAAevvC,GAAQ;AAAA,MAC1F,GAAGtlB;AAAA,MACH,SAAAkd;AAAA,IACV,CAAS,GAAG;AAAA,MACF,UAAU+iC,GAAkB36B,CAAM;AAAA,MAClC,iBAAiBs7B,GAAqBt7B,CAAM;AAAA,IACtD,CAAS,EACyB,SAGxBk/E,KAAuB,CAACl/E,GAAQtlB,MAAS;AAC7C,UAAIA,EAAK;AACP,eAAOk3C,GAAO,MAAMl3C,CAAI;AACnB;AACL,cAAMykG,IAAqBR,GAAsBjkG,EAAK,SAAS,CAAAkd,MAAWw3C,GAAqBpvC,GAAQ;AAAA,UACrG,GAAGtlB;AAAA,UACH,SAAAkd;AAAA,QACV,CAAS,GAAG;AAAA,UACF,UAAU+iC,GAAkB36B,CAAM;AAAA,UAClC,iBAAiBs7B,GAAqBt7B,CAAM;AAAA,QACtD,CAAS;AACD,eAAIm/E,EAAmB,wBACrB9vC,GAAervC,GAAQm/E,CAAkB,GAClCvtD,GAAO,MAAM,MAAS,KAEtBA,GAAO,MAAMutD,CAAkB;AAAA,MAEzC;AAAA,IACP,GACUC,KAAwB,CAACp/E,GAAQpI,GAASld,MAAS;AACvD,MAAKA,EAAK,aACR20D,GAAervC,GAAQ;AAAA,QACrB,GAAGtlB;AAAA,QACH,SAAAkd;AAAA,MACV,CAAS;AAAA,IAET,GAEUynF,KAAa,CAACpxF,GAASiM,GAAO61D,OAAU;AAAA,MAC5C,SAAA9hE;AAAA,MACA,OAAAiM;AAAA,MACA,MAAA61D;AAAA,IACN,IACUuvB,KAAW,CAACrxF,GAASqhE,OAAW;AAAA,MACpC,SAAArhE;AAAA,MACA,OAAAqhE;AAAA,IACN,IACUiwB,KAAe,CAACxiH,GAAG4S,OAAO;AAAA,MAC9B,GAAA5S;AAAA,MACA,GAAA4S;AAAA,IACN,IACU6vG,KAAU,CAACC,GAAIl8F,MACZ0L,GAAOwwF,GAAIl8F,CAAG,EAAE,KAAKsF,EAAK,EAAE,MAAM,CAAC,GAEtC62F,KAAU,CAACnxB,GAAOxxF,GAAG4S,GAAG/T,GAAI6jH,MAAO;AACvC,YAAME,IAAUH,GAAQC,GAAI,SAAS,GAC/BG,IAAUJ,GAAQC,GAAI,SAAS,GAC/B1vB,IAAOxB,EAAM;AACnB,eAASsxB,IAAKlwG,GAAGkwG,IAAKlwG,IAAIgwG,GAASE,KAAM;AACvC,QAAK9vB,EAAK8vB,CAAE,MACV9vB,EAAK8vB,CAAE,IAAIP,GAASh3D,GAAO1sD,CAAE,GAAG,CAAA,CAAE;AAEpC,iBAASkkH,IAAK/iH,GAAG+iH,IAAK/iH,IAAI6iH,GAASE,KAAM;AACvC,gBAAMxwB,IAAQS,EAAK8vB,CAAE,EAAE;AACvB,UAAAvwB,EAAMwwB,CAAE,IAAID,MAAOlwG,KAAKmwG,MAAO/iH,IAAI0iH,IAAKp3D,GAAUo3D,CAAE;AAAA,QACrD;AAAA,MACF;AAAA,IACP,GACUM,KAAa,CAACxxB,GAAOxxF,GAAG4S,MAAM;AAClC,YAAMogF,IAAOxB,EAAM;AAEnB,aAAO,CAAC,EADMwB,EAAKpgF,CAAC,IAAIogF,EAAKpgF,CAAC,EAAE,QAAQ,IACzB5S,CAAC;AAAA,IACtB,GACUijH,KAAa,CAACzxB,GAAOxxF,GAAG4S,MAAM;AAClC,aAAOowG,GAAWxxB,GAAOxxF,GAAG4S,CAAC;AAC3B,QAAA5S;AAEF,aAAOA;AAAA,IACb,GACUkjH,KAAW,CAAAlwB,MACRjvE,GAAMivE,GAAM,CAAClvE,GAAKq/F,MAChBA,EAAI,MAAM,SAASr/F,IAAMq/F,EAAI,MAAM,SAASr/F,GAClD,CAAC,GAEAs/F,KAAiB,CAAC5xB,GAAOtgE,MAAY;AACzC,YAAM8hE,IAAOxB,EAAM;AACnB,eAAS5+E,IAAI,GAAGA,IAAIogF,EAAK,QAAQpgF,KAAK;AACpC,cAAM2/E,IAAQS,EAAKpgF,CAAC,EAAE;AACtB,iBAAS5S,IAAI,GAAGA,IAAIuyF,EAAM,QAAQvyF;AAChC,cAAI4mB,GAAG2rE,EAAMvyF,CAAC,GAAGkxB,CAAO;AACtB,mBAAO5O,EAAS,KAAKkgG,GAAaxiH,GAAG4S,CAAC,CAAC;AAAA,MAG5C;AACD,aAAO0P,EAAS;IACtB,GACU+gG,KAAc,CAAC7xB,GAAO8xB,GAAIC,GAAIC,GAAIC,MAAO;AAC7C,YAAMC,IAAU,CAAA,GACV1wB,IAAOxB,EAAM;AACnB,eAAS5+E,IAAI2wG,GAAI3wG,KAAK6wG,GAAI7wG,KAAK;AAC7B,cAAM2/E,IAAQS,EAAKpgF,CAAC,EAAE,OAChB+wG,IAAQL,IAAKE,IAAKjxB,EAAM,MAAM+wB,GAAIE,IAAK,CAAC,IAAIjxB,EAAM,MAAMixB,GAAIF,IAAK,CAAC;AACxE,QAAAI,EAAQ,KAAKnB,GAASvvB,EAAKpgF,CAAC,EAAE,SAAS+wG,CAAK,CAAC;AAAA,MAC9C;AACD,aAAOD;AAAA,IACb,GACUE,KAAW,CAACpyB,GAAOltB,GAAUkC,MAAW;AAC5C,YAAM88C,IAAKh/C,EAAS,GAAGi/C,IAAKj/C,EAAS,GAC/Bk/C,IAAKh9C,EAAO,GAAGi9C,IAAKj9C,EAAO,GAC3Bk9C,IAAUH,IAAKE,IAAKJ,GAAY7xB,GAAO8xB,GAAIC,GAAIC,GAAIC,CAAE,IAAIJ,GAAY7xB,GAAO8xB,GAAIG,GAAID,GAAID,CAAE;AAChG,aAAOjB,GAAW9wB,EAAM,SAAS0xB,GAASQ,CAAO,GAAGA,CAAO;AAAA,IACjE,GACUG,KAAiB,CAACryB,GAAOwB,MAAS;AACtC,YAAM8wB,IAAex4D,GAAUkmC,EAAM,OAAO,GACtCuyB,IAAY/vF,EAAa,QAAQ,OAAO;AAC9C,aAAAkG,GAAO6pF,GAAW/wB,CAAI,GACtBn5D,GAASiqF,GAAcC,CAAS,GACzBD;AAAA,IACb,GACUE,KAAqB,CAAAxyB,MAClBluE,GAAMkuE,EAAM,MAAM,CAAA2xB,MAAO;AAC9B,YAAM5wB,IAAQjvE,GAAM6/F,EAAI,OAAO,CAAA16C,MAAQ;AACrC,cAAMi6C,IAAKn3D,GAAOkd,CAAI;AACtB,eAAAr2C,GAASswF,GAAI,SAAS,GACtBtwF,GAASswF,GAAI,SAAS,GACfA;AAAA,MACjB,CAAS,GACK7jH,IAAKysD,GAAU63D,EAAI,OAAO;AAChC,aAAAjpF,GAAOr7B,GAAI0zF,CAAK,GACT1zF;AAAA,IACf,CAAO,GAEGolH,KAAU,CAAAC,MAAY;AAC1B,YAAM1yB,IAAQ8wB,GAAWh3D,GAAU44D,CAAQ,GAAG,GAAG,CAAA,CAAE;AACnD,aAAA3gG,EAAOka,GAAYymF,GAAU,IAAI,GAAG,CAACrlH,GAAI+T,MAAM;AAC7C,QAAA2Q,EAAOka,GAAY5+B,GAAI,OAAO,GAAG,CAAC6jH,GAAI1iH,MAAM;AAC1C,UAAA2iH,GAAQnxB,GAAOyxB,GAAWzxB,GAAOxxF,GAAG4S,CAAC,GAAGA,GAAG/T,GAAI6jH,CAAE;AAAA,QAC3D,CAAS;AAAA,MACT,CAAO,GACMJ,GAAW9wB,EAAM,SAAS0xB,GAAS1xB,EAAM,IAAI,GAAGA,EAAM,IAAI;AAAA,IACvE,GACU2yB,KAAQ,CAAA3yB,MACLqyB,GAAeryB,GAAOwyB,GAAmBxyB,CAAK,CAAC,GAElD4yB,KAAa,CAAC5yB,GAAO/T,GAAcC,MAChC0lC,GAAe5xB,GAAO/T,CAAY,EAAE,KAAK,CAAAnZ,MACvC8+C,GAAe5xB,GAAO9T,CAAU,EAAE,IAAI,CAAAlX,MACpCo9C,GAASpyB,GAAOltB,GAAUkC,CAAM,CACxC,CACF,GAGG69C,KAA0B,CAAAv6E,MAAW5lB,GAAO4lB,GAAS,CAAA3H,MAAO9b,GAAK8b,CAAG,MAAM,QAAQ9b,GAAK8b,CAAG,MAAM,IAAI,GACpGmiF,KAA+B,CAACx6E,GAASzwB,MAAQ6K,GAAO4lB,GAAS,CAAA3H,MAAO9b,GAAK8b,CAAG,MAAM,QAAQ2mC,GAAuB3mC,GAAK9oB,CAAG,CAAC,EAAE,KAAKmI,GAAS,CAAE,CAAA,GAAG,CAAA+iG,MAAOF,GAAwBv6E,CAAO,EAAE,IAAI,CAAA06E,MAAY;AAC/M,YAAMC,IAAUzwF,EAAa,QAAQ3N,GAAKm+F,CAAQ,CAAC,GAC7CE,IAAav+F,GAASmT,GAAUkrF,CAAQ,GAAG,CAACG,GAAQt+F,MAAS2E,GAAW3E,GAAM,YAAY,CAAC;AACjG,aAAA2S,GAAOyrF,GAASC,CAAU,GACnB;AAAA,QACL1wF,EAAa,QAAQ,IAAI;AAAA,QACzBywF;AAAA,MACR;AAAA,IACA,CAAK,EAAE,MAAM,CAAE,CAAA,CAAC,GACNG,KAAO,CAACC,GAAUnlE,MAAS;AAC/B,YAAM9jB,IAAU7X,GAAM27B,GAAM,CAAC57B,GAAKqe,OAChCtI,GAASsI,GAAKre,CAAG,GACVqe,IACN0iF,CAAQ;AACX,aAAOnlE,EAAK,SAAS,IAAIq6B,GAAa,CAACn+C,CAAO,CAAC,IAAIA;AAAA,IACzD,GACUkpF,KAAqB,CAAAC,MACrBjjF,GAAaijF,CAAqB,IAC7B1vF,GAAO0vF,CAAqB,EAAE,OAAOljF,EAAM,EAAE,KAAKrgB,GAAS,EAAE,GAAG,CAAAijG,MAAW;AAAA,MAChFM;AAAA,MACAN;AAAA,IACV,CAAS,IAEM5iF,GAAOkjF,CAAqB,IAAI,CAACA,CAAqB,IAAI,CAAA,GAG/DC,KAAkB,CAACnnF,GAAUxkB,GAAKspB,MAAW;AACjD,YAAMoiF,IAAwB/wF,EAAa,QAAQ3a,EAAI,uBAAuB,GACxEywB,IAAU4/C,GAAeq7B,GAAuBlnF,CAAQ,GACxDonF,IAAerhG,GAASkmB,GAAS,CAAAzS,MAAMsL,EAAO,UAAUtc,GAAKgR,CAAE,CAAC,CAAC,GACjE6tF,IAAeZ,GAA6Bx6E,GAASzwB,CAAG,GACxD8rG,IAAcF,EAAa,OAAOC,EAAa,SAASA,IAAeJ,GAAmBC,CAAqB,CAAC;AACtH,aAAOzhG,GAAM6hG,GAAa75D,EAAS;AAAA,IACzC,GACU85D,KAAgB,MAAMrrC,GAAa,CAAA,CAAE,GACrCsrC,KAAuB,CAACxnF,GAAUxkB,GAAKspB,MAAWiiF,GAAK5wF,EAAa,QAAQ3a,EAAI,cAAe,CAAA,GAAG2rG,GAAgBnnF,GAAUxkB,GAAKspB,CAAM,CAAC,GACxI2iF,KAAiB,CAAC36E,GAAS89B,MAAStwC,GAAWswC,GAAM,SAAS9mD,GAAMiF,IAAI+jB,CAAO,CAAC,GAChF46E,KAAmB,CAAC1nF,GAAU2nF,MAAuBF,GAAeznF,GAAU2nF,EAAmB,CAAC,CAAC,EAAE,KAAK,CAAAtB,MAAY;AAC1H,YAAMuB,IAAYD,EAAmB,CAAC,GAChCE,IAAWF,EAAmBA,EAAmB,SAAS,CAAC,GAC3DG,IAAiB1B,GAAQC,CAAQ;AACvC,aAAOE,GAAWuB,GAAgBF,GAAWC,CAAQ,EAAE,IAAI,CAAAE,MAAuB7rC,GAAa,CAACoqC,GAAMyB,CAAmB,CAAC,CAAC,CAAC;AAAA,IAClI,CAAK,EAAE,WAAWR,EAAa,GACrBS,KAAuB,CAAChoF,GAAUmqC,GAAQrlC,MAAWqlC,EAAO,SAAS,KAAKA,EAAO,CAAC,EAAE,YAAYo9C,GAAa,IAAKC,GAAqBxnF,GAAUmqC,EAAO,CAAC,GAAGrlC,CAAM,GAClKmjF,KAAS,CAACjoF,GAAUmqC,GAAQrlC,MAAW;AAC3C,YAAM2lC,IAAgBD,GAA4BL,GAAQnqC,CAAQ;AAClE,aAAOyqC,EAAc,SAAS,IAAIi9C,GAAiB1nF,GAAUyqC,CAAa,IAAIu9C,GAAqBhoF,GAAUmqC,GAAQrlC,CAAM;AAAA,IACjI,GAEUojF,KAA0B,CAAChyF,GAAMpY,MAAUA,KAAS,KAAKA,IAAQoY,EAAK,UAAU8zC,GAAa9zC,EAAK,OAAOpY,CAAK,CAAC,GAC/GqqG,KAAe,CAAAC,MACZljF,EAAOkjF,EAAI,SAAS,GAEvBC,KAAqB,CAAAC,MAAkBA,EAAe,IAAI,CAAA58E,MAASA,EAAM,QAAQ,EAAE,MAAM,KAAK,EAAE,YAAW,GAC3G68E,KAAiB,CAAAnjF,MAAU3gB,EAAS,KAAK2gB,EAAO,UAAU,OAAQ,CAAA,EAAE,IAAI,CAAA5pB,MAAO;AACnF,UAAIxP;AACJ,YAAMs8G,IAAiB7jG,EAAS,KAAK2gB,EAAO,IAAI,UAAU5pB,EAAI,yBAAyB4pB,EAAO,IAAI,OAAO,CAAC,GACpG5G,IAAO4G,EAAO,WACdojF,IAAkBH,GAAmBC,CAAc,GACnDG,IAAoBtyF,EAAa,QAAQ3a,EAAI,cAAe,CAAA;AAClE,MAAA6sE,GAAqBogC,CAAiB,GACtClgC,GAAkBkgC,CAAiB;AACnC,YAAML,IAAMhjF,EAAO,IAAI,IAAI5G,GAAMgqF,GAAiB;AAAA,QAChD,kBAAkB;AAAA,QAClB,OAAS;AAAA,MACjB,GAASC,EAAkB,GAAG,GAClBvyF,IAAOiyF,GAAaC,CAAG,GACvBM,IAAkBxjF,GAAQl5B,IAAKo8G,EAAI,iBAAiB,QAAQp8G,MAAO,SAASA,IAAK,EAAE;AAEzF,UADAo5B,EAAO,IAAI,OAAOgjF,CAAG,GACjBF,GAAwBQ,GAAiB,CAAC,KAAKR,GAAwBQ,GAAiBA,EAAgB,SAAS,CAAC,GAAG;AACvH,cAAMr9E,IAAci9E,EAAe,MAAM9pF,CAAI,GACvCmqF,IAAkBR,GAAa98E,CAAW,GAC1Cu9E,IAAYD,EAAgB,QAAQzyF,CAAI;AAC9C,YAAI0yF,MAAc;AAChB,iBAAO1yF;AACF;AACL,gBAAM2yF,IAAqBX,GAAwBS,GAAiBC,IAAY,CAAC,GAC3EE,IAAmBZ,GAAwBS,GAAiBC,IAAY1yF,EAAK,MAAM;AACzF,kBAAQ2yF,IAAqB,MAAM,MAAM3yF,KAAQ4yF,IAAmB,MAAM;AAAA,QAC3E;AAAA,MACT;AACQ,eAAO5yF;AAAA,IAEf,CAAK,EAAE,MAAM,EAAE,GACL6yF,KAAuB,CAAC3jF,GAAQtlB,MAAS;AAC7C,YAAMtE,IAAM4pB,EAAO,UAAU,OAAQ,GAAE4jF,IAAS5jF,EAAO,IAAI,OAAO,MAAM,GAClEimC,IAAMjmC,EAAO,UAAU,OAAM,GAC7B+kC,IAASwb,GAAcvgD,GAAQ8kC,GAAYmB,CAAG,CAAC,GAC/CnuC,IAAWpd,EAAK,aAAamoG,GAAO9xF,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAAG+kC,GAAQ/kC,EAAO,MAAM,EAAE,MAAM5pB,EAAI;AACnH,aAAI0hB,KACF8rF,EAAO,YAAY9rF,CAAQ,GAEtBkI,EAAO,UAAU,WAAW,UAAU4jF,GAAQlpG,CAAI;AAAA,IAC/D,GACUmpG,KAAyB,CAAC7jF,GAAQtlB,MAAS;AAC/C,UAAIA,EAAK,WAAW;AAClB,eAAOyoG,GAAenjF,CAAM;AACvB;AACL,cAAMpI,IAAU+rF,GAAqB3jF,GAAQtlB,CAAI;AACjD,eAAIA,EAAK,WAAW,SACXkd,IAEAoI,EAAO,UAAU,YAAW,IAAK,KAAKpI;AAAA,MAEhD;AAAA,IACP,GACUksF,KAAc,CAACppG,GAAM64C,OAAY;AAAA,MACrC,GAAG74C;AAAA,MACH,QAAA64C;AAAA,MACA,KAAK;AAAA,MACL,WAAW;AAAA,MACX,UAAU;AAAA,IAChB,IACUwwD,KAA6B,CAAC/jF,GAAQuzB,GAAQ74C,IAAO,CAAA,MAAO;AAChE,YAAMspG,IAAgBF,GAAYppG,GAAM64C,CAAM;AAC9C,aAAOyrD,GAAqBh/E,GAAQgkF,CAAa,EAAE,KAAKxlG,IAAU,CAAAylG,MAAe;AAC/E,cAAMrsF,IAAUisF,GAAuB7jF,GAAQikF,CAAW;AAC1D,eAAOhF,GAAsBj/E,GAAQpI,GAASqsF,CAAW;AAAA,MACjE,CAAO;AAAA,IACP,GAEUC,KAAO,GAAGC,KAAS,GAAGC,KAAS,GAC/BC,KAAO,CAAC53F,GAAMmpB,MAAU;AAC5B,YAAM4G,IAAO/vB,EAAK,SAASmpB,EAAM,SAAS,GACpC0uE,IAAQ,IAAI,MAAM9nE,CAAI,GACtB+nE,IAAM,IAAI,MAAM/nE,CAAI,GACpBgoE,IAAQ,CAAC58F,GAAOK,GAAKw8F,OAClB;AAAA,QACL,OAAA78F;AAAA,QACA,KAAAK;AAAA,QACA,MAAAw8F;AAAA,MACV,IAEYC,IAAc,CAACC,GAAQC,GAAMC,GAAQC,GAAMC,MAAW;AAC1D,cAAMnjB,IAASojB,EAAeL,GAAQC,GAAMC,GAAQC,CAAI;AACxD,YAAIljB,MAAW,QAAQA,EAAO,UAAUgjB,KAAQhjB,EAAO,SAASgjB,IAAOE,KAAQljB,EAAO,QAAQ+iB,KAAU/iB,EAAO,SAAS+iB,IAASE,GAAQ;AACvI,cAAIjmH,IAAI+lH,GACJ9pH,KAAIgqH;AACR,iBAAOjmH,IAAIgmH,KAAQ/pH,KAAIiqH;AACrB,YAAIlmH,IAAIgmH,KAAQ/pH,KAAIiqH,KAAQr4F,EAAK7tB,CAAC,MAAMg3C,EAAM/6C,EAAC,KAC7CkqH,EAAO,KAAK;AAAA,cACVb;AAAA,cACAz3F,EAAK7tB,CAAC;AAAA,YACtB,CAAe,GACD,EAAEA,GACF,EAAE/D,MAEE+pH,IAAOD,IAASG,IAAOD,KACzBE,EAAO,KAAK;AAAA,cACVX;AAAA,cACA33F,EAAK7tB,CAAC;AAAA,YACxB,CAAiB,GACD,EAAEA,MAEFmmH,EAAO,KAAK;AAAA,cACVZ;AAAA,cACAvuE,EAAM/6C,EAAC;AAAA,YACzB,CAAiB,GACD,EAAEA;AAAA,QAIlB,OAAe;AACL,UAAA6pH,EAAYC,GAAQ/iB,EAAO,OAAOijB,GAAQjjB,EAAO,QAAQA,EAAO,MAAMmjB,CAAM;AAC5E,mBAASE,IAAKrjB,EAAO,OAAOqjB,IAAKrjB,EAAO,KAAK,EAAEqjB;AAC7C,YAAAF,EAAO,KAAK;AAAA,cACVb;AAAA,cACAz3F,EAAKw4F,CAAE;AAAA,YACrB,CAAa;AAEH,UAAAP,EAAY9iB,EAAO,KAAKgjB,GAAMhjB,EAAO,MAAMA,EAAO,MAAMkjB,GAAMC,CAAM;AAAA,QACrE;AAAA,MACT,GACYG,IAAa,CAACt9F,GAAO68F,GAAMG,GAAME,MAAS;AAC9C,YAAI78F,IAAML;AACV,eAAOK,IAAMw8F,IAAOK,KAAQ78F,IAAM28F,KAAQn4F,EAAKxE,CAAG,MAAM2tB,EAAM3tB,IAAMw8F,CAAI;AACtE,YAAEx8F;AAEJ,eAAOu8F,EAAM58F,GAAOK,GAAKw8F,CAAI;AAAA,MACrC,GACYO,IAAiB,CAACL,GAAQC,GAAMC,GAAQC,MAAS;AACrD,cAAMprH,IAAIkrH,IAAOD,GACXtqH,IAAIyqH,IAAOD;AACjB,YAAInrH,MAAM,KAAKW,MAAM;AACnB,iBAAO;AAET,cAAMmrF,IAAQ9rF,IAAIW,GACZ8qH,KAAM9qH,IAAIX,GACV8c,MAAU2uG,KAAM,MAAM,IAAIA,KAAMA,KAAM,KAAK;AACjD,QAAAb,EAAM,IAAI9tG,EAAM,IAAImuG,GACpBJ,EAAI,IAAI/tG,EAAM,IAAIouG,IAAO;AACzB,YAAIt1G,IAAGrE,IAAGrM,IAAG7B,IAAG4S;AAChB,aAAKL,KAAI,GAAGA,MAAKkH,IAAQ,EAAElH,IAAG;AAC5B,eAAKrE,KAAI,CAACqE,IAAGrE,MAAKqE,IAAGrE,MAAK,GAAG;AAS3B,iBARArM,KAAIqM,KAAIuL,IACJvL,OAAM,CAACqE,MAAKrE,OAAMqE,MAAKg1G,EAAM1lH,KAAI,CAAC,IAAI0lH,EAAM1lH,KAAI,CAAC,IACnD0lH,EAAM1lH,EAAC,IAAI0lH,EAAM1lH,KAAI,CAAC,IAEtB0lH,EAAM1lH,EAAC,IAAI0lH,EAAM1lH,KAAI,CAAC,IAAI,GAE5B7B,KAAIunH,EAAM1lH,EAAC,GACX+Q,KAAI5S,KAAI4nH,IAASE,IAAS55G,IACnBlO,KAAI6nH,KAAQj1G,KAAIm1G,KAAQr4F,EAAK1vB,EAAC,MAAM64C,EAAMjmC,EAAC;AAChD,cAAA20G,EAAM1lH,EAAC,IAAI,EAAE7B,IACb,EAAE4S;AAEJ,gBAAI61E,IAAQ,MAAM,KAAKA,IAAQl2E,MAAKrE,MAAKA,MAAKu6E,IAAQl2E,MAChDi1G,EAAI3lH,KAAI4mF,CAAK,KAAK8+B,EAAM1lH,EAAC;AAC3B,qBAAOsmH,EAAWX,EAAI3lH,KAAI4mF,CAAK,GAAGv6E,KAAI05G,IAASE,GAAQD,GAAME,CAAI;AAAA,UAGtE;AACD,eAAK75G,KAAIu6E,IAAQl2E,IAAGrE,MAAKu6E,IAAQl2E,IAAGrE,MAAK,GAAG;AAS1C,iBARArM,KAAIqM,KAAIuL,KAASgvE,GACbv6E,OAAMu6E,IAAQl2E,MAAKrE,OAAMu6E,IAAQl2E,MAAKi1G,EAAI3lH,KAAI,CAAC,KAAK2lH,EAAI3lH,KAAI,CAAC,IAC/D2lH,EAAI3lH,EAAC,IAAI2lH,EAAI3lH,KAAI,CAAC,IAAI,IAEtB2lH,EAAI3lH,EAAC,IAAI2lH,EAAI3lH,KAAI,CAAC,GAEpB7B,KAAIwnH,EAAI3lH,EAAC,IAAI,GACb+Q,KAAI5S,KAAI4nH,IAASE,IAAS55G,IACnBlO,MAAK4nH,KAAUh1G,MAAKk1G,KAAUp4F,EAAK1vB,EAAC,MAAM64C,EAAMjmC,EAAC;AACtD,cAAA40G,EAAI3lH,EAAC,IAAI7B,MACT4S;AAEF,gBAAI61E,IAAQ,MAAM,KAAK,CAACl2E,MAAKrE,MAAKA,MAAKqE,MACjCi1G,EAAI3lH,EAAC,KAAK0lH,EAAM1lH,KAAI4mF,CAAK;AAC3B,qBAAO0/B,EAAWX,EAAI3lH,EAAC,GAAGqM,KAAI05G,IAASE,GAAQD,GAAME,CAAI;AAAA,UAG9D;AAAA,QACF;AACD,eAAO;AAAA,MACf,GACYC,IAAS,CAAA;AACf,aAAAL,EAAY,GAAGj4F,EAAK,QAAQ,GAAGmpB,EAAM,QAAQmvE,CAAM,GAC5CA;AAAA,IACb,GAEUK,KAAe,CAAAlmF,MACf/D,GAAY+D,CAAG,IACVA,EAAI,YACF3C,GAAS2C,CAAG,IACdgN,GAAS,UAAUhN,EAAI,MAAM,EAAK,IAChCxC,GAAUwC,CAAG,IACf,SAASA,EAAI,OAAO,QAEtB,IAEH0e,KAAiB,CAAAptB,MAAQ;AAC7B,UAAII;AACJ,YAAMqH,IAAY,SAAS,cAAc,KAAK,GACxC4lB,IAAO,SAAS;AAItB,WAHIrtB,MACFyH,EAAU,YAAYzH,IAEjBI,IAAOqH,EAAU;AACtB,QAAA4lB,EAAK,YAAYjtB,CAAI;AAEvB,aAAOitB;AAAA,IACb,GACUwnE,KAAW,CAACnmF,GAAK1O,GAAM9X,MAAU;AACrC,YAAMof,IAAW8lB,GAAeptB,CAAI;AACpC,UAAI0O,EAAI,cAAe,KAAIxmB,IAAQwmB,EAAI,WAAW,QAAQ;AACxD,cAAMhW,IAASgW,EAAI,WAAWxmB,CAAK;AACnC,QAAAwmB,EAAI,aAAapH,GAAU5O,CAAM;AAAA,MACzC;AACQ,QAAAgW,EAAI,YAAYpH,CAAQ;AAAA,IAEhC,GACUwtF,KAAW,CAACpmF,GAAKxmB,MAAU;AAC/B,UAAIwmB,EAAI,cAAe,KAAIxmB,IAAQwmB,EAAI,WAAW,QAAQ;AACxD,cAAMhW,IAASgW,EAAI,WAAWxmB,CAAK;AACnC,QAAAwmB,EAAI,YAAYhW,CAAM;AAAA,MACvB;AAAA,IACP,GACUq8F,KAAY,CAAClB,GAAMnlF,MAAQ;AAC/B,UAAIxmB,IAAQ;AACZ,MAAA4H,EAAO+jG,GAAM,CAAAx9C,MAAU;AACrB,QAAIA,EAAO,CAAC,MAAMq9C,KAChBxrG,MACSmuD,EAAO,CAAC,MAAMs9C,MACvBkB,GAASnmF,GAAK2nC,EAAO,CAAC,GAAGnuD,CAAK,GAC9BA,OACSmuD,EAAO,CAAC,MAAMu9C,MACvBkB,GAASpmF,GAAKxmB,CAAK;AAAA,MAE7B,CAAO;AAAA,IACP,GACU8sG,KAAS,CAACtmF,GAAKumF,MAAa9kG,GAASN,GAAM4B,GAAKid,EAAI,UAAU,GAAGumF,IAAWvnG,GAAQ4hB,GAAQslF,EAAY,IAAIA,EAAY,GAAG,CAAA9gG,MACxHA,EAAK,SAAS,CACtB,GACKohG,KAAQ,CAACC,GAAWzmF,MAAQ;AAChC,YAAM0mF,IAAmBvlG,GAAM4B,GAAKid,EAAI,UAAU,GAAGkmF,EAAY;AACjE,aAAAG,GAAUlB,GAAKuB,GAAkBD,CAAS,GAAGzmF,CAAG,GACzCA;AAAA,IACb,GAEU2mF,KAAmB9gG,GAAO,MAAM,SAAS,eAAe,mBAAmB,MAAM,CAAC,GAClF+gG,KAAa,CAAA1sF,MAAQA,EAAK,cAAc,QAAQ,MAAM,MACtD2sF,KAAwB,CAAAJ,OACrB;AAAA,MACL,MAAM;AAAA,MACN,WAAAA;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACV,gBAAgB;AAAA,IACxB,IAEUK,KAAsB,CAAApuF,OACnB;AAAA,MACL,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAAA;AAAA,MACA,UAAU;AAAA,MACV,gBAAgB;AAAA,IACxB,IAEUquF,KAAmB,CAAAjmF,MAAU;AACjC,YAAMgiD,IAAYhiD,EAAO,WAAW,aAAY,GAC1C5G,IAAOwpD,GAAO5iD,EAAO,QAAS,GAAEgiD,CAAS;AAC/C,aAAO8jC,GAAW1sF,CAAI,IAAI2sF,GAAsBP,GAAOpsF,GAAM,EAAI,CAAC,IAAI4sF,GAAoBlmF,EAAO1G,EAAK,SAAS,CAAC;AAAA,IACtH,GACU8sF,KAAgB,CAAClmF,GAAQmmF,GAAO3lF,MAAW;AAC/C,YAAMuiC,IAAWviC,IAAS2lF,EAAM,iBAAiBA,EAAM;AACvD,MAAIA,EAAM,SAAS,eACjBT,GAAMS,EAAM,WAAWnmF,EAAO,QAAS,CAAA,IAEvCA,EAAO,WAAWmmF,EAAM,SAAS;AAAA,QAC/B,QAAQ;AAAA,QACR,cAAcvoG,GAAcmlD,CAAQ,KAAKI,GAAeJ,CAAQ,IAAI,CAACA,EAAS,cAAc;AAAA,MACtG,CAAS,GAECA,MACF/iC,EAAO,UAAU,eAAe+iC,CAAQ,GACxC/iC,EAAO,UAAU;IAEzB,GACUomF,KAAkB,CAAAD,MACfA,EAAM,SAAS,eAAeA,EAAM,UAAU,KAAK,EAAE,IAAIA,EAAM,SAElEE,KAAuB,CAAAF,MAAS;AACpC,YAAMjnF,IAAMnO,EAAa,QAAQ,QAAQ80F,GAAkB,CAAA;AAC3D,aAAAluF,GAAMuH,GAAKknF,GAAgBD,CAAK,CAAC,GACjC7lG,EAAOka,GAAY0E,GAAK,mBAAmB,GAAG7H,EAAM,GAC7CK,GAAMwH,CAAG;AAAA,IACtB,GACUonF,KAAkB,CAACC,GAAQC,MAAWJ,GAAgBG,CAAM,MAAMH,GAAgBI,CAAM,GACxFC,KAAyB,CAACF,GAAQC,MAAWH,GAAqBE,CAAM,MAAMF,GAAqBG,CAAM,GACzGE,KAAS,CAACH,GAAQC,MAClB,CAACD,KAAU,CAACC,IACP,KACEF,GAAgBC,GAAQC,CAAM,IAChC,KAEAC,GAAuBF,GAAQC,CAAM,GAI1CG,KAAa,CAAAC,MAASA,EAAM,IAAG,MAAO,GAEtCC,KAAY,CAACC,GAAaC,GAAQH,MAAU;AAChD,MAAID,GAAWC,CAAK,MAClBE,EAAY,SAASC;AAAA,IAE7B,GACUC,KAAY,CAACF,GAAaF,MAAU;AACxC,MAAIE,EAAY,WACdD,GAAUC,GAAa,IAAOF,CAAK,GACnCE,EAAY,IAAG;AAAA,IAEvB,GACUG,KAA4B,CAAAH,MAAe;AAC/C,MAAIA,EAAY,WACdA,EAAY,SAAS,IACrBA,EAAY,IAAG;AAAA,IAEvB,GAEUI,KAAiB,CAAClnF,GAAQ4mF,GAAOO,MAAmB;AACxD,MAAIR,GAAWC,CAAK,KAClBO,EAAe,IAAI/1D,GAAgBpxB,EAAO,SAAS,CAAC;AAAA,IAE5D,GACUonF,KAAiB,CAACpnF,GAAQ8mF,GAAapuG,GAAOkuG,GAAOO,GAAgBhB,GAAOhyF,MAAU;AAC1F,YAAMkzF,IAAepB,GAAiBjmF,CAAM,GACtCsnF,IAAWp7F,GAAM,OAAOi6F,KAAS,CAAA,GAAIkB,CAAY;AACvD,UAAI,CAACV,GAAWC,CAAK,KAAK5mF,EAAO;AAC/B,eAAO;AAET,YAAMunF,IAAYT,EAAY,KAAKpuG,EAAM,IAAK,CAAA;AAQ9C,UAPIsnB,EAAO,SAAS,iBAAiB;AAAA,QACjC,OAAOsnF;AAAA,QACP,WAAAC;AAAA,QACA,eAAepzF;AAAA,MACzB,CAAS,EAAE,mBAAkB,KAGnBozF,KAAab,GAAOa,GAAWD,CAAQ;AACzC,eAAO;AAET,MAAIR,EAAY,KAAKpuG,EAAM,IAAK,CAAA,KAC9ByuG,EAAe,IAAG,EAAG,KAAK,CAAAK,MAAM;AAC9B,QAAAV,EAAY,KAAKpuG,EAAM,IAAG,CAAE,EAAE,iBAAiB8uG;AAAA,MACzD,CAAS;AAEH,YAAMC,IAAuBnvD,GAAwBt4B,CAAM;AAC3D,UAAIynF,KACEX,EAAY,KAAK,SAASW,GAAsB;AAClD,iBAAS7oH,IAAI,GAAGA,IAAIkoH,EAAY,KAAK,SAAS,GAAGloH;AAC/C,UAAAkoH,EAAY,KAAKloH,CAAC,IAAIkoH,EAAY,KAAKloH,IAAI,CAAC;AAE9C,QAAAkoH,EAAY,KAAK,UACjBpuG,EAAM,IAAIouG,EAAY,KAAK,MAAM;AAAA,MAClC;AAEH,MAAAQ,EAAS,WAAWl2D,GAAgBpxB,EAAO,SAAS,GAChDtnB,EAAM,IAAK,IAAGouG,EAAY,KAAK,SAAS,MAC1CA,EAAY,KAAK,SAASpuG,EAAM,IAAG,IAAK,IAE1CouG,EAAY,KAAK,KAAKQ,CAAQ,GAC9B5uG,EAAM,IAAIouG,EAAY,KAAK,SAAS,CAAC;AACrC,YAAMpsG,IAAO;AAAA,QACX,OAAO4sG;AAAA,QACP,WAAAC;AAAA,QACA,eAAepzF;AAAA,MACvB;AACM,aAAIzb,EAAM,IAAK,IAAG,KAChBsnB,EAAO,SAAS,EAAI,GACpBA,EAAO,SAAS,WAAWtlB,CAAI,GAC/BslB,EAAO,SAAS,UAAUtlB,CAAI,KAE9BslB,EAAO,SAAS,WAAWtlB,CAAI,GAE1B4sG;AAAA,IACb,GACUI,KAAU,CAAC1nF,GAAQ8mF,GAAapuG,MAAU;AAC9C,MAAAouG,EAAY,OAAO,IACnBpuG,EAAM,IAAI,CAAC,GACXouG,EAAY,SAAS,IACrB9mF,EAAO,SAAS,YAAY;AAAA,IAClC,GACU2nF,KAAU,CAAC3nF,GAAQ8mF,GAAapuG,GAAOkvG,GAAWC,MAAc;AACpE,UAAIf,EAAY,SAASc,CAAS,GAAG;AACnC,cAAM7kD,IAAW+jD,EAAY,KAAKpuG,EAAM,IAAG,CAAE,EAAE,UACzC6uG,IAAYT,EAAY,KAAKpuG,EAAM,IAAG,IAAK,CAAC;AAClD,QAAAwtG,GAAclmF,GAAQunF,GAAW,EAAI,GACjCT,EAAY,SAASe,CAAS,MAChCf,EAAY,KAAKpuG,EAAM,IAAK,IAAG,CAAC,EAAE,iBAAiBqqD;AAAA,MAEtD;AAAA,IACP,GACU+kD,KAAS,CAAC9nF,GAAQtnB,GAAO6+B,MAAS;AACtC,UAAI4uE;AACJ,aAAIztG,EAAM,IAAG,IAAK6+B,EAAK,SAAS,MAC9B7+B,EAAM,IAAIA,EAAM,IAAK,IAAG,CAAC,GACzBytG,IAAQ5uE,EAAK7+B,EAAM,IAAK,CAAA,GACxBwtG,GAAclmF,GAAQmmF,GAAO,EAAK,GAClCnmF,EAAO,SAAS,EAAI,GACpBA,EAAO,SAAS,QAAQ,EAAE,OAAAmmF,EAAO,CAAA,IAE5BA;AAAA,IACb,GACU4B,KAAS,CAAC/nF,GAAQ8mF,GAAaF,GAAOluG,MAAU;AACpD,UAAIytG;AACJ,aAAIW,EAAY,WACdA,EAAY,IAAG,GACfA,EAAY,SAAS,IACrBD,GAAUC,GAAa,IAAOF,CAAK,IAEjCluG,EAAM,IAAK,IAAG,MAChBA,EAAM,IAAIA,EAAM,IAAK,IAAG,CAAC,GACzBytG,IAAQW,EAAY,KAAKpuG,EAAM,IAAK,CAAA,GACpCwtG,GAAclmF,GAAQmmF,GAAO,EAAI,GACjCnmF,EAAO,SAAS,EAAI,GACpBA,EAAO,SAAS,QAAQ,EAAE,OAAAmmF,EAAO,CAAA,IAE5BA;AAAA,IACb,GACU6B,KAAU,CAAAlB,MAAe;AAC7B,MAAAA,EAAY,MAAK,GACjBA,EAAY,IAAG;AAAA,IACrB,GACUmB,KAAY,CAACjoF,GAAQ8mF,GAAapuG,MAAUA,EAAM,IAAK,IAAG,KAAKouG,EAAY,UAAUA,EAAY,KAAK,CAAC,KAAK,CAACJ,GAAOT,GAAiBjmF,CAAM,GAAG8mF,EAAY,KAAK,CAAC,CAAC,GACjKoB,KAAY,CAACpB,GAAapuG,MAAUA,EAAM,IAAG,IAAKouG,EAAY,KAAK,SAAS,KAAK,CAACA,EAAY,QAC9FqB,KAAa,CAACrB,GAAaF,GAAOxiG,OACtC4iG,GAAUF,GAAaF,CAAK,GAC5BE,EAAY,aAAY,GACxBA,EAAY,OAAO1iG,CAAQ,GACpB0iG,EAAY,QAEfsB,KAAW,CAACxB,GAAOxiG,MAAa;AACpC,UAAI;AACF,QAAAwiG,EAAM,IAAIA,EAAM,IAAK,IAAG,CAAC,GACzBxiG;MACR,UAAgB;AACR,QAAAwiG,EAAM,IAAIA,EAAM,IAAK,IAAG,CAAC;AAAA,MAC1B;AAAA,IACP,GAEUyB,KAAoB,CAACroF,GAAQd,MAAQ;AACzC,YAAMtQ,IAAMoR,EAAO,KACb5S,IAAQxP,GAAcshB,CAAG,IAAIA,IAAMc,EAAO;AAChD,MAAA1f,EAAOsO,EAAI,OAAO,WAAWxB,CAAK,GAAG,CAAAk7F,MAAc;AACjD,gBAAQA,EAAW,UAAQ;AAAA,UAC3B,KAAK;AACH,kBAAM9pE,IAAMua,GAAwB/4B,CAAM,GACpCroB,IAAQiX,EAAI,UAAU05F,GAAY,QAAQ;AAChD,aAAK,CAAC3wG,KAASA,MAAU,QAAQqoB,EAAO,YACtCpR,EAAI,SAAS05F,GAAY9pE,CAAG,IAE5B5vB,EAAI,YAAY05F,GAAY9pE,CAAG;AAEjC;AAAA,UACF,KAAK;AACH,gBAAI,CAAC5vB,EAAI,UAAU05F,GAAY,MAAM,GAAG;AACtC,oBAAM3wG,IAAQiX,EAAI,UAAU05F,GAAY,MAAM,KAAKA,EAAW,IACxD9pE,IAAMwa,GAAyBh5B,CAAM;AAC3C,cAAIroB,KAASqoB,EAAO,YAClBpR,EAAI,SAAS05F,GAAY9pE,CAAG,IAE5B5vB,EAAI,YAAY05F,GAAY9pE,CAAG;AAAA,YAElC;AACD;AAAA,QACD;AAAA,MACT,CAAO,GACDxe,EAAO,SAAS,aAAa;AAAA,QAC3B,SAASd;AAAA,QACT,WAAWc,EAAO;AAAA,MAC1B,CAAO;AAAA,IACP,GAEUuoF,KAAmB,CAAAvoF,OAAW;AAAA,MAClC,MAAM,EAAE,YAAY/hB,GAAM;AAAA,MAC1B,aAAa;AAAA,QACX,cAAc,CAAC2oG,GAAOO,MAAmBD,GAAelnF,GAAQ4mF,GAAOO,CAAc;AAAA,QACrF,KAAK,CAACL,GAAapuG,GAAOkuG,GAAOO,GAAgBhB,GAAOhyF,MAAUizF,GAAepnF,GAAQ8mF,GAAapuG,GAAOkuG,GAAOO,GAAgBhB,GAAOhyF,CAAK;AAAA,QAChJ,MAAM,CAAC2yF,GAAaF,GAAOluG,MAAUqvG,GAAO/nF,GAAQ8mF,GAAaF,GAAOluG,CAAK;AAAA,QAC7E,MAAM,CAACA,GAAO6+B,MAASuwE,GAAO9nF,GAAQtnB,GAAO6+B,CAAI;AAAA,QACjD,OAAO,CAACuvE,GAAapuG,MAAUgvG,GAAQ1nF,GAAQ8mF,GAAapuG,CAAK;AAAA,QACjE,OAAO,CAAAouG,MAAekB,GAAQlB,CAAW;AAAA,QACzC,SAAS,CAACA,GAAapuG,MAAUuvG,GAAUjoF,GAAQ8mF,GAAapuG,CAAK;AAAA,QACrE,SAAS,CAACouG,GAAapuG,MAAUwvG,GAAUpB,GAAapuG,CAAK;AAAA,QAC7D,UAAU,CAACouG,GAAaF,GAAOxiG,MAAa+jG,GAAWrB,GAAaF,GAAOxiG,CAAQ;AAAA,QACnF,QAAQ,CAACwiG,GAAOxiG,MAAagkG,GAASxB,GAAOxiG,CAAQ;AAAA,QACrD,OAAO,CAAC0iG,GAAapuG,GAAOkvG,GAAWC,MAAcF,GAAQ3nF,GAAQ8mF,GAAapuG,GAAOkvG,GAAWC,CAAS;AAAA,MAC9G;AAAA,MACD,WAAW;AAAA,QACT,OAAO,CAACzkG,GAAM4kD,GAAMp3C,GAAMgsE,MAAYS,GAAQr9D,GAAQ5c,GAAM4kD,GAAMp3C,GAAMgsE,CAAO;AAAA,QAC/E,UAAU,CAACnhE,GAAOusC,MAASs1B,GAASt9D,GAAQvE,GAAOusC,CAAI;AAAA,QACvD,WAAW,CAACp3C,GAAMxN,GAAM4kD,GAAM40B,MAAYE,GAAU98D,GAAQpP,GAAMxN,GAAM4kD,GAAM40B,CAAO;AAAA,QACrF,UAAU,CAAAx5E,MAAQu6E,GAAS39D,GAAQ5c,CAAI;AAAA,QACvC,SAAS,CAAAqY,MAASgiE,GAAQz9D,GAAQvE,CAAK;AAAA,QACvC,OAAO,CAACrY,GAAM4kD,GAAMp3C,MAASu3E,GAAcnoE,GAAQ5c,GAAM4kD,GAAMp3C,CAAI;AAAA,QACnE,QAAQ,CAACxN,GAAM4kD,GAAMp3C,GAAMgsE,MAAY6I,GAAezlE,GAAQ5c,GAAM4kD,GAAMp3C,GAAMgsE,CAAO;AAAA,QACvF,QAAQ,CAACx5E,GAAM4kD,GAAMp3C,MAAS04E,GAAOtpE,GAAQ5c,GAAM4kD,GAAMp3C,CAAI;AAAA,QAC7D,eAAe,CAAC03E,GAA2Bh1C,GAASlvC,GAAUw4E,GAAS50B,MAASqhC,GAAsBrpE,GAAQsoE,GAA2Bh1C,GAASlvC,GAAUw4E,GAAS50B,CAAI;AAAA,MAC1K;AAAA,MACD,QAAQ;AAAA,QACN,YAAY,CAAAttD,MAAQipE,GAAmB3jD,GAAQtlB,CAAI;AAAA,QACnD,YAAY,CAACkd,GAASld,MAAS0hF,GAAmBp8D,GAAQpI,GAASld,CAAI;AAAA,QACvE,eAAe,CAAC/C,GAAO+2E,MAAY2M,GAAkBr7D,GAAQroB,GAAO+2E,CAAO;AAAA,QAC3E,WAAW,CAAAxvD,MAAOmpF,GAAkBroF,GAAQd,CAAG;AAAA,MAChD;AAAA,MACD,WAAW,EAAE,YAAY,CAACq0B,GAAQ74C,MAASqpG,GAA2B/jF,GAAQuzB,GAAQ74C,CAAI,EAAG;AAAA,MAC7F,eAAe;AAAA,QACb,eAAe,CAAA8mB,MAASw/C,GAAShhD,GAAQwB,CAAK;AAAA,QAC9C,kBAAkB,MAAM2/C,GAASnhD,GAAQjP,EAAa,QAAQiP,EAAO,QAAO,CAAE,CAAC;AAAA,MAChF;AAAA,MACD,KAAK,EAAE,UAAU,MAAM3gB,EAAS,KAAI,EAAI;AAAA,IAC9C,IACUmpG,KAAiB,CAAAC,MAAa;AAClC,YAAMC,IAAc,CAAA1gD,MAAQnvD,GAASmvD,CAAI,IAAIA,IAAO,IAC9C,EAAC,MAAA2gD,GAAM,aAAA7B,GAAa,WAAA/nB,GAAW,QAAA/+D,GAAQ,WAAAiwB,GAAW,eAAA24D,GAAe,KAAAxyF,EAAG,IAAIqyF;AAC9E,aAAO;AAAA,QACL,MAAM,EAAE,YAAYE,EAAK,WAAY;AAAA,QACrC,aAAa;AAAA,UACX,cAAc7B,EAAY;AAAA,UAC1B,KAAKA,EAAY;AAAA,UACjB,MAAMA,EAAY;AAAA,UAClB,MAAMA,EAAY;AAAA,UAClB,OAAOA,EAAY;AAAA,UACnB,OAAOA,EAAY;AAAA,UACnB,SAASA,EAAY;AAAA,UACrB,SAASA,EAAY;AAAA,UACrB,UAAU,CAAC+B,GAAcC,GAAQxnH,MAAOwlH,EAAY,SAASxlH,CAAE;AAAA,UAC/D,QAAQ,CAACwnH,GAAQ1kG,MAAa0iG,EAAY,OAAO1iG,CAAQ;AAAA,UACzD,OAAO,CAACykG,GAAcE,GAAQnB,GAAWC,MAAcf,EAAY,MAAMc,GAAWC,CAAS;AAAA,QAC9F;AAAA,QACD,WAAW;AAAA,UACT,OAAO,CAACzkG,GAAM4kD,GAAMghD,GAAOpsB,MAAYmC,EAAU,MAAM37E,GAAMslG,EAAY1gD,CAAI,GAAG40B,CAAO;AAAA,UACvF,UAAUmC,EAAU;AAAA,UACpB,WAAWA,EAAU;AAAA,UACrB,UAAU,CAAA37E,MAAQ27E,EAAU,SAAS37E,CAAI;AAAA,UACzC,SAAS,CAAAqY,MAASsjE,EAAU,QAAQtjE,CAAK;AAAA,UACzC,OAAO,CAACrY,GAAM4kD,GAAMghD,MAAUjqB,EAAU,MAAM37E,GAAMslG,EAAY1gD,CAAI,CAAC;AAAA,UACrE,QAAQ,CAAC5kD,GAAM4kD,GAAMghD,GAAOC,MAAalqB,EAAU,OAAO37E,GAAMslG,EAAY1gD,CAAI,CAAC;AAAA,UACjF,QAAQ,CAAC5kD,GAAM4kD,GAAMghD,MAAUjqB,EAAU,OAAO37E,GAAMslG,EAAY1gD,CAAI,CAAC;AAAA,UACvE,eAAe,CAACkhD,GAAM51D,GAASlvC,GAAUw4E,GAAS50B,MAAS+2B,EAAU,cAAczrC,GAASlvC,GAAUw4E,GAAS50B,CAAI;AAAA,QACpH;AAAA,QACD,QAAQ;AAAA,UACN,YAAY,CAAAttD,MAAQslB,EAAO,WAAWtlB,CAAI;AAAA,UAC1C,YAAY,CAACkd,GAASld,OACb;AAAA,YACL,SAASslB,EAAO,WAAWpI,GAASld,CAAI;AAAA,YACxC,MAAM;AAAA,UACpB;AAAA,UAEU,eAAe,CAACkd,GAASuxF,OACvBnpF,EAAO,cAAcpI,CAAO,GACrB;AAAA,UAET,WAAWoI,EAAO;AAAA,QACnB;AAAA,QACD,WAAW,EAAE,YAAY,CAACopF,GAAS1uG,MAASu1C,EAAU,WAAWv1C,CAAI,EAAG;AAAA,QACxE,eAAe;AAAA,UACb,eAAekuG,EAAc;AAAA,UAC7B,kBAAkBA,EAAc;AAAA,QACjC;AAAA,QACD,KAAK,EAAE,UAAU,MAAMvpG,EAAS,KAAK+W,EAAI,YAAW,CAAE,EAAG;AAAA,MACjE;AAAA,IACA,GACUizF,KAAkB,MAAM;AAC5B,YAAMC,IAAM/qG,GAAS,IAAI,GACnB2Y,IAAQ3Y,GAAS,EAAE;AACzB,aAAO;AAAA,QACL,MAAM,EAAE,YAAYN,GAAM;AAAA,QAC1B,aAAa;AAAA,UACX,cAAcA;AAAA,UACd,KAAKqrG;AAAA,UACL,MAAMA;AAAA,UACN,MAAMA;AAAA,UACN,OAAOrrG;AAAA,UACP,OAAOA;AAAA,UACP,SAASkB;AAAA,UACT,SAASA;AAAA,UACT,UAAUmqG;AAAA,UACV,QAAQrrG;AAAA,UACR,OAAOA;AAAA,QACR;AAAA,QACD,WAAW;AAAA,UACT,OAAOkB;AAAA,UACP,UAAUZ,GAAS,EAAE;AAAA,UACrB,WAAWA,GAAS,MAAS;AAAA,UAC7B,UAAUY;AAAA,UACV,SAAS+X;AAAA,UACT,OAAOjZ;AAAA,UACP,QAAQA;AAAA,UACR,QAAQA;AAAA,UACR,eAAeM,GAAS,EAAE,QAAQN,GAAI,CAAE;AAAA,QACzC;AAAA,QACD,QAAQ;AAAA,UACN,YAAYiZ;AAAA,UACZ,YAAY3Y,GAAS;AAAA,YACnB,SAAS;AAAA,YACT,MAAM;AAAA,UAClB,CAAW;AAAA,UACD,eAAeA,GAAS,EAAE;AAAA,UAC1B,WAAWN;AAAA,QACZ;AAAA,QACD,WAAW,EAAE,YAAYiZ,EAAO;AAAA,QAChC,eAAe;AAAA,UACb,eAAejZ;AAAA,UACf,kBAAkBA;AAAA,QACnB;AAAA,QACD,KAAK,EAAE,UAAUM,GAASc,EAAS,KAAM,CAAA,EAAG;AAAA,MACpD;AAAA,IACA,GACUkqG,KAAQ,CAAAvpF,MAAUxc,GAAMwc,EAAO,SAAS,KAAK,GAC7CwpF,KAAc,CAAAxpF,MAAU1c,GAAM0c,EAAO,SAAS,KAAK,EAAE,KAAK,CAAAypF,MAAapqG,EAAS,KAAKoqG,EAAU,KAAK,CAAC,GACrGC,KAAU,CAAA1pF,MAAU;AACxB,YAAM2pF,IAAa3pF;AACnB,aAAOwpF,GAAYxpF,CAAM,EAAE,KAAK,OAC9B2pF,EAAW,cAAcpB,GAAiBvoF,CAAM,GACzC3gB,EAAS,SACf,CAAAuqG,OACDD,EAAW,cAAcN,MAClBhqG,EAAS,KAAK,MAAMuqG,EAAK,EAAG,KAAK,CAAAnB,OACtCkB,EAAW,cAAcnB,GAAeC,CAAS,GAC1CA,EAAU,IAAI,SACtB,CAAC,EACH;AAAA,IACP,GACUoB,KAA6B,CAAA7pF,MAAUA,EAAO,cAAcA,EAAO,cAAcuoF,GAAiBvoF,CAAM,GACxG8pF,KAA0B,CAAA9pF,MAAU;AACxC,YAAM+pF,IAAc/pF,EAAO;AAC3B,UAAK+pF;AAGH,eAAOA;AAFP,YAAM,IAAI,MAAM,iDAAiD;AAAA,IAIzE,GACUC,KAAe,CAAChqF,GAAQ4mF,GAAOO,MAAmB;AACtD,MAAA2C,GAAwB9pF,CAAM,EAAE,YAAY,aAAa4mF,GAAOO,CAAc;AAAA,IACpF,GACU8C,KAAe,CAACjqF,GAAQ8mF,GAAapuG,GAAOkuG,GAAOO,GAAgBhB,GAAOhyF,MAAU21F,GAAwB9pF,CAAM,EAAE,YAAY,IAAI8mF,GAAapuG,GAAOkuG,GAAOO,GAAgBhB,GAAOhyF,CAAK,GAC3L+1F,KAAO,CAAClqF,GAAQ8mF,GAAaF,GAAOluG,MAAUoxG,GAAwB9pF,CAAM,EAAE,YAAY,KAAK8mF,GAAaF,GAAOluG,CAAK,GACxHyxG,KAAO,CAACnqF,GAAQtnB,GAAO6+B,MAASuyE,GAAwB9pF,CAAM,EAAE,YAAY,KAAKtnB,GAAO6+B,CAAI,GAC5F6yE,KAAQ,CAACpqF,GAAQ8mF,GAAapuG,MAAU;AAC5C,MAAAoxG,GAAwB9pF,CAAM,EAAE,YAAY,MAAM8mF,GAAapuG,CAAK;AAAA,IAC1E,GACU2xG,KAAQ,CAACrqF,GAAQ8mF,MAAgB;AACrC,MAAAgD,GAAwB9pF,CAAM,EAAE,YAAY,MAAM8mF,CAAW;AAAA,IACnE,GACUwD,KAAU,CAACtqF,GAAQ8mF,GAAapuG,MAAUoxG,GAAwB9pF,CAAM,EAAE,YAAY,QAAQ8mF,GAAapuG,CAAK,GAChH6xG,KAAU,CAACvqF,GAAQ8mF,GAAapuG,MAAUoxG,GAAwB9pF,CAAM,EAAE,YAAY,QAAQ8mF,GAAapuG,CAAK,GAChH8xG,KAAW,CAACxqF,GAAQ8mF,GAAaF,GAAOxiG,MAAa0lG,GAAwB9pF,CAAM,EAAE,YAAY,SAAS8mF,GAAaF,GAAOxiG,CAAQ,GACtIqmG,KAAS,CAACzqF,GAAQ4mF,GAAOxiG,MAAa;AAC1C,MAAA0lG,GAAwB9pF,CAAM,EAAE,YAAY,OAAO4mF,GAAOxiG,CAAQ;AAAA,IACxE,GACUsmG,KAAQ,CAAC1qF,GAAQ8mF,GAAapuG,GAAOkvG,GAAWC,MAAc;AAClE,MAAAiC,GAAwB9pF,CAAM,EAAE,YAAY,MAAM8mF,GAAapuG,GAAOkvG,GAAWC,CAAS;AAAA,IAChG,GACU8C,KAAc,CAAC3qF,GAAQ5c,GAAM4kD,GAAMp3C,GAAMgsE,MAAYktB,GAAwB9pF,CAAM,EAAE,UAAU,MAAM5c,GAAM4kD,GAAMp3C,GAAMgsE,CAAO,GAC9HguB,KAAkB,CAAC5qF,GAAQvE,GAAOusC,MAAS8hD,GAAwB9pF,CAAM,EAAE,UAAU,SAASvE,GAAOusC,CAAI,GACzG6iD,KAAkB,CAAC7qF,GAAQpP,GAAMxN,GAAM4kD,GAAM40B,MAAYktB,GAAwB9pF,CAAM,EAAE,UAAU,UAAUpP,GAAMxN,GAAM4kD,GAAM40B,CAAO,GACtIkuB,KAAiB,CAAC9qF,GAAQ5c,MAAS0mG,GAAwB9pF,CAAM,EAAE,UAAU,SAAS5c,CAAI,GAC1F2nG,KAAgB,CAAC/qF,GAAQvE,MAAUquF,GAAwB9pF,CAAM,EAAE,UAAU,QAAQvE,CAAK,GAC1FuvF,KAAc,CAAChrF,GAAQ5c,GAAM4kD,GAAMp3C,MAAS;AAChD,MAAAk5F,GAAwB9pF,CAAM,EAAE,UAAU,MAAM5c,GAAM4kD,GAAMp3C,CAAI;AAAA,IACtE,GACUq6F,KAAe,CAACjrF,GAAQ5c,GAAM4kD,GAAMp3C,GAAMgsE,MAAY;AAC1D,MAAAktB,GAAwB9pF,CAAM,EAAE,UAAU,OAAO5c,GAAM4kD,GAAMp3C,GAAMgsE,CAAO;AAAA,IAChF,GACUsuB,KAAe,CAAClrF,GAAQ5c,GAAM4kD,GAAMp3C,MAAS;AACjD,MAAAk5F,GAAwB9pF,CAAM,EAAE,UAAU,OAAO5c,GAAM4kD,GAAMp3C,CAAI;AAAA,IACvE,GACUu6F,KAAgB,CAACnrF,GAAQsoE,GAA2Bh1C,GAASlvC,GAAUw4E,GAAS50B,MAAS8hD,GAAwB9pF,CAAM,EAAE,UAAU,cAAcsoE,GAA2Bh1C,GAASlvC,GAAUw4E,GAAS50B,CAAI,GAC5MojD,KAAe,CAACprF,GAAQtlB,MAASmvG,GAA2B7pF,CAAM,EAAE,OAAO,WAAWtlB,CAAI,GAC1F2wG,KAAe,CAACrrF,GAAQpI,GAASld,MAASmvG,GAA2B7pF,CAAM,EAAE,OAAO,WAAWpI,GAASld,CAAI,GAC5G4wG,KAAkB,CAACtrF,GAAQroB,GAAO+2E,MAAYm7B,GAA2B7pF,CAAM,EAAE,OAAO,cAAcroB,GAAO+2E,CAAO,GACpH68B,KAAqB,CAACvrF,GAAQuzB,GAAQ74C,MAASovG,GAAwB9pF,CAAM,EAAE,UAAU,WAAWuzB,GAAQ74C,CAAI,GAChH8wG,KAAc,CAACxrF,GAAQd,MAAQ4qF,GAAwB9pF,CAAM,EAAE,OAAO,UAAUd,CAAG,GACnFusF,KAAa,CAAAzrF,MAAU8pF,GAAwB9pF,CAAM,EAAE,KAAK,cAC5D0rF,KAA6B,CAAC1rF,GAAQwB,MAAUsoF,GAAwB9pF,CAAM,EAAE,cAAc,cAAcwB,CAAK,GACjHmqF,KAAgC,CAAA3rF,MAAU8pF,GAAwB9pF,CAAM,EAAE,cAAc,oBAExF4rF,KAAe,CAAC5rF,GAAQtlB,IAAO,CAAA,MAAO;AAC1C,YAAM64C,IAAS74C,EAAK,SAASA,EAAK,SAAS;AAC3C,aAAO6wG,GAAmBvrF,GAAQuzB,GAAQ74C,CAAI;AAAA,IACpD,GAEUmxG,KAAc,CAAA/6F,MACdA,EAAK,IAAI,WAAW,KACtBsG,GAAStG,CAAI,GACNzR,EAAS,UAETA,EAAS,KAAKyR,CAAI,GAGvBg7F,KAAmB,CAACl7F,GAAMhJ,MAAUgJ,EAAK,OAAO,CAAAsO,MAAOgvC,GAAgB,eAAehvC,EAAI,GAAG,CAAC,EAAE,KAAKtX,IAAQoL,KAAcD,EAAW,GACtIg5F,KAAU,CAACC,GAAOC,GAAO71G,GAAKwR,GAAO8X,MAAW;AACpD,YAAMwsF,IAAWF,EAAM,KACjBpK,IAAWqK,EAAM,KACjBE,IAAYvkG,IAAQskG,EAAS,SAAStK,EAAS;AACrD,MAAIh6F,KACFuiE,GAAe+hC,GAAUtK,GAAUliF,GAAQ,IAAO,CAAC9X,CAAK,GACxDxR,EAAI,SAASwrG,GAAUuK,CAAS,MAEhChiC,GAAey3B,GAAUsK,GAAUxsF,GAAQ,IAAO,CAAC9X,CAAK,GACxDxR,EAAI,OAAOwrG,GAAUuK,CAAS;AAAA,IAEtC,GACUC,KAA0B,CAACH,GAAOrkG,GAAO8X,MAAW;AACxD,MAAAtN,GAAO65F,CAAK,EAAE,KAAK,CAAA/0G,MAAQ;AACzB,cAAM4Z,IAAOm7F,EAAM;AACnB,QAAIrkG,KAASkhE,GAAkB5xE,GAAMs2C,GAAc18B,GAAM,CAAC,GAAG4O,CAAM,IACjEsqD,GAAyBl5D,GAAM,GAAG4O,CAAM,IAC/B,CAAC9X,KAASmhE,GAAmB7xE,GAAMs2C,GAAc18B,GAAMA,EAAK,MAAM,GAAG4O,CAAM,KACpFwqD,GAA0Bp5D,GAAMA,EAAK,QAAQ4O,CAAM;AAAA,MAE7D,CAAO;AAAA,IACP,GACU2sF,KAAwB,CAACC,GAAWhrD,GAAWlrD,GAAKwR,GAAO8X,MAAW;AAC1E,MAAA4sF,EAAU,KAAK,CAAAN,QACMpkG,IAAQsiE,KAA4BF,IAC5CgiC,EAAM,KAAKpkG,IAAQokG,EAAM,IAAI,SAAS,GAAGtsF,CAAM,GACnD4hC,EAAU,OAAO/yC,EAAQ,EAAE,IAAI,CAAA09F,MAASF,GAAQC,GAAOC,GAAO71G,GAAKwR,GAAO8X,CAAM,CAAC,EACzF,EAAE,QAAQ,MACaosF,GAAiBxqD,GAAW15C,CAAK,EAAE,GAAG05C,CAAS,EAAE,OAAO/yC,EAAQ,EACjE,IAAI,CAAA09F,MAASG,GAAwBH,GAAOrkG,GAAO8X,CAAM,CAAC,CAChF;AAAA,IACP,GACU6sF,KAAgB,CAACn2G,GAAK0hB,GAAU4H,MAAW;AAC/C,YAAMtM,IAAa/T,EAAS,KAAKyY,EAAS,UAAU,EAAE,IAAI/G,EAAa,OAAO,GACxEsC,IAAYhU,EAAS,KAAKyY,EAAS,SAAS,EAAE,IAAI/G,EAAa,OAAO;AAC5E,MAAA3a,EAAI,eAAc,GAClBA,EAAI,WAAW0hB,CAAQ;AACvB,YAAM00F,IAAWp5F,EAAW,KAAKL,EAAW,EAAE,OAAOxE,EAAQ,EAAE,KAAKs9F,EAAW,GACzEY,IAAWp5F,EAAU,KAAKL,EAAW,EAAE,OAAOzE,EAAQ,EAAE,KAAKs9F,EAAW;AAC9E,MAAAQ,GAAsBG,GAAUp5F,GAAYhd,GAAK,IAAMspB,CAAM,GAC7D2sF,GAAsBI,GAAUp5F,GAAWjd,GAAK,IAAOspB,CAAM,GAC7DtpB,EAAI,SAAS,EAAK;AAAA,IACxB,GACUs2G,KAAc,CAAChyG,GAAMkd,OAAa;AAAA,MACtC,QAAQ;AAAA,MACR,GAAGld;AAAA,MACH,KAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAAkd;AAAA,IACN,IACU+0F,KAAe,CAAC3sF,GAAQtlB,MAAS;AACrC,UAAIA,EAAK,WAAW,OAAO;AACzB,cAAMtE,IAAM4pB,EAAO,UAAU,OAAM,GAC7B4sF,IAAe5sF,EAAO,IAAI,UAAU5pB,EAAI,yBAAyB4pB,EAAO,IAAI,OAAO,GACnF6sF,IAAcD,IAAe,EAAE,SAASA,EAAa,SAAS,cAAe,IAAG,IAChFh8F,IAAOoP,EAAO,OAAO,MAAMtlB,EAAK,SAAS;AAAA,UAC7C,mBAAmB;AAAA,UACnB,GAAGmyG;AAAA,UACH,GAAGnyG;AAAA,QACb,CAAS;AACD,eAAOwpE,GAAe,EAAE,UAAU,GAAO,GAAElkD,EAAO,MAAM,EAAE,UAAUpP,CAAI;AAAA,MAChF;AACQ,eAAOlW,EAAK;AAAA,IAEpB,GACUoyG,KAAe,CAAC9sF,GAAQpI,GAASld,IAAO,CAAA,MAAO;AACnD,YAAMspG,IAAgB0I,GAAYhyG,GAAMkd,CAAO;AAC/C,MAAAsnF,GAAqBl/E,GAAQgkF,CAAa,EAAE,KAAK,CAAAC,MAAe;AAC9D,cAAM8I,IAAiBJ,GAAa3sF,GAAQikF,CAAW,GACjD7tG,IAAM4pB,EAAO,UAAU,OAAM;AACnC,QAAAusF,GAAcn2G,GAAKA,EAAI,yBAAyB22G,CAAc,GAAG/sF,EAAO,MAAM,GAC9EA,EAAO,UAAU,OAAO5pB,CAAG,GAC3BulE,GAAoB37C,GAAQ5pB,CAAG,GAC/BgpG,GAAsBp/E,GAAQ+sF,GAAgB9I,CAAW;AAAA,MACjE,CAAO;AAAA,IACP,GAEU+I,KAAwB,CAAClmE,GAAaz1B,GAAUjN,MAAa;AACjE,UAAIZ,GAAMsjC,GAAaz1B,CAAQ,GAAG;AAChC,cAAMq4E,IAAe/oF,GAASmmC,EAAYz1B,CAAQ,GAAG,CAAAnN,MAAMA,MAAOE,CAAQ;AAC1E,QAAIslF,EAAa,WAAW,IAC1B,OAAO5iD,EAAYz1B,CAAQ,IAE3By1B,EAAYz1B,CAAQ,IAAIq4E;AAAA,MAE3B;AAAA,IACP;AACI,QAAIujB,KAAkB,CAACr+F,GAAKoR,MAAW;AACrC,UAAIktF,GACAC;AACJ,YAAMC,IAAmB,CAAC/7F,GAAUoG,MAAUxW,GAAOwW,GAAO,CAAA7G,MAAQhC,EAAI,GAAGgC,GAAMS,CAAQ,CAAC,GACpFqrB,IAAa,CAAAprB,MAAQ1C,EAAI,WAAW0C,GAAM,QAAW1C,EAAI,QAAO,CAAE,GAClEg7F,IAAQ,MAAM;AAClB,QAAAsD,IAAsB,CAAA,GACtBC,IAAmB,CAAA,GACnBntF,EAAO,GAAG,cAAc,CAAA9lC,MAAK;AAC3B,gBAAM02B,IAAO12B,EAAE,SACT2sC,IAAU6V,EAAW9rB,CAAI,GACzBy8F,IAAmB,CAAA;AACzB,UAAA9qG,GAAO2qG,GAAqB,CAAChkF,GAAW7X,MAAa;AACnD,YAAA+7F,EAAiB/7F,GAAUwV,CAAO,EAAE,KAAK,CAAAjW,MAAQ;AAC/C,cAAKu8F,EAAiB97F,CAAQ,MAC5B/Q,EAAO4oB,GAAW,CAAA9kB,MAAY;AAC5B,gBAAAA,EAAS,IAAM;AAAA,kBACb,MAAAwM;AAAA,kBACA,UAAAS;AAAA,kBACA,SAAAwV;AAAA,gBACpB,CAAmB;AAAA,cACnB,CAAiB,GACDsmF,EAAiB97F,CAAQ,IAAI6X,IAE/BmkF,EAAiBh8F,CAAQ,IAAI6X;AAAA,YAC3C,CAAa;AAAA,UACb,CAAW,GACD3mB,GAAO4qG,GAAkB,CAACjkF,GAAW7X,MAAa;AAChD,YAAKg8F,EAAiBh8F,CAAQ,MAC5B,OAAO87F,EAAiB97F,CAAQ,GAChC/Q,EAAO4oB,GAAW,CAAA9kB,MAAY;AAC5B,cAAAA,EAAS,IAAO;AAAA,gBACd,MAAAwM;AAAA,gBACA,UAAAS;AAAA,gBACA,SAAAwV;AAAA,cAClB,CAAiB;AAAA,YACjB,CAAe;AAAA,UAEf,CAAW;AAAA,QACX,CAAS;AAAA,MACT;AACM,aAAO;AAAA,QACL,2BAA2B,CAACxV,GAAUjN,OAC/B8oG,KACHtD,KAEGsD,EAAoB77F,CAAQ,MAC/B67F,EAAoB77F,CAAQ,IAAI,KAElC67F,EAAoB77F,CAAQ,EAAE,KAAKjN,CAAQ,GAC3CgpG,EAAiB/7F,GAAUqrB,EAAW1c,EAAO,UAAU,SAAU,CAAA,CAAC,EAAE,KAAK,MAAM;AAC7E,UAAAmtF,EAAiB97F,CAAQ,IAAI67F,EAAoB77F,CAAQ;AAAA,QACrE,CAAW,GACM;AAAA,UACL,QAAQ,MAAM;AACZ,YAAA27F,GAAsBE,GAAqB77F,GAAUjN,CAAQ,GAC7D4oG,GAAsBG,GAAkB97F,GAAUjN,CAAQ;AAAA,UAC3D;AAAA,QACb;AAAA,MAEA;AAAA,IACA;AAEI,UAAMkpG,KAAkB,CAAA18F,MACf,CAAC,EAAEA,KAAQA,EAAK,kBAAkBgB,GAASb,EAAa,QAAQH,EAAK,aAAa,GAAGG,EAAa,QAAQH,CAAI,CAAC,GAElH28F,KAAe,CAAAn3G,MACdA,IAGIk3G,GAAgBl3G,EAAI,cAAc,KAAKk3G,GAAgBl3G,EAAI,YAAY,IAFvE,IAKLo3G,KAAkB,CAAC5+F,GAAKyK,GAAK0+D,GAAY/3D,MAAW;AACxD,UAAIytF,GACAC;AACJ,YAAM,EAAC,2BAAAC,EAAyB,IAAIV,GAAgBr+F,GAAKoR,CAAM,GACzD4tF,IAAoB,CAACh9F,IAAMpa,OAAW;AAC1C,cAAMJ,KAAMwY,EAAI;AAChB,QAAIhR,GAAcgT,EAAI,KAAKhT,GAAcpH,EAAM,KAC7CJ,GAAI,SAASwa,IAAMpa,EAAM,GACzBJ,GAAI,OAAOwa,IAAMpa,EAAM,GACvBq3G,GAAOz3G,EAAG,GACVgzC,GAAS,EAAK,MAEd2c,GAAan3C,GAAKxY,IAAK4pB,EAAO,QAAO,GAAI,EAAI,GAC7C6tF,GAAOz3G,EAAG;AAAA,MAEpB,GACY03G,IAAa,CAAApzG,OAAQkxG,GAAa5rF,GAAQtlB,EAAI,GAC9CqzG,IAAa,CAACn2F,IAASld,OAASoyG,GAAa9sF,GAAQpI,IAASld,EAAI,GAClEq7D,IAAa,CAAA+J,OAAQC,GAAS//C,EAAO,WAAWguF,MAAYluC,EAAI,GAChEU,IAAS,CAAAV,OAAQE,GAAShgD,EAAO,WAAWguF,MAAYluC,EAAI,GAC5DtD,IAAc,CAAC1jE,IAAM0gC,OAAey0E,GAAgB,YAAYn1G,IAAM0gC,EAAU,GAChFgrB,IAAiB,CAAAzB,OAAYkrD,GAAgB,eAAelrD,EAAQ,GACpEmrD,IAAW,CAACt9F,IAAMgH,QACtBulB,GAAOvuB,GAAKgC,IAAMgH,EAAO,EAAE,KAAKi2F,EAAM,GAC/Bj9F,KAEH+1E,IAAc,MAAM;AACxB,cAAMvwF,KAAM43G,GAAQ,GAAI/nD,KAAMkoD,GAAM;AACpC,eAAI,CAAC/3G,MAAOA,GAAI,OACP,KAELA,GAAI,mBACCA,GAAI,iBAAiB,cAAcA,EAAG,MAAM,IAE9C,CAAC6vD,MAAO7vD,GAAI;AAAA,MAC3B,GACYg4G,IAAa,MAAM;AACvB,cAAMh4G,KAAM43G,MACNK,KAAuBruF,EAAO,QAAS,EAAC,iBAAiB,yBAAyB;AACxF,eAAIquF,GAAqB,SAAS,IACzBhtG,GAAOgtG,IAAsB,CAAAj6F,OAAMxF,EAAI,WAAWwF,GAAG,aAAa,CAAC,IAEnEwrD,GAAgBhxD,GAAKxY,EAAG;AAAA,MAEzC,GACYgzC,KAAW,CAAAC,OAAW;AAC1B,cAAMjzC,KAAM43G;AACZ,QAAA53G,GAAI,SAAS,CAAC,CAACizC,EAAO,GACtBwkE,GAAOz3G,EAAG;AAAA,MAClB,GACY+3G,KAAS,MAAM90F,EAAI,eAAeA,EAAI,iBAAiBA,EAAI,SAAS,WACpE20F,KAAW,MAAM;AACrB,YAAI53G;AACJ,cAAMk4G,KAA2B,CAACC,IAAKC,IAAaC,OAAqB;AACvE,cAAI;AACF,mBAAOD,GAAY,sBAAsBD,IAAKE,EAAgB;AAAA,UAC/D,QAAY;AACX,mBAAO;AAAA,UACR;AAAA,QACX,GACch7F,KAAM4F,EAAI;AAChB,YAAIzb,GAAcoiB,EAAO,QAAQ,KAAK,CAACk9B,GAASl9B,CAAM,GAAG;AACvD,gBAAM+iC,KAAW8Z,GAAO78C,CAAM;AAC9B,cAAI+iC,GAAS;AACX,mBAAOA,GAAS,IAAI,CAAA3oE,OAAKmmF,GAAcvgD,GAAQ,CAAC5lC,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAMq5B,GAAI,YAAa,CAAA;AAAA,QAElF;AACD,YAAI;AACF,gBAAMw8B,KAAYk+D;AAClB,UAAIl+D,MAAa,CAAC/0B,GAAiB+0B,GAAU,UAAU,MACjDA,GAAU,aAAa,IACzB75C,KAAM65C,GAAU,WAAW,CAAC,IAE5B75C,KAAMqd,GAAI,eAEZrd,KAAMmqE,GAAcvgD,GAAQ,CAAC5pB,EAAG,CAAC,EAAE,CAAC;AAAA,QAEvC,QAAY;AAAA,QACZ;AAID,YAHKA,OACHA,KAAMqd,GAAI,gBAERkJ,GAAavmB,GAAI,cAAc,KAAKA,GAAI,WAAW;AACrD,gBAAM8oB,KAAMtQ,EAAI;AAChB,UAAAxY,GAAI,SAAS8oB,IAAK,CAAC,GACnB9oB,GAAI,OAAO8oB,IAAK,CAAC;AAAA,QAClB;AACD,eAAIuuF,KAAiBC,MACfY,GAAyBl4G,GAAI,gBAAgBA,IAAKq3G,CAAa,MAAM,KAAKa,GAAyBl4G,GAAI,YAAYA,IAAKq3G,CAAa,MAAM,IAC7Ir3G,KAAMs3G,KAEND,IAAgB,MAChBC,IAAgB,QAGbt3G;AAAA,MACf,GACYy3G,KAAS,CAACz3G,IAAK85C,OAAY;AAC/B,YAAI,CAACq9D,GAAan3G,EAAG;AACnB;AAEF,cAAM6vD,KAAMkoD;AAMZ,YADA/3G,KAJY4pB,EAAO,SAAS,qBAAqB;AAAA,UAC/C,OAAO5pB;AAAA,UACP,SAAA85C;AAAA,QACV,CAAS,EACS,OACN+V,IAAK;AACP,UAAAynD,IAAgBt3G;AAChB,cAAI;AACF,YAAA6vD,GAAI,gBAAe,GACnBA,GAAI,SAAS7vD,EAAG;AAAA,UACjB,QAAY;AAAA,UACZ;AACD,UAAI85C,OAAY,MAAS+V,GAAI,WAC3BA,GAAI,SAAS7vD,GAAI,cAAcA,GAAI,SAAS,GAC5C6vD,GAAI,OAAO7vD,GAAI,gBAAgBA,GAAI,WAAW,IAEhDq3G,IAAgBxnD,GAAI,aAAa,IAAIA,GAAI,WAAW,CAAC,IAAI;AAAA,QAC1D;AACD,YAAI,CAAC7vD,GAAI,aAAaA,GAAI,mBAAmBA,GAAI,iBAAiB6vD,MAAQ,QAAkCA,GAAI,qBAC1G7vD,GAAI,YAAYA,GAAI,cAAc,KAChCA,GAAI,eAAe,iBAAiB;AACtC,gBAAMwa,KAAOxa,GAAI,eAAe,WAAWA,GAAI,WAAW;AAC1D,UAAIwa,MAAQA,GAAK,aAAa,UAC5Bq1C,GAAI,iBAAiB7vD,GAAI,gBAAgBA,GAAI,aAAaA,GAAI,cAAcA,GAAI,SAAS,IACrF6vD,GAAI,eAAe7vD,GAAI,kBAAkB6vD,GAAI,cAAc7vD,GAAI,iBACjE6vD,GAAI,iBAAiBr1C,IAAM,GAAGA,IAAM,CAAC;AAAA,QAG1C;AAGL,QAAAoP,EAAO,SAAS,0BAA0B;AAAA,UACxC,OAAO5pB;AAAA,UACP,SAAA85C;AAAA,QACV,CAAS;AAAA,MACT,GACYw+D,KAAU,CAAAxvF,QACd6uF,EAAWn/F,EAAI,aAAasQ,EAAG,CAAC,GACzBA,KAEH8rB,KAAY,MAAM8C,GAAQ9tB,EAAO,QAAS,GAAEguF,GAAQ,CAAE,GACtDW,KAAsB,CAAC96C,IAAUwM,OAAWD,GAAkBxxD,GAAKo/F,GAAU,GAAEn6C,IAAUwM,EAAM,GAC/FuuC,KAAY,MAAM;AACtB,cAAM3oD,KAAMkoD,MACNU,KAAa5oD,MAAQ,OAAyB,SAASA,GAAI,YAC3D6oD,KAAY7oD,MAAQ,OAAyB,SAASA,GAAI;AAChE,YAAI,CAACA,MAAO,CAAC4oD,MAAc,CAACC,MAAa5zF,GAAiB2zF,EAAU,KAAK3zF,GAAiB4zF,EAAS;AACjG,iBAAO;AAET,cAAMC,KAAcngG,EAAI,aAClBogG,KAAapgG,EAAI;AACvB,YAAI;AACF,UAAAmgG,GAAY,SAASF,IAAY5oD,GAAI,YAAY,GACjD8oD,GAAY,SAAS,EAAI,GACzBC,GAAW,SAASF,IAAW7oD,GAAI,WAAW,GAC9C+oD,GAAW,SAAS,EAAI;AAAA,QACzB,QAAW;AACV,iBAAO;AAAA,QACR;AACD,eAAOD,GAAY,sBAAsBA,GAAY,gBAAgBC,EAAU,KAAK;AAAA,MAC5F,GA8CY7Q,KAAU;AAAA,QACd,KAAAvvF;AAAA,QACA,KAAAyK;AAAA,QACA,YAAA0+D;AAAA,QACA,QAAA/3D;AAAA,QACA,QANa,CAACppB,KAAU,EAAE,MAAM,OAAM,MAAOi3G,GAAOt1C,EAAW3pD,CAAG,EAAE,OAAOo/F,GAAQ,GAAIp3G,EAAO,CAAC;AAAA,QAO/F,UAAAwyC;AAAA,QACA,mBAAAwkE;AAAA,QACA,YAAAE;AAAA,QACA,YAAAC;AAAA,QACA,aAAAvxC;AAAA,QACA,gBAAAhY;AAAA,QACA,QAAQ0pD;AAAA,QACR,aAAAvnB;AAAA,QACA,YAAAynB;AAAA,QACA,WAAAQ;AAAA,QACA,SAAAF;AAAA,QACA,SAAS1jE;AAAA,QACT,QAAAmjE;AAAA,QACA,QAAAN;AAAA,QACA,QAAQG;AAAA,QACR,UAAUj4C;AAAA,QACV,QAAAyK;AAAA,QACA,mBAAmBmuC;AAAA,QACnB,WArEgB,MAAM;AACtB,gBAAMv4G,KAAM43G,MACN/nD,KAAMkoD;AACZ,cAAI,CAAClpD,GAAkBgB,EAAG,KAAKD,GAAahmC,CAAM,GAAG;AACnD,kBAAMo4C,KAAUD,EAAYvpD,GAAKxY,EAAG;AACpC,mBAAAgiE,GAAQ,KAAK,CAAAA,OAAW;AACtB,cAAAy1C,GAAOz1C,IAASw2C,GAAS,CAAE;AAAA,YACvC,CAAW,GACMx2C,GAAQ,MAAMhiE,EAAG;AAAA,UACzB;AACD,iBAAOA;AAAA,QACf;AAAA,QA2DQ,iBA1DsB,CAACib,IAAUjN,QACjCupG,EAA0Bt8F,IAAUjN,EAAQ,GACrC+5F;AAAA,QAyDP,2BAAAwP;AAAA,QACA,oBAxDyB,MAAM;AAC/B,cAAIsB,IACAr+F,KAAOhC,EAAI;AACf,iBAAOgC,MAAQA,GAAK,aAAa,UAAQ;AACvC,gBAAIA,GAAK,eAAeA,GAAK,cAAc;AACzC,cAAAq+F,KAAkBr+F;AAClB;AAAA,YACD;AACD,YAAAA,KAAOA,GAAK;AAAA,UACb;AACD,iBAAOq+F;AAAA,QACf;AAAA,QA8CQ,gBA7CqB,CAAC/vF,IAAKpF,OAAe;AAC1C,UAAIlc,GAAcshB,EAAG,IACnBw8C,GAAsB17C,GAAQd,IAAKpF,EAAU,IAE7C6hD,GAAoB37C,GAAQguF,GAAU,GAAEl0F,EAAU;AAAA,QAE5D;AAAA,QAwCQ,cAvCmB,CAACiwB,IAASC,OAAY6jE,GAAO12C,GAAUptB,IAASC,IAAShqB,EAAO,OAAM,CAAE,CAAC;AAAA,QAwC5F,uBAvC4B,MAAM;AAClC,gBAAM5pB,KAAM43G;AACZ,iBAAO53G,GAAI,YAAYo3C,GAAc,eAAep3C,EAAG,EAAE,eAAc,EAAG,CAAC,IAAIA,GAAI,sBAAqB;AAAA,QAChH;AAAA,QAqCQ,SApCc,MAAM;AACpB,UAAAijB,IAAMo0F,IAAgBC,IAAgB,MACtCwB,GAAiB,QAAO;AAAA,QAChC;AAAA,MAkCA,GACYjB,KAAkB//C,GAAgBiwC,EAAO,GACzC+Q,KAAmB3+C,GAAiB4tC,IAASn+E,CAAM;AACzD,aAAAm+E,GAAQ,kBAAkB8P,IAC1B9P,GAAQ,mBAAmB+Q,IACpB/Q;AAAA,IACb,GAEUgR,KAAa,CAAC9kB,GAAYtiE,GAAUnZ,MAAQ;AAChD,MAAAy7E,EAAW,mBAAmB,qBAAqB,CAAC5yE,GAAOrU,MAAS;AAClE,YAAIxkB,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,UAAAgyB,EAAK,KAAK,YAAYA,EAAK,KAAK,mBAAmB,CAAC,GACpDA,EAAK,KAAKxN,GAAM,IAAI;AAAA,QACrB;AAAA,MACT,CAAO,GACDinF,EAAW,mBAAmB,kBAAkB,CAAC5yE,GAAOrU,MAAS;AAC/D,cAAMo3B,IAAe,cAAcp3B,GAC7BoyB,IAAezN,EAAS,eACxB0N,IAAoB1N,EAAS;AACnC,YAAInpC,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,cAAI+Y,IAAQiZ,EAAK,KAAK4pB,CAAY;AAClC,UAAI7iC,MAAU,UACZiZ,EAAK,KAAKxN,GAAMzL,EAAM,SAAS,IAAIA,IAAQ,IAAI,GAC/CiZ,EAAK,KAAK4pB,GAAc,IAAI,MAE5B7iC,IAAQiZ,EAAK,KAAKxN,CAAI,GAClBA,MAAS,UACXzL,IAAQiX,EAAI,eAAeA,EAAI,WAAWjX,CAAK,GAAGiZ,EAAK,IAAI,IAClD4kB,MACT79B,IAAQ69B,EAAa,KAAKC,GAAmB99B,GAAOyL,GAAMwN,EAAK,IAAI,IAErEA,EAAK,KAAKxN,GAAMzL,EAAM,SAAS,IAAIA,IAAQ,IAAI;AAAA,QAElD;AAAA,MACT,CAAO,GACD0yF,EAAW,mBAAmB,SAAS,CAAA5yE,MAAS;AAC9C,YAAI74B,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,cAAI+Y,IAAQiZ,EAAK,KAAK,OAAO;AAC7B,UAAIjZ,MACFA,IAAQA,EAAM,QAAQ,+BAA+B,EAAE,GACvDiZ,EAAK,KAAK,SAASjZ,EAAM,SAAS,IAAIA,IAAQ,IAAI;AAAA,QAErD;AAAA,MACT,CAAO,GACD0yF,EAAW,mBAAmB,iBAAiB,CAAC5yE,GAAOrU,GAAM1I,MAAS;AACpE,YAAI,IAAI+c,EAAM;AACd,eAAO,OAAK;AACV,gBAAM7G,IAAO6G,EAAM,CAAC;AACpB,UAAI7G,EAAK,KAAK,eAAe,MAAM,cAAc,CAAClW,EAAK,YACjC2E,EAAS,KAAKuR,EAAK,UAAU,EAAE,OAAO,CAAAwC,MAAc;AACtE,gBAAIxsB;AACJ,mBAAO,CAACi5B,GAAUj5B,IAAKwsB,EAAW,WAAW,QAAQxsB,MAAO,SAASA,IAAK,EAAE;AAAA,UAC1F,CAAa,IAECgqB,EAAK,OAAM,IAEXA,EAAK,OAAM;AAAA,QAGhB;AAAA,MACT,CAAO,GACDy5E,EAAW,cAAc,YAAY,CAAA5yE,MAAS;AAC5C,YAAI7wB;AACJ,YAAIhI,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC,EAAE;AACtB,UAAIgyB,MACFA,EAAK,QAAQsb,GAAS,QAAQtlC,IAAKgqB,EAAK,WAAW,QAAQhqB,MAAO,SAASA,IAAK,EAAE;AAAA,QAErF;AAAA,MACT,CAAO,GACDyjG,EAAW,cAAc,gBAAgB,CAAC5yE,GAAOrU,MAAS;AACxD,YAAIxc;AACJ,cAAM+oD,IAAO,CAAAh4C,MACJA,EAAM,QAAQ,4BAA4B;AAAA,CAAI,EAAE,QAAQ,sBAAsB,EAAE,EAAE,QAAQ,2HAA2H,EAAE,EAAE,QAAQ,6GAA6G,EAAE;AAEzV,YAAI/Y,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC,GACdw0B,IAAaxC,EAAK,YAClBjZ,KAAS/Q,IAAKwsB,KAAe,OAAgC,SAASA,EAAW,WAAW,QAAQxsB,MAAO,SAASA,IAAK;AAC/H,cAAIwc,MAAS,UAAU;AACrB,kBAAMtK,IAAO8X,EAAK,KAAK,MAAM;AAC7B,YAAI9X,KACF8X,EAAK,KAAK,QAAQ9X,MAAS,gBAAgB,OAAOA,EAAK,QAAQ,UAAU,EAAE,CAAC,GAE1EivB,EAAS,mBAAmB,WAAW3U,KAAczb,EAAM,SAAS,MACtEyb,EAAW,QAAQ;AAAA,IAAmBu8B,EAAKh4C,CAAK,IAAI;AAAA;AAAA,UAElE;AACY,YAAIowB,EAAS,mBAAmB,WAAW3U,KAAczb,EAAM,SAAS,MACtEyb,EAAW,QAAQ;AAAA,IAAWu8B,EAAKh4C,CAAK,IAAI;AAAA;AAAA,QAGjD;AAAA,MACT,CAAO,GACD0yF,EAAW,cAAc,YAAY,CAAA5yE,MAAS;AAC5C,YAAI74B,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC,GACd+Y,IAAQiZ,EAAK;AACnB,UAAImX,EAAS,mBAAmBpwB,KAAU,OAA2B,SAASA,EAAM,QAAQ,SAAS,OAAO,KAC1GiZ,EAAK,OAAO,UACZA,EAAK,OAAO,GACZA,EAAK,QAAQhC,EAAI,OAAOjX,EAAM,QAAQ,qBAAqB,EAAE,CAAC,MACpDA,KAAU,OAA2B,SAASA,EAAM,QAAQ,gBAAgB,OAAO,MAC7FiZ,EAAK,OAAO,SACZA,EAAK,OAAO,GACZA,EAAK,MAAM,IACXA,EAAK,QAAQ,SAASjZ,CAAK,EAAE,OAAO,EAAE;AAAA,QAEzC;AAAA,MACT,CAAO,GACD0yF,EAAW,cAAc,uBAAuB,CAAC5yE,GAAOrU,MAAS;AAC/D,YAAIxkB,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,UAAIgyB,EAAK,SAAS,IAChBA,EAAK,OAAM,IACFA,EAAK,SAAS,KACnBxN,MAAS,WAAW,CAACwN,EAAK,KAAK,MAAM,KACvCA,EAAK,KAAK,QAAQ,MAAM;AAAA,QAG7B;AAAA,MACT,CAAO,GACDy5E,EAAW,mBAAmB,iBAAiB,CAAA5yE,MAAS;AACtD,QAAAnX,EAAOmX,GAAO,CAAA7G,MAAQ;AACpB,UAAIA,EAAK,KAAK,eAAe,MAAM,mBAC7BA,EAAK,QAAQy5E,EAAW,OAAO,oBAAqB,CAAA,IACtDz5E,EAAK,OAAM,IAEXA,EAAK,OAAM;AAAA,QAGzB,CAAS;AAAA,MACT,CAAO,GACDy5E,EAAW,mBAAmB,kJAA4J,CAAC5yE,GAAOrU,MAAS;AACzM,YAAIxkB,IAAI64B,EAAM;AACd,eAAO74B;AACL,UAAA64B,EAAM74B,CAAC,EAAE,KAAKwkB,GAAM,IAAI;AAAA,MAElC,CAAO,GACG2kB,EAAS,uBACXqiE,GAAcriE,GAAUsiE,GAAYA,EAAW,MAAM;AAAA,IAE7D,GACU+kB,KAAiB,CAAAx0F,MAAY;AACjC,YAAMy0F,IAAO,CAAAz+F,OACHA,KAAS,OAA0B,SAASA,EAAK,UAAU,MAE/D0+F,IAAU10F,EAAS;AACzB,UAAIy0F,EAAKC,CAAO,GAAG;AACjB,cAAMC,IAAUD,EAAQ;AACxB,QAAID,EAAKE,CAAO,MACdD,EAAQ,OAAM,GACdC,EAAQ,OAAM;AAAA,MAEjB;AAAA,IACP,GAEUC,KAAe,CAACxvF,GAAQpP,GAAMlW,MAAS;AAC3C,UAAI+0G;AACJ,YAAM7gG,IAAMoR,EAAO;AACnB,UAAI0vF,IAAa9+F,EAAK,UAAU,EAAI;AACpC,YAAM++F,IAAO,SAAS;AACtB,UAAIA,EAAK,oBAAoB;AAC3B,cAAMl8F,IAAMk8F,EAAK,mBAAmB,EAAE;AACtC,QAAAzjG,GAAM,KAAKwjG,EAAW,aAAa,SAASA,EAAW,aAAa,CAACA,CAAU,GAAG,CAAA9+F,MAAQ;AACxF,UAAA6C,EAAI,KAAK,YAAYA,EAAI,WAAW7C,GAAM,EAAI,CAAC;AAAA,QACzD,CAAS,GACG8+F,EAAW,aAAa,SAC1BA,IAAaj8F,EAAI,KAAK,aAEtBi8F,IAAaj8F,EAAI,MAEnBg8F,IAAS7gG,EAAI,KACbA,EAAI,MAAM6E;AAAA,MACX;AACD,aAAA26C,GAAepuC,GAAQ;AAAA,QACrB,GAAGtlB;AAAA,QACH,MAAMg1G;AAAA,MACd,CAAO,GACGD,MACF7gG,EAAI,MAAM6gG,IAELC;AAAA,IACb,GACUE,KAAkB,CAAC5vF,GAAQtlB,MACxBkD,GAAcoiB,CAAM,KAAKA,EAAO,kBAAkB,YAAY,KAAK,CAACtlB,EAAK,WAE5Em1G,KAAY,CAAC7vF,GAAQpP,GAAMlW,MACxBk1G,GAAgB5vF,GAAQtlB,CAAI,IAAI80G,GAAaxvF,GAAQpP,GAAMlW,CAAI,IAAIkW,GAGtEk/F,KAAc,CAACzlB,GAAYroB,GAAW5+D,MAAS;AACnD,MAAI8I,GAAM,QAAQ81D,GAAW5+D,CAAI,MAAM,OACrCinF,EAAW,mBAAmBjnF,GAAM,CAACqU,GAAOrU,MAAS;AACnD,YAAIxkB,IAAI64B,EAAM;AACd,eAAO74B;AACL,UAAA64B,EAAM74B,CAAC,EAAE,KAAKwkB,GAAM,IAAI;AAAA,MAEpC,CAAS,GACD4+D,EAAU,KAAK5+D,CAAI;AAAA,IAE3B,GACU2sG,KAAc,CAAC/vF,GAAQtlB,GAAMkd,MAC7B,CAACld,EAAK,aAAaslB,IACLquC,GAAgBruC,GAAQ;AAAA,MACtC,GAAGtlB;AAAA,MACH,SAAAkd;AAAA,IACV,CAAS,EACc,UAERA,GAGLo4F,KAAkB,CAACphG,GAAKgC,GAAMlW,MAAS;AAC3C,YAAM8V,IAAOsP,EAAOplB,EAAK,WAAWkW,EAAK,YAAYhC,EAAI,aAAagC,CAAI,CAAC;AAC3E,aAAOlW,EAAK,aAAaskB,GAAoBjO,EAAa,QAAQH,CAAI,CAAC,IAAIJ,IAAOtE,GAAM,KAAKsE,CAAI;AAAA,IACvG,GACUy/F,KAAY,CAAC5lB,GAAY75E,GAAM9V,MAAS;AAC5C,YAAM+gF,IAAa/gF,EAAK,YAAY;AAAA,QAClC,mBAAmB;AAAA,QACnB,GAAGA;AAAA,MACJ,IAAGA,GACEkgB,IAAWyvE,EAAW,MAAM75E,GAAMirE,CAAU;AAClD,aAAA2zB,GAAex0F,CAAQ,GAChBA;AAAA,IACb,GACUs1F,KAAgB,CAACnoF,GAAUrI,GAAQ9O,MAChBszD,GAAen8C,GAAUrI,CAAM,EAChC,UAAU9O,CAAI,GAEhCu/F,KAAS,CAACnwF,GAAQ+H,GAAUrI,GAAQ9E,GAAUlgB,MAAS;AAC3D,YAAMkd,IAAUs4F,GAAcnoF,GAAUrI,GAAQ9E,CAAQ;AACxD,aAAOm1F,GAAY/vF,GAAQtlB,GAAMkd,CAAO;AAAA,IAC9C,GACUw4F,KAAoB,CAACroF,GAAU/H,MAAW;AAC9C,YAAMgiD,IAAY,CAAC,mBAAmB,GAChCk7B,IAAoB;AAAA,QACxB,iBAAiB;AAAA,QACjB,qBAAqB;AAAA,QACrB,mBAAmB;AAAA,QACnB,GAAGn1E;AAAA,MACX,GACYnZ,IAAMoR,KAAUA,EAAO,MAAMA,EAAO,MAAM0a,GAAS,KACnDhb,IAASM,KAAUA,EAAO,SAASA,EAAO,SAASgQ,GAAOktE,CAAiB,GAC3E7S,IAAa0S,GAAUG,GAAmBx9E,CAAM;AACtD,MAAAyvF,GAAW9kB,GAAY6S,GAAmBtuF,CAAG;AAC7C,YAAMyhG,IAAY,CAACz/F,GAAM6qE,IAAa,CAAA,MAAO;AAC3C,cAAM/gF,IAAO;AAAA,UACX,QAAQ;AAAA,UACR,GAAG+gF;AAAA,QACb,GACc13D,IAAa8rF,GAAU7vF,GAAQpP,GAAMlW,CAAI,GACzC8V,IAAOw/F,GAAgBphG,GAAKmV,GAAYrpB,CAAI,GAC5CkgB,IAAWq1F,GAAU5lB,GAAY75E,GAAM9V,CAAI;AACjD,eAAOA,EAAK,WAAW,SAASkgB,IAAWu1F,GAAOnwF,GAAQk9E,GAAmBx9E,GAAQ9E,GAAUlgB,CAAI;AAAA,MAC3G;AACM,aAAO;AAAA,QACL,QAAAglB;AAAA,QACA,eAAe2qE,EAAW;AAAA,QAC1B,oBAAoBA,EAAW;AAAA,QAC/B,WAAWgmB;AAAA,QACX,UAAU3wF,EAAO;AAAA,QACjB,UAAUA,EAAO;AAAA,QACjB,aAAahhB,GAAMoxG,IAAazlB,GAAYroB,CAAS;AAAA,QACrD,cAAczjE,GAASyjE,CAAS;AAAA,QAChC,gBAAgBqoB,EAAW;AAAA,QAC3B,qBAAqBA,EAAW;AAAA,QAChC,kBAAkBA,EAAW;AAAA,QAC7B,uBAAuBA,EAAW;AAAA,MAC1C;AAAA,IACA,GAEUimB,KAAgB,CAACvoF,GAAU/H,MAAW;AAC1C,YAAMuwF,IAAgBH,GAAkBroF,GAAU/H,CAAM;AACxD,aAAO;AAAA,QACL,QAAQuwF,EAAc;AAAA,QACtB,eAAeA,EAAc;AAAA,QAC7B,oBAAoBA,EAAc;AAAA,QAClC,WAAWA,EAAc;AAAA,QACzB,UAAUA,EAAc;AAAA,QACxB,UAAUA,EAAc;AAAA,QACxB,aAAaA,EAAc;AAAA,QAC3B,cAAcA,EAAc;AAAA,QAC5B,gBAAgBA,EAAc;AAAA,QAC9B,qBAAqBA,EAAc;AAAA,QACnC,kBAAkBA,EAAc;AAAA,QAChC,uBAAuBA,EAAc;AAAA,MAC7C;AAAA,IACA,GAEUC,KAAkB,QAClBC,KAAc,CAAC/1G,GAAM64C,OAAY;AAAA,MACrC,GAAG74C;AAAA,MACH,QAAA64C;AAAA,MACA,KAAK;AAAA,MACL,UAAU;AAAA,IAChB,IACUu6D,KAAa,CAAC9tF,GAAQtlB,IAAO,CAAA,MAAO;AACxC,YAAM64C,IAAS74C,EAAK,SAASA,EAAK,SAAS81G,IACrCxM,IAAgByM,GAAY/1G,GAAM64C,CAAM;AAC9C,aAAOyrD,GAAqBh/E,GAAQgkF,CAAa,EAAE,KAAKxlG,IAAU,CAAAylG,MAAe;AAC/E,cAAMrsF,IAAUwzF,GAAaprF,GAAQikF,CAAW;AAChD,eAAOhF,GAAsBj/E,GAAQpI,GAASqsF,CAAW;AAAA,MACjE,CAAO;AAAA,IACP,GAEUyM,KAAgB,QAChBC,KAAY,CAACj2G,GAAMkd,OAAa;AAAA,MACpC,QAAQ84F;AAAA,MACR,GAAGh2G;AAAA,MACH,KAAK;AAAA,MACL,SAAAkd;AAAA,IACN,IACUm2F,KAAa,CAAC/tF,GAAQpI,GAASld,IAAO,CAAA,MAAO;AACjD,YAAMspG,IAAgB2M,GAAUj2G,GAAMkd,CAAO;AAC7C,aAAOsnF,GAAqBl/E,GAAQgkF,CAAa,EAAE,IAAI,CAAAC,MAAe;AACpE,cAAMlsG,IAASszG,GAAarrF,GAAQikF,EAAY,SAASA,CAAW;AACpE,eAAA7E,GAAsBp/E,GAAQjoB,EAAO,MAAMksG,CAAW,GAC/ClsG,EAAO;AAAA,MACtB,CAAO,EAAE,MAAM6f,CAAO;AAAA,IACtB,GAEUg5F,KAAkB,ytBAAmvB,MAAM,GAAG,GAC9wBC,KAAoB,gMAAgM,MAAM,GAAG,GAC7NC,KAAiB,8EAA8E,MAAM,GAAG,GACxGC,KAAoB;AAAA,MACxB;AAAA,QACE,MAAM;AAAA,QACN,cAAc;AAAA,MACf;AAAA,MACD,EAAE,MAAM,MAAO;AAAA,IACrB,GACUC,KAAqB,CAACp6G,GAASq6G,MAAiB;AACpD,YAAMC,IAAevwG,GAASswG,GAAc,CAAAE,MAAW3tG,GAAM5M,GAASu6G,CAAO,CAAC;AAC9E,aAAOxvG,GAAKuvG,CAAY;AAAA,IAC9B,GACUE,KAAoB,CAAAx6G,MAAW;AACnC,YAAMs6G,IAAeF,GAAmBp6G,GAASg6G,EAAc,GACzDltB,IAAkB9sF,EAAQ;AAChC,cAAI8sF,MAAoB,MAASA,MAAoB,OACnDwtB,EAAa,KAAK,gCAAgC,GAE7CvvG,GAAKuvG,CAAY;AAAA,IAC9B,GACUG,KAAuB,CAAAz6G,MAAWo6G,GAAmBp6G,GAASi6G,EAAiB,GAC/ES,KAAqB,CAAC16G,GAASq6G,MAAiB;AACpD,YAAMM,IAAUrlG,GAAM,QAAQtV,EAAQ,SAAS,GAAG,GAE5C46G,IAAc7wG,GAASswG,GADX,CAAAQ,MAAUjuG,GAAM+tG,GAASE,CAAM,CACG;AACpD,aAAO9vG,GAAK6vG,CAAW;AAAA,IAC7B,GACUE,KAAoB,CAAA96G,MAAW06G,GAAmB16G,GAASk6G,EAAc,GACzEa,KAAuB,CAAA/6G,MAAW06G,GAAmB16G,GAASm6G,GAAkB,IAAI,CAAAa,MAASA,EAAM,IAAI,CAAC,GACxGC,KAAqB,CAACC,GAAYC,MAAsB;AAC5D,YAAMnB,IAAiBQ,GAAkBU,CAAU,GAC7ChB,IAAiBY,GAAkBK,CAAiB,GACpDC,IAAoBlB,EAAe,SAAS,GAC5CmB,IAAoBrB,EAAe,SAAS,GAC5CsB,IAAsBH,EAAkB,UAAU;AACxD,UAAIC,KAAqBC,KAAqBC,GAAqB;AACjE,cAAMC,IAAa;AAAA,KACbC,IAAgBF,IAAsB;AAAA;AAAA,SAAeC,CAAY,WAAU,IAC3EE,IAAiBL,IAAoB;AAAA;AAAA,UAAgBG,CAAU,GAAKrB,EAAe,KAAKqB,CAAU,CAAG,KAAI,IACzGG,IAAiBL,IAAoB;AAAA;AAAA,UAAgBE,CAAU,GAAKvB,EAAe,KAAKuB,CAAU,CAAG,KAAI;AAC/G,gBAAQ,KAAK,8QAAmRC,IAAgBC,IAAiBC,CAAc;AAAA,MAChV;AAAA,IACP,GACUC,KAAuB,CAAAnvG,MAAQnC,GAAO8vG,IAAmB,CAAAa,MAASA,EAAM,SAASxuG,CAAI,EAAE,KAAK,MAAMA,GAAM,CAAAwuG,MACxGA,EAAM,eACD,GAAIxuG,CAAM,iBAAiBwuG,EAAM,YAAc,KAE/CxuG,CAEV,GACKovG,KAAwB,CAACV,GAAYC,MAAsB;AAC/D,YAAMlB,IAAoBQ,GAAqBS,CAAU,GACnDf,IAAoBY,GAAqBI,CAAiB,GAC1DU,IAAuB1B,EAAkB,SAAS,GAClD2B,IAAuB7B,EAAkB,SAAS;AACxD,UAAI4B,KAAwBC,GAAsB;AAChD,cAAMP,IAAa;AAAA,KACbE,IAAiBI,IAAuB;AAAA;AAAA,UAAgBN,CAAY,GAAGpB,EAAkB,IAAIwB,EAAoB,EAAE,KAAKJ,CAAU,CAAG,KAAI,IACzIG,IAAiBI,IAAuB;AAAA;AAAA,UAAgBP,CAAU,GAAKtB,EAAkB,KAAKsB,CAAU,CAAG,KAAI;AACrH,gBAAQ,KAAK,sFAAsFE,IAAiBC,CAAc;AAAA,MACnI;AAAA,IACP,GACUK,KAAc,CAACb,GAAYC,MAAsB;AACrD,MAAAF,GAAmBC,GAAYC,CAAiB,GAChDS,GAAsBV,GAAYC,CAAiB;AAAA,IACzD,GAEUa,KAAQl4E,GAAS,KACjBm4E,KAAwB,CAAA7yF,MAAU;AACtC,MAAA4yF,GAAM,SAAS5yF,EAAO,IAAI,WAAWA,EAAO,UAAU;AAAA,IAC5D,GACU8yF,KAAc,CAAA/1H,MAAKsiB,EAAS,KAAKtiB,CAAC,EAAE,KAAK,CAAAA,MAAKA,EAAE,QAAS,CAAA,GACzDg2H,KAAqB,CAAA/yF,MAAU;AACnC,YAAMwnC,IAAKxnC;AACX,MAAAwnC,EAAG,uBAAuBA,EAAG,cAAcA,EAAG,YAAYA,EAAG,kBAAkB,MAC/EA,EAAG,cAAcA,EAAG,kBAAkBA,EAAG,gBAAgB,MACzDA,EAAG,gBAAgBA,EAAG,YAAY;AAClC,YAAMvX,IAAYjwB,EAAO;AACzB,UAAIiwB,GAAW;AACb,cAAMrhC,IAAMqhC,EAAU;AACtB,QAAAuX,EAAG,YAAYvX,EAAU,MAAMA,EAAU,MAAMrhC,EAAI,MAAM;AAAA,MAC1D;AAAA,IACP,GACUokG,KAAc,CAAAhzF,MAAU;AAC5B,YAAMizF,IAAOjzF,EAAO;AACpB,MAAIizF,MACEA,EAAK,kBACPA,EAAK,SAASA,EAAK,eACnB,OAAOA,EAAK,gBAEdL,GAAM,OAAOK,GAAM,gBAAgBjzF,EAAO,iBAAiB;AAAA,IAEnE,GACUkzF,KAAW,CAAAlzF,MAAU;AACzB,UAAI,CAACA,EAAO,SAAS;AACnB,cAAM,EAAC,qBAAAmzF,GAAqB,cAAAC,EAAY,IAAIpzF,GACtC5G,IAAO4G,EAAO,WACd/R,IAAU+R,EAAO;AACvB,QAAI5G,KACF4G,EAAO,KAAK,EAAE,aAAa,GAAM,CAAA,GAEnCA,EAAO,UAAU,IACjBA,EAAO,sBAAqB,GACxBA,EAAO,kBAAkBpiB,GAAcqQ,KAAY,OAA6B,SAASA,EAAQ,WAAW,KAC9G2kG,GAAM,OAAO3kG,EAAQ,WAAW,GAElCqgD,GAAWtuC,CAAM,GACjBA,EAAO,cAAc,OAAOA,CAAM,GAC9B,CAACA,EAAO,UAAU5G,KACpBy5F,GAAsB7yF,CAAM,GAE9BuuC,GAAWvuC,CAAM,GACjB4yF,GAAM,OAAO5yF,EAAO,aAAc,CAAA,GAClC8yF,GAAYK,CAAmB,GAC/BL,GAAYM,CAAY,GACxBpzF,EAAO,QAAO;AAAA,MACf;AAAA,IACP,GACUqzF,KAAU,CAACrzF,GAAQszF,MAAc;AACrC,YAAM,EAAC,WAAArjE,GAAW,KAAArhC,EAAG,IAAIoR;AACzB,UAAI,CAAAA,EAAO,WAGX;AAAA,YAAI,CAACszF,KAAa,CAACtzF,EAAO,SAAS;AACjC,UAAAA,EAAO,OAAM;AACb;AAAA,QACD;AACD,QAAKszF,MACHtzF,EAAO,cAAc,IAAI,gBAAgBA,EAAO,aAAa,GACzDA,EAAO,SAASA,EAAO,MAAM,WAC/BA,EAAO,MAAM,WAEf8yF,GAAY7iE,CAAS,GACrB6iE,GAAYlkG,CAAG,IAEjBokG,GAAYhzF,CAAM,GAClB+yF,GAAmB/yF,CAAM,GACzBA,EAAO,YAAY;AAAA;AAAA,IACzB,GAqBUuzF,MAnBoB,MAAM;AAC9B,YAAM/0F,IAAS,CAAA;AAYf,aAAO;AAAA,QACL,KAZU,CAAC/O,GAAI+jG,MAAa;AAC5B,UAAAh1F,EAAO/O,CAAE,IAAI+jG;AAAA,QACrB;AAAA,QAWQ,KAVU,CAAA/jG,MACN+O,EAAO/O,CAAE,IACJ+O,EAAO/O,CAAE,IAET,EAAE,OAAO,CAAA;QAOlB,KAJU,CAAAA,MAAMjM,GAAMgb,GAAQ/O,CAAE;AAAA,MAKxC;AAAA,IACA,MAGUgkG,KAAepwE,GAAa,cAE5BqwE,KAAU,CAACC,GAAUz0F,MACVA,EAAI,IACLy0F,CAAQ,GAElBC,KAAsB,CAACD,GAAUz0F,MAAQ,SAASjJ,GAAMiJ,GAAKy0F,CAAQ,GAAG,EAAE,GAC1EE,KAAiBn1G,GAAMg1G,IAAS,aAAa,GAC7CI,KAAkBp1G,GAAMg1G,IAAS,cAAc,GAC/CK,KAAer1G,GAAMk1G,IAAqB,YAAY,GACtDI,KAAgBt1G,GAAMk1G,IAAqB,aAAa,GACxDK,KAAwB,CAAA/0F,MAAOA,EAAI,IAAI,sBAAqB,GAC5Dg1F,KAA6B,CAACC,GAASpqE,GAASC,MAAY;AAChE,YAAMoqE,IAAcP,GAAeM,CAAO,GACpCE,IAAeP,GAAgBK,CAAO;AAC5C,aAAOpqE,KAAW,KAAKC,KAAW,KAAKD,KAAWqqE,KAAepqE,KAAWqqE;AAAA,IAClF,GACUC,KAAY,CAACxnF,GAAQ5N,GAAK6qB,GAASC,MAAY;AACnD,YAAMyC,IAAawnE,GAAsB/0F,CAAG,GACtCmzC,IAASvlC,IAAS2f,EAAW,OAAOvtB,EAAI,IAAI,aAAa80F,GAAc90F,CAAG,IAAI,GAC9EozC,IAASxlC,IAAS2f,EAAW,MAAMvtB,EAAI,IAAI,YAAY60F,GAAa70F,CAAG,IAAI,GAC3EniC,IAAIgtD,IAAUsoB,GACd1iE,IAAIq6C,IAAUsoB;AACpB,aAAO;AAAA,QACL,GAAAv1E;AAAA,QACA,GAAA4S;AAAA,MACR;AAAA,IACA,GACU4kH,KAAoB,CAACv0F,GAAQ+pB,GAASC,MAAY;AACtD,YAAMmqE,IAAUpjG,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC/C6yC,IAAY7yC,EAAO,SAASm0F,IAAUjiG,GAAgBiiG,CAAO,GAC7DK,IAAkBF,GAAUt0F,EAAO,QAAQ6yC,GAAW9oB,GAASC,CAAO;AAC5E,aAAOkqE,GAA2BrhD,GAAW2hD,EAAgB,GAAGA,EAAgB,CAAC;AAAA,IACvF,GACUC,KAAc,CAAA7jG,MAAQvR,EAAS,KAAKuR,CAAI,EAAE,IAAIG,EAAa,OAAO,GAClE2jG,KAAwB,CAAA10F,MAAU;AACtC,YAAM20F,IAAe30F,EAAO,SAASA,EAAO,YAAYA,EAAO;AAC/D,aAAOy0F,GAAYE,CAAY,EAAE,IAAIpgG,EAAM,EAAE,MAAM,EAAK;AAAA,IAC9D;AAEI,QAAIqgG,KAA0B,MAAM;AAClC,YAAMC,IAAgB,MAAM;AAC1B,cAAM,IAAI,MAAM,6DAA6D;AAAA,MACrF;AACM,aAAO;AAAA,QACL,MAAMA;AAAA,QACN,OAAOA;AAAA,QACP,SAASA;AAAA,MACjB;AAAA,IACA;AAEI,UAAMC,KAAsB,CAAA90F,MAAU;AACpC,YAAM+0F,IAAgB,CAAA,GAChBC,IAAoB,MAAM;AAC9B,cAAMC,IAAQj1F,EAAO;AACrB,eAAOi1F,KAASA,EAAM,6BAA6BA,EAAM,2BAA0B,IAAKL;MAChG,GACYM,IAAqB,MAClB71G,EAAS,KAAK01G,EAAc,CAAC,CAAC,GAEjCzrE,IAAU,CAAChvD,GAAGwV,MACXxV,EAAE,SAASwV,EAAE,QAAQxV,EAAE,SAASwV,EAAE,QAAQ,CAACxV,EAAE,eAAe,CAACA,EAAE,WAAW,CAACwV,EAAE,eAAe,CAACA,EAAE,SAElG66E,IAAa,MAAM;AACvB,QAAArqE,EAAOy0G,GAAe,CAAAI,MAAgB;AACpC,UAAAA,EAAa,WAAU;AAAA,QACjC,CAAS;AAAA,MACT,GACYC,IAAkB,CAAAD,MAAgB;AACtC,QAAAJ,EAAc,KAAKI,CAAY;AAAA,MACvC,GACYE,IAAoB,CAAAF,MAAgB;AACxC,QAAAj0G,GAAY6zG,GAAe,CAAAO,MAClBA,MAAsBH,CAC9B,EAAE,KAAK,CAAAz8G,MAAS;AACf,UAAAq8G,EAAc,OAAOr8G,GAAO,CAAC;AAAA,QACvC,CAAS;AAAA,MACT,GACY68G,IAAO,CAACzsB,GAAM8V,IAAY,OAC1B5+E,EAAO,WAAW,CAAC00F,GAAsB10F,CAAM,IAC1C,MAEL4+E,KACF5+E,EAAO,SAAS,0BAA0B,EAAE,cAAc8oE,EAAM,CAAA,GAE3D7nF,GAAO8zG,GAAe,CAAAI,MACpB7rE,EAAQ0rE,EAAmB,EAAC,QAAQG,CAAY,GAAGrsB,CAAI,CAC/D,EAAE,WAAW,MAAM;AAClB,QAAA9oE,EAAO,cAAc,UAAUA,CAAM;AACrC,cAAMm1F,IAAeH,EAAiB,EAAG,KAAKlsB,GAAM,MAAM;AACxD,UAAAusB,EAAkBF,CAAY,GAC9BxqC,KACItL,GAAmBr/C,CAAM,KAC3Bk1F,EAAoB,EAAC,KAAK,MAAMl1F,EAAO,MAAO,GAAE,CAAAlH,MAAO8iD,GAAQ7qD,EAAa,QAAQ+H,EAAI,MAAO,CAAA,CAAC,CAAC;AAAA,QAE/G,CAAW;AACD,eAAAs8F,EAAgBD,CAAY,GAC5BxqC,KACA3qD,EAAO,SAAS,oBAAoB,EAAE,cAAc,EAAE,GAAGm1F,EAAc,EAAA,CAAE,GAClEA;AAAA,MACjB,CAAS,IAEGK,IAAQ,MAAM;AAClB,QAAAN,EAAoB,EAAC,KAAK,CAAAC,MAAgB;AACxC,UAAAH,EAAmB,EAAC,MAAMG,CAAY,GACtCE,EAAkBF,CAAY,GAC9BxqC;QACV,CAAS;AAAA,MACT,GACY8qC,IAAmBl3G,GAASw2G,CAAa;AAsB/C,cArBuB,CAAA/0F,MAAU;AAC/B,QAAAA,EAAO,GAAG,cAAc,MAAM;AAC5B,gBAAM01F,IAAiBn+D,GAAkBv3B,CAAM;AAC/C,UAAI01F,KACFH,EAAK;AAAA,YACH,MAAMG;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,UACV,GAAE,EAAK,GAEV/qC;QACV,CAAS,GACD3qD,EAAO,GAAG,6CAA6C,MAAM;AAC3D,gCAAsB2qD,CAAU;AAAA,QAC1C,CAAS,GACD3qD,EAAO,GAAG,UAAU,MAAM;AACxB,UAAA1f,EAAOy0G,EAAc,MAAO,GAAE,CAAAI,MAAgB;AAC5C,YAAAH,EAAmB,EAAC,MAAMG,CAAY;AAAA,UAClD,CAAW;AAAA,QACX,CAAS;AAAA,MACT,GACqBn1F,CAAM,GACd;AAAA,QACL,MAAAu1F;AAAA,QACA,OAAAC;AAAA,QACA,kBAAAC;AAAA,MACR;AAAA,IACA,GAEUE,KAAgBtyE,GAAa,eAE7BuyE,KAAevyE,GAAa;AAElC,QAAIwyE,KAAoB,MAAM;AAC5B,YAAMhB,IAAgB,MAAM;AAC1B,cAAM,IAAI,MAAM,uDAAuD;AAAA,MAC/E;AACM,aAAO;AAAA,QACL,MAAMA;AAAA,QACN,SAASA;AAAA,QACT,OAAOA;AAAA,QACP,SAASA;AAAA,QACT,OAAOA;AAAA,MACf;AAAA,IACA;AAEI,UAAMiB,KAAgB,CAAA91F,MAAU;AAC9B,UAAI+1F,IAAU,CAAA;AACd,YAAMf,IAAoB,MAAM;AAC9B,cAAMC,IAAQj1F,EAAO;AACrB,eAAOi1F,KAASA,EAAM,uBAAuBA,EAAM,qBAAoB,IAAKY;MACpF,GACYG,IAAW,CAAC5oG,GAAOruB,MAChB,IAAI2b,OACF3b,IAAIA,EAAE,MAAMquB,GAAO1S,EAAI,IAAI,QAGhCu7G,IAAgB,CAAAC,MAAU;AAC9B,QAAAl2F,EAAO,SAAS,cAAc,EAAE,QAAAk2F,EAAQ,CAAA;AAAA,MAChD,GACYC,IAAiB,CAAAD,MAAU;AAC/B,QAAAl2F,EAAO,SAAS,eAAe,EAAE,QAAAk2F,EAAQ,CAAA;AAAA,MACjD,GACYE,IAAY,CAAAF,MAAU;AAC1B,QAAAH,EAAQ,KAAKG,CAAM,GACnBD,EAAcC,CAAM;AAAA,MAC5B,GACYG,IAAc,CAAAH,MAAU;AAC5B,QAAAC,EAAeD,CAAM,GACrBH,IAAUp1G,GAASo1G,GAAS,CAAAO,MACnBA,MAAgBJ,CACxB,GACGH,EAAQ,WAAW,KACrB/1F,EAAO,MAAK;AAAA,MAEtB,GACYu2F,IAAe,MACZl3G,EAAS,KAAK02G,EAAQA,EAAQ,SAAS,CAAC,CAAC,GAE5CS,IAA8B,CAAAC,MAAc;AAChD,QAAAz2F,EAAO,cAAc,UAAUA,CAAM,GACrC28C,GAAM38C,CAAM,GACZA,EAAO,GAAG;AACV,cAAMk2F,IAASO;AACf,eAAAL,EAAUF,CAAM,GACTA;AAAA,MACf,GACYX,IAAO,CAAC76G,GAAMg8G,MACXF,EAA4B,MAAMxB,IAAoB,KAAKt6G,GAAMg8G,GAAQL,CAAW,CAAC,GAExFM,IAAU,CAAAj8G,MACP87G,EAA4B,MAAMxB,EAAmB,EAAC,QAAQt6G,GAAM27G,CAAW,CAAC,GAEnFO,IAAQ,CAACh3G,GAASwE,GAAUgJ,OAAU;AAC1C,cAAMypG,KAAoB7B;AAC1B,QAAA6B,GAAkB,MAAMj3G,GAASo2G,EAAS5oG,MAAgBypG,IAAmBzyG,CAAQ,CAAC;AAAA,MAC9F,GACY0yG,IAAU,CAACl3G,GAASwE,GAAUgJ,OAAU;AAC5C,cAAMypG,KAAoB7B;AAC1B,QAAA6B,GAAkB,QAAQj3G,GAASo2G,EAAS5oG,MAAgBypG,IAAmBzyG,CAAQ,CAAC;AAAA,MAChG,GACYoxG,IAAQ,MAAM;AAClB,QAAAe,EAAc,EAAC,KAAK,CAAAL,MAAU;AAC5B,UAAAlB,EAAmB,EAAC,MAAMkB,CAAM,GAChCG,EAAYH,CAAM;AAAA,QAC5B,CAAS;AAAA,MACT;AACM,aAAAl2F,EAAO,GAAG,UAAU,MAAM;AACxB,QAAA1f,EAAOy1G,GAAS,CAAAG,MAAU;AACxB,UAAAlB,EAAmB,EAAC,MAAMkB,CAAM;AAAA,QAC1C,CAAS;AAAA,MACT,CAAO,GACM;AAAA,QACL,MAAAX;AAAA,QACA,SAAAoB;AAAA,QACA,OAAAC;AAAA,QACA,SAAAE;AAAA,QACA,OAAAtB;AAAA,MACR;AAAA,IACA,GAEUuB,KAAsB,CAAC/2F,GAAQpgB,MAAY;AAC/C,MAAAogB,EAAO,oBAAoB,KAAK;AAAA,QAC9B,MAAM;AAAA,QACN,MAAMpgB;AAAA,MACd,CAAO;AAAA,IACP,GACUo3G,KAAe,CAACh3F,GAAQpgB,MAAY;AACxC,MAAIogB,EAAO,cACT+2F,GAAoB/2F,GAAQpgB,CAAO,IAEnCogB,EAAO,GAAG,cAAc,MAAM;AAC5B,QAAA+2F,GAAoB/2F,GAAQpgB,CAAO;AAAA,MAC7C,CAAS;AAAA,IAET,GACUq3G,KAAc,CAACj3F,GAAQpgB,MAAY;AACvC,MAAAo3G,GAAah3F,GAAQuiB,GAAK,UAAU;AAAA,QAClC;AAAA,QACA3iC;AAAA,MACD,CAAA,CAAC;AAAA,IACR,GACUs3G,KAAW,CAACl3F,GAAQivC,GAAWjwD,MAAQ;AAC3C,MAAAgwD,GAAUhvC,GAAQivC,GAAW,EAAE,SAASjwD,EAAK,CAAA,GAC7C,QAAQ,MAAMA,CAAG;AAAA,IACvB,GACUm4G,KAAkB,CAACr+G,GAAMsT,GAAKhJ,MAASA,IAAO,kBAAmBtK,CAAM,KAAKsK,cAAmBgJ,CAAG,KAAM,kBAAmBtT,CAAM,SAASsT,CAAG,IAC7IgrG,KAAkB,CAACp3F,GAAQ5T,GAAKhJ,MAAS;AAC7C,MAAA8zG,GAASl3F,GAAQ,mBAAmBm3F,GAAgB,UAAU/qG,GAAKhJ,CAAI,CAAC;AAAA,IAC9E,GACUi0G,KAAiB,CAACr3F,GAAQ5T,GAAKhJ,MAAS;AAC5C,MAAA8zG,GAASl3F,GAAQ,kBAAkBm3F,GAAgB,SAAS/qG,GAAKhJ,CAAI,CAAC;AAAA,IAC5E,GACUk0G,KAAoB,CAACt3F,GAAQ5T,GAAKhJ,MAAS;AAC/C,MAAA8zG,GAASl3F,GAAQ,qBAAqBm3F,GAAgB,YAAY/qG,GAAKhJ,CAAI,CAAC;AAAA,IAClF,GACUm0G,KAAiB,CAACv3F,GAAQ5T,GAAKhJ,MAAS;AAC5C,MAAA8zG,GAASl3F,GAAQ,kBAAkBm3F,GAAgB,SAAS/qG,GAAKhJ,CAAI,CAAC;AAAA,IAC5E,GACUo0G,KAAiB,CAACx3F,GAAQ5T,GAAKhJ,MAAS;AAC5C,MAAA8zG,GAASl3F,GAAQ,kBAAkBm3F,GAAgB,SAAS/qG,GAAKhJ,CAAI,CAAC;AAAA,IAC5E,GACUq0G,KAAkB,CAACz3F,GAAQ5c,GAAM4uC,MAAQ;AAC7C,YAAMpyC,IAAU2iC,GAAK,UAAU;AAAA,QAC7B;AAAA,QACAn/B;AAAA,MACR,CAAO;AACD,MAAA4rD,GAAUhvC,GAAQ,mBAAmB,EAAE,SAAApgB,EAAS,CAAA,GAChD83G,GAAU93G,GAASoyC,CAAG,GACtBglE,GAAah3F,GAAQpgB,CAAO;AAAA,IAClC,GACU83G,KAAY,CAAC93G,MAAY7iB,MAAM;AACnC,YAAM46H,IAAU,OAAO;AACvB,MAAIA,MACEA,EAAQ,QACVA,EAAQ,MAAM/3G,GAAS,GAAG7iB,CAAC,IAE3B46H,EAAQ,IAAI/3G,GAAS,GAAG7iB,CAAC;AAAA,IAGnC,GAEU66H,KAAuB,CAAAxrG,MAAO,iBAAiB,KAAKA,CAAG,GACvDyrG,KAA4B,CAAAzrG,MAAO,aAAaA,IAAM,gBACtD0rG,KAAuB,CAAA1rG,MAAO,QAAQ,SAAS,IAAIyrG,GAA0BzrG,CAAG,CAAC,GACjF2rG,KAAoB,CAAA/3F,MACjBg4F,GAAgBh4F,GAAQ82B,GAAc92B,CAAM,CAAC,GAEhDi4F,KAAiB,CAAAj4F,MACdg4F,GAAgBh4F,GAAQg3B,GAAWh3B,CAAM,CAAC,GAE7Cg4F,KAAkB,CAACh4F,GAAQk4F,MAAa;AAC5C,YAAMC,IAAUn4F,EAAO,cAAc,UAAU,kBAEzCo4F,IAAiB,UADRp4F,EAAO,cAAc,MACI;AACxC,aAAO3f,GAAM63G,GAAU,CAAA9rG,MACjB0rG,GAAqB1rG,CAAG,IACnBA,IACEwrG,GAAqBxrG,CAAG,KAAK,CAAC4T,EAAO,SACvC,GAAIm4F,KAAa/rG,CAAG,IAAMgsG,CAAc,KAExCp4F,EAAO,gBAAgB,WAAW5T,CAAG,CAE/C;AAAA,IACP,GACUisG,KAA+B,CAAAr4F,MAAU;AAC7C,MAAAA,EAAO,aAAaA,EAAO,WAAW,OAAO+3F,GAAkB/3F,CAAM,GAAGi4F,GAAej4F,CAAM,CAAC;AAAA,IACpG,GAEUs4F,KAAe,CAAAp5F,MACZA,IAAMjd,GAAKid,EAAI,qBAAqB,KAAK,CAAC,IAAI,IAEjDq5F,KAAe,CAACC,GAAc3sB,MAAc;AAChD,YAAM4sB,IAAiB,CAAA;AAmDvB,aAAO,EAAE,SAlDO,CAACv5F,GAAKpiB,IAAYsC,OAAW;AAC3C,cAAMs5G,IAAS/3G,GAAS23G,GAAap5F,CAAG,GAAG,CAAAy0C,MAAO;AAChD,gBAAMg5B,IAAMh5B,EAAI;AAOhB,iBANIA,EAAI,aAAa,gBAAgB,KAGjCA,EAAI,aAAa,sBAAsB,KAGvC,CAACg5B,KAAOA,MAAQthF,GAAI,iBACf,KAELtD,GAAW4kF,GAAK,OAAO,IAClB,CAAC6rB,EAAa,WAAW7rB,CAAG,KAAK7vF,EAAU62D,CAAG,IAEnD5rD,GAAW4kF,GAAK,OAAO,IAClB7vF,EAAU62D,CAAG,IAEf;AAAA,QACjB,CAAS,GACKglD,IAAWt4G,GAAMq4G,GAAQ,CAAA/kD,MAAO;AACpC,gBAAMs4B,IAAWt4B,EAAI;AACrB,cAAInwD,GAAMi1G,GAAgBxsB,CAAQ;AAChC,mBAAOwsB,EAAexsB,CAAQ,EAAE,KAAK,CAAA2sB,MAC/Bv7G,GAASu7G,CAAS,IACbA,IAEA;AAAA,cACL,OAAOjlD;AAAA,cACP,UAAUilD,EAAU;AAAA,YACtC,CAEa;AACI;AACL,kBAAMC,IAAa7sB,GAAgBH,GAAWI,CAAQ,EAAE,KAAK,CAAAH,OAC3D,OAAO2sB,EAAexsB,CAAQ,GACvB;AAAA,cACL,OAAOt4B;AAAA,cACP,UAAAm4B;AAAA,YAChB,EACa,EAAE,MAAM,CAAAxqD,OACP,OAAOm3E,EAAexsB,CAAQ,GACvB3qD,EACR;AACD,mBAAAm3E,EAAexsB,CAAQ,IAAI4sB,GACpBA;AAAA,UACR;AAAA,QACX,CAAS;AACD,eAAO,QAAQ,IAAIF,CAAQ;AAAA,MACnC,EACsB;AAAA,IACtB,GAEUG,KAAe,MAAM;AAEzB,UAAIC,IAAkB,CAAA;AACtB,YAAMC,IAAe,CAAC7vF,GAAQ8vF,OACrB;AAAA,QACL,QAAA9vF;AAAA,QACA,WAAA8vF;AAAA,MACV,IAEYC,IAAa,CAAAC,MACVA,KAAWJ;AAwBpB,aAAO;AAAA,QACL,YAAAG;AAAA,QACA,cAxBmB,CAAAC,MAAW;AAC9B,gBAAMphH,IAASghH,EAAgBI,CAAO;AACtC,iBAAOphH,IAASA,EAAO,YAAY;AAAA,QAC3C;AAAA,QAsBQ,WArBgB,CAAAohH,MACTD,EAAWC,CAAO,IAAIJ,EAAgBI,CAAO,EAAE,WAAW,IAAU;AAAA,QAqB3E,YAnBiB,CAAAA,MACVD,EAAWC,CAAO,IAAIJ,EAAgBI,CAAO,EAAE,WAAW,IAAW;AAAA,QAmB5E,aAjBkB,CAAAA,MAAW;AAC7B,UAAAJ,EAAgBI,CAAO,IAAIH,EAAa,GAAS,IAAI;AAAA,QAC7D;AAAA,QAgBQ,cAfmB,CAACG,GAASF,MAAc;AAC3C,UAAAF,EAAgBI,CAAO,IAAIH,EAAa,GAAUC,CAAS;AAAA,QACnE;AAAA,QAcQ,cAbmB,CAAAE,MAAW;AAC9B,iBAAOJ,EAAgBI,CAAO;AAAA,QACtC;AAAA,QAYQ,SAXc,MAAM;AACpB,UAAAJ,IAAkB,CAAA;AAAA,QAC1B;AAAA,MAUA;AAAA,IACA;AAEI,QAAInwG,KAAQ;AACZ,UAAMwwG,KAAO,MAAM;AACjB,YAAMC,IAAM,MACH,KAAK,MAAM,KAAK,OAAQ,IAAG,UAAU,EAAE,SAAS,EAAE;AAG3D,aAAO,OADK,oBAAI,KAAM,GAAC,QAAO,EACb,SAAS,EAAE,IAAIA,MAAQA,MAAQA;IACtD,GACUC,KAAO,CAAAxxG,MACJA,IAASc,OAAUwwG,MAGtBG,KAAY,MAAM;AACtB,UAAIC,IAAQ,CAAA;AACZ,YAAMC,IAAY,CAAAhtB,OACF;AAAA,QACZ,cAAc;AAAA,QACd,aAAa;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA,QACb,cAAc;AAAA,QACd,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,aAAa;AAAA,QACb,cAAc;AAAA,MACxB,GACqBA,EAAK,YAAa,CAAA,KAAK,OAEhCjvD,IAAS,CAAC3+C,GAAGssG,GAAMQ,GAAQvoF,GAAMs2G,MAAa;AAClD,YAAIr8G,GAASxe,CAAC;AAEZ,iBAAO86H,EAAW;AAAA,YAChB,IAFS96H;AAAA,YAGT,MAAAukB;AAAA,YACA,UAAAs2G;AAAA,YACA,MAAMvuB;AAAA,YACN,QAAQQ;AAAA,UACpB,CAAW;AACI,YAAI9yF,GAASha,CAAC;AACnB,iBAAO86H,EAAW96H,CAAC;AAEnB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MAE9C,GACY86H,IAAa,CAAA96H,MAAK;AACtB,YAAI,CAACA,EAAE,QAAQ,CAACA,EAAE;AAChB,gBAAM,IAAI,MAAM,sFAAsF;AAExG,cAAM4wB,IAAK5wB,EAAE,MAAMy6H,GAAK,QAAQ,GAC1Bl2G,IAAOvkB,EAAE,QAAQ4wB,GACjB07E,IAAOtsG,EAAE;AACf,eAAO;AAAA,UACL,IAAI0f,GAASkR,CAAE;AAAA,UACf,MAAMlR,GAAS6E,CAAI;AAAA,UACnB,UAAU7E,GAAS1f,EAAE,YAAYukB,IAAO,MAAMq2G,EAAUtuB,EAAK,IAAI,CAAC;AAAA,UAClE,MAAM5sF,GAAS4sF,CAAI;AAAA,UACnB,QAAQ5sF,GAAS1f,EAAE,MAAM;AAAA,UACzB,SAAS0f,GAAS1f,EAAE,WAAW,IAAI,gBAAgBssG,CAAI,CAAC;AAAA,UACxD,KAAK5sF,GAAS1f,EAAE,GAAG;AAAA,QAC7B;AAAA,MACA,GACY4uC,IAAM,CAAAq+D,MAAY;AACtB,QAAKjuE,EAAIiuE,EAAS,GAAI,CAAA,KACpB0tB,EAAM,KAAK1tB,CAAQ;AAAA,MAE7B,GACY8tB,IAAY,CAAA98G,MAAamE,GAAOu4G,GAAO18G,CAAS,EAAE,kBAClD+gB,IAAM,CAAApO,MAAMmqG,EAAU,CAAAC,MAAkBA,EAAe,GAAE,MAAOpqG,CAAE;AAkBxE,aAAO;AAAA,QACL,QAAA+tB;AAAA,QACA,KAAA/P;AAAA,QACA,KAAA5P;AAAA,QACA,UArBe,CAAAs7F,MAAWS,EAAU,CAAA9tB,MAAYA,EAAS,QAAO,MAAOqtB,CAAO;AAAA,QAsB9E,WArBgB,CAACxtB,GAAQ7yF,MAAS8gH,EAAU,CAAA9tB,MAAYA,EAAS,OAAM,MAAOH,KAAUG,EAAS,KAAM,EAAC,SAAShzF,CAAI;AAAA,QAsBrH,WAAA8gH;AAAA,QACA,aAtBkB,CAAAT,MAAW;AAC7B,UAAAK,IAAQ74G,GAAS64G,GAAO,CAAA1tB,MAClBA,EAAS,QAAS,MAAKqtB,KACzB,IAAI,gBAAgBrtB,EAAS,QAAS,CAAA,GAC/B,MAEF,EACR;AAAA,QACT;AAAA,QAeQ,SAdc,MAAM;AACpB,UAAAxrF,EAAOk5G,GAAO,CAAAK,MAAkB;AAC9B,gBAAI,gBAAgBA,EAAe,QAAS,CAAA;AAAA,UACtD,CAAS,GACDL,IAAQ,CAAA;AAAA,QAChB;AAAA,MAUA;AAAA,IACA,GAEUM,KAAW,CAACtB,GAAczwF,MAAa;AAC3C,YAAMgyF,IAAkB,CAAA,GAClBC,IAAW,CAACC,GAAOC,MACnBD,IACKA,EAAM,QAAQ,OAAO,EAAE,IAAI,MAAMC,EAAM,QAAQ,OAAO,EAAE,IAE1DA,GAEHC,IAAiB,CAACruB,GAAUsuB,MAAa,IAAI,QAAQ,CAACxxF,IAASC,OAAY;AAC/E,cAAMwxF,KAAM,IAAI;AAChB,QAAAA,GAAI,KAAK,QAAQtyF,EAAS,GAAG,GAC7BsyF,GAAI,kBAAkBtyF,EAAS,aAC/BsyF,GAAI,OAAO,aAAa,CAAAngI,OAAK;AAC3B,UAAAkgI,EAASlgI,GAAE,SAASA,GAAE,QAAQ,GAAG;AAAA,QAC3C,GACQmgI,GAAI,UAAU,MAAM;AAClB,UAAAxxF,GAAQ,6DAA6DwxF,GAAI,MAAM;AAAA,QACzF,GACQA,GAAI,SAAS,MAAM;AACjB,cAAIA,GAAI,SAAS,OAAOA,GAAI,UAAU,KAAK;AACzC,YAAAxxF,GAAQ,iBAAiBwxF,GAAI,MAAM;AACnC;AAAA,UACD;AACD,gBAAMC,KAAO,KAAK,MAAMD,GAAI,YAAY;AACxC,cAAI,CAACC,MAAQ,CAACj9G,GAASi9G,GAAK,QAAQ,GAAG;AACrC,YAAAzxF,GAAQ,mBAAmBwxF,GAAI,YAAY;AAC3C;AAAA,UACD;AACD,UAAAzxF,GAAQoxF,EAASjyF,EAAS,UAAUuyF,GAAK,QAAQ,CAAC;AAAA,QAC5D;AACQ,cAAMC,KAAW,IAAI;AACrB,QAAAA,GAAS,OAAO,QAAQzuB,EAAS,KAAI,GAAIA,EAAS,SAAQ,CAAE,GAC5DuuB,GAAI,KAAKE,EAAQ;AAAA,MACzB,CAAO,GACKC,IAAgB38G,EAAWkqB,EAAS,OAAO,IAAIA,EAAS,UAAUoyF,GAClEM,IAAW,MAAM,IAAI,QAAQ,CAAAxxF,MAAW;AAC5C,QAAAA,EAAQ,CAAE,CAAA;AAAA,MAClB,CAAO,GACKyxF,IAAiB,CAAC5uB,GAAU1/E,OAAS;AAAA,QACzC,KAAAA;AAAA,QACA,UAAA0/E;AAAA,QACA,QAAQ;AAAA,MAChB,IACY6uB,IAAiB,CAAC7uB,GAAUxqD,OAAW;AAAA,QAC3C,KAAK;AAAA,QACL,UAAAwqD;AAAA,QACA,QAAQ;AAAA,QACR,OAAAxqD;AAAA,MACR,IACYs5E,IAAiB,CAACzB,GAASphH,MAAW;AAC1C,QAAAmU,GAAM,KAAK6tG,EAAgBZ,CAAO,GAAG,CAAAlwF,OAAW;AAC9C,UAAAA,GAAQlxB,CAAM;AAAA,QACxB,CAAS,GACD,OAAOgiH,EAAgBZ,CAAO;AAAA,MACtC,GACY0B,IAAiB,CAAC/uB,GAAUrzE,GAASqiG,QACzCtC,EAAa,YAAY1sB,EAAS,QAAS,CAAA,GACpC,IAAI,QAAQ,CAAA7iE,OAAW;AAC5B,YAAIksF,IACAiF;AACJ,YAAI;AACF,gBAAM/E,KAAoB,MAAM;AAC9B,YAAIF,OACFA,GAAa,MAAK,GAClBiF,KAAWn8G;AAAA,UAE3B,GACkB2qB,KAAU,CAAAxc,OAAO;AACrB,YAAAipG,MACAmD,EAAa,aAAa1sB,EAAS,QAAS,GAAE1/E,EAAG,GACjDwuG,EAAe9uB,EAAS,QAAS,GAAE4uB,EAAe5uB,GAAU1/E,EAAG,CAAC,GAChE6c,GAAQyxF,EAAe5uB,GAAU1/E,EAAG,CAAC;AAAA,UACnD,GACkByc,KAAU,CAAAyY,OAAS;AACvB,YAAA+zE,MACAmD,EAAa,aAAa1sB,EAAS,QAAS,CAAA,GAC5C8uB,EAAe9uB,EAAS,QAAS,GAAE6uB,EAAe7uB,GAAUxqD,EAAK,CAAC,GAClErY,GAAQ0xF,EAAe7uB,GAAUxqD,EAAK,CAAC;AAAA,UACrD;AACY,UAAA84E,KAAW,CAAAW,OAAW;AACpB,YAAIA,KAAU,KAAKA,KAAU,OAG7B17G,EAAS,KAAK81G,EAAY,EAAE,QAAQ,MAAM91G,EAAS,KAAKy7G,EAAgB,EAAE,IAAI77G,EAAO,CAAC,EAAE,KAAK,CAAA5kB,OAAK;AAChG,cAAA86H,KAAe96H,IACfA,GAAE,YAAY,MAAM0gI,EAAO;AAAA,YAC3C,CAAe;AAAA,UACf,GACYtiG,EAAQqzE,GAAUsuB,EAAQ,EAAE,KAAKxxF,IAAS,CAAAopB,OAAO;AAC/C,YAAAnpB,GAAQxrB,GAAS20C,EAAG,IAAI,EAAE,SAASA,GAAG,IAAKA,EAAG;AAAA,UAC5D,CAAa;AAAA,QACF,SAAQuuD,IAAI;AACX,UAAAt3E,GAAQ0xF,EAAe7uB,GAAUyU,EAAE,CAAC;AAAA,QACrC;AAAA,MACX,CAAS,IAEGya,IAAmB,CAAAviG,MAAWA,MAAY0hG,GAC1Cc,IAAwB,CAAAnvB,MAAY;AACxC,cAAMqtB,IAAUrtB,EAAS;AACzB,eAAO,IAAI,QAAQ,CAAA7iE,OAAW;AAC5B,UAAA8wF,EAAgBZ,CAAO,IAAIY,EAAgBZ,CAAO,KAAK,CAAA,GACvDY,EAAgBZ,CAAO,EAAE,KAAKlwF,EAAO;AAAA,QAC/C,CAAS;AAAA,MACT,GACYiyF,IAAc,CAACC,GAAWL,OAC9BK,IAAYjvG,GAAM,KAAKivG,GAAW,CAAArvB,OAAY,CAAC0sB,EAAa,WAAW1sB,GAAS,QAAO,CAAE,CAAC,GACnF,QAAQ,IAAI5/E,GAAM,IAAIivG,GAAW,CAAArvB,OAAY0sB,EAAa,UAAU1sB,GAAS,QAAO,CAAE,IAAImvB,EAAsBnvB,EAAQ,IAAI+uB,EAAe/uB,IAAU0uB,GAAeM,CAAgB,CAAC,CAAC;AAG/L,aAAO,EAAE,QADM,CAACK,GAAWL,MAAqB,CAAC/yF,EAAS,OAAOizF,EAAiBR,CAAa,IAAIC,EAAU,IAAGS,EAAYC,GAAWL,CAAgB,EACxI;AAAA,IACrB,GAEUA,KAAmB,CAAA96F,MAAU,MAAMA,EAAO,oBAAoB,KAAK;AAAA,MACvE,MAAMA,EAAO,UAAU,oBAAoB;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IACnB,CAAK,GACKo7F,KAAiB,CAACp7F,GAAQw4F,MAAiBsB,GAAStB,GAAc;AAAA,MACtE,KAAKpiE,GAAkBp2B,CAAM;AAAA,MAC7B,UAAUq2B,GAAuBr2B,CAAM;AAAA,MACvC,aAAas2B,GAA2Bt2B,CAAM;AAAA,MAC9C,SAASu2B,GAAuBv2B,CAAM;AAAA,IAC5C,CAAK,GACKq7F,KAAgB,CAAAr7F,MAAU;AAC9B,YAAMw4F,IAAeM,MACfwC,IAAWF,GAAep7F,GAAQw4F,CAAY;AACpD,aAAO,EAAE,QAAQ,CAAC2C,GAAWI,IAAmB,OAASD,EAAS,OAAOH,GAAWI,IAAmBT,GAAiB96F,CAAM,IAAI,MAAS,EAAC;AAAA,IAClJ,GAEUw7F,KAAoB,CAACx7F,GAAQ/R,MAAY+R,EAAO,IAAI,QAAQ/R,EAAQ,GAAG,KAAKrQ,GAAcoiB,EAAO,OAAO,qBAAsB,EAAC5c,GAAK6K,CAAO,CAAC,CAAC,GAC7IwtG,KAAoB,CAAAz7F,MAAU,CAAA/R,MAAW;AAC7C,MAAIutG,GAAkBx7F,GAAQ/R,CAAO,KACnC2I,GAAS3I,GAAS8C,EAAa,SAAS,2BAA2B,CAAC;AAAA,IAE5E,GACU2qG,KAAe,CAAA17F,MAAU;AAC7B,YAAM6rE,IAAY0tB;AAClB,UAAI+B,GAAUK;AACd,YAAMnD,IAAeM,MACf8C,IAAa,CAAA,GACbC,IAAa,CAAAz3G,OACV,CAAArM,OACDioB,EAAO,YACF5b,GAASrM,EAAM,IAEjB,IAGL+jH,IAAmB,CAAA1vG,OAAOA,MAAOA,GAAI,QAAQ,GAAG,MAAM,KAAK,MAAM,QAAO,oBAAI,KAAM,GAAC,QAAO,GAC1F2vG,IAAgB,CAACnkG,IAASokD,IAAQ18B,OAAY;AAClD,YAAI5mC,KAAQ;AACZ;AACE,UAAAA,KAAQkf,GAAQ,QAAQokD,IAAQtjE,EAAK,GACjCA,OAAU,OACZkf,KAAUA,GAAQ,UAAU,GAAGlf,EAAK,IAAI4mC,KAAU1nB,GAAQ,OAAOlf,KAAQsjE,GAAO,MAAM,GACtFtjE,MAAS4mC,GAAQ,SAAS08B,GAAO,SAAS;AAAA,eAErCtjE,OAAU;AACnB,eAAOkf;AAAA,MACf,GACYokG,IAAkB,CAACpkG,IAASqkG,IAAWC,OAAmB;AAC9D,cAAMC,KAAoB,QAASD,MAAoBA,OAAmB7wG,GAAI,iBAAiB,8BAA8B,EAAI;AACjI,eAAAuM,KAAUmkG,EAAcnkG,IAAS,QAASqkG,OAAeE,EAAiB,GAC1EvkG,KAAUmkG,EAAcnkG,IAAS,mBAAmBqkG,KAAY,KAAK,mBAAmBC,KAAiB,GAAG,GACrGtkG;AAAA,MACf,GACYwkG,IAAwB,CAACH,IAAWC,OAAmB;AAC3D,QAAA57G,EAAO0f,EAAO,YAAY,MAAM,CAAAmmF,OAAS;AACvC,UAAIA,GAAM,SAAS,eACjBA,GAAM,YAAY9lG,GAAM8lG,GAAM,WAAW,CAAAruF,OAAYkkG,EAAgBlkG,IAAUmkG,IAAWC,EAAc,CAAC,IAEzG/V,GAAM,UAAU6V,EAAgB7V,GAAM,SAAS8V,IAAWC,EAAc;AAAA,QAEpF,CAAS;AAAA,MACT,GACYG,IAAwB,CAACC,IAAOrD,OAAc;AAClD,cAAMtsB,KAAM3sE,EAAO,WAAWi5F,IAAW,KAAK;AAC9C,QAAAmD,EAAsBE,GAAM,KAAKrD,EAAS,GAC1CnqG,GAASiC,EAAa,QAAQurG,EAAK,GAAG;AAAA,UACpC,KAAOtmE,GAAoBh2B,CAAM,IAAI87F,EAAiB7C,EAAS,IAAIA;AAAA,UACnE,gBAAgBtsB;AAAA,QAC1B,CAAS;AAAA,MACT,GACY4vB,IAAe,OACdjB,MACHA,IAAWF,GAAep7F,GAAQw4F,CAAY,IAEzCgE,EAAe,EAAC,KAAKX,EAAW,CAAAY,OAAc;AACnD,cAAMtB,KAAY96G,GAAMo8G,IAAY,CAAA7D,OAAaA,GAAU,QAAQ;AACnE,eAAO0C,EAAS,OAAOH,IAAWL,GAAiB96F,CAAM,CAAC,EAAE,KAAK67F,EAAW,CAAA9jH,OAAU;AACpF,gBAAM2kH,KAAiB,CAAA;AACvB,cAAIC,KAAuB;AAC3B,gBAAMC,KAAiBv8G,GAAMtI,IAAQ,CAAC8kH,IAAYnkH,OAAU;AAC1D,kBAAM,EAAC,UAAAozF,IAAU,OAAAwwB,GAAK,IAAIG,GAAW/jH,EAAK;AAC1C,gBAAIokH,KAAU;AACd,mBAAID,GAAW,UAAU5mE,GAAsBj2B,CAAM,KAC/C68F,GAAW,OAAO,CAAC70G,GAAWs0G,GAAM,KAAKO,GAAW,GAAG,MACzDF,KAAuB,KAEzB9wB,EAAU,YAAYywB,GAAM,GAAG,GAC3B/S,GAAMvpF,CAAM,KACdq8F,EAAsBC,IAAOO,GAAW,GAAG,KAEpCA,GAAW,UAChBA,GAAW,MAAM,WACnBT,EAAsBE,GAAM,KAAKjxG,GAAI,cAAc,GACnDqxG,GAAe,KAAKJ,EAAK,GACzBQ,KAAU,KAEZ7F,GAAYj3F,GAAQ68F,GAAW,MAAM,OAAO,IAEvC;AAAA,cACL,SAASP;AAAA,cACT,QAAQO,GAAW;AAAA,cACnB,WAAWA,GAAW;AAAA,cACtB,UAAA/wB;AAAA,cACA,SAAAgxB;AAAA,YAChB;AAAA,UACA,CAAa;AACD,iBAAIJ,GAAe,SAAS,KAAK,CAACnT,GAAMvpF,CAAM,IAC5CA,EAAO,YAAY,SAAS,MAAM;AAChC,YAAA1f,EAAOkX,GAAUklG,EAAc,GAAG,CAAAK,OAAgB;AAChD,oBAAMC,KAAY5qG,GAAO2qG,EAAY;AACrC,cAAA3lG,GAAS2lG,EAAY,GACrBC,GAAU,KAAKvB,GAAkBz7F,CAAM,CAAC,GACxC6rE,EAAU,YAAYkxB,GAAa,IAAI,GAAG;AAAA,YAC5D,CAAiB;AAAA,UACjB,CAAe,IACQJ,MACT38F,EAAO,YAAY,kBAEd48F;AAAA,QACR,CAAA,CAAC;AAAA,MACH,CAAA,CAAC,IAEEK,IAAmB,MAAMlnE,GAA0B/1B,CAAM,IAAIu8F,EAAY,IAAK,QAAQ,QAAQ,CAAA,CAAE,GAChGW,IAAsB,CAAAC,OAAU97G,GAAOu6G,GAAY,CAAApjG,OAAUA,GAAO2kG,EAAM,CAAC,GAC3EC,IAAY,CAAA5kG,OAAU;AAC1B,QAAAojG,EAAW,KAAKpjG,EAAM;AAAA,MAC9B,GACYgkG,IAAgB,OACfb,MACHA,IAAepD,GAAaC,GAAc3sB,CAAS,IAE9C8vB,EAAa,QAAQ37F,EAAO,QAAO,GAAIk9F,CAAmB,EAAE,KAAKrB,EAAW,CAAA9jH,OAAU;AAC3F,cAAM6kH,KAAiBj8G,GAAS5I,IAAQ,CAAAslH,OAClChgH,GAASggH,EAAU,KACrBrG,GAAah3F,GAAQq9F,EAAU,GACxB,MACEA,GAAW,YAAY,MAKnC;AACD,eAAI9T,GAAMvpF,CAAM,KACd1f,EAAOs8G,IAAgB,CAAAS,OAAc;AACnC,UAAAjB,EAAsBiB,GAAW,MAAM,KAAKA,GAAW,SAAS,QAAO,CAAE,GACzEA,GAAW,MAAM,MAAMA,GAAW,SAAS,QAAO,GAClDA,GAAW,MAAM,gBAAgB,cAAc;AAAA,QAC7D,CAAa,GAEIT;AAAA,MACR,CAAA,CAAC,IAEEvJ,KAAU,MAAM;AACpB,QAAAxnB,EAAU,QAAO,GACjB2sB,EAAa,QAAO,GACpBmD,IAAeL,IAAW;AAAA,MAClC,GACYgC,KAAkB,CAAA1lG,OACfA,GAAQ,QAAQ,uBAAuB,CAAC2e,IAAO4iF,OAAY;AAChE,cAAMF,KAAYT,EAAa,aAAaW,EAAO;AACnD,YAAIF;AACF,iBAAO,UAAUA,KAAY;AAE/B,YAAIntB,KAAWD,EAAU,SAASstB,EAAO;AAMzC,eALKrtB,OACHA,KAAWhrF,GAAMkf,EAAO,cAAc,OAAO,CAACjoB,IAAQioB,OAC7CjoB,MAAUioB,GAAO,gBAAgBA,GAAO,aAAa,UAAU,SAASm5F,EAAO,GACrF,MAAS,IAEVrtB,KAEK,eADMA,GAAS,OACK,OAAO,aAAaA,GAAS,OAAQ,IAAG,MAE9Dv1D;AAAA,MACjB,CAAS;AAEH,aAAAvW,EAAO,GAAG,cAAc,MAAM;AAC5B,QAAI+1B,GAA0B/1B,CAAM,IAClCi9F,MAEAT;MAEV,CAAO,GACDx8F,EAAO,GAAG,kBAAkB,CAAA9lC,OAAK;AAC/B,QAAAA,GAAE,UAAUojI,GAAgBpjI,GAAE,OAAO;AAAA,MAC7C,CAAO,GACD8lC,EAAO,GAAG,cAAc,CAAA9lC,OAAK;AAC3B,QAAIA,GAAE,eAAeA,GAAE,WAAW,SAASA,GAAE,WAAW,WAGxDA,GAAE,UAAUojI,GAAgBpjI,GAAE,OAAO;AAAA,MAC7C,CAAO,GACD8lC,EAAO,GAAG,cAAc,MAAM;AAC5B,QAAAA,EAAO,OAAO,cAAc,OAAO,CAAA04F,OAAU;AAC3C,UAAAp4G,EAAOo4G,IAAQ,CAAA/kD,OAAO;AACpB,kBAAMg5B,KAAMh5B,GAAI,KAAK,KAAK;AAC1B,gBAAI,CAACg5B,MAAOd,EAAU,SAASc,EAAG;AAChC;AAEF,kBAAMssB,KAAYT,EAAa,aAAa7rB,EAAG;AAC/C,YAAIssB,MACFtlD,GAAI,KAAK,OAAOslD,EAAS;AAAA,UAEvC,CAAW;AAAA,QACX,CAAS;AAAA,MACT,CAAO,GACM;AAAA,QACL,WAAAptB;AAAA,QACA,WAAAuxB;AAAA,QACA,cAAAb;AAAA,QACA,kBAAAU;AAAA,QACA,eAAAT;AAAA,QACA,SAAAnJ;AAAA,MACR;AAAA,IACA,GAEUkK,KAAQ,CAAAv9F,MAAU;AACtB,YAAMpR,IAAMoR,EAAO,KACbuQ,IAAavQ,EAAO,OAAO,MAC3BszB,IAAU;AAAA,QACd,WAAW,CAAC;AAAA,UACR,UAAU;AAAA,UACV,QAAQ,EAAE,eAAe,MAAO;AAAA,QAC5C,CAAW;AAAA,QACH,cAAc,CAAC;AAAA,UACX,UAAU;AAAA,UACV,QAAQ,EAAE,eAAe,SAAU;AAAA,QAC/C,CAAW;AAAA,QACH,cAAc,CAAC;AAAA,UACX,UAAU;AAAA,UACV,QAAQ,EAAE,eAAe,SAAU;AAAA,QAC/C,CAAW;AAAA,QACH,WAAW;AAAA,UACT;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,QAAQ,EAAE,WAAW,OAAQ;AAAA,YAC7B,SAAS;AAAA,YACT,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ,EAAE,OAAO,OAAQ;AAAA,YACzB,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ;AAAA,cACN,YAAY;AAAA,cACZ,aAAa;AAAA,YACd;AAAA,YACD,UAAU,CAAAi7B,MAAS;AACjB,cAAA3/D,EAAI,SAAS2/D,GAAO,SAAS,IAAI;AAAA,YAClC;AAAA,YACD,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,QAAQ,EAAE,OAAO,OAAQ;AAAA,UAC1B;AAAA,QACF;AAAA,QACD,aAAa;AAAA,UACX;AAAA,YACE,UAAU;AAAA,YACV,QAAQ,EAAE,WAAW,SAAU;AAAA,YAC/B,SAAS;AAAA,YACT,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ;AAAA,cACN,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,aAAa;AAAA,YACd;AAAA,YACD,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ;AAAA,cACN,YAAY;AAAA,cACZ,aAAa;AAAA,YACd;AAAA,YACD,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,QAAQ;AAAA,cACN,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,aAAa;AAAA,YACd;AAAA,YACD,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,QAAQ;AAAA,cACN,YAAY;AAAA,cACZ,aAAa;AAAA,YACd;AAAA,YACD,SAAS;AAAA,UACV;AAAA,QACF;AAAA,QACD,YAAY;AAAA,UACV;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,QAAQ,EAAE,WAAW,QAAS;AAAA,YAC9B,SAAS;AAAA,YACT,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ,EAAE,OAAO,QAAS;AAAA,YAC1B,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ;AAAA,cACN,aAAa;AAAA,cACb,YAAY;AAAA,YACb;AAAA,YACD,UAAU,CAAAA,MAAS;AACjB,cAAA3/D,EAAI,SAAS2/D,GAAO,SAAS,IAAI;AAAA,YAClC;AAAA,YACD,SAAS;AAAA,UACV;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,iBAAiB;AAAA,YACjB,QAAQ,EAAE,OAAO,QAAS;AAAA,YAC1B,SAAS;AAAA,UACV;AAAA,QACF;AAAA,QACD,cAAc,CAAC;AAAA,UACX,UAAU;AAAA,UACV,QAAQ,EAAE,WAAW,UAAW;AAAA,UAChC,SAAS;AAAA,UACT,SAAS;AAAA,QACrB,CAAW;AAAA,QACH,MAAM;AAAA,UACJ;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACF;AAAA,UACD;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ,EAAE,YAAY,OAAQ;AAAA,UAC/B;AAAA,UACD;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,QACD,QAAQ;AAAA,UACN;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACF;AAAA,UACD;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ,EAAE,WAAW,SAAU;AAAA,UAChC;AAAA,UACD;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,QACD,WAAW;AAAA,UACT;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ,EAAE,gBAAgB,YAAa;AAAA,YACvC,OAAO;AAAA,UACR;AAAA,UACD;AAAA,YACE,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,QACD,eAAgB,uBAAM;AACpB,gBAAMtU,IAAO;AAAA,YACX,QAAQ;AAAA,YACR,QAAQ,EAAE,gBAAgB,eAAgB;AAAA,YAC1C,OAAO;AAAA,UACnB,GACgBujD,IAAS;AAAA,YACb,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACb,GACgB1+H,IAAI;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,YACD;AAAA,UACb;AACU,iBAAOyxC,MAAe,UAAU;AAAA,YAC9BzxC;AAAA,YACAm7E;AAAA,YACAujD;AAAA,UACZ,IAAc;AAAA,YACFvjD;AAAA,YACAn7E;AAAA,YACA0+H;AAAA,UACZ;AAAA,QACA,GAAY;AAAA,QACJ,WAAW;AAAA,UACT,QAAQ;AAAA,UACR,QAAQ,EAAE,OAAO,SAAU;AAAA,UAC3B,OAAO;AAAA,UACP,gBAAgB;AAAA,UAChB,oBAAoB;AAAA,QACrB;AAAA,QACD,aAAa;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ,EAAE,iBAAiB,SAAU;AAAA,UACrC,OAAO;AAAA,UACP,gBAAgB;AAAA,UAChB,oBAAoB;AAAA,QACrB;AAAA,QACD,UAAU;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ,EAAE,YAAY,SAAU;AAAA,UAChC,oBAAoB;AAAA,QACrB;AAAA,QACD,UAAU;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ,EAAE,UAAU,SAAU;AAAA,UAC9B,oBAAoB;AAAA,QACrB;AAAA,QACD,YAAY;AAAA,UACV,UAAU;AAAA,UACV,QAAQ,EAAE,YAAY,SAAU;AAAA,QACjC;AAAA,QACD,gBAAgB;AAAA,UACd,QAAQ;AAAA,UACR,YAAY,EAAE,OAAO,SAAU;AAAA,QAChC;AAAA,QACD,YAAY;AAAA,UACV,OAAO;AAAA,UACP,SAAS;AAAA,UACT,QAAQ;AAAA,QACT;AAAA,QACD,WAAW,EAAE,QAAQ,MAAO;AAAA,QAC5B,aAAa,EAAE,QAAQ,MAAO;AAAA,QAC9B,MAAM,EAAE,QAAQ,OAAQ;AAAA,QACxB,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS,CAAC5sG,GAAM6sG,GAAMC,MACbviG,GAAYvK,CAAI,KAAKA,EAAK,aAAa,MAAM;AAAA,UAEtD,UAAU,CAACsO,GAAKu+F,GAAMz1D,MAAS;AAC7B,YAAA97C,GAAM,KAAK87C,GAAM,CAACrwD,GAAO4L,MAAQ;AAC/B,cAAAqL,EAAI,UAAUsQ,GAAK3b,GAAK5L,CAAK;AAAA,YAC3C,CAAa;AAAA,UACF;AAAA,QACF;AAAA,QACD,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,oBAAoB;AAAA,UACpB,gBAAgB;AAAA,UAChB,YAAY;AAAA,YACV,MAAQ;AAAA,YACR,iBAAiB,CAAAqwD,MAAQ;AACvB,kBAAIphE;AACJ,sBAAQA,IAAKohE,KAAS,OAA0B,SAASA,EAAK,iBAAiB,QAAQphE,MAAO,SAASA,IAAK;AAAA,YAC7G;AAAA,UACF;AAAA,QACF;AAAA,QACD,cAAc;AAAA,UACZ;AAAA,YACE,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,MAAM;AAAA,UACP;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,YAAY;AAAA,cACV;AAAA,cACA;AAAA,YACD;AAAA,YACD,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,UACP;AAAA,UACD;AAAA,YACE,UAAU;AAAA,YACV,YAAY;AAAA,cACV;AAAA,cACA;AAAA,YACD;AAAA,YACD,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,MAAM;AAAA,UACP;AAAA,QACF;AAAA,MACT;AACM,aAAAslB,GAAM,KAAK,iDAAiD,MAAM,IAAI,GAAG,CAAA9I,MAAQ;AAC/E,QAAAkwC,EAAQlwC,CAAI,IAAI;AAAA,UACd,OAAOA;AAAA,UACP,QAAQ;AAAA,QAClB;AAAA,MACA,CAAO,GACMkwC;AAAA,IACb,GAEUqqE,KAAc;AAAA,MAClB,gBAAgB;AAAA,MAChB,SAAS;AAAA,IACf,GACUC,KAAW;AAAA,MACf,UAAU;AAAA,MACV,GAAGD;AAAA,IACT,GACUE,KAAc;AAAA,MAClB,0BAA0B;AAAA,QACxB,QAAQ,EAAE,iBAAiB,SAAU;AAAA,QACrC,GAAGD;AAAA,MACJ;AAAA,MACD,wBAAwB;AAAA,QACtB,QAAQ,EAAE,kBAAkB,SAAU;AAAA,QACtC,GAAGA;AAAA,MACJ;AAAA,MACD,sBAAsB;AAAA,QACpB,QAAQ,EAAE,aAAa,SAAU;AAAA,QACjC,GAAGA;AAAA,MACJ;AAAA,MACD,gBAAgB;AAAA,QACd,SAAS,CAAC,QAAQ;AAAA,QAClB,GAAGA;AAAA,MACJ;AAAA,MACD,YAAY;AAAA,QACV,UAAU;AAAA,QACV,SAAS,CAAC,QAAQ;AAAA,QAClB,GAAGD;AAAA,MACJ;AAAA,MACD,sBAAsB;AAAA,QACpB,QAAQ,EAAE,aAAa,SAAU;AAAA,QACjC,GAAGC;AAAA,MACJ;AAAA,MACD,sBAAsB;AAAA,QACpB,QAAQ,EAAE,aAAa,SAAU;AAAA,QACjC,GAAGA;AAAA,MACJ;AAAA,IACP,GACU//F,KAAMtf,GAASs/G,EAAW,GAE1BC,KAAiB,CAAA99F,MAAU;AAC/B,YAAMszB,IAAU,CAAA,GACV0lB,IAAQ,CAAA51D,MAAQxF,GAAcwF,CAAI,IAAIkwC,EAAQlwC,CAAI,IAAIkwC,GACtDhjC,IAAM,CAAAlN,MAAQI,GAAM8vC,GAASlwC,CAAI,GACjC26G,IAAW,CAAC36G,GAAMmwC,MAAW;AACjC,QAAInwC,MACG/F,GAAS+F,CAAI,KAKX7F,GAAUg2C,CAAM,MACnBA,IAAS,CAACA,CAAM,IAElBjzC,EAAOizC,GAAQ,CAAAA,MAAU;AACvB,UAAI71C,GAAY61C,EAAO,IAAI,MACzBA,EAAO,OAAO,CAACoW,GAAiBpW,CAAM,IAEpC71C,GAAY61C,EAAO,KAAK,MAC1BA,EAAO,QAAQ,CAACoW,GAAiBpW,CAAM,KAAKqW,GAAerW,CAAM,IAE/D71C,GAAY61C,EAAO,MAAM,KAAKoW,GAAiBpW,CAAM,KAAK,CAACqW,GAAerW,CAAM,MAClFA,EAAO,SAAS,SAEdoW,GAAiBpW,CAAM,KAAKqW,GAAerW,CAAM,MACnDA,EAAO,QAAQ,IACfA,EAAO,eAAe,KAEpBl2C,GAASk2C,EAAO,OAAO,MACzBA,EAAO,UAAUA,EAAO,QAAQ,MAAM,KAAK;AAAA,QAE3D,CAAa,GACDD,EAAQlwC,CAAI,IAAImwC,KAzBhBhxC,GAAOa,GAAM,CAACmwC,GAAQnwC,MAAS;AAC7B,UAAA26G,EAAS36G,GAAMmwC,CAAM;AAAA,QACnC,CAAa;AAAA,MA0Bb,GACYyqE,IAAa,CAAA56G,OACbA,KAAQkwC,EAAQlwC,CAAI,KACtB,OAAOkwC,EAAQlwC,CAAI,GAEdkwC;AAET,aAAAyqE,EAASR,GAAMv9F,CAAM,CAAC,GACtB+9F,EAASlgG,GAAG,CAAE,GACdkgG,EAASlmE,GAAW73B,CAAM,CAAC,GACpB;AAAA,QACL,KAAKg5C;AAAA,QACL,KAAA1oD;AAAA,QACA,UAAAytG;AAAA,QACA,YAAAC;AAAA,MACR;AAAA,IACA,GAEUC,KAAS/xG,GAAM,MACf0C,KAAM8rB,GAAS,KACfwjF,KAAgB,CAAA55G,MAAQ1G,GAAc0G,CAAI,KAAKzL,GAASyL,CAAI,GAC5D65G,KAAuB,CAACC,GAAUp+F,MAAW;AACjD,YAAMN,IAASM,KAAUA,EAAO,UAAUgQ,GAAO,CAAA,CAAE,GAC7C28B,IAAW,CAACztC,GAAK5a,MAAS;AAC9B,QAAIA,EAAK,QAAQ,SAAS,KACxBsK,GAAI,SAASsQ,GAAK5a,EAAK,QAAQ,KAAK,GAAG,CAAC,GAE1CsK,GAAI,WAAWsQ,GAAK5a,EAAK,KAAK;AAAA,MACtC,GACY+5G,IAAgB,CAAAC,MAAS;AAC7B,cAAMh6G,IAAOjH,GAASihH,CAAK,IAAI;AAAA,UAC7B,MAAMA;AAAA,UACN,SAAS,CAAE;AAAA,UACX,OAAO,CAAE;AAAA,QACV,IAAGA,GACEp/F,IAAMtQ,GAAI,OAAOtK,EAAK,IAAI;AAChC,eAAAqoD,EAASztC,GAAK5a,CAAI,GACX4a;AAAA,MACf,GACYq/F,IAAoB,CAACr/F,GAAKhY,MAAc;AAC5C,cAAMs3G,IAAU9+F,EAAO,eAAeR,EAAI,SAAS,YAAW,CAAE,GAC1Du/F,IAAkBD,KAAY,OAA6B,SAASA,EAAQ;AAClF,eAAIC,KAAmBA,EAAgB,SAC9Bv3G,KAAa/G,EAAWs+G,GAAiBv3G,CAAS,IAAIA,IAAYu3G,EAAgB,CAAC,IAEnF;AAAA,MAEjB,GACYC,IAAa,CAACx/F,GAAKy/F,GAAWhsG,MAAa;AAC/C,YAAIisG;AACJ,cAAMnqG,IAAWkqG,EAAU,CAAC,GACtBE,IAAeX,GAAczpG,CAAQ,IAAIA,EAAS,OAAO,QACzDqqG,IAAiBP,EAAkBr/F,GAAK2/F,CAAY;AAC1D,YAAIC;AACF,UAAID,MAAiBC,KACnBF,IAAkBnqG,GAClBkqG,IAAYA,EAAU,MAAM,CAAC,KAE7BC,IAAkBE;AAAA,iBAEXrqG;AACT,UAAAmqG,IAAkBnqG,GAClBkqG,IAAYA,EAAU,MAAM,CAAC;AAAA,iBACpB,CAAChsG;AACV,iBAAOuM;AAET,cAAM9M,IAASwsG,IAAkBP,EAAcO,CAAe,IAAIhwG,GAAI,OAAO,KAAK;AAClF,QAAAwD,EAAO,YAAY8M,CAAG,GAClBvM,KACFzG,GAAM,KAAKyG,GAAU,CAAAqI,OAAW;AAC9B,gBAAM+jG,KAAaV,EAAcrjG,EAAO;AACxC,UAAA5I,EAAO,aAAa2sG,IAAY7/F,CAAG;AAAA,QAC/C,CAAW;AAEH,cAAM8/F,IAAiBd,GAAcU,CAAe,IAAIA,EAAgB,WAAW;AACnF,eAAOF,EAAWtsG,GAAQusG,GAAWK,CAAc;AAAA,MAC3D,GACYlnG,IAAWlJ,GAAI,OAAO,KAAK;AACjC,UAAIwvG,EAAS,SAAS,GAAG;AACvB,cAAM95G,IAAO85G,EAAS,CAAC,GACjBl/F,IAAMm/F,EAAc/5G,CAAI,GACxBqO,IAAWurG,GAAc55G,CAAI,IAAIA,EAAK,WAAW;AACvD,QAAAwT,EAAS,YAAY4mG,EAAWx/F,GAAKk/F,EAAS,MAAM,CAAC,GAAGzrG,CAAQ,CAAC;AAAA,MAClE;AACD,aAAOmF;AAAA,IACb,GACUmnG,KAAoB,CAAA36G,MAAQ;AAChC,MAAAA,IAAO4H,GAAM,KAAK5H,CAAI;AACtB,UAAI8xF,IAAU;AACd,YAAM5zF,IAAM;AAAA,QACV,MAAM4zF;AAAA,QACN,SAAS,CAAE;AAAA,QACX,OAAO,CAAE;AAAA,QACT,UAAU9xF;AAAA,MAClB;AACM,aAAIA,MAAS,QACX8xF,IAAU9xF,EAAK,QAAQ,6CAA6C,CAAC46G,GAAIh8E,GAAIC,GAAIg8E,GAAIC,MAAO;AAC1F,gBAAQl8E,GAAE;AAAA,UACV,KAAK;AACH,YAAA1gC,EAAI,MAAM,KAAK2gC;AACf;AAAA,UACF,KAAK;AACH,YAAA3gC,EAAI,QAAQ,KAAK2gC,CAAE;AACnB;AAAA,UACF,KAAK;AACH,YAAIj3B,GAAM,QAAQ,8CAA8C,MAAM,GAAG,GAAGi3B,CAAE,MAAM,OAClF3gC,EAAI,MAAM2gC,CAAE,IAAIA;AAElB;AAAA,QACD;AACD,YAAIg8E,MAAO,KAAK;AACd,gBAAMzlI,IAAI0lI,EAAG,MAAM,4BAA4B;AAC/C,UAAI1lI,MACF8oB,EAAI,MAAM9oB,EAAE,CAAC,CAAC,IAAIA,EAAE,CAAC;AAAA,QAExB;AACD,eAAO;AAAA,MACjB,CAAS,IAEH8oB,EAAI,OAAO4zF,KAAW,OACf5zF;AAAA,IACb,GACU68G,KAAgB,CAAAhuG,MACfhU,GAASgU,CAAQ,KAGtBA,IAAWA,EAAS,MAAM,SAAS,EAAE,CAAC,GACtCA,IAAWA,EAAS,QAAQ,uBAAuB,IAAI,GAChDnF,GAAM,IAAImF,EAAS,MAAM,yBAAyB,GAAG,CAAA/M,MAAQ;AAClE,YAAMqO,IAAWzG,GAAM,IAAI5H,EAAK,MAAM,cAAc,GAAG26G,EAAiB,GAClEz8G,IAAMmQ,EAAS;AACrB,aAAIA,EAAS,WACXnQ,EAAI,WAAWmQ,IAEVnQ;AAAA,IACf,CAAO,EAAE,QAAO,KAXD,IAaL88G,KAAa,CAACt/F,GAAQuzB,MAAW;AACrC,UAAIgsE,IAAa,IACbC,IAAgB1nE,GAAiB93B,CAAM;AAC3C,UAAIw/F,MAAkB;AACpB,eAAO;AAET,YAAMC,IAAa,CAAA/jF,MACVr+B,GAASq+B,CAAG,IAAIA,EAAI,QAAQ,WAAW,EAAE,IAAI,IAEhDgkF,IAAmB,CAACt8G,GAAM8b,MACvBtQ,GAAI,SAASsQ,KAAuCc,EAAO,QAAS,GAAE5c,GAAM,EAAI;AAEzF,UAAI/F,GAASk2C,CAAM,GAAG;AACpB,cAAMD,IAAUtzB,EAAO,UAAU,IAAIuzB,CAAM;AAC3C,YAAI,CAACD;AACH,iBAAO;AAET,QAAAC,IAASD,EAAQ,CAAC;AAAA,MACnB;AACD,UAAI,aAAaC,GAAQ;AACvB,cAAMosE,IAAUpsE,EAAO;AACvB,YAAIosE,MAAY;AACd,iBAAO;AAEP,QAAAH,IAAgBG,KAAWH;AAAA,MAE9B;AACD,UAAIp8G,IAAOmwC,EAAO,SAASA,EAAO,UAAU,QACxCqsE;AACJ,YAAMl0G,IAAQ2zG,GAAc9rE,EAAO,QAAQ;AAC3C,MAAI7nC,EAAM,SAAS,KACZA,EAAM,CAAC,EAAE,SACZA,EAAM,CAAC,EAAE,OAAOtI,IAElBA,IAAOmwC,EAAO,UACdqsE,IAAczB,GAAqBzyG,GAAOsU,CAAM,KAEhD4/F,IAAczB,GAAqB,CAAC/6G,CAAI,GAAG4c,CAAM;AAEnD,YAAM6/F,IAAajxG,GAAI,OAAOxL,GAAMw8G,CAAW,EAAE,CAAC,KAAKA,EAAY;AACnE,MAAA3B,GAAO1qE,EAAO,QAAQ,CAAC57C,GAAOyL,MAAS;AACrC,cAAMktB,IAAWmvF,EAAW9nH,CAAK;AACjC,QAAI24B,KACF1hB,GAAI,SAASixG,GAAYz8G,GAAMktB,CAAQ;AAAA,MAEjD,CAAO,GACD2tF,GAAO1qE,EAAO,YAAY,CAAC57C,GAAOyL,MAAS;AACzC,cAAMktB,IAAWmvF,EAAW9nH,CAAK;AACjC,QAAI24B,KACF1hB,GAAI,UAAUixG,GAAYz8G,GAAMktB,CAAQ;AAAA,MAElD,CAAO,GACD2tF,GAAO1qE,EAAO,SAAS,CAAA57C,MAAS;AAC9B,cAAM24B,IAAWmvF,EAAW9nH,CAAK;AACjC,QAAKiX,GAAI,SAASixG,GAAYvvF,CAAQ,KACpC1hB,GAAI,SAASixG,GAAYvvF,CAAQ;AAAA,MAE3C,CAAO,GACDtQ,EAAO,SAAS,gBAAgB,GAChCpR,GAAI,UAAUgxG,GAAa;AAAA,QACzB,UAAU;AAAA,QACV,MAAM;AAAA,MACd,CAAO,GACD5/F,EAAO,QAAO,EAAG,YAAY4/F,CAAW;AACxC,YAAME,IAAoBJ,EAAiB,UAAU,GAC/CK,IAAiB,MAAM,KAAKD,CAAiB,IAAI,SAASA,GAAmB,EAAE,IAAI;AACzF,aAAA7B,GAAOuB,EAAc,MAAM,GAAG,GAAG,CAAAp8G,MAAQ;AACvC,YAAIzL,IAAQ+nH,EAAiBt8G,GAAMy8G,CAAU;AAC7C,YAAI,EAAAz8G,MAAS,sBAAsB,oCAAoC,KAAKzL,CAAK,MAC/EA,IAAQ+nH,EAAiBt8G,CAAI,GACzByxB,GAAgBl9B,CAAK,EAAE,YAAW,MAAO,eAI3C,EAAAyL,MAAS,WACPyxB,GAAgBl9B,CAAK,EAAE,YAAW,MAAO,YAI/C;AAAA,cAAIyL,MAAS,eACP,QAAQ,KAAKzL,CAAK,GAAG;AACvB,gBAAIooH,MAAmB;AACrB;AAGF,YAAApoH,IADiB,WAAWA,CAAK,KAAK,KAAK,KAAKA,CAAK,IAAI,MAAM,KAC5CooH,IAAiB;AAAA,UACrC;AAEH,UAAI38G,MAAS,YAAYzL,MACvB4nH,KAAc,mBAEhBA,KAAcn8G,IAAO,MAAMzL,IAAQ;AAAA;AAAA,MAC3C,CAAO,GACDqoB,EAAO,SAAS,qBAAqB,GACrCpR,GAAI,OAAOgxG,CAAW,GACfL;AAAA,IACb,GAEUS,KAAU,CAAAhgG,MAAU;AACxB,MAAAA,EAAO,YAAY,UAAU,IAAI,MAAM,GACvCA,EAAO,YAAY,UAAU,IAAI,QAAQ,GACzCA,EAAO,YAAY,UAAU,IAAI,WAAW;AAC5C,eAASphC,IAAI,GAAGA,KAAK,GAAGA;AACtB,QAAAohC,EAAO,YAAY,YAAYphC,GAAG,IAAI;AAAA,UACpC;AAAA,UACA;AAAA,UACA,MAAMA;AAAA,QAChB,CAAS;AAEH,MAAAohC,EAAO,YAAY,YAAY,IAAI;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,GACDA,EAAO,YAAY,YAAY,IAAI;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO,GACDA,EAAO,YAAY,YAAY,IAAI;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO;AAAA,IACP,GAEUigG,KAAY,CAAAjgG,MAAU;AAC1B,YAAMszB,IAAUwqE,GAAe99F,CAAM,GAC/BkgG,IAAoBl+E,GAAK,CAAA,CAAE;AACjC,aAAAg+E,GAAQhgG,CAAM,GACdggE,GAAQhgE,CAAM,GACTupF,GAAMvpF,CAAM,KACfqoE,GAAQ63B,GAAmBlgG,CAAM,GAE5B;AAAA,QACL,KAAKszB,EAAQ;AAAA,QACb,KAAKA,EAAQ;AAAA,QACb,UAAUA,EAAQ;AAAA,QAClB,YAAYA,EAAQ;AAAA,QACpB,OAAO,CAAClwC,GAAM4kD,GAAMp3C,MAAS;AAC3B,UAAAo6F,GAAYhrF,GAAQ5c,GAAM4kD,GAAMp3C,CAAI;AAAA,QACrC;AAAA,QACD,QAAQ,CAACxN,GAAM4kD,GAAMp3C,GAAMgsE,MAAY;AACrC,UAAAquB,GAAajrF,GAAQ5c,GAAM4kD,GAAMp3C,GAAMgsE,CAAO;AAAA,QAC/C;AAAA,QACD,QAAQ,CAACx5E,GAAM4kD,GAAMp3C,MAAS;AAC5B,UAAAs6F,GAAalrF,GAAQ5c,GAAM4kD,GAAMp3C,CAAI;AAAA,QACtC;AAAA,QACD,OAAO,CAACxN,GAAM4kD,GAAMp3C,GAAMgsE,MAAY+tB,GAAY3qF,GAAQ5c,GAAM4kD,GAAMp3C,GAAMgsE,CAAO;AAAA,QACnF,SAAS,CAAAnhE,MAASsvF,GAAc/qF,GAAQvE,CAAK;AAAA,QAC7C,UAAU,CAACA,GAAOusC,MAAS4iD,GAAgB5qF,GAAQvE,GAAOusC,CAAI;AAAA,QAC9D,WAAW,CAACp3C,GAAMxN,GAAM4kD,GAAM40B,MAAYiuB,GAAgB7qF,GAAQpP,GAAMxN,GAAM4kD,GAAM40B,CAAO;AAAA,QAC3F,UAAU,CAAAx5E,MAAQ0nG,GAAe9qF,GAAQ5c,CAAI;AAAA,QAC7C,eAAe,CAACkwC,GAASlvC,GAAUw4E,GAAS50B,MAASmjD,GAAcnrF,GAAQkgG,GAAmB5sE,GAASlvC,GAAUw4E,GAAS50B,CAAI;AAAA,QAC9H,YAAYtpD,GAAM4gH,IAAYt/F,CAAM;AAAA,MAC5C;AAAA,IACA,GAEUmgG,KAAsB,CAAA3sE,MAAO;AACjC,cAAQA,EAAI,YAAa,GAAA;AAAA,QACzB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACR;AAAA,IACP,GACU4sE,KAAiB,CAACpgG,GAAQ8mF,GAAaF,MAAU;AACrD,YAAMyZ,IAAwBr+E,GAAK,EAAK,GAClCs+E,IAAwB,CAAApmI,MAAK;AACjC,QAAA2sH,GAAUC,GAAa,IAAOF,CAAK,GACnCE,EAAY,IAAI,IAAI5sH,CAAC;AAAA,MAC7B;AACM,MAAA8lC,EAAO,GAAG,QAAQ,MAAM;AACtB,QAAA8mF,EAAY,IAAG;AAAA,MACvB,CAAO,GACD9mF,EAAO,GAAG,qBAAqB,CAAA9lC,MAAK;AAClC,cAAMs5D,IAAMt5D,EAAE;AACd,QAAKimI,GAAoB3sE,CAAG,MAC1BwzD,GAAUF,GAAaF,CAAK,GAC5BE,EAAY,aAAY;AAAA,MAElC,CAAO,GACD9mF,EAAO,GAAG,eAAe,CAAA9lC,MAAK;AAC5B,cAAMs5D,IAAMt5D,EAAE;AACd,QAAKimI,GAAoB3sE,CAAG,KAC1B8sE,EAAsBpmI,CAAC;AAAA,MAEjC,CAAO,GACD8lC,EAAO,GAAG,yBAAyB,MAAM;AACvC,QAAA8mF,EAAY,aAAY;AAAA,MAChC,CAAO,GACD9mF,EAAO,GAAG,kCAAkCsgG,CAAqB,GACjEtgG,EAAO,GAAG,WAAWsgG,CAAqB,GAC1CtgG,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,cAAM4lG,IAAU5lG,EAAE;AAClB,YAAIA,EAAE;AACJ;AAEF,cAAMqmI,IAASl1G,GAAI,GAAG,QAAO,KAAMnxB,EAAE,QAAQ;AAC7C,SAAI4lG,KAAW,MAAMA,KAAW,MAAMA,KAAW,MAAMA,KAAW,MAAMA,MAAY,MAAM5lG,EAAE,WAAWqmI,OACrGD,KACAtgG,EAAO,YAAW,KAEhB8/D,MAAY,MAAMA,MAAY,MAChC9/D,EAAO,YAAW,GAEhBqgG,EAAsB,IAAG,KAAMvZ,EAAY,UAAU,CAACJ,GAAOT,GAAiBjmF,CAAM,GAAG8mF,EAAY,KAAK,CAAC,CAAC,MACvG9mF,EAAO,aACVA,EAAO,SAAS,EAAI,GAEtBA,EAAO,SAAS,YAAY,GAC5BqgG,EAAsB,IAAI,EAAK,GAC/BrgG,EAAO,YAAW;AAAA,MAE5B,CAAO,GACDA,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,cAAM4lG,IAAU5lG,EAAE;AAClB,YAAIA,EAAE;AACJ;AAEF,YAAI4lG,KAAW,MAAMA,KAAW,MAAMA,KAAW,MAAMA,KAAW,MAAMA,MAAY,IAAI;AACtF,UAAIgnB,EAAY,UACdwZ,EAAsBpmI,CAAC;AAEzB;AAAA,QACD;AACD,cAAMsmI,IAAStmI,EAAE,WAAW,CAACA,EAAE,UAAUA,EAAE;AAC3C,aAAK4lG,IAAU,MAAMA,IAAU,OAAOA,MAAY,OAAOA,MAAY,MAAM,CAACgnB,EAAY,UAAU,CAAC0Z,GAAQ;AACzG,UAAA1Z,EAAY,aAAY,GACxBD,GAAUC,GAAa,IAAMF,CAAK,GAClCE,EAAY,IAAI,IAAI5sH,CAAC,GACrBmmI,EAAsB,IAAI,EAAI;AAC9B;AAAA,QACD;AAED,SADkCh1G,GAAI,GAAG,QAAO,IAAKnxB,EAAE,UAAUA,EAAE,WAAW,CAACA,EAAE,WAE/E4sH,EAAY,aAAY;AAAA,MAElC,CAAO,GACD9mF,EAAO,GAAG,aAAa,CAAA9lC,MAAK;AAC1B,QAAI4sH,EAAY,UACdwZ,EAAsBpmI,CAAC;AAAA,MAEjC,CAAO;AACD,YAAMumI,IAA0B,CAAAtsG,MAASA,EAAM,cAAc,yBACvDusG,IAAuB,CAAAvsG,MAASA,EAAM,cAAc,gBAAgBA,EAAM,SAAS,MACnFwsG,IAA0B,CAAAxsG,MAASA,EAAM,cAAc,qBAAqBA,EAAM,cAAc;AACtG,MAAA6L,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,QAAIA,EAAE,cAAcumI,EAAwBvmI,CAAC,KAAKwmI,EAAqBxmI,CAAC,KAAKymI,EAAwBzmI,CAAC,MACpGomI,EAAsBpmI,CAAC;AAAA,MAEjC,CAAO,GACD8lC,EAAO,GAAG,gCAAgC,CAAA9lC,MAAK;AAC7C,QAAKA,EAAE,wBACL8lC,EAAO,YAAW;AAAA,MAE5B,CAAO;AAAA,IACP,GACU4gG,KAAuB,CAAA5gG,MAAU;AACrC,MAAAA,EAAO,YAAY,UAAU,IAAI,MAAM,GACvCA,EAAO,YAAY,uBAAuB,IAAI,MAAM;AAAA,IAC1D,GAEU6gG,KAAc,CAAA7gG,MAAU;AAC5B,YAAMmnF,IAAiBniE,MACjB4hE,IAAQ5kE,GAAK,CAAC,GACdtpC,IAAQspC,GAAK,CAAC,GACd8kE,IAAc;AAAA,QAClB,MAAM,CAAE;AAAA,QACR,QAAQ;AAAA,QACR,cAAc,MAAM;AAClB,UAAAkD,GAAahqF,GAAQ4mF,GAAOO,CAAc;AAAA,QAC3C;AAAA,QACD,KAAK,CAAChB,GAAOhyF,MACJ81F,GAAajqF,GAAQ8mF,GAAapuG,GAAOkuG,GAAOO,GAAgBhB,GAAOhyF,CAAK;AAAA,QAErF,gBAAgB,MAAM;AACpB,UAAA6L,EAAO,SAAS,EAAI;AACpB,gBAAMmmF,IAAQF,GAAiBjmF,CAAM;AACrC,UAAAmmF,EAAM,WAAW/0D,GAAgBpxB,EAAO,SAAS,GACjDA,EAAO,SAAS,UAAU;AAAA,YACxB,OAAAmmF;AAAA,YACA,WAAWrkG,GAAMglG,EAAY,MAAMpuG,EAAM,IAAG,CAAE,EAAE,eAAgB;AAAA,UAC5E,CAAW;AAAA,QACF;AAAA,QACD,MAAM,MACGwxG,GAAKlqF,GAAQ8mF,GAAaF,GAAOluG,CAAK;AAAA,QAE/C,MAAM,MACGyxG,GAAKnqF,GAAQtnB,GAAOouG,EAAY,IAAI;AAAA,QAE7C,OAAO,MAAM;AACX,UAAAsD,GAAMpqF,GAAQ8mF,GAAapuG,CAAK;AAAA,QACjC;AAAA,QACD,OAAO,MAAM;AACX,UAAA2xG,GAAMrqF,GAAQ8mF,CAAW;AAAA,QAC1B;AAAA,QACD,SAAS,MACAwD,GAAQtqF,GAAQ8mF,GAAapuG,CAAK;AAAA,QAE3C,SAAS,MACA6xG,GAAQvqF,GAAQ8mF,GAAapuG,CAAK;AAAA,QAE3C,UAAU,CAAA0L,MACDomG,GAASxqF,GAAQ8mF,GAAaF,GAAOxiG,CAAQ;AAAA,QAEtD,QAAQ,CAAAA,MAAY;AAClB,UAAAqmG,GAAOzqF,GAAQ4mF,GAAOxiG,CAAQ;AAAA,QAC/B;AAAA,QACD,OAAO,CAACwjG,GAAWC,MAAc;AAC/B,UAAA6C,GAAM1qF,GAAQ8mF,GAAapuG,GAAOkvG,GAAWC,CAAS;AAAA,QACvD;AAAA,MACT;AACM,aAAK0B,GAAMvpF,CAAM,KACfogG,GAAepgG,GAAQ8mF,GAAaF,CAAK,GAE3Cga,GAAqB5gG,CAAM,GACpB8mF;AAAA,IACb,GAEUga,KAAoB;AAAA,MACxB;AAAA,MACA;AAAA,MACA9wD,GAAG;AAAA,MACHA,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAA,GAAG;AAAA,MACHA,GAAG;AAAA,MACHA,GAAG;AAAA,MACHA,GAAG;AAAA,IACT,EAAM,OAAO3kD,GAAI,QAAQ,UAAW,IAAG,CAAC,GAAG,IAAI,CAAA,CAAE,GACvC01G,KAAkB,wBAClBC,KAAkB,OAAK,EAAE,SAAS,aAAa,EAAE,SAAS,SAC1DC,KAAgB,OAAK;AACzB,YAAMnhC,IAAU,EAAE;AAClB,aAAOA,MAAY9vB,GAAG,aAAa8vB,MAAY9vB,GAAG;AAAA,IACxD,GACUkxD,KAA2B,OAAK;AACpC,UAAIF,GAAgB,CAAC,GAAG;AACtB,cAAMlhC,IAAU,EAAE;AAClB,eAAO,CAACmhC,GAAc,CAAC,MAAMjxD,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU8vB,KAAW,OAAOA,KAAW,OAAO3/E,EAAW2gH,IAAmBhhC,CAAO;AAAA,MAClJ;AACQ,eAAO;AAAA,IAEf,GACUqhC,KAAwB,OAAKH,GAAgB,CAAC,KAAK,EAAEC,GAAc,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,YAAY,MAC7GG,KAAkB,CAACxyG,GAAK8Y,GAASg8D,MAAoB;AACzD,UAAIv/D,GAAUpT,EAAa,QAAQ2W,CAAO,GAAG,EAAK,GAAG;AACnD,cAAMR,IAAeQ,EAAQ;AAC7B,eAAKR,IAEMtY,EAAI,SAAS8Y,EAAQ,mBAAmB,cAAc,KAAK9Y,EAAI,SAAS8Y,EAAQ,mBAAmB,eAAe,IACpH,KAEAg8D,MAAoBx8D,EAAa,SAAS,YAAW,IAJrD;AAAA,MAMjB;AACQ,eAAO;AAAA,IAEf,GACUm6F,KAAU,CAAArhG,MAAU;AACxB,UAAIp5B;AACJ,YAAMgoB,IAAMoR,EAAO,KACbk+E,IAAY1oD,GAAmBx1B,CAAM,GACrCshG,KAAe16H,IAAKywD,GAAer3B,CAAM,OAAO,QAAQp5B,MAAO,SAASA,IAAK,IAC7E26H,IAAoB,CAACrnI,GAAG+nD,MAAY;AACxC,YAAIi/E,GAAyBhnI,CAAC;AAC5B;AAEF,cAAMk/B,IAAO4G,EAAO,WACdwhG,IAAkBL,GAAsBjnI,CAAC,IAAI,KAAQknI,GAAgBxyG,GAAKwK,GAAM8kF,CAAS;AAE/F,SAD2BtvF,EAAI,UAAUwK,GAAM2nG,EAAe,MAAM,OACzCS,KAAmBv/E,OAC5CrzB,EAAI,UAAUwK,GAAM2nG,IAAiBS,IAAkBF,IAAc,IAAI,GACzE1yG,EAAI,UAAUwK,GAAM,oBAAoBooG,IAAkBF,IAAc,IAAI,GAC5EvyD,GAAsB/uC,GAAQwhG,CAAe,GAC7CxhG,EAAO,GAAGwhG,IAAkB,YAAY,SAASD,CAAiB,GAClEvhG,EAAO,IAAIwhG,IAAkB,UAAU,WAAWD,CAAiB;AAAA,MAE7E;AACM,MAAI94G,GAAW64G,CAAW,KACxBthG,EAAO,GAAG,QAAQ,CAAA9lC,MAAK;AACrB,QAAAqnI,EAAkBrnI,GAAG,EAAI,GACzB8lC,EAAO,GAAG,iCAAiCuhG,CAAiB,GAC5DvhG,EAAO,GAAG,SAAS,CAAA9lC,MAAKijF,GAAM,iBAAiBn9C,GAAQ,MAAMuhG,EAAkBrnI,CAAC,CAAC,CAAC;AAAA,MAC5F,CAAS;AAAA,IAET,GAEUunI,KAAgB,CAACn7F,GAAOo7B,OAAc;AAAA,MAC1C,OAAAp7B;AAAA,MACA,UAAAo7B;AAAA,IACN,IACUggE,KAAgB,CAACz/G,GAAMlT,OAAQ;AAAA,MACnC,MAAAkT;AAAA,MACA,IAAAlT;AAAA,IACN,IACU4yH,KAAmB,CAAC/mG,GAAUkG,MAAQ;AAC1C,YAAM4G,IAAU3W,EAAa,QAAQ6J,CAAQ,GACvCgnG,IAAe7wG,EAAa,QAAQ+P,EAAI,UAAW,CAAA;AACzD,aAAO0sD,GAAiB9lD,GAASk6F,CAAY,EAAE,IAAI,CAAAt7F,MAASm7F,GAAcn7F,GAAOxF,CAAG,CAAC;AAAA,IAC3F,GACU+gG,KAAoB,CAAAH,MAAiB,CAAC/9G,GAAG+9G,EAAc,KAAK,OAAOA,EAAc,GAAG,KAAK,GACzFI,KAAiB,CAAC5qH,GAAMkW,MAGrBuH,GAAUvH,GADF,CAAAwD,MAAQmO,GAAcnO,CAAI,KAAKmM,GAAwBnM,EAAK,GAAG,GAD/D,CAAAA,MAAQjN,GAAGiN,GAAM1Z,CAAI,CAEE,EAAE,OAAOoX,EAAW,EAAE,MAAMpX,CAAI,GAElE6qH,KAAc,CAACnnG,GAAU8mG,MAAkB;AAC/C,YAAMxqH,IAAO6Z,EAAa,QAAQ6J,CAAQ;AAC1C,aAAOjX,GAAGm+G,GAAe5qH,GAAMwqH,EAAc,KAAK,KAAK,GAAGI,GAAe5qH,GAAMwqH,EAAc,GAAG,KAAK,CAAC;AAAA,IAC5G,GACUM,KAAe,CAAAN,MAAiB1kG,GAAyB0kG,EAAc,KAAK,MAAM,GAAG,MAAM,MAAS1kG,GAAyB0kG,EAAc,GAAG,MAAM,GAAG,MAAM,IAC7JO,KAAiB,CAAAP,MAAiB;AACtC,YAAMQ,IAAe,CAAA57F,MAAS3H,GAAc2H,CAAK,KAAKQ,GAAaR,EAAM,GAAG;AAC5E,aAAO47F,EAAaR,EAAc,KAAK,KAAK,KAAKQ,EAAaR,EAAc,GAAG,KAAK;AAAA,IAC1F,GACUS,KAAa,CAACvnG,GAAUs1B,GAASuxE,MACjC5kG,GAAO4kG,EAAc,SAAS,QAAO,CAAE,KAAK,CAACt9F,GAAUs9F,EAAc,KAAK,IACrEp/D,GAAW,IAAOo/D,EAAc,MAAM,GAAG,EAAE,KAAK,CAAAW,MACjDA,EAAoB,QAAQX,EAAc,QAAQ,IAC7C9/D,GAAazR,GAASt1B,GAAUwnG,CAAmB,EAAE,KAAK,CAAArzH,MAAM4yH,GAAiB/mG,GAAU7rB,CAAE,CAAC,IAE9FsQ,EAAS,KAAKoiH,CAAa,CAErC,EAAE,MAAMA,CAAa,IAEfA,GAGLY,KAAgB,CAACznG,GAAUs1B,GAAS95C,MAAQ;AAChD,YAAMksH,IAAeX,GAAiB/mG,GAAU4yB,GAAc,eAAep3C,CAAG,CAAC,GAC3EmsH,IAAaD,EAAa,KAAK,CAAAE,MAAY7gE,GAAazR,GAASt1B,GAAU4nG,EAAS,QAAQ,EAAE,KAAK,CAAAzzH,MAAM4yH,GAAiB/mG,GAAU7rB,CAAE,EAAE,IAAI,CAAAyzH,MAAYL,GAAWvnG,GAAUs1B,GAASsyE,CAAQ,CAAC,CAAC,CAAC;AACvM,aAAO71G,GAAM21G,GAAcC,GAAYb,EAAa,EAAE,OAAO,CAAAA,MAAiBG,GAAkBH,CAAa,KAAKK,GAAYnnG,GAAU8mG,CAAa,KAAKM,GAAaN,CAAa,KAAKO,GAAeP,CAAa,CAAC;AAAA,IAC5N,GACUe,KAAS,CAAC7nG,GAAUs1B,GAAS95C,MAAQA,EAAI,YAAYisH,GAAcznG,GAAUs1B,GAAS95C,CAAG,IAAIiJ,EAAS,KAAI,GAE1GqjH,KAAgC,CAACp8F,GAAO5G,MAAW;AACvD,YAAMpI,IAAWxE,GAAWwT,CAAK;AACjC,aAAOplB,GAAYoW,GAAU,CAAAlD,MAAMsL,EAAO,QAAQtc,GAAKgR,CAAE,CAAC,CAAC,EAAE,KAAK7V,GAAS+Y,CAAQ,GAAG,CAAA5e,MAAS4e,EAAS,MAAM,GAAG5e,CAAK,CAAC;AAAA,IAC7H,GACUiqH,KAAkB,CAACr8F,GAAO5G,MAAW;AACzC,YAAMpI,IAAWorG,GAA8Bp8F,GAAO5G,CAAM;AAC5D,aAAApf,EAAOgX,GAAUF,EAAQ,GAClBE;AAAA,IACb,GACUsrG,KAAkB,CAAChoG,GAAU0L,MAAU;AAC3C,YAAMO,IAAU4/C,GAAengD,GAAO1L,CAAQ;AAC9C,aAAO3Z,GAAO4lB,EAAQ,QAAO,GAAI,CAAA5Y,MAAWkW,GAAUlW,CAAO,CAAC,EAAE,KAAKmJ,EAAQ;AAAA,IACnF,GACUyrG,KAAgB,CAAAzuG,MAAMzT,GAASsS,GAAamB,CAAE,GAAG,CAAAA,MAAM,CAAC+P,GAAU/P,CAAE,CAAC,EAAE,WAAW,GAClF0uG,KAAmB,CAACloG,GAAUmsD,GAAWg8C,GAASrjG,GAAQsjG,MAAmB;AACjF,UAAI7+F,GAAU4+F,CAAO;AACnB,eAAAvjG,GAAkBujG,CAAO,GAClBvgE,GAAgBugE,EAAQ,GAAG;AAEpC,MAAIF,GAAcG,CAAc,KAAK7+F,GAAU4iD,CAAS,KACtDtwD,GAASusG,GAAgBjyG,EAAa,QAAQ,IAAI,CAAC;AAErD,YAAM2wC,IAAWa,GAAawgE,EAAQ,KAAKv1E,GAAc,OAAOw1E,EAAe,GAAG,CAAC;AACnF,aAAA1iH,EAAOqiH,GAAgB57C,GAAWrnD,CAAM,GAAG,CAAA5K,MAAS;AAClD,QAAA2B,GAASusG,GAAgBluG,CAAK;AAAA,MACtC,CAAO,GACD8tG,GAAgBhoG,GAAUmsD,CAAS,GAC5BrlB;AAAA,IACb,GACUpuB,KAAW,CAAC5T,GAAQ9O,MAAS8O,EAAO,SAAStc,GAAKwN,CAAI,CAAC,GACvDqyG,KAAqB,CAACroG,GAAUmsD,GAAWg8C,GAASrjG,MAAW;AACnE,UAAIyE,GAAU4+F,CAAO,GAAG;AACtB,YAAI5+F,GAAU4iD,CAAS,GAAG;AAKxB,gBAAMm8C,IAA0BtiH,IAJI,CAAAwT,MAAM;AACxC,kBAAM+uG,IAAS,CAACvyG,GAAMiC,MAAaO,GAAWxC,CAAI,EAAE,KAAK,MAAMiC,GAAU,CAAAiC,MAASwe,GAAS5T,GAAQ5K,CAAK,IAAIquG,EAAOruG,GAAOjC,EAAS,OAAOw1B,GAAUvzB,CAAK,CAAC,CAAC,IAAIjC,CAAQ;AACvK,mBAAOswG,EAAO/uG,GAAI,CAAA,CAAE;AAAA,UAChC,GAC4E2uG,CAAO,GAAG,CAAC90G,GAASk4B,OACpFrvB,GAAO7I,GAASk4B,CAAU,GACnBA,IACN5mB,GAAiB,CAAA;AACpB,UAAArI,GAAM6vD,CAAS,GACfnwD,GAASmwD,GAAWm8C,CAAuB;AAAA,QAC5C;AACD,eAAA9rG,GAAS2rG,CAAO,GACTvgE,GAAgBukB,EAAU,GAAG;AAAA,MACrC;AACD,YAAMrlB,IAAWe,GAAesgE,EAAQ,GAAG;AAC3C,aAAAziH,EAAOqiH,GAAgB57C,GAAWrnD,CAAM,GAAG,CAAA5K,MAAS;AAClD,QAAA8B,GAASmsG,GAASjuG,CAAK;AAAA,MAC/B,CAAO,GACD8tG,GAAgBhoG,GAAUmsD,CAAS,GAC5BrlB;AAAA,IACb,GACU0hE,KAAqB,CAACL,GAASz8F,MAAU;AAC7C,YAAM+8F,IAAmB58C,GAAengD,GAAOy8F,CAAO;AACtD,aAAO1jH,EAAS,KAAKgkH,EAAiBA,EAAiB,SAAS,CAAC,CAAC;AAAA,IACxE,GACUC,KAAoB,CAACv8C,GAAWg8C,MAAYnxG,GAASmxG,GAASh8C,CAAS,IAAIq8C,GAAmBL,GAASh8C,CAAS,IAAI1nE,EAAS,KAAI,GACjIkkH,KAAS,CAAC1iD,GAAOv6C,MAAU;AAC/B,MAAA+7B,GAAWwe,GAAOv6C,EAAM,GAAG,EAAE,KAAK,CAAAo7B,MAAYriD,EAAS,KAAKqiD,EAAS,QAAS,CAAA,CAAC,EAAE,IAAI3wC,EAAa,OAAO,EAAE,OAAO2N,EAAM,EAAE,KAAKtH,EAAQ;AAAA,IAC7I,GACUosG,KAAiB,CAAC5oG,GAAUmsD,GAAWg8C,GAASrjG,OACpD6jG,GAAO,IAAMx8C,CAAS,GACtBw8C,GAAO,IAAOR,CAAO,GACdO,GAAkBv8C,GAAWg8C,CAAO,EAAE,KAAKrkH,GAAMukH,IAAoBroG,GAAUmsD,GAAWg8C,GAASrjG,CAAM,GAAGhhB,GAAMokH,IAAkBloG,GAAUmsD,GAAWg8C,GAASrjG,CAAM,CAAC,IAE5K+jG,KAAc,CAAC7oG,GAAUs1B,GAASy8B,GAAQC,GAAQltD,MAAWwwB,IAAUszE,GAAe5oG,GAAUgyD,GAAQD,GAAQjtD,CAAM,IAAI8jG,GAAe5oG,GAAU+xD,GAAQC,GAAQltD,CAAM,GAEzKgkG,KAAoB,CAAC1jG,GAAQkwB,MAAY;AAC7C,YAAMt1B,IAAW7J,EAAa,QAAQiP,EAAO,QAAS,CAAA;AAMtD,aALiByiG,GAAO7nG,EAAS,KAAKs1B,GAASlwB,EAAO,UAAU,OAAQ,CAAA,EAAE,IAAI,CAAA0hG,MAAiB,MAAM;AACnG,QAAA+B,GAAY7oG,GAAUs1B,GAASwxE,EAAc,KAAK,OAAOA,EAAc,GAAG,OAAO1hG,EAAO,MAAM,EAAE,KAAK,CAAAc,MAAO;AAC1G,UAAAd,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA;AAAA,QAC/C,CAAS;AAAA,MACT,CAAO;AAAA,IAEP,GAEU6iG,KAAyB,CAAC/oG,GAAUq1B,GAAWvwB,MAAW;AAC9D,YAAMtpB,IAAM65C,EAAU;AACtB,aAAOtjC,GAAM6gE,GAAiB5yD,GAAU7J,EAAa,QAAQ3a,EAAI,cAAc,CAAC,GAAGo3E,GAAiB5yD,GAAU7J,EAAa,QAAQ3a,EAAI,YAAY,CAAC,GAAG,CAACu2E,GAAQC,MACzJjpE,GAAGgpE,GAAQC,CAAM,IAQbvtE,EAAS,SAPTA,EAAS,KAAK,MAAM;AACzB,QAAAjJ,EAAI,eAAc,GAClBqtH,GAAY7oG,GAAU,IAAM+xD,GAAQC,GAAQltD,CAAM,EAAE,KAAK,CAAAoB,MAAO;AAC9D,UAAAmvB,EAAU,OAAOnvB,EAAI,QAAS,CAAA;AAAA,QAC5C,CAAa;AAAA,MACb,CAAW,CAIJ,EAAE,MAAMzhB,EAAS,KAAM,CAAA;AAAA,IAC9B,GACUukH,KAAmB,CAAC1sH,GAAMioB,MAAY;AAC1C,YAAMvO,IAAOG,EAAa,QAAQoO,CAAO,GACnC5M,IAAS7T,GAAMiF,IAAIzM,CAAI;AAC7B,aAAOwd,GAAW9D,GAAMmO,IAAexM,CAAM,EAAE,OAAM;AAAA,IAC3D,GACUsxG,KAAqB,CAAC3sH,GAAMd,MAAQwtH,GAAiB1sH,GAAMd,EAAI,cAAc,KAAKwtH,GAAiB1sH,GAAMd,EAAI,YAAY,GACzH0tH,KAAuB,CAAC5sH,GAAMd,MAAQ;AAC1C,YAAM2tH,IAAaxhE,GAAarrD,EAAK,KAAKs2C,GAAc,eAAep3C,CAAG,CAAC,EAAE,UACvE4tH,IAAS1hE,GAAaprD,EAAK,KAAKs2C,GAAc,aAAap3C,CAAG,CAAC,EAAE;AACvE,aAAO,CAACytH,GAAmB3sH,GAAMd,CAAG,KAAK2tH,KAAcC;AAAA,IAC7D,GACUC,KAAc,CAAAjkG,MACX3gB,EAAS,KAAK,MAAM;AACzB,MAAA2gB,EAAO,WAAW,EAAE,GACpBA,EAAO,UAAU;IACzB,CAAO,GAEGkkG,KAAgB,CAAAlkG,MAAU;AAC9B,YAAMpF,IAAW7J,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAChD5pB,IAAM4pB,EAAO,UAAU,OAAM;AACnC,aAAO8jG,GAAqBlpG,GAAUxkB,CAAG,IAAI6tH,GAAYjkG,CAAM,IAAI2jG,GAAuB/oG,GAAUoF,EAAO,WAAWA,EAAO,MAAM;AAAA,IACzI,GACUmkG,KAAoB,CAACnkG,GAAQokG,MAAapkG,EAAO,UAAU,YAAa,IAAG3gB,EAAS,KAAI,IAAK6kH,GAAclkG,CAAM,GAEjHqkG,KAAY,CAACz7E,GAAW5oB,GAAQpP,GAAM4P,GAAQ8jG,MAAmBjlH,EAAS,KAAK2gB,EAAO,oBAAoB,UAAU4oB,GAAWh4B,GAAM4P,GAAQ8jG,CAAc,CAAC,GAC5JC,KAAe,CAAA3zG,MAAQ;AAC3B,YAAMxa,IAAMwa,EAAK,cAAc,YAAW;AAC1C,aAAAxa,EAAI,WAAWwa,CAAI,GACZxa;AAAA,IACb,GACUouH,KAAa,CAACxkG,GAAQpP,MAChBoP,EAAO,SAAS,wBAAwB,EAAE,QAAQpP,EAAI,CAAE,EAC5D,uBACGvR,EAAS,SAEXA,EAAS,KAAKklH,GAAa3zG,CAAI,CAAC,GAEnC6zG,KAAqB,CAACzkG,GAAQwB,GAAO8iG,MAAmB;AAC5D,YAAMtkE,IAAkBN,GAAe,GAAG1/B,EAAO,QAAO,GAAIwB,CAAK,GAC3D4rB,IAAgBI,GAAc,eAAewS,CAAe,GAC5D0kE,IAAoBt3E,EAAc;AACxC,UAAIoQ,GAAwBknE,CAAiB;AAC3C,eAAOL,GAAU,GAAGrkG,GAAQ0kG,GAAmB,CAACt3E,EAAc,WAAW,EAAK;AAEhF,YAAMu3E,IAA0Bv3E,EAAc,QAAQ,EAAI;AAC1D,UAAIoQ,GAAwBmnE,CAAuB;AACjD,eAAON,GAAU,GAAGrkG,GAAQ2kG,GAAyB,IAAO,EAAK;AAEnE,YAAMC,IAASvwC,GAAyBr0D,EAAO,IAAI,WAAWotB,EAAc,QAAO,CAAE;AACrF,aAAIoQ,GAAwBonE,CAAM,IACzBP,GAAU,GAAGrkG,GAAQ4kG,GAAQ,IAAON,CAAc,IAEpDjlH,EAAS;IACtB,GACUwlH,KAAmB,CAAC7kG,GAAQwB,GAAO8iG,MAAmB9iG,EAAM,YAAYijG,GAAmBzkG,GAAQwB,GAAO8iG,CAAc,EAAE,MAAM9iG,CAAK,IAAIA,GAEzIsjG,KAAmB,CAAAhkG,MAAOulD,GAA6BvlD,CAAG,KAAKmlD,GAAcnlD,CAAG,GAChFikG,KAAkB,CAAAjkG,MAAOwlD,GAA4BxlD,CAAG,KAAKolD,GAAaplD,CAAG,GAC7EkkG,KAAoB,CAACp2G,GAAKgC,MAAS;AACvC,MAAI2L,GAAS3L,CAAI,KAAKA,EAAK,KAAK,WAAW,KACzChC,EAAI,OAAOgC,CAAI;AAAA,IAEvB,GACUq0G,KAA4B,CAACjlG,GAAQwB,GAAO5Q,GAAMg4B,GAAWsH,GAASg1E,MAAsB;AAChG,MAAAb,GAAUz7E,GAAW5oB,GAAQklG,EAAkB,QAAQ,CAACh1E,CAAO,GAAGA,GAAS,EAAI,EAAE,KAAK,CAAAi1E,MAAc;AAClG,YAAI3jG,EAAM,WAAW;AACnB,gBAAM4jG,IAAc5jG,EAAM;AAC1B,UAAI0uB,IACFk1E,EAAY,OAAOD,EAAW,gBAAgBA,EAAW,WAAW,IAEpEC,EAAY,SAASD,EAAW,cAAcA,EAAW,SAAS,GAEpEC,EAAY,eAAc;AAAA,QACpC;AACU,UAAA5jG,EAAM,eAAc;AAEtB,QAAAxB,EAAO,UAAU,OAAOmlG,CAAU;AAAA,MAC1C,CAAO,GACDH,GAAkBhlG,EAAO,KAAKpP,CAAI;AAAA,IACxC,GACUy0G,KAAqB,CAACrlG,GAAQkwB,MAAY;AAC9C,YAAM1uB,IAAQxB,EAAO,UAAU,OAAM;AACrC,UAAI,CAACzD,GAASiF,EAAM,uBAAuB;AACzC,eAAOniB,EAAS;AAElB,YAAMupC,IAAYsH,IAAUqQ,GAAW,WAAWA,GAAW,WACvD+4B,IAAc93B,GAAYxhC,EAAO,QAAS,CAAA,GAC1CslG,IAAe5mH,GAAMyhD,IAAwBjQ,IAAUopC,EAAY,OAAOA,EAAY,IAAI,GAC1FisC,IAAar1E,IAAU40E,KAAmBC,IAC1C33E,IAAgB2S,GAA2BnX,GAAW5oB,EAAO,QAAO,GAAIwB,CAAK,GAC7EgkG,IAAoBF,EAAal4E,CAAa,GAC9Cq4E,IAA8BD,KAAoB14C,GAAkB58B,GAASs1E,CAAiB;AACpG,UAAI,CAACC,KAA+B,CAACplE,GAAsBjT,GAAeq4E,CAA2B;AACnG,eAAOpmH,EAAS;AACX,UAAIkmH,EAAWE,CAA2B;AAC/C,eAAOpmH,EAAS,KAAK,MAAM4lH,GAA0BjlG,GAAQwB,GAAO4rB,EAAc,QAAS,GAAExE,GAAWsH,GAASu1E,CAA2B,CAAC;AAE/I,YAAMP,IAAoBI,EAAaG,CAA2B;AAClE,aAAIP,KAAqBK,EAAWL,CAAiB,KAC/C7kE,GAAsBolE,GAA6BP,CAAiB,IAC/D7lH,EAAS,KAAK,MAAM4lH,GAA0BjlG,GAAQwB,GAAO4rB,EAAc,QAAS,GAAExE,GAAWsH,GAASg1E,CAAiB,CAAC,IAGhI7lH,EAAS;IACtB,GACUqmH,KAAoB,CAAC1lG,GAAQkwB,MAAYm1E,GAAmBrlG,GAAQkwB,CAAO,GAE3Ey1E,KAAqB,CAAC3lG,GAAQ4lG,MAAY;AAC9C,YAAM1uH,IAAO8oB,EAAO;AACpB,aAAO4lG,IAAUpjE,GAAgBtrD,CAAI,EAAE,OAAOmvE,EAA4B,IAAI5jB,GAAevrD,CAAI,EAAE,OAAOovE,EAA2B;AAAA,IAC3I,GACUu/C,KAAsB,CAAA7lG,MAAU;AACpC,YAAM5pB,IAAM4pB,EAAO,UAAU,OAAM;AACnC,aAAO,CAAC5pB,EAAI,cAAcuvH,GAAmB3lG,GAAQ,EAAI,EAAE,OAAO,CAAAc,MAAOA,EAAI,QAAQ0sB,GAAc,eAAep3C,CAAG,CAAC,CAAC,KAAKuvH,GAAmB3lG,GAAQ,EAAK,EAAE,OAAO,CAAAc,MAAOA,EAAI,QAAQ0sB,GAAc,aAAap3C,CAAG,CAAC,CAAC;AAAA,IAC9N,GAEU0vH,KAAoB,CAAAl1G,MAAQhT,GAAcgT,CAAI,MAAMmO,GAAchO,EAAa,QAAQH,CAAI,CAAC,KAAKiO,GAAa9N,EAAa,QAAQH,CAAI,CAAC,IACxIm1G,KAAe9zE,GAAI,SAAS;AAAA,MAChC,EAAE,QAAQ,CAAC,SAAS,EAAG;AAAA,MACvB,EAAE,eAAe,CAAC,SAAS,EAAG;AAAA,MAC9B,EAAE,gBAAgB,CAAC,UAAU,EAAG;AAAA,IACtC,CAAK,GACK+zE,KAAgC,CAAC91E,GAASjuC,MAAS;AACvD,YAAMid,IAAMjd,EAAK,QAAQ,CAACiuC,CAAO,GAC3B+1E,IAAgB/1E,IAAU,UAAU;AAC1C,aAAO/0B,GAAY+D,CAAG,KAAKA,EAAI,aAAa,gBAAgB,MAAM+mG;AAAA,IACxE,GACUC,KAAiC,CAAChvH,GAAMg5C,GAASjuC,GAAMlT,GAAI2wB,MAAW;AAC1E,YAAM4gC,IAAc,CAAAphC,MAAOQ,EAAO,SAASR,EAAI,SAAS,YAAa,CAAA,KAAK,CAAC4/B,GAAc78C,GAAMlT,GAAImI,CAAI;AACvG,aAAO4oD,GAAkB,CAAC5P,GAASjuC,CAAI,EAAE,KAAK,MAAM69C,GAAkB5P,GAASnhD,CAAE,EAAE,KAAKoQ,IAAOmhD,CAAW,GAAGA,CAAW;AAAA,IAC9H,GACU6lE,KAA8B,CAACjvH,GAAMg5C,GAASjuC,GAAMlT,MAAO;AAC/D,YAAMq3H,IAAWr3H,EAAG,QAAQ,CAACmhD,CAAO;AACpC,aAAOs9B,GAAiBz8D,EAAa,QAAQ7Z,CAAI,GAAG6Z,EAAa,QAAQ9O,EAAK,QAAO,CAAE,CAAC,EAAE,IAAI,CAAAokH,MAAYliG,GAAUkiG,CAAQ,IAAIN,GAAa,OAAOM,EAAS,GAAG,IAAIN,GAAa,cAAcK,CAAQ,CAAC,EAAE,QAAQ,MAAM/mH,EAAS,KAAK0mH,GAAa,cAAcK,CAAQ,CAAC,CAAC;AAAA,IACjR,GACUE,KAAkB,CAACpvH,GAAMg5C,GAASjuC,GAAMyd,MAAWiiC,GAAazR,GAASh5C,GAAM+K,CAAI,EAAE,KAAK,CAAAlT,MAC1F+2H,GAAkB/2H,EAAG,QAAO,CAAE,KAEvBm3H,GAA+BhvH,GAAMg5C,GAASjuC,GAAMlT,GAAI2wB,CAAM,IADhErgB,EAAS,SAGP6wC,KAAWlzB,GAAyBjuB,EAAG,QAAS,CAAA,KAEhD,CAACmhD,KAAWlzB,GAAyBjuB,EAAG,QAAQ,EAAI,CAAC,IADvDo3H,GAA4BjvH,GAAMg5C,GAASjuC,GAAMlT,CAAE,IAGjDmhD,KAAWo2B,GAA4BrkE,CAAI,KAE3C,CAACiuC,KAAWm2B,GAA6BpkE,CAAI,IAD/C5C,EAAS,KAAK0mH,GAAa,eAAeh3H,CAAE,CAAC,IAI7CsQ,EAAS,MAEnB,GACKknH,KAAgC,CAACr2E,GAAShxB,MAC1CvhB,GAAWuhB,CAAG,IACT7f,EAAS,SACP6wC,KAAWlzB,GAAyBkC,EAAI,WAAW,IACrD7f,EAAS,KAAK0mH,GAAa,cAAc7mG,EAAI,WAAW,CAAC,IACvD,CAACgxB,KAAWlzB,GAAyBkC,EAAI,eAAe,IAC1D7f,EAAS,KAAK0mH,GAAa,cAAc7mG,EAAI,eAAe,CAAC,IAE7D7f,EAAS,QAGdmnH,KAAyC,CAACtvH,GAAM+K,GAAMstE,MAAiBA,EAAa,KAAK,CAAArwD,MAAO7f,EAAS,KAAK0mH,GAAa,OAAO7mG,CAAG,CAAC,GAAG,CAAAA,MAAO7f,EAAS,KAAK0mH,GAAa,cAAc7mG,CAAG,CAAC,GAAG,CAAAnwB,MAChM+vD,GAAc78C,GAAMlT,GAAImI,CAAI,IACvBmI,EAAS,SAETA,EAAS,KAAK0mH,GAAa,eAAeh3H,CAAE,CAAC,CAEvD,GACK03H,KAA2B,CAACvvH,GAAMg5C,GAASjuC,GAAMyd,MACjDsmG,GAA8B91E,GAASjuC,CAAI,IACtCskH,GAA8Br2E,GAASjuC,EAAK,QAAQ,CAACiuC,CAAO,CAAC,EAAE,QAAQ,MAAMo2E,GAAgBpvH,GAAMg5C,GAASjuC,GAAMyd,CAAM,CAAC,IAEzH4mG,GAAgBpvH,GAAMg5C,GAASjuC,GAAMyd,CAAM,EAAE,KAAK,CAAA6vD,MAAgBi3C,GAAuCtvH,GAAM+K,GAAMstE,CAAY,CAAC,GAGvIm3C,KAAO,CAACxvH,GAAMg5C,GAAS95C,GAAKspB,MAAW;AAC3C,YAAMsgC,IAAkBN,GAAexP,IAAU,IAAI,IAAIh5C,GAAMd,CAAG,GAC5D6L,IAAOurC,GAAc,eAAewS,CAAe,GACnD18B,IAAcvS,EAAa,QAAQ7Z,CAAI;AAC7C,aAAI,CAACg5C,KAAWo2B,GAA4BrkE,CAAI,IACvC5C,EAAS,KAAK0mH,GAAa,OAAO9jH,EAAK,QAAQ,EAAI,CAAC,CAAC,IACnDiuC,KAAWm2B,GAA6BpkE,CAAI,IAC9C5C,EAAS,KAAK0mH,GAAa,OAAO9jH,EAAK,QAAS,CAAA,CAAC,IAC/C,CAACiuC,KAAWm2B,GAA6BpkE,CAAI,KAAKwlE,GAAUnkD,GAAarhB,GAAMyd,CAAM,IACvFgoD,GAAepkD,GAAarhB,GAAMyd,CAAM,EAAE,IAAI,CAAAviC,MAAM4oI,GAAa,OAAO5oI,EAAG,QAAO,CAAE,CAAC,IACnF+yD,KAAWo2B,GAA4BrkE,CAAI,KAAKulE,GAAalkD,GAAarhB,GAAMyd,CAAM,IACxFioD,GAAWrkD,GAAarhB,GAAMyd,CAAM,EAAE,IAAI,CAAAviC,MAAM4oI,GAAa,OAAO5oI,EAAG,QAAO,CAAE,CAAC,IAEjFspI,GAAyBvvH,GAAMg5C,GAASjuC,GAAMyd,CAAM;AAAA,IAEnE,GAEUinG,KAAkB,CAAC3mG,GAAQkwB,MAAY,CAAAjiC,OAC3C+R,EAAO,oBAAoB,iBAC3B+rD,GAAgB/rD,GAAQkwB,GAASn/B,EAAa,QAAQ9C,CAAO,CAAC,GACvD,KAEH24G,KAAgB,CAAC5mG,GAAQkwB,MAAY,CAAAjiC,MAAW;AACpD,YAAM6S,IAAMovB,IAAU1C,GAAc,OAAOv/B,CAAO,IAAIu/B,GAAc,MAAMv/B,CAAO;AACjF,aAAA+R,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA,GAC9B;AAAA,IACb,GACU+lG,KAAiB,CAAA7mG,MAAU,CAAAc,OAC/Bd,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA,GAC9B,KAEHgmG,KAAgB,CAAC9mG,GAAQpP,MAASvR,EAAS,KAAKg1E,GAAyBr0D,EAAO,WAAWpP,CAAI,CAAC,GAChGm2G,KAAuB,CAAC/mG,GAAQkwB,MAAY;AAChD,YAAMgX,IAAelnC,EAAO,UAAU,QAAO;AAC7C,aAAO8mG,GAAc9mG,GAAQknC,CAAY,EAAE,OAAOlqC,EAAwB,EAAE,KAAK,MAAM0pG,GAAK1mG,EAAO,QAAO,GAAIkwB,GAASlwB,EAAO,UAAU,OAAQ,GAAEA,EAAO,MAAM,EAAE,IAAI,CAAAuvD,MAAgB,MAAMA,EAAa,KAAKo3C,GAAgB3mG,GAAQkwB,CAAO,GAAG02E,GAAc5mG,GAAQkwB,CAAO,GAAG22E,GAAe7mG,CAAM,CAAC,CAAC,GAAG,MAAM3gB,EAAS,KAAKpB,EAAI,CAAC;AAAA,IACxU,GACU+oH,KAA2B,CAAA1jG,MAAe;AAC9C,MAAAhjB,EAAOka,GAAY8I,GAAa,0BAA0B,GAAGlM,EAAQ;AAAA,IAC3E,GACU6vG,KAAuB,CAACjnG,GAAQkwB,MAAY;AAChD,YAAMgX,IAAelnC,EAAO,UAAU,QAAO;AAC7C,aAAIhD,GAAyBkqC,CAAY,KAAK,CAACjqC,GAAciqC,CAAY,IAChD4/D,GAAc9mG,GAAQknC,EAAa,UAAU,EAAE,OAAOlqC,EAAwB,EAC/E,KAAK,MAAM3d,EAAS,KAAK,MAAM;AACnD,QAAA2nH,GAAyBj2G,EAAa,QAAQiP,EAAO,QAAO,CAAE,CAAC,GAC/D+rD,GAAgB/rD,GAAQkwB,GAASn/B,EAAa,QAAQiP,EAAO,UAAU,QAAS,CAAA,CAAC,GACjFytD,GAAcztD,CAAM;AAAA,MACrB,CAAA,GAAG,MAAM3gB,EAAS,KAAKpB,EAAI,CAAC,IAE3B4nH,GAAoB7lG,CAAM,IACrB3gB,EAAS,KAAK,MAAM;AACzB,QAAA4uE,GAAoBjuD,GAAQA,EAAO,UAAU,OAAM,GAAIjP,EAAa,QAAQiP,EAAO,QAAO,CAAE,CAAC;AAAA,MACvG,CAAS,IAEI3gB,EAAS;IACtB,GACU6nH,KAAmB,CAAAlnG,MAAU;AACjC,YAAMpR,IAAMoR,EAAO,KAAKiwB,IAAYjwB,EAAO,WACrC4kG,IAASvwC,GAAyBr0D,EAAO,QAAO,GAAIiwB,EAAU,QAAO,CAAE;AAC7E,UAAIlzB,GAAwB6nG,CAAM,KAAKh2G,EAAI,QAAQg2G,CAAM,KAAKh2G,EAAI,QAAQg2G,CAAM,GAAG;AACjF,cAAMznI,IAAKyxB,EAAI,OAAO,MAAM,EAAE,kBAAkB,IAAG,CAAE;AACrD,QAAAA,EAAI,QAAQg2G,GAAQ,EAAE,GACtBA,EAAO,YAAYznI,CAAE,GACrB8yD,EAAU,OAAOzC,GAAc,OAAOrwD,CAAE,EAAE,QAAO,CAAE;AAAA,MACpD;AACD,aAAO;AAAA,IACb,GACUgqI,KAAoB,CAACnnG,GAAQkwB,MAC7BlwB,EAAO,UAAU,gBACZ+mG,GAAqB/mG,GAAQkwB,CAAO,IAEpC+2E,GAAqBjnG,GAAQkwB,CAAO,GAIzCk3E,KAAgB,CAACpnG,GAAQkwB,MAAY;AACzC,YAAM09B,IAAUpgC,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AACtE,aAAO2hC,GAAazR,GAASlwB,EAAO,QAAS,GAAE4tD,CAAO,EAAE,OAAO,CAAA9sD,MAAOovB,IAAU61B,GAAmBjlD,CAAG,IAAIklD,GAAkBllD,CAAG,CAAC,EAAE,KAAK,CAAAA,MAAOm+B,GAA6B/O,IAAU,IAAI,IAAIpvB,CAAG,CAAC,EAAE,IAAI,CAAA5B,MAAO,MAAMc,EAAO,UAAU,OAAOd,CAAG,CAAC;AAAA,IACtP,GACUmoG,KAAoB,CAACrnG,GAAQkwB,MAAYlwB,EAAO,UAAU,gBAAgBonG,GAAcpnG,GAAQkwB,CAAO,IAAI7wC,EAAS,KAAI,GAExHioH,KAAW/qG,IACXgrG,KAA2B,CAAA32G,MAAQ02G,GAAS12G,CAAI,KAAKA,EAAK,KAAK,CAAC,MAAMgP,GACtE4nG,KAAyB,CAAA52G,MAAQ02G,GAAS12G,CAAI,KAAKA,EAAK,KAAKA,EAAK,KAAK,SAAS,CAAC,MAAMgP,GACvF6nG,KAAa,CAAA72G,MAAQ;AACzB,UAAIhqB;AAEJ,eADaA,IAAKgqB,EAAK,mBAAmB,QAAQhqB,MAAO,SAASA,IAAK,UAC5D,eAAeg5B,CAAM;AAAA,IACtC,GACU8nG,KAAiB,CAAA92G,MAAQ;AAC7B,UAAIhqB;AACJ,UAAI0gI,GAAS12G,EAAK,eAAe;AAC/B,eAAI42G,GAAuB52G,EAAK,eAAe,KAG7CA,EAAK,gBAAgB,WAAWgP,CAAM,GAC/BhP,EAAK;AAET,UAAI02G,GAAS12G,CAAI;AACtB,eAAI22G,GAAyB32G,CAAI,KAG/BA,EAAK,WAAW,GAAGgP,CAAM,GAClBhP;AAEJ;AACL,cAAM45D,IAAUi9C,GAAW72G,CAAI;AAC/B,gBAAChqB,IAAKgqB,EAAK,gBAAgB,QAAQhqB,MAAO,UAAkBA,EAAG,aAAa4jF,GAAS55D,CAAI,GAClF45D;AAAA,MACR;AAAA,IACP,GACUm9C,KAAgB,CAAA/2G,MAAQ;AAC5B,UAAIhqB,GAAIw2C;AACR,UAAIkqF,GAAS12G,EAAK,WAAW;AAC3B,eAAI22G,GAAyB32G,EAAK,WAAW,KAG3CA,EAAK,YAAY,WAAW,GAAGgP,CAAM,GAC9BhP,EAAK;AAET,UAAI02G,GAAS12G,CAAI;AACtB,eAAI42G,GAAuB52G,CAAI,KAG7BA,EAAK,WAAWgP,CAAM,GACfhP;AAEJ;AACL,cAAM45D,IAAUi9C,GAAW72G,CAAI;AAC/B,eAAIA,EAAK,eACNhqB,IAAKgqB,EAAK,gBAAgB,QAAQhqB,MAAO,UAAkBA,EAAG,aAAa4jF,GAAS55D,EAAK,WAAW,KAEpGwsB,IAAKxsB,EAAK,gBAAgB,QAAQwsB,MAAO,UAAkBA,EAAG,YAAYotC,CAAO,GAE7EA;AAAA,MACR;AAAA,IACP,GACUo9C,KAAe,CAACpnG,GAAQ5P,MAAS4P,IAASknG,GAAe92G,CAAI,IAAI+2G,GAAc/2G,CAAI,GACnFi3G,KAAqBnpH,GAAMkpH,IAAc,EAAI,GAC7CE,KAAoBppH,GAAMkpH,IAAc,EAAK,GAE7CG,KAAkB,CAACjnG,GAAKN,MACxBjE,GAASuE,EAAI,UAAS,CAAE,IACnB8mG,GAAapnG,GAAQM,EAAI,UAAW,CAAA,IAEpC8mG,GAAapnG,GAAQM,EAAI,QAAS,CAAA,GAGvCknG,KAAsB,CAAClnG,GAAKw8B,MAAU;AAC1C,YAAM2qE,IAAY3qE,EAAM;AACxB,aAAO2qE,KAAannG,EAAI,UAAS,MAAOmnG,KAAa7nG,GAAuB6nG,CAAS;AAAA,IAC3F,GACUC,KAAc,CAAC5qE,GAAOuC,MAAaA,EAAS,KAAK,CAAA5xC,MAAW;AAChE,MAAA6tC,GAASwB,EAAM,IAAG,CAAE;AACpB,YAAMxsC,IAAO+2G,GAAmB55G,CAAO;AACvC,aAAAqvC,EAAM,IAAIxsC,CAAI,GACPzR,EAAS,KAAKmuC,GAAc18B,GAAMA,EAAK,SAAS,CAAC,CAAC;AAAA,IAC1D,GAAE,CAAA7C,MAAWu0C,GAAgBv0C,CAAO,EAAE,IAAI,CAAA6S,MAAO;AAChD,UAAKknG,GAAoBlnG,GAAKw8B,CAAK,GAK5B;AACL,cAAM1sC,IAAO0sC,EAAM;AACnB,eAAO9P,GAAc58B,GAAM,CAAC;AAAA,MAC7B,OARqC;AACpC,QAAAkrC,GAASwB,EAAM,IAAG,CAAE;AACpB,cAAMxsC,IAAOi3G,GAAgBjnG,GAAK,EAAI;AACtC,eAAAw8B,EAAM,IAAIxsC,CAAI,GACP08B,GAAc18B,GAAM,CAAC;AAAA,MACpC;AAAA,IAIA,CAAK,GAAG,CAAA7C,MAAWw0C,GAAex0C,CAAO,EAAE,IAAI,CAAA6S,MAAO;AAChD,UAAKknG,GAAoBlnG,GAAKw8B,CAAK,GAK5B;AACL,cAAM1sC,IAAO0sC,EAAM;AACnB,eAAO9P,GAAc58B,GAAMA,EAAK,SAAS,CAAC;AAAA,MAC3C,OARqC;AACpC,QAAAkrC,GAASwB,EAAM,IAAG,CAAE;AACpB,cAAMxsC,IAAOi3G,GAAgBjnG,GAAK,EAAK;AACvC,eAAAw8B,EAAM,IAAIxsC,CAAI,GACP08B,GAAc18B,GAAMA,EAAK,SAAS,CAAC;AAAA,MAClD;AAAA,IAIK,CAAA,GAAG,CAAA7C,MAAW;AACb,MAAA6tC,GAASwB,EAAM,IAAG,CAAE;AACpB,YAAMxsC,IAAOg3G,GAAkB75G,CAAO;AACtC,aAAAqvC,EAAM,IAAIxsC,CAAI,GACPzR,EAAS,KAAKmuC,GAAc18B,GAAM,CAAC,CAAC;AAAA,IACjD,CAAK,GAEKq3G,KAAgB,CAACC,GAAK1tH,MAAS;AACnC,eAAS9b,IAAI,GAAGA,IAAIwpI,EAAI,QAAQxpI,KAAK;AACnC,cAAMmZ,IAASqwH,EAAIxpI,CAAC,EAAE,MAAM,MAAM8b,CAAI;AACtC,YAAI3C,EAAO;AACT,iBAAOA;AAAA,MAEV;AACD,aAAOsH,EAAS;IACtB,GAEUgpH,KAAWp2E,GAAI,SAAS;AAAA,MAC5B,EAAE,QAAQ,CAAC,SAAS,EAAG;AAAA,MACvB,EAAE,OAAO,CAAC,SAAS,EAAG;AAAA,MACtB,EAAE,KAAK,CAAC,SAAS,EAAG;AAAA,MACpB,EAAE,OAAO,CAAC,SAAS,EAAG;AAAA,IAC5B,CAAK,GACKq2E,KAAY,CAAC1tG,GAAUhK,MAAS;AACpC,YAAMqV,IAAc44B,GAAiBjuC,GAAMgK,CAAQ;AACnD,aAAOqL,KAA4BrL;AAAA,IACzC,GACU4F,KAAS,CAAC8rD,GAAgB1xD,GAAUkG,MAAQ;AAChD,YAAMynG,IAAOx7C,GAAkBjsD,CAAG,GAC5B1T,IAAQk7G,GAAU1tG,GAAU2tG,EAAK,UAAW,CAAA;AAClD,aAAO97C,GAAeH,GAAgBl/D,GAAOm7G,CAAI,EAAE,KAAK,MAAMjmE,GAAal1C,GAAOm7G,CAAI,EAAE,KAAK7pH,GAAM+tE,IAAgBH,GAAgBl/D,CAAK,CAAC,EAAE,IAAI,CAAA0f,MAAUu7F,GAAS,OAAOv7F,CAAM,CAAC,GAAGztB,EAAS,IAAI;AAAA,IACtM,GACUmpH,KAAkC,CAAC5tG,GAAUsE,MAAQ0jC,GAAwBhoC,GAAUsE,CAAG,MAAM,MAChGupG,KAAuB,CAACn8C,GAAgB1xD,GAAUkG,MAAQ2rD,GAAeH,GAAgB1xD,GAAUkG,CAAG,EAAE,OAAOpiB,GAAM8pH,IAAiC5tG,CAAQ,CAAC,GAC/J8tG,KAAU,CAACp8C,GAAgB1xD,GAAUkG,MAAQ;AACjD,YAAMynG,IAAOv7C,GAAmBlsD,CAAG;AACnC,aAAO2nG,GAAqBn8C,GAAgB1xD,GAAU2tG,CAAI,EAAE,KAAK,CAAAz7F,MAC/Cy1B,GAAaz1B,GAAQy7F,CAAI,EAC1B,WAAWlpH,EAAS,KAAKgpH,GAAS,MAAMv7F,CAAM,CAAC,IAAIztB,EAAS,KAAI,CAChF;AAAA,IACP,GACU4I,KAAM,CAACqkE,GAAgB1xD,GAAUkG,MAAQ;AAC7C,YAAMynG,IAAOx7C,GAAkBjsD,CAAG;AAClC,aAAO2nG,GAAqBn8C,GAAgB1xD,GAAU2tG,CAAI,EAAE,KAAK,CAAAz7F,MAC/Cw1B,GAAax1B,GAAQy7F,CAAI,EAC1B,WAAWlpH,EAAS,KAAKgpH,GAAS,IAAIv7F,CAAM,CAAC,IAAIztB,EAAS,KAAI,CAC9E;AAAA,IACP,GACU0wC,KAAQ,CAACu8B,GAAgB1xD,GAAUkG,MAAQ;AAC/C,YAAMynG,IAAOv7C,GAAmBlsD,CAAG,GAC7B1T,IAAQk7G,GAAU1tG,GAAU2tG,EAAK,UAAW,CAAA;AAClD,aAAO97C,GAAeH,GAAgBl/D,GAAOm7G,CAAI,EAAE,KAAK,MAAMhmE,GAAan1C,GAAOm7G,CAAI,EAAE,KAAK7pH,GAAM+tE,IAAgBH,GAAgBl/D,CAAK,CAAC,EAAE,IAAI,CAAA0f,MAAUu7F,GAAS,MAAMv7F,CAAM,CAAC,GAAGztB,EAAS,IAAI;AAAA,IACrM,GACUspH,KAAkB,CAAA9oE,MAAY,CAAC0sB,GAAMq8C,GAAW/oE,CAAQ,CAAC,GACzDgpE,KAAe,CAACv8C,GAAgB1xD,GAAUkG,MAC7BqnG,GAAc;AAAA,MAC7B3nG;AAAA,MACAkoG;AAAA,MACAzgH;AAAA,MACA8nC;AAAA,IACR,GAAS;AAAA,MACDu8B;AAAA,MACA1xD;AAAA,MACAkG;AAAA,IACR,CAAO,EACe,OAAO6nG,EAAe,GAElCC,KAAa,CAAA/oE,MAAYA,EAAS,KAAKrhD,IAAUA,IAAUA,IAAUA,EAAQ,GAC7EsqH,KAAU,CAAAjpE,MAAYA,EAAS,KAAKthD,GAAS,QAAQ,GAAGA,GAAS,OAAO,GAAGA,GAAS,KAAK,GAAGA,GAAS,OAAO,CAAC,GAC7GwqH,KAAU,CAAAlpE,MAAYA,EAAS,KAAKwoE,GAAS,QAAQA,GAAS,QAAQA,GAAS,OAAOA,GAAS,KAAK,GACpGW,KAAS,CAAAnpE,MAAYA,EAAS,KAAKwoE,GAAS,OAAOA,GAAS,OAAOA,GAAS,KAAKA,GAAS,GAAG,GAC7FY,KAAO,CAACC,GAAWC,MAAcL,GAAQI,CAAS,MAAMJ,GAAQK,CAAS,KAAKP,GAAWM,CAAS,MAAMN,GAAWO,CAAS,GAC5HC,KAAiB,CAACl5E,GAASo8B,GAAgB1xD,GAAU3Y,GAAMlT,GAAI8wD,MAAalzC,GAAM8/D,GAAeH,GAAgB1xD,GAAU3Y,CAAI,GAAGwqE,GAAeH,GAAgB1xD,GAAU7rB,CAAE,GAAG,CAACs6H,GAAYC,MAC7LD,MAAeC,KAAY58C,GAAmB9xD,GAAUyuG,GAAYC,CAAQ,IACvEjB,GAAS,MAAMn4E,IAAUm5E,IAAaC,CAAQ,IAE9CzpE,CAEV,EAAE,MAAMA,CAAQ,GACX0pE,KAAiB,CAACC,GAAcC,MAAeD,EAAa,KAAKpqH,IAAQ,CAAAoqH,MAAgB,CAACP,GAAKO,GAAcC,CAAU,CAAC,GACxHC,KAAuB,CAACx5E,GAASo8B,GAAgB1xD,GAAU4uG,GAAc1oG,MAAQ;AACrF,YAAM7e,IAAO6qE,GAAkB58B,GAASpvB,CAAG;AAG3C,aAFW6gC,GAAazR,GAASt1B,GAAU3Y,CAAI,EAAE,IAAIvD,GAAMouE,IAAmB58B,CAAO,CAAC,EAClE,KAAK,MAAMs5E,EAAa,IAAIT,EAAO,GAAG,CAAAh6H,MAAM85H,GAAav8C,GAAgB1xD,GAAU7rB,CAAE,EAAE,IAAI2P,GAAM0qH,IAAgBl5E,GAASo8B,GAAgB1xD,GAAU3Y,GAAMlT,CAAE,CAAC,EAAE,OAAO2P,GAAM6qH,IAAgBC,CAAY,CAAC,CAAC,EAC9M,OAAOb,EAAe;AAAA,IAC5C,GACUgB,KAAqB,CAACz5E,GAAS2P,MAC/B3P,IACK2P,EAAS,KAAK3hD,GAAQmB,EAAS,MAAMgpH,GAAS,KAAK,GAAGhpH,EAAS,MAAMnB,GAAQmB,EAAS,MAAMgpH,GAAS,KAAK,GAAGhpH,EAAS,IAAI,IAE1HwgD,EAAS,KAAKxgD,EAAS,MAAMnB,GAAQmB,EAAS,MAAMgpH,GAAS,MAAM,GAAGhpH,EAAS,MAAMnB,GAAQmB,EAAS,MAAMgpH,GAAS,GAAG,CAAC,GAG9HuB,KAAiB,CAAC15E,GAASo8B,GAAgB1xD,GAAUkG,MAAQ;AACjE,YAAM7e,IAAO6qE,GAAkB58B,GAASpvB,CAAG,GACrC0oG,IAAeX,GAAav8C,GAAgB1xD,GAAU3Y,CAAI;AAChE,aAAO4mH,GAAav8C,GAAgB1xD,GAAU3Y,CAAI,EAAE,KAAKvD,GAAMirH,IAAoBz5E,CAAO,CAAC,EAAE,QAAQ,MAAMw5E,GAAqBx5E,GAASo8B,GAAgB1xD,GAAU4uG,GAAc1oG,CAAG,CAAC;AAAA,IAC3L,GAEU+oG,KAAwB,CAAA7pG,MACrBniB,EAAWmiB,EAAO,UAAU,OAAQ,EAAC,MAAM,GAE9C8pG,KAAU,CAAC55E,GAASD,GAAWnvB,MAAQ;AAC3C,YAAM0kD,IAAQt1B,IAAU,IAAI;AAC5B,aAAAD,EAAU,OAAOzC,GAAc1sB,EAAI,UAAW,GAAEA,EAAI,WAAW0kD,CAAK,EAAE,QAAS,CAAA,GAC/Ev1B,EAAU,OAAQ,EAAC,OAAO,QAAQC,IAAU,YAAY,YAAY,MAAM,GACnE;AAAA,IACb,GACU65E,KAAa,CAAC75E,GAASlwB,MAAW;AACtC,YAAM5pB,IAAM4pB,EAAO,UAAU,OAAM,GAC7Bc,IAAMovB,IAAU1C,GAAc,aAAap3C,CAAG,IAAIo3C,GAAc,eAAep3C,CAAG;AACxF,aAAKyzH,GAAsB7pG,CAAM,IAEtBkwB,KAAWrvB,GAAeC,CAAG,IAC/BgpG,GAAQ,IAAM9pG,EAAO,WAAWc,CAAG,IACjC,CAACovB,KAAWnvB,GAAcD,CAAG,IAC/BgpG,GAAQ,IAAO9pG,EAAO,WAAWc,CAAG,IAEpC,KANA;AAAA,IAQf;AAEI,QAAIkpG;AACJ,KAAC,SAAUA,GAAW;AACpB,MAAAA,EAAUA,EAAU,KAAQ,CAAC,IAAI,MACjCA,EAAUA,EAAU,QAAW,CAAC,IAAI,SACpCA,EAAUA,EAAU,OAAU,CAAC,IAAI,QACnCA,EAAUA,EAAU,MAAS,CAAC,IAAI;AAAA,IACnC,GAACA,OAAcA,KAAY,CAAE,EAAC;AAC/B,UAAMC,KAAO,CAACrhF,GAAWshF,MAActhF,MAAc2X,GAAW,YAAYj/C,GAAQ4oH,CAAS,IAAIA,GAC3FC,KAAS,CAACvhF,GAAW0wC,GAAax4D,MAAQ8nB,MAAc2X,GAAW,WAAW+4B,EAAY,KAAKx4D,CAAG,IAAIw4D,EAAY,KAAKx4D,CAAG,GAC1HspG,KAAe,CAACh9G,GAAOw7B,GAAWyhF,GAAY7hD,MAC9C3rD,GAAO2rD,EAAQ,QAAQ5/B,MAAc2X,GAAW,QAAQ,CAAC,IACpDypE,GAAU,KACRlrE,GAAcurE,GAAY7hD,CAAO,MAAM,KACzCwhD,GAAU,QAEVA,GAAU,MAGfM,KAAoB,CAACxtH,GAAW8rC,GAAWx7B,GAAOxF,MAAU;AAChE,YAAM0xE,IAAc93B,GAAYp0C,CAAK;AACrC,UAAIi9G,IAAaziH;AACjB,YAAMsiH,IAAY,CAAA;AAClB,aAAOG,KAAY;AACjB,cAAM7hD,IAAU2hD,GAAOvhF,GAAW0wC,GAAa+wC,CAAU;AACzD,YAAI,CAAC7hD;AACH;AAEF,YAAI3rD,GAAO2rD,EAAQ,QAAQ,EAAK,CAAC;AAC/B,iBAAI5/B,MAAc2X,GAAW,WACpB;AAAA,YACL,WAAW0pE,GAAKrhF,GAAWshF,CAAS,EAAE,OAAO,CAAC1hD,CAAO,CAAC;AAAA,YACtD,WAAWwhD,GAAU;AAAA,YACrB,SAAS3qH,EAAS,KAAKmpE,CAAO;AAAA,UAC5C,IAEmB;AAAA,YACL,WAAWyhD,GAAKrhF,GAAWshF,CAAS;AAAA,YACpC,WAAWF,GAAU;AAAA,YACrB,SAAS3qH,EAAS,KAAKmpE,CAAO;AAAA,UAC5C;AAGQ,YAAI,CAACA,EAAQ,aAAa;AACxB,UAAA6hD,IAAa7hD;AACb;AAAA,QACD;AACD,YAAI1rE,EAAUutH,GAAY7hD,CAAO,GAAG;AAClC,gBAAM+hD,IAAYH,GAAah9G,GAAOw7B,GAAWyhF,GAAY7hD,CAAO;AACpE,iBAAO;AAAA,YACL,WAAWyhD,GAAKrhF,GAAWshF,CAAS;AAAA,YACpC,WAAAK;AAAA,YACA,SAASlrH,EAAS,KAAKmpE,CAAO;AAAA,UAC1C;AAAA,QACS;AACD,QAAA0hD,EAAU,KAAK1hD,CAAO,GACtB6hD,IAAa7hD;AAAA,MACd;AACD,aAAO;AAAA,QACL,WAAWyhD,GAAKrhF,GAAWshF,CAAS;AAAA,QACpC,WAAWF,GAAU;AAAA,QACrB,SAAS3qH,EAAS,KAAM;AAAA,MAChC;AAAA,IACA,GACUmrH,KAA2B,CAAC5hF,GAAW6hF,GAAwBr9G,GAAOxF,MAAU6iH,EAAuBr9G,GAAOxF,CAAK,EAAE,QAAQ,IAAI,CAAAkZ,MAAO;AAC5I,YAAMopG,IAAYO,EAAuBr9G,GAAO0T,CAAG,EAAE;AACrD,aAAO8nB,MAAc2X,GAAW,YAAY2pE,EAAU,OAAOppG,CAAG,IAAI,CAACA,CAAG,EAAE,OAAOopG,CAAS;AAAA,IAChG,CAAK,EAAE,MAAM,CAAA,CAAE,GACLQ,KAAyC,CAACR,GAAWntI,MAAM+jB,GAAMopH,GAAW,CAACrpH,GAAKimE,MAAWjmE,EAAI,KAAK,MAAMxB,EAAS,KAAKynE,CAAM,GAAG,CAAA8C,MAAWj9D,GAAM5K,GAAK6nE,EAAQ,eAAgB,CAAA,GAAG7nE,GAAK+kE,EAAO,eAAc,CAAE,GAAG,CAAC6jD,GAAUC,MAAY;AAC9O,YAAMC,IAAW,KAAK,IAAI9tI,IAAI4tI,EAAS,IAAI;AAE3C,aADgB,KAAK,IAAI5tI,IAAI6tI,EAAQ,IAAI,KACvBC,IAAW/jD,IAAS8C;AAAA,IAC5C,CAAK,EAAE,GAAG/oE,CAAG,CAAC,GAAGxB,EAAS,KAAI,CAAE,GACtByrH,KAAgC,CAACZ,GAAWppG,MAAQ/e,GAAK+e,EAAI,eAAc,CAAE,EAAE,KAAK,CAAAiqG,MAAcL,GAAuCR,GAAWa,EAAW,IAAI,CAAC,GACpKC,KAAgCtsH,GAAM4rH,IAAmB98E,GAAc,SAAS,EAAE,GAClFy9E,KAA4BvsH,GAAM4rH,IAAmB98E,GAAc,SAAS,CAAC,GAC7E09E,KAAoBxsH,GAAM8rH,IAA0B,IAAIQ,EAA6B,GACrFG,KAAoBzsH,GAAM8rH,IAA0B,GAAGS,EAAyB,GAChFG,KAAgB,CAACh+G,GAAO0T,MAAQkqG,GAA8B59G,GAAO0T,CAAG,EAAE,QAAQ,UAClFuqG,KAAe,CAACj+G,GAAO0T,MAAQmqG,GAA0B79G,GAAO0T,CAAG,EAAE,QAAQ,UAC7EwqG,KAAwB,CAAAl+G,MAASo1C,GAAgBp1C,CAAK,EAAE,IAAI,CAAA0T,MAAO,CAACA,CAAG,EAAE,OAAOmqG,GAA0B79G,GAAO0T,CAAG,EAAE,SAAS,CAAC,EAAE,MAAM,CAAA,CAAE,GAC1IyqG,KAAuB,CAAAn+G,MAASq1C,GAAer1C,CAAK,EAAE,IAAI,CAAA0T,MAAOkqG,GAA8B59G,GAAO0T,CAAG,EAAE,UAAU,OAAOA,CAAG,CAAC,EAAE,MAAM,CAAA,CAAE,GAC1I0qG,KAA0B,CAACp+G,GAAO0T,MAAQgqG,GAA8BI,GAAkB99G,GAAO0T,CAAG,GAAGA,CAAG,GAC1G2qG,KAA0B,CAACr+G,GAAO0T,MAAQgqG,GAA8BK,GAAkB/9G,GAAO0T,CAAG,GAAGA,CAAG,GAE1G4qG,KAA2B1uG,IAC3B2uG,KAAuB,CAACl/E,GAAY1C,MAAY,KAAK,IAAI0C,EAAW,OAAO1C,CAAO,GAClF6hF,KAAwB,CAACn/E,GAAY1C,MAAY,KAAK,IAAI0C,EAAW,QAAQ1C,CAAO,GACpF8hF,KAAmB,CAAA1iF,MAAQ1lC,GAAkB0lC,GAAM,MAAM,GACzD2iF,KAAwB,CAAC9+E,GAAajD,MAAYtlC,EAAOuoC,GAAa,CAAC++E,GAAet/E,MAAe;AACzG,YAAMu/E,IAAc,KAAK,IAAIL,GAAqBI,GAAehiF,CAAO,GAAG6hF,GAAsBG,GAAehiF,CAAO,CAAC,GAClHkiF,IAAc,KAAK,IAAIN,GAAqBl/E,GAAY1C,CAAO,GAAG6hF,GAAsBn/E,GAAY1C,CAAO,CAAC;AAIlH,aAHIkiF,MAAgBD,KAAeH,GAAiBp/E,CAAU,KAAKi/E,GAAyBj/E,EAAW,IAAI,KAGvGw/E,IAAcD,IACTv/E,IAEFs/E;AAAA,IACb,CAAK,GAEKG,KAAqB,CAAAt7G,MAAQ;AACjC,YAAMu7G,IAAkB,CAAAn/E,MACf3sC,GAAM2sC,GAAa,CAAA7D,MAAQ;AAChC,cAAMsD,IAAavD,GAAQC,CAAI;AAC/B,eAAAsD,EAAW,OAAO77B,GACX67B;AAAA,MACjB,CAAS;AAEH,UAAItxB,GAAYvK,CAAI;AAClB,eAAOu7G,EAAgBv7G,EAAK,eAAc,CAAE;AACvC,UAAI2L,GAAS3L,CAAI,GAAG;AACzB,cAAMxa,IAAMwa,EAAK,cAAc,YAAW;AAC1C,eAAAxa,EAAI,SAASwa,GAAM,CAAC,GACpBxa,EAAI,OAAOwa,GAAMA,EAAK,KAAK,MAAM,GAC1Bu7G,EAAgB/1H,EAAI,eAAc,CAAE;AAAA,MACnD;AACQ,eAAO;IAEf,GACUw3C,KAAiB,CAAAn2B,MAASrW,GAAOqW,GAAOy0G,EAAkB;AAEhE,QAAIE;AACJ,KAAC,SAAUA,GAAY;AACrB,MAAAA,EAAWA,EAAW,KAAQ,EAAE,IAAI,MACpCA,EAAWA,EAAW,OAAU,CAAC,IAAI;AAAA,IACtC,GAACA,OAAeA,KAAa,CAAE,EAAC;AACjC,UAAMC,KAAY,CAACzjF,GAAW1xC,GAAMunD,GAAa7tC,MAAS;AACxD,UAAIiyC,IAAcjyC;AAClB,aAAOiyC,IAAcrE,GAASqE,GAAaja,GAAWpmB,IAA4BtrB,CAAI;AACpF,YAAIunD,EAAYoE,CAAW;AACzB;AAAA,IAGV,GACUypE,KAAY,CAAC1jF,GAAW2jF,GAAWC,GAAYt1H,GAAMunD,GAAarR,MAAkB;AACxF,UAAIq/E,IAAO;AACX,YAAM10H,IAAS,CAAA,GACT01B,IAAM,CAAA7c,MAAQ;AAClB,YAAIo8B,IAAcY,GAAe,CAACh9B,CAAI,CAAC;AACvC,QAAIg4B,MAAc,OAChBoE,IAAcA,EAAY;AAE5B,iBAASpuD,IAAI,GAAGA,IAAIouD,EAAY,QAAQpuD,KAAK;AAC3C,gBAAM6tD,IAAaO,EAAYpuD,CAAC;AAChC,cAAI,CAAA4tI,EAAW//E,GAAYigF,CAAgB,GAO3C;AAAA,gBAJI30H,EAAO,SAAS,KAAKw0H,EAAU9/E,GAAY3nC,GAAO/M,CAAM,CAAC,KAC3D00H,KAEFhgF,EAAW,OAAOggF,GACdhuE,EAAYhS,CAAU;AACxB,qBAAO;AAET,YAAA10C,EAAO,KAAK00C,CAAU;AAAA;AAAA,QACvB;AACD,eAAO;AAAA,MACf,GACYigF,IAAmB5nH,GAAOsoC,EAAc,eAAgB,CAAA;AAC9D,UAAI,CAACs/E;AACH,eAAO30H;AAET,YAAM6Y,IAAOw8B,EAAc;AAC3B,aAAIx8B,MACF6c,EAAI7c,CAAI,GACRy7G,GAAUzjF,GAAW1xC,GAAMu2B,GAAK7c,CAAI,IAE/B7Y;AAAA,IACb,GACU40H,KAAkB,CAACC,GAAYngF,MAAeA,EAAW,OAAOmgF,GAChEC,KAAe,CAACD,GAAYngF,MAAeA,EAAW,SAASmgF,GAC/DE,KAAUpuH,GAAM4tH,IAAWF,GAAW,IAAIziF,IAAWE,EAAS,GAC9DkjF,KAAYruH,GAAM4tH,IAAWF,GAAW,MAAMviF,IAAWF,EAAS,GAClEqjF,KAAoB,CAAA5/E,MACjBtoC,GAAOsoC,EAAc,eAAc,CAAE,GAExC6/E,KAAiB,CAACrkF,GAAW1xC,GAAMunD,GAAa7tC,MAAS;AAC7D,YAAM0oE,IAAc93B,GAAYtqD,CAAI;AACpC,UAAIkpD,GACA8sE,GACAX,GACAn/E;AACJ,YAAMr1C,IAAS,CAAA;AACf,UAAI00H,IAAO;AACX,MAAI7jF,MAAc,KAChBwX,IAASk5B,EAAY,MACrB4zC,IAAYrjF,IACZ0iF,IAAY5iF,IACZyD,IAAgBI,GAAc,MAAM58B,CAAI,MAExCwvC,IAASk5B,EAAY,MACrB4zC,IAAYvjF,IACZ4iF,IAAY1iF,IACZuD,IAAgBI,GAAc,OAAO58B,CAAI;AAE3C,YAAM87G,IAAmBM,GAAkB5/E,CAAa;AACxD,SAAG;AACD,YAAI,CAACA,EAAc;AACjB;AAEF,cAAMjE,IAAO6jF,GAAkB5/E,CAAa;AAC5C,YAAIm/E,EAAUpjF,GAAMujF,CAAgB;AAClC;AAEF,QAAI30H,EAAO,SAAS,KAAKm1H,EAAU/jF,GAAMrkC,GAAO/M,CAAM,CAAC,KACrD00H;AAEF,cAAMhgF,IAAavD,GAAQC,CAAI;AAG/B,YAFAsD,EAAW,WAAWW,GACtBX,EAAW,OAAOggF,GACdhuE,EAAYhS,CAAU;AACxB,iBAAO10C;AAET,QAAAA,EAAO,KAAK00C,CAAU;AAAA,MAC9B,SAAeW,IAAgBgT,EAAOhT,CAAa;AAC7C,aAAOr1C;AAAA,IACb,GACUo1H,KAAc,CAAAP,MAAc,CAAAngF,MAAckgF,GAAgBC,GAAYngF,CAAU,GAChF2gF,KAAS,CAAAR,MAAc,CAAAngF,MAAcogF,GAAaD,GAAYngF,CAAU,GAExE4gF,KAAc,CAACrtG,GAAQ5pB,MAAQ;AACnC,MAAA4pB,EAAO,UAAU,OAAO5pB,CAAG,GAC3BulE,GAAoB37C,GAAQA,EAAO,UAAU,OAAQ,CAAA;AAAA,IAC3D,GACUstG,KAAsB,CAACttG,GAAQwB,GAAO8iG,MAAmBjlH,EAAS,KAAKwlH,GAAiB7kG,GAAQwB,GAAO8iG,CAAc,CAAC,GACtHiJ,KAAmB,CAACvtG,GAAQ4oB,GAAWpnB,GAAOgsG,GAAUC,GAASC,MAAc;AACnF,YAAMxtD,IAAWt3B,MAAc2X,GAAW,UACpC+4B,IAAc93B,GAAYxhC,EAAO,QAAS,CAAA,GAC1CslG,IAAe5mH,GAAMyhD,IAAwB+f,IAAWoZ,EAAY,OAAOA,EAAY,IAAI,GAC3FisC,IAAarlD,IAAWstD,IAAWC;AACzC,UAAI,CAACjsG,EAAM,WAAW;AACpB,cAAM5Q,IAAOi6B,GAAgBrpB,CAAK;AAClC,YAAIksG,EAAU98G,CAAI;AAChB,iBAAOyzG,GAAUz7E,GAAW5oB,GAAQpP,GAAMg4B,MAAc2X,GAAW,WAAW,EAAK;AAC9E,YAAIslE,GAAoB7lG,CAAM,GAAG;AACtC,gBAAMy4C,IAAWj3C,EAAM;AACvB,iBAAAi3C,EAAS,SAAS7vB,MAAc2X,GAAW,SAAS,GAC7ClhD,EAAS,KAAKo5D,CAAQ;AAAA,QAC9B;AAAA,MACF;AACD,YAAMrrB,IAAgB2S,GAA2BnX,GAAW5oB,EAAO,QAAO,GAAIwB,CAAK;AACnF,UAAI+jG,EAAWn4E,CAAa;AAC1B,eAAOo3E,GAAWxkG,GAAQotB,EAAc,QAAQ,CAAC8yB,CAAQ,CAAC;AAE5D,UAAIslD,IAAoBF,EAAal4E,CAAa;AAClD,YAAMugF,IAA0BpsG,GAA6BC,CAAK;AAClE,UAAKgkG;AAGH,QAAAA,IAAoB14C,GAAkB5M,GAAUslD,CAAiB;AAAA;AAFjE,eAAOmI,IAA0BtuH,EAAS,KAAKmiB,CAAK,IAAIniB,EAAS;AAInE,UAAIkmH,EAAWC,CAAiB;AAC9B,eAAOnB,GAAUz7E,GAAW5oB,GAAQwlG,EAAkB,QAAQ,CAACtlD,CAAQ,GAAGA,GAAU,EAAK;AAE3F,YAAMglD,IAAoBI,EAAaE,CAAiB;AACxD,aAAIN,KAAqBK,EAAWL,CAAiB,KAC/C7kE,GAAsBmlE,GAAmBN,CAAiB,IACrDb,GAAUz7E,GAAW5oB,GAAQklG,EAAkB,QAAQ,CAAChlD,CAAQ,GAAGA,GAAU,EAAK,IAGzFytD,IACKL,GAAoBttG,GAAQwlG,EAAkB,QAAS,GAAE,EAAK,IAEhEnmH,EAAS;IACtB,GACUuuH,KAAiB,CAAC5tG,GAAQ4oB,GAAWpnB,GAAOgsG,GAAUC,GAASC,MAAc;AACjF,YAAMtgF,IAAgB2S,GAA2BnX,GAAW5oB,EAAO,QAAO,GAAIwB,CAAK,GAC7EqsG,IAAkB/oH,GAAOsoC,EAAc,eAAgB,CAAA,GACvD8yB,IAAWt3B,MAAcwjF,GAAW,MACpCl1H,IAAO8oB,EAAO;AACpB,UAAI,CAAC6tG;AACH,eAAOxuH,EAAS;AAElB,UAAIwmH,GAAoB7lG,CAAM,GAAG;AAC/B,cAAMotB,IAAgB8yB,IAAW1yB,GAAc,aAAahsB,CAAK,IAAIgsB,GAAc,eAAehsB,CAAK;AAEvG,gBADsB0+C,IAAqCurD,KAA1BD,IACbt0H,GAAMk2C,CAAa,EAAE,QAAQ,MAAM/tC,EAAS,KAAK+tC,CAAa,CAAC,EAAE,IAAI,CAAAtsB,OAAOA,GAAI,QAAS,CAAA;AAAA,MAC9G;AAED,YAAMgtG,KADW5tD,IAAW6sD,KAAYD,IACT51H,GAAMi2H,GAAY,CAAC,GAAG//E,CAAa,GAC5D2gF,IAAoBptH,GAASmtH,GAAeV,GAAO,CAAC,CAAC,GACrDrjF,IAAU8jF,EAAgB,MAC1BG,IAAelC,GAAsBiC,GAAmBhkF,CAAO;AACrE,UAAIikF,KAAgBN,EAAUM,EAAa,IAAI,GAAG;AAChD,cAAMC,IAAQ,KAAK,IAAIlkF,IAAUikF,EAAa,IAAI,GAC5CE,KAAQ,KAAK,IAAInkF,IAAUikF,EAAa,KAAK;AACnD,eAAO3J,GAAUz7E,GAAW5oB,GAAQguG,EAAa,MAAMC,IAAQC,IAAO,EAAK;AAAA,MAC5E;AACD,UAAIrrE;AAQJ,UAPI2qE,EAASpgF,CAAa,IACxByV,IAAczV,EAAc,YACnBqgF,EAAQrgF,CAAa,IAC9ByV,IAAczV,EAAc,QAAQ,EAAI,IAExCyV,IAAchY,GAAgBrpB,CAAK,GAEjCqhC,GAAa;AACf,cAAMsrE,IAAiBlB,GAAerkF,GAAW1xC,GAAMi2H,GAAY,CAAC,GAAGtqE,CAAW;AAClF,YAAIurE,KAAsBtC,GAAsBnrH,GAASwtH,GAAgBf,GAAO,CAAC,CAAC,GAAGrjF,CAAO;AAK5F,YAJIqkF,OAGJA,KAAsBtpH,GAAOnE,GAASwtH,GAAgBf,GAAO,CAAC,CAAC,CAAC,GAC5DgB;AACF,iBAAOd,GAAoBttG,GAAQouG,GAAoB,SAAS,QAAO,GAAI,EAAK;AAAA,MAEnF;AACD,aAAIL,EAAkB,WAAW,IACxBM,GAAgBruG,GAAQkgD,CAAQ,EAAE,OAAOA,IAAWutD,IAAUD,CAAQ,EAAE,IAAI,CAAA1sG,MAAO+jG,GAAiB7kG,GAAQc,EAAI,QAAS,GAAE,EAAK,CAAC,IAEnIzhB,EAAS;IACtB,GACUgvH,KAAkB,CAACruG,GAAQkwB,MAAY;AAC3C,YAAM95C,IAAM4pB,EAAO,UAAU,OAAM,GAC7B/d,IAAOiuC,IAAU1C,GAAc,aAAap3C,CAAG,IAAIo3C,GAAc,eAAep3C,CAAG,GACnFk4H,IAAO3vE,GAAe18C,EAAK,UAAS,GAAI+d,EAAO,QAAO,CAAE;AAC9D,UAAIkwB,GAAS;AACX,cAAMq+E,IAAWtD,GAA0BqD,GAAMrsH,CAAI;AACrD,eAAOD,GAAOusH,EAAS,SAAS;AAAA,MACxC,OAAa;AACL,cAAMA,IAAWvD,GAA8BsD,GAAMrsH,CAAI;AACzD,eAAOF,GAAKwsH,EAAS,SAAS;AAAA,MAC/B;AAAA,IACP,GACUC,KAAuB,CAACxuG,GAAQkwB,GAASu+E,MAAsBJ,GAAgBruG,GAAQkwB,CAAO,EAAE,OAAOu+E,CAAiB,EAAE,OAAO,CAAA3tG,OACrId,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA,GAC9B,GACR,GAEK4tG,KAAmB,CAAC1uG,GAAQc,MAAQ;AACxC,YAAM1qB,IAAM4pB,EAAO,IAAI,UAAS;AAChC,MAAA5pB,EAAI,SAAS0qB,EAAI,UAAW,GAAEA,EAAI,OAAM,CAAE,GAC1C1qB,EAAI,OAAO0qB,EAAI,UAAW,GAAEA,EAAI,OAAM,CAAE,GACxCd,EAAO,UAAU,OAAO5pB,CAAG;AAAA,IACjC,GACUu4H,KAAc,CAAC3lG,GAAO9J,MAAQ;AAClC,MAAI8J,IACF9J,EAAI,aAAa,qBAAqB,iBAAiB,IAEvDA,EAAI,gBAAgB,mBAAmB;AAAA,IAE/C,GACU0vG,KAAsB,CAAC5uG,GAAQs9B,GAAOuC,MAAaqoE,GAAY5qE,GAAOuC,CAAQ,EAAE,IAAI,CAAA/+B,OACxF4tG,GAAiB1uG,GAAQc,CAAG,GACrB++B,EACR,GACKgvE,KAAuB,CAACrtG,GAAOtqB,GAAMg5C,MAAY;AACrD,YAAMtoC,IAAQ4lC,GAAc,eAAehsB,CAAK;AAChD,UAAIA,EAAM;AACR,eAAO5Z;AACF;AACL,cAAMK,IAAMulC,GAAc,aAAahsB,CAAK;AAC5C,eAAO0uB,IAAUqS,GAAarrD,GAAM+Q,CAAG,EAAE,MAAMA,CAAG,IAAIq6C,GAAaprD,GAAM0Q,CAAK,EAAE,MAAMA,CAAK;AAAA,MAC5F;AAAA,IACP,GACUknH,KAAe,CAAC9uG,GAAQs9B,GAAOpN,MAAY;AAC/C,YAAMt1B,IAAWoF,EAAO,WAClB/d,IAAO4sH,GAAqB7uG,EAAO,UAAU,UAAUpF,GAAUs1B,CAAO,GACxE6+E,IAAmBrwH,GAAM4tE,IAAgBtsD,CAAM;AAErD,aADiB4pG,GAAe15E,GAAS6+E,GAAkBn0G,GAAU3Y,CAAI,EACzD,KAAK,CAAA49C,MAAY+uE,GAAoB5uG,GAAQs9B,GAAOuC,CAAQ,CAAC;AAAA,IACnF,GACUmvE,KAAgB,CAAC1iD,GAAgB19D,GAAK6tB,MAAS;AACnD,YAAMwyF,IAAmB5uH,GAAMma,GAAYzJ,EAAa,QAAQnC,EAAI,QAAS,CAAA,GAAG,wCAAwC,GAAG,CAAA10B,MAAKA,EAAE,GAAG,GAC/Hg1I,IAAkBvuH,GAASsuH,GAAkB3iD,CAAc,GAC3D6iD,IAAgBxuH,GAAS87B,GAAM6vC,CAAc;AACnD,MAAAhsE,EAAOiB,GAAW2tH,GAAiBC,CAAa,GAAGzwH,GAAMiwH,IAAa,EAAK,CAAC,GAC5EruH,EAAOiB,GAAW4tH,GAAeD,CAAe,GAAGxwH,GAAMiwH,IAAa,EAAI,CAAC;AAAA,IACjF,GACUS,KAA2B,CAACpvG,GAAQs9B,MAAU;AAClD,YAAM+xE,IAAa/xE,EAAM;AACzB,UAAIt9B,EAAO,UAAU,YAAW,KAAM,CAACA,EAAO,aAAaqvG,GAAY;AACrE,cAAMvuG,IAAM0sB,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AAClE,QAAIwtB,GAAc,eAAe1sB,CAAG,KAAK,CAAC+rD,GAAS/rD,CAAG,MACpD4tG,GAAiB1uG,GAAQo8B,GAAoBizE,GAAYvuG,CAAG,CAAC,GAC7Dw8B,EAAM,IAAI,IAAI;AAAA,MAEjB;AAAA,IACP,GACUgyE,KAA0B,CAAChjD,GAAgBtsD,GAAQs9B,GAAO7gB,MAAS;AACvE,UAAIzc,EAAO,UAAU,eAAe;AAClC,cAAMuvG,IAAU5uH,GAAS87B,GAAM6vC,CAAc;AAC7C,QAAAhsE,EAAOivH,GAAS,CAAAC,MAAW;AACzB,gBAAM1uG,IAAM0sB,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AAClE,UAAA6oG,GAAav8C,GAAgBtsD,EAAO,QAAO,GAAIc,CAAG,EAAE,KAAK,CAAA++B,MAAY+uE,GAAoB5uG,GAAQs9B,GAAOuC,CAAQ,CAAC;AAAA,QAC3H,CAAS;AAAA,MACF;AAAA,IACP,GACU4vE,KAAS,CAACzvG,GAAQs9B,GAAOpN,MAAY0H,GAA0B53B,CAAM,IAAI8uG,GAAa9uG,GAAQs9B,GAAOpN,CAAO,EAAE,OAAM,IAAK,IACzHw/E,KAAW,CAACx/E,GAASlwB,GAAQ2vG,MAAW/3E,GAA0B53B,CAAM,IAAI+pG,GAAW75E,GAASlwB,CAAM,IAAI,IAC1G4vG,KAAqB,CAAA5vG,MAAU;AACnC,YAAMs9B,IAAQtb,GAAK,IAAI,GACjB+sF,IAAmBrwH,GAAM4tE,IAAgBtsD,CAAM;AACrD,aAAAA,EAAO,GAAG,cAAc,CAAA9lC,MAAK;AAC3B,QAAI09D,GAA0B53B,CAAM,MAClCgvG,GAAcD,GAAkB/uG,EAAO,KAAK9lC,EAAE,OAAO,GACrDk1I,GAAyBpvG,GAAQs9B,CAAK,GACtCgyE,GAAwBP,GAAkB/uG,GAAQs9B,GAAOpjE,EAAE,OAAO;AAAA,MAE5E,CAAO,GACMojE;AAAA,IACb,GACUuyE,KAAenxH,GAAMgxH,IAAU,EAAI,GACnCI,KAAepxH,GAAMgxH,IAAU,EAAK,GACpCK,KAAuB,CAAC/vG,GAAQkwB,GAASoN,MAAU;AACvD,UAAI1F,GAA0B53B,CAAM,GAAG;AACrC,cAAMgwG,IAAY3B,GAAgBruG,GAAQkwB,CAAO,EAAE,WAAW,MAAM;AAClE,gBAAM95C,IAAM4pB,EAAO,UAAU,OAAM;AACnC,iBAAOkwB,IAAU1C,GAAc,aAAap3C,CAAG,IAAIo3C,GAAc,eAAep3C,CAAG;AAAA,QAC7F,CAAS;AACD,eAAOyyH,GAAanqH,GAAM4tE,IAAgBtsD,CAAM,GAAGA,EAAO,WAAWgwG,CAAS,EAAE,OAAO,CAAAv2D,MAAO;AAC5F,gBAAMw2D,IAAalH,GAAQtvD,CAAG;AAC9B,iBAAOyuD,GAAY5qE,GAAO2yE,CAAU,EAAE,OAAO,CAAAnvG,OAC3C4tG,GAAiB1uG,GAAQc,CAAG,GACrB,GACR;AAAA,QACX,CAAS;AAAA,MACT;AACQ,eAAO;AAAA,IAEf,GAEUovG,KAAqB,CAACjuH,GAAMlT,MAAO;AACvC,YAAMyyB,IAAQ,SAAS;AACvB,aAAAA,EAAM,SAASvf,EAAK,UAAW,GAAEA,EAAK,OAAM,CAAE,GAC9Cuf,EAAM,OAAOzyB,EAAG,UAAW,GAAEA,EAAG,OAAM,CAAE,GACjCyyB;AAAA,IACb,GACU2uG,KAAgC,CAAAjxG,MAAOvS,GAAM61C,GAAgBtjC,CAAG,GAAGujC,GAAevjC,CAAG,GAAG,CAACsqD,GAAUI,MAAY;AACnH,YAAMiE,IAAqBf,GAAkB,IAAMtD,CAAQ,GACrDsE,IAAoBhB,GAAkB,IAAOlD,CAAO;AAC1D,aAAOtnB,GAAapjC,GAAK2uD,CAAkB,EAAE,OAAO,CAAA/sD,MAAOA,EAAI,QAAQgtD,CAAiB,CAAC;AAAA,IAC/F,CAAK,EAAE,MAAM,EAAI,GACPsiD,KAAmB,CAACpwG,GAAQs9B,MAAU,CAAAuC,MAAYqoE,GAAY5qE,GAAOuC,CAAQ,EAAE,IAAI,CAAA/+B,MAAO,MAAM4tG,GAAiB1uG,GAAQc,CAAG,CAAC,GAC7HuvG,KAAe,CAACrwG,GAAQs9B,GAAOr7C,GAAMlT,MAAO;AAChD,YAAM6rB,IAAWoF,EAAO,WAClB+uG,IAAmBrwH,GAAM4tE,IAAgBtsD,CAAM;AACrD,MAAAA,EAAO,YAAY,OAAO,MAAM;AAC9B,QAAAA,EAAO,UAAU,OAAOkwG,GAAmBjuH,GAAMlT,CAAE,CAAC,GACpDq+E,GAAwBptD,CAAM,GAC9B6oG,GAAakG,GAAkBn0G,GAAU4yB,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE,CAAC,EAAE,IAAIgpG,EAAM,EAAE,KAAKoH,GAAiBpwG,GAAQs9B,CAAK,CAAC,EAAE,KAAKp+C,EAAI;AAAA,MACrK,CAAO,GACD8gB,EAAO,YAAW;AAAA,IACxB,GACUswG,KAAU,CAAC11G,GAAUhK,MAAS;AAClC,YAAMqV,IAAc44B,GAAiBjuC,GAAMgK,CAAQ;AACnD,aAAOqL,KAA4BrL;AAAA,IACzC,GACU21G,KAA2B,CAACvwG,GAAQs9B,GAAOpN,GAASjuC,MAAS;AACjE,YAAM2Y,IAAW01G,GAAQtwG,EAAO,QAAO,GAAI/d,EAAK,UAAS,CAAE,GACrD8sH,IAAmBrwH,GAAM4tE,IAAgBtsD,CAAM,GAC/CwpG,IAAeX,GAAakG,GAAkBn0G,GAAU3Y,CAAI;AAQlE,aAPiBunH,EAAa,KAAK,CAAA3pE,MAC7B3P,IACK2P,EAAS,KAAKthD,GAASc,EAAS,KAAK2pH,GAAOnpE,CAAQ,CAAC,CAAC,GAAGxgD,EAAS,MAAMd,GAASc,EAAS,KAAK0pH,GAAQlpE,CAAQ,CAAC,CAAC,GAAGxgD,EAAS,IAAI,IAEjIwgD,EAAS,KAAKxgD,EAAS,MAAMd,GAASc,EAAS,KAAK0pH,GAAQlpE,CAAQ,CAAC,CAAC,GAAGxgD,EAAS,MAAMd,GAASc,EAAS,KAAK2pH,GAAOnpE,CAAQ,CAAC,CAAC,CAAC,CAE3I,EACe,IAAIuwE,GAAiBpwG,GAAQs9B,CAAK,CAAC,EAAE,WAAW,MAAM;AACpE,cAAMkzE,IAAatuE,GAAShS,GAASt1B,GAAU3Y,CAAI,GAC7CwnH,IAAa+G,EAAW,KAAK,CAAA1vG,MAAO+nG,GAAakG,GAAkBn0G,GAAUkG,CAAG,CAAC;AACvF,eAAOnU,GAAM68G,GAAcC,GAAY,MAAMh9C,GAAesiD,GAAkBn0G,GAAU3Y,CAAI,EAAE,KAAK,CAAAid,MAC7FixG,GAA8BjxG,CAAG,IAC5B7f,EAAS,KAAK,MAAM;AACzB,UAAA0sE,GAAgB/rD,GAAQkwB,GAASn/B,EAAa,QAAQmO,CAAG,CAAC;AAAA,QACxE,CAAa,IAEM7f,EAAS,MAEnB,CAAC,EAAE,WAAW,MAAMoqH,EAAW,KAAK,MAAM+G,EAAW,IAAI,CAAAzhI,MACjD,MAAM;AACX,UAAImhD,IACFmgF,GAAarwG,GAAQs9B,GAAOr7C,GAAMlT,CAAE,IAEpCshI,GAAarwG,GAAQs9B,GAAOvuD,GAAIkT,CAAI;AAAA,QAElD,CACS,CAAC,CAAC;AAAA,MACX,CAAO;AAAA,IACP,GACUwuH,KAAoB,CAACzwG,GAAQs9B,GAAOpN,MAAY;AACpD,UAAIlwB,EAAO,UAAU,YAAa,KAAI43B,GAA0B53B,CAAM,GAAG;AACvE,cAAM/d,IAAOurC,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AACnE,eAAOuwG,GAAyBvwG,GAAQs9B,GAAOpN,GAASjuC,CAAI;AAAA,MAC7D;AACD,aAAO5C,EAAS;IACtB,GAEUqxH,KAAsB,CAAAxxG,MAAO5L,GAAgB4L,CAAG,IAAI,GACpDyxG,KAAkB,CAAC3wG,GAAQhiB,MAAS;AACxC,YAAM0pB,IAAU3W,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC/C6zC,IAAW9iD,EAAa,QAAQiP,EAAO,UAAU,SAAQ,CAAE,GAC3D6G,IAAU4/C,GAAe5S,GAAUnsC,CAAO;AAChD,aAAOxmB,GAAY2lB,GAAS7oB,CAAI,EAAE,KAAKO,GAASsoB,CAAO,GAAG,CAAAnuB,MAASmuB,EAAQ,MAAM,GAAGnuB,CAAK,CAAC;AAAA,IAChG,GACUk4H,KAAkB,CAAA1xG,MAAO5L,GAAgB4L,CAAG,MAAM,GAClD2xG,KAAwC,CAAA7wG,MAAU2wG,GAAgB3wG,GAAQ,CAAAd,MAAOc,EAAO,OAAO,QAAQ5c,GAAK8b,CAAG,CAAC,KAAKwxG,GAAoBxxG,CAAG,CAAC,GAC7I4xG,KAAmB,CAAA9wG,MAAU2wG,GAAgB3wG,GAAQ,CAAA5L,MAAM4L,EAAO,OAAO,QAAQ5c,GAAKgR,CAAE,CAAC,CAAC,GAC1F28G,KAAiB,CAAC/wG,GAAQgxG,MAAkB;AAChD,YAAMC,IAAoBvyH,GAAM2hF,IAAiBrgE,CAAM;AACvD,aAAO5e,GAAO4vH,GAAe,CAAA9xG,MAAO+xG,EAAkB/xG,CAAG,IAAI,CAACA,EAAI,GAAG,IAAI,CAAA,CAAE;AAAA,IACjF,GACUgyG,KAAwB,CAAAlxG,MAAU;AACtC,YAAMgxG,IAAgBF,GAAiB9wG,CAAM;AAC7C,aAAO+wG,GAAe/wG,GAAQgxG,CAAa;AAAA,IACjD,GACUG,KAAqB,CAACjhF,GAASlwB,GAAQ9W,GAAQ8nH,MAAkB;AACrE,YAAMpyC,IAAcmyC,GAAe/wG,GAAQgxG,CAAa;AACxD,UAAIpyC,EAAY,WAAW;AACzB,QAAA7S,GAAgB/rD,GAAQkwB,GAAShnC,CAAM;AAAA,WAClC;AACL,cAAM4X,IAAMq/D,GAAuBj3E,EAAO,KAAK01E,CAAW;AAC1D,QAAA5+D,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA;AAAA,MACtC;AAAA,IACP,GACUswG,KAAgB,CAACpxG,GAAQkwB,MAAY;AACzC,YAAM8gF,IAAgBrwH,GAASkwH,GAAsC7wG,CAAM,GAAG4wG,EAAe;AAC7F,aAAO5uH,GAAOgvH,CAAa,EAAE,KAAK,CAAA9nH,MAAU;AAC1C,cAAM0kE,IAAUpgC,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AACtE,eAAI2tD,GAAgCz9B,GAAS09B,GAAS1kE,EAAO,GAAG,KAAK,CAAC+gD,GAA0B/gD,CAAM,IAC7F7J,EAAS,KAAK,MAAM8xH,GAAmBjhF,GAASlwB,GAAQ9W,GAAQ8nH,CAAa,CAAC,IAE9E3xH,EAAS;MAE1B,CAAO;AAAA,IACP,GACUgyH,KAAqB,CAACrxG,GAAQd,MAAQ;AAC1C,YAAMsG,IAAYtG,EAAI;AACtB,aAAOrC,GAAOqC,CAAG,KAAK,CAAC1hB,GAAOgoB,CAAS,KAAKxF,EAAO,IAAI,QAAQwF,CAAS;AAAA,IAC9E,GACU8rG,KAAe,CAAApyG,MAAO+qC,GAA0Bl5C,EAAa,QAAQmO,CAAG,CAAC,GACzEqyG,KAA2B,CAACvxG,GAAQ4+D,MAAgB;AACxD,YAAM/qB,IAAW7zC,EAAO,UAAU,SAAQ,GACpCc,IAAMuwG,GAAmBrxG,GAAQ6zC,CAAQ,KAAKy9D,GAAaz9D,CAAQ,IAAIssB,GAAuBtsB,GAAU+qB,CAAW,IAAIwB,GAA2BpgE,EAAO,UAAU,OAAM,GAAI4+D,CAAW;AAC9L,MAAA5+D,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA;AAAA,IAC3C,GACU0wG,KAAoB,CAACxxG,GAAQyxG,MAAkB;AACnD,YAAMC,IAAiBnwH,GAAWkwH,GAAeP,GAAsBlxG,CAAM,CAAC;AAC9E,MAAI0xG,EAAe,SAAS,KAC1BH,GAAyBvxG,GAAQ0xG,CAAc;AAAA,IAEvD,GACUC,KAA6B,CAAAv7H,MAAOmmB,GAASnmB,EAAI,cAAc,GAC/Dw7H,KAAoC,CAAAx7H,MAAOA,EAAI,gBAAgB,KAAKu7H,GAA2Bv7H,CAAG,GAClGy7H,KAAkC,CAAC7xG,GAAQ5pB,MAAQ;AACvD,YAAM07H,IAAc17H,EAAI,eAAe;AACvC,aAAO,CAACoH,GAAOs0H,CAAW,KAAKzxC,GAAgBrgE,GAAQjP,EAAa,QAAQ+gH,CAAW,CAAC;AAAA,IAC9F,GACUC,KAAiC,CAAA37H,MAAO;AAC5C,YAAM07H,IAAc17H,EAAI,eAAe,YACjC47H,IAAY57H,EAAI,aAAa;AACnC,aAAO,CAACoH,GAAOs0H,CAAW,KAAK,CAACt0H,GAAOw0H,CAAS,KAAKF,EAAY,YAAYE,CAAS;AAAA,IAC5F,GACUC,KAA+B,CAAA77H,MAAO;AAC1C,YAAMs1D,IAAet1D,EAAI;AACzB,aAAOA,EAAI,eAAemmB,GAASmvC,CAAY,IAAIA,EAAa,SAASA,EAAa,WAAW;AAAA,IACvG,GACUwmE,KAAiC,CAAA97H,MAAO27H,GAA+B37H,CAAG,KAAK67H,GAA6B77H,CAAG,GAC/G+7H,KAAoC,CAAA/7H,MAAO,CAACA,EAAI,aAAa,YAAYA,EAAI,uBAAuB,GACpGg8H,KAAwC,CAAAh8H,MAAO87H,GAA+B97H,CAAG,KAAK+7H,GAAkC/7H,CAAG,GAC3Hi8H,KAA8B,CAAAryG,MAAU;AAC5C,YAAM5pB,IAAM4pB,EAAO,UAAU,OAAM;AACnC,aAAO4xG,GAAkCx7H,CAAG,KAAKy7H,GAAgC7xG,GAAQ5pB,CAAG,KAAKg8H,GAAsCh8H,CAAG;AAAA,IAChJ,GACUk8H,KAAgB,CAAAtyG,MAAU;AAC9B,UAAIqyG,GAA4BryG,CAAM,GAAG;AACvC,cAAM4+D,IAAcsyC,GAAsBlxG,CAAM;AAChD,eAAO3gB,EAAS,KAAK,MAAM;AACzB,UAAA+tE,GAAwBptD,CAAM,GAC9BwxG,GAAkBxxG,GAAQ4+D,CAAW;AAAA,QAC/C,CAAS;AAAA,MACT;AACQ,eAAOv/E,EAAS;IAExB,GACUkzH,KAAoB,CAACvyG,GAAQkwB,MAAYlwB,EAAO,UAAU,gBAAgBoxG,GAAcpxG,GAAQkwB,CAAO,IAAIoiF,GAActyG,CAAM,GAC/HwyG,KAAyB,CAACtzG,GAAKQ,MAAW0uD,GAAWlvD,GAAK,CAAAtO,MAAQ+xC,GAAY/xC,EAAK,GAAG,GAAG,CAAAwD,MAAMsL,EAAO,QAAQtc,GAAKgR,CAAE,CAAC,CAAC,GACvHq+G,KAAgC,CAAAzyG,MAAUwyG,GAAuBzhH,EAAa,QAAQiP,EAAO,UAAU,SAAU,CAAA,GAAGA,EAAO,MAAM,GACjI0yG,KAA+B,CAAA1yG,MAAU;AAC7C,YAAM5pB,IAAM4pB,EAAO,UAAU,OAAM;AACnC,aAAO5pB,EAAI,cAAcu7H,GAA2Bv7H,CAAG,KAAK4pB,EAAO,IAAI,QAAQ5pB,EAAI,cAAc,MAAM,CAACq8H,GAA8BzyG,CAAM;AAAA,IAClJ,GACU2yG,KAAe,CAAA3yG,OACf0yG,GAA6B1yG,CAAM,KACrCuxG,GAAyBvxG,GAAQ,CAAA,CAAE,GAE9B,KAGH4yG,KAAgB,CAAC5yG,GAAQkwB,GAASjiC,MAClCrQ,GAAcqQ,CAAO,IAChB5O,EAAS,KAAK,MAAM;AACzB,MAAA2gB,EAAO,oBAAoB,iBAC3B+rD,GAAgB/rD,GAAQkwB,GAASn/B,EAAa,QAAQ9C,CAAO,CAAC;AAAA,IACxE,CAAS,IAEM5O,EAAS,QAGdwzH,KAAc,CAAC7yG,GAAQkwB,MAAY;AACvC,YAAM4iF,IAAc5iF,IAAU+1B,KAAgBC,IACxCt9B,IAAYsH,IAAUqQ,GAAW,WAAWA,GAAW,WACvDqtB,IAAU7tB,GAA2BnX,GAAW5oB,EAAO,QAAS,GAAEA,EAAO,UAAU,OAAM,CAAE;AACjG,aAAI8yG,EAAYllD,CAAO,IACdglD,GAAc5yG,GAAQkwB,GAAS09B,EAAQ,QAAQ,CAAC19B,CAAO,CAAC,IAExD7wC,EAAS,KAAKytE,GAAkB58B,GAAS09B,CAAO,CAAC,EAAE,OAAO,CAAA9sD,MAAOgyG,EAAYhyG,CAAG,KAAKu/B,GAAsButB,GAAS9sD,CAAG,CAAC,EAAE,KAAK,CAAAA,MAAO8xG,GAAc5yG,GAAQkwB,GAASpvB,EAAI,QAAQ,CAACovB,CAAO,CAAC,CAAC;AAAA,IAE1M,GACUk1E,KAAc,CAACplG,GAAQkwB,MAAY;AACvC,YAAMgX,IAAelnC,EAAO,UAAU,QAAO;AAC7C,aAAO7C,GAAU+pC,CAAY,IAAI0rE,GAAc5yG,GAAQkwB,GAASgX,CAAY,IAAI7nD,EAAS;IAC/F,GACU0zH,KAAoB,CAAC/yG,GAAQkwB,MAAYlwB,EAAO,UAAU,YAAW,IAAK6yG,GAAY7yG,GAAQkwB,CAAO,IAAIk1E,GAAYplG,GAAQkwB,CAAO,GAEpIk+D,KAAa,CAAAllG,MAAUyL,GAAUzL,GAAQ,CAAAgW,MAAOnC,GAAwBmC,EAAI,GAAG,KAAKlC,GAAyBkC,EAAI,GAAG,CAAC,EAAE,OAAO,CAAAA,MAAOnC,GAAwBmC,EAAI,GAAG,CAAC,GACrK8zG,KAAmB,CAAAr7H,MAASkR,GAAMlR,KAA6C,EAAE,EAAE,MAAM,CAAC,GAC1Fs7H,KAAqB,CAACC,GAAWjlH,MAAY;AACjD,YAAMklH,IAAkBD,KAAaz0G,GAAUxQ,CAAO,IAAI,WAAW,WAC/D7F,IAAS6N,GAAMhI,GAAS,WAAW,MAAM,QAAQ,WAAW;AAClE,aAAOklH,IAAkB/qH;AAAA,IAC/B,GACUgrH,KAAgB,CAACxkH,GAAK6kC,GAASy/E,GAAWv7H,GAAO07H,GAAMplH,MAAY;AACvE,YAAMklH,IAAkBF,GAAmBC,GAAWniH,EAAa,QAAQ9C,CAAO,CAAC,GAC7EqlH,IAAcN,GAAiBpkH,EAAI,SAASX,GAASklH,CAAe,CAAC;AAC3E,UAAI1/E,MAAY,WAAW;AACzB,cAAMwwC,IAAa,KAAK,IAAI,GAAGqvC,IAAc37H,CAAK;AAClD,QAAAiX,EAAI,SAASX,GAASklH,GAAiBlvC,IAAaA,IAAaovC,IAAO,EAAE;AAAA,MAClF,OAAa;AACL,cAAMpvC,IAAaqvC,IAAc37H,IAAQ07H;AACzC,QAAAzkH,EAAI,SAASX,GAASklH,GAAiBlvC,CAAU;AAAA,MAClD;AAAA,IACP,GACUsvC,KAAiB,CAACvzG,GAAQ4gE,MAAWv/E,GAAOu/E,GAAQ,CAAAt6D,MAAS;AACjE,YAAM6sG,IAAkBF,GAAmBr8E,GAAsB52B,CAAM,GAAGsG,CAAK,GACzEktG,IAAcr9G,GAAOmQ,GAAO6sG,CAAe,EAAE,IAAIH,EAAgB,EAAE,MAAM,CAAC;AAEhF,aADwBhzG,EAAO,IAAI,mBAAmBsG,EAAM,GAAG,MACpC,WAAWktG,IAAc;AAAA,IAC1D,CAAK,GACKC,KAAa,CAAAzzG,MAAU;AAC3B,YAAM4gE,IAAS8yC,GAAkB1zG,CAAM;AACvC,aAAO,CAACA,EAAO,KAAK,WAAY,MAAK4gE,EAAO,SAAS,KAAK2yC,GAAevzG,GAAQ4gE,CAAM;AAAA,IAC7F,GACU+yC,KAAkB,CAAAv/G,MAAMwK,GAAOxK,CAAE,KAAKyK,GAAazK,CAAE,GACrDw/G,KAAwB,CAAAx/G,MAAMhC,GAAOgC,CAAE,EAAE,OAAOu/G,EAAe,GAC/DD,KAAoB,CAAA1zG,MAAUrf,GAAS6W,GAAUwI,EAAO,UAAU,kBAAiB,CAAE,GAAG,CAAA5L,MAAM,CAACu/G,GAAgBv/G,CAAE,KAAK,CAACw/G,GAAsBx/G,CAAE,KAAKg6F,GAAWh6F,CAAE,CAAC,GAClK8+C,KAAS,CAAClzC,GAAQyzB,MAAY;AAClC,UAAI7sD,GAAIw2C;AACR,YAAM,EAAC,KAAAxuB,EAAG,IAAIoR,GACR6zG,IAAch9E,GAAe72B,CAAM,GACnC8zG,KAAc12F,KAAMx2C,IAAK,YAAY,KAAKitI,CAAW,OAAO,QAAQjtI,MAAO,SAAS,SAASA,EAAG,CAAC,OAAO,QAAQw2C,MAAO,SAASA,IAAK,MACrI22F,IAAcf,GAAiBa,CAAW,GAC1CX,IAAYt8E,GAAsB52B,CAAM;AAC9C,MAAA1f,EAAOozH,GAAkB1zG,CAAM,GAAG,CAAAsG,MAAS;AACzC,QAAA8sG,GAAcxkH,GAAK6kC,GAASy/E,GAAWa,GAAaD,GAAYxtG,EAAM,GAAG;AAAA,MACjF,CAAO;AAAA,IACP,GACUw9C,KAAS,CAAA9jD,MAAUkzC,GAAOlzC,GAAQ,QAAQ,GAC1Cg0G,KAAU,CAAAh0G,MAAUkzC,GAAOlzC,GAAQ,SAAS,GAE5Ci0G,KAAoB,CAAAj0G,MAAU;AAClC,UAAIA,EAAO,UAAU,YAAa,KAAIyzG,GAAWzzG,CAAM,GAAG;AACxD,cAAMpR,IAAMoR,EAAO,KACb5pB,IAAM4pB,EAAO,UAAU,OAAM,GAC7Bc,IAAM0sB,GAAc,eAAep3C,CAAG,GACtCkwB,IAAQ1X,EAAI,UAAUxY,EAAI,gBAAgBwY,EAAI,OAAO;AAC3D,YAAI0X,MAAU,QAAQ2gD,GAAiBl2D,EAAa,QAAQuV,CAAK,GAAGxF,GAAKd,EAAO,MAAM;AACpF,iBAAO3gB,EAAS,KAAK,MAAM20H,GAAQh0G,CAAM,CAAC;AAAA,MAE7C;AACD,aAAO3gB,EAAS;IACtB,GAEU60H,KAAa,CAACl0G,GAAQs9B,GAAOpN,MAAYhuC,GAAQ;AAAA,MACrD+xH;AAAA,MACA9M;AAAA,MACAzB;AAAA,MACA,CAAC1lG,GAAQkwB,MAAYugF,GAAkBzwG,GAAQs9B,GAAOpN,CAAO;AAAA,MAC7DwzE;AAAA,MACAtvC;AAAA,MACAizC;AAAA,MACA0L;AAAA,MACA5O;AAAA,MACAoO;AAAA,IACD,GAAE,CAAAjuH,MAAQA,EAAK0b,GAAQkwB,CAAO,CAAC,EAAE,OAAO,CAAAtgD,MAAKowB,EAAO,UAAU,WAAY,CAAA,GACrEm0G,KAAgB,CAACn0G,GAAQs9B,MAAU;AAEvC,MADe42E,GAAWl0G,GAAQs9B,GAAO,EAAK,EACvC,KAAK,MAAM;AAChB,QAAIt9B,EAAO,UAAU,iBACnBotD,GAAwBptD,CAAM,GAC9BytD,GAAcztD,CAAM;AAAA,MAEvB,GAAE9gB,EAAI;AAAA,IACb,GACUk1H,KAAuB,CAACp0G,GAAQs9B,MAAU;AAE9C,MADe42E,GAAWl0G,GAAQs9B,GAAO,EAAI,EACtC,KAAK,MAAM;AAChB,QAAIt9B,EAAO,UAAU,gBACnBqtD,GAA+BrtD,CAAM;AAAA,MAExC,GAAE9gB,EAAI;AAAA,IACb,GACUm1H,KAAU,CAACr0G,GAAQs9B,MAAU;AACjC,MAAAt9B,EAAO,WAAW,UAAU,MAAM;AAChC,QAAAm0G,GAAcn0G,GAAQs9B,CAAK;AAAA,MACnC,CAAO,GACDt9B,EAAO,WAAW,iBAAiB,MAAM;AACvC,QAAAo0G,GAAqBp0G,GAAQs9B,CAAK;AAAA,MAC1C,CAAO;AAAA,IACP,GAEUg3E,KAAmB,GACnBC,KAAkB,KAClBC,KAAW,CAAArgH,MACXA,EAAM,YAAY,UAAaA,EAAM,QAAQ,WAAW,IACnD9U,EAAS,SAEXA,EAAS,KAAK8U,EAAM,QAAQ,CAAC,CAAC,GAEjCsgH,KAAc,CAAC9iE,GAAOp6B,MAAS;AACnC,YAAMm9F,IAAQ,KAAK,IAAI/iE,EAAM,UAAUp6B,EAAK,CAAC,GACvCo9F,IAAQ,KAAK,IAAIhjE,EAAM,UAAUp6B,EAAK,CAAC;AAC7C,aAAOm9F,IAAQJ,MAAoBK,IAAQL;AAAA,IACjD,GACUM,KAAU,CAAA50G,MAAU;AACxB,YAAM60G,IAAY7vF,MACZ8vF,IAAiB9yF,GAAK,EAAK,GAC3B+yF,IAAoB3vF,GAAO,CAAAlrD,MAAK;AACpC,QAAA8lC,EAAO,SAAS,aAAa;AAAA,UAC3B,GAAG9lC;AAAA,UACH,MAAM;AAAA,QAChB,CAAS,GACD46I,EAAe,IAAI,EAAI;AAAA,MACxB,GAAEP,EAAe;AAClB,MAAAv0G,EAAO,GAAG,cAAc,CAAA9lC,MAAK;AAC3B,QAAAs6I,GAASt6I,CAAC,EAAE,KAAK,CAAAy3E,MAAS;AACxB,UAAAojE,EAAkB,OAAM;AACxB,gBAAMx9F,IAAO;AAAA,YACX,GAAGo6B,EAAM;AAAA,YACT,GAAGA,EAAM;AAAA,YACT,QAAQz3E,EAAE;AAAA,UACtB;AACU,UAAA66I,EAAkB,SAAS76I,CAAC,GAC5B46I,EAAe,IAAI,EAAK,GACxBD,EAAU,IAAIt9F,CAAI;AAAA,QAC5B,CAAS;AAAA,MACF,GAAE,EAAI,GACPvX,EAAO,GAAG,aAAa,CAAA9lC,MAAK;AAC1B,QAAA66I,EAAkB,OAAM,GACxBP,GAASt6I,CAAC,EAAE,KAAK,CAAAy3E,MAAS;AACxB,UAAAkjE,EAAU,GAAG,CAAAt9F,MAAQ;AACnB,YAAIk9F,GAAY9iE,GAAOp6B,CAAI,MACzBs9F,EAAU,MAAK,GACfC,EAAe,IAAI,EAAK,GACxB90G,EAAO,SAAS,iBAAiB;AAAA,UAE/C,CAAW;AAAA,QACX,CAAS;AAAA,MACF,GAAE,EAAI,GACPA,EAAO,GAAG,wBAAwB,CAAA9lC,MAAK;AAErC,QADA66I,EAAkB,OAAM,GACpB76I,EAAE,SAAS,iBAGf26I,EAAU,IAAG,EAAG,OAAO,CAAAt9F,MAAQA,EAAK,OAAO,YAAYr9C,EAAE,MAAM,CAAC,EAAE,KAAK,MAAM;AAC3E,UAAI46I,EAAe,QACjB56I,EAAE,eAAc,IAEhB8lC,EAAO,SAAS,OAAO;AAAA,YACrB,GAAG9lC;AAAA,YACH,MAAM;AAAA,UACpB,CAAa;AAAA,QAEb,CAAS;AAAA,MACF,GAAE,EAAI;AAAA,IACb,GAEU86I,KAAiB,CAAC1qC,GAAe15E,MAASpN,GAAM8mF,GAAe15E,EAAK,QAAQ,GAC5EqkH,KAAgB,CAACv1G,GAAQ9O,MACzB2L,GAAS3L,CAAI,IACR,KACEuK,GAAYvK,CAAI,IAClB,CAACokH,GAAet1G,EAAO,iBAAgB,GAAI9O,CAAI,KAAK,CAAC6zC,GAAiB7zC,CAAI,KAAK,CAACyV,GAAmB3G,GAAQ9O,CAAI,KAAK,CAACyT,GAAqBzT,CAAI,IAE9I,IAGLskH,KAAiB,CAAC5qC,GAAepzF,GAAM0Z,MACpCxQ,EAAOymB,GAAQ9V,EAAa,QAAQH,CAAI,GAAGG,EAAa,QAAQ7Z,CAAI,CAAC,GAAG,CAAAgoB,MACtE81G,GAAe1qC,GAAeprE,EAAI,GAAG,CAC7C,GAEGi2G,KAAuB,CAAC7qC,GAAe15E,MAAS;AACpD,UAAI2L,GAAS3L,CAAI,GAAG;AAClB,YAAIA,EAAK,KAAK,WAAW;AACvB,iBAAO;AACF,YAAI,QAAQ,KAAKA,EAAK,IAAI;AAC/B,iBAAO,CAACA,EAAK,eAAeokH,GAAe1qC,GAAe15E,EAAK,WAAW,KAAKyT,GAAqBzT,EAAK,WAAW;AAAA,MAEvH;AACD,aAAO;AAAA,IACb,GACUwkH,KAAkB,CAAAp1G,MAAUA,EAAO,IAAI,OAAOw1B,GAAmBx1B,CAAM,GAAGy1B,GAAwBz1B,CAAM,CAAC,GACzG+9E,KAAgB,CAAA/9E,MAAU;AAC9B,YAAMpR,IAAMoR,EAAO,KAAKiwB,IAAYjwB,EAAO,WACrCN,IAASM,EAAO,QAChBsqE,IAAgB5qE,EAAO,oBACvB/E,IAAYs1B,EAAU,YACtBr1B,IAAWoF,EAAO;AACxB,UAAIi+E,GACA57E,GACA1J,IAAU;AACd,YAAM+qE,IAAkBluC,GAAmBx1B,CAAM;AACjD,UAAI,CAACrF,KAAa,CAACQ,GAAYR,CAAS;AACtC;AAEF,YAAM06G,IAAez6G,EAAS,SAAS,YAAW;AAClD,UAAI,CAAC8E,EAAO,aAAa21G,GAAc3xC,EAAgB,aAAa,KAAKwxC,GAAe5qC,GAAe1vE,GAAUD,CAAS;AACxH;AAEF,YAAMvkB,IAAM65C,EAAU,UAChB,EAAC,gBAAAnF,GAAgB,aAAAC,GAAa,cAAA2gB,GAAc,WAAAC,EAAS,IAAIv1D,GACzDk/H,KAAmBp4E,GAASl9B,CAAM;AACxC,UAAIpP,KAAOgK,EAAS;AACpB,aAAOhK;AAIL,YAHIuK,GAAYvK,EAAI,KAClB6V,GAAc/G,GAAQ9O,EAAI,GAExBqkH,GAAcv1G,GAAQ9O,EAAI,GAAG;AAC/B,cAAIukH,GAAqB7qC,GAAe15E,EAAI,GAAG;AAC7C,YAAAyR,IAAWzR,IACXA,KAAOA,GAAK,aACZhC,EAAI,OAAOyT,CAAQ;AACnB;AAAA,UACD;AACD,UAAK47E,MACHA,IAAgBm3B,GAAgBp1G,CAAM,GACtCpF,EAAS,aAAaqjF,GAAertF,EAAI,GACzC+H,IAAU,KAEZ0J,IAAWzR,IACXA,KAAOA,GAAK,aACZqtF,EAAc,YAAY57E,CAAQ;AAAA,QAC5C;AACU,UAAA47E,IAAgB,MAChBrtF,KAAOA,GAAK;AAGhB,MAAI+H,KAAW28G,OACbl/H,EAAI,SAAS00C,GAAgBC,CAAW,GACxC30C,EAAI,OAAOs1D,GAAcC,CAAS,GAClC1b,EAAU,OAAO75C,CAAG,GACpB4pB,EAAO,YAAW;AAAA,IAE1B,GACUu1G,KAAkB,CAACv1G,GAAQ9oB,GAAM8pB,MAAgB;AACrD,YAAMsF,IAAQvV,EAAa,QAAQqkH,GAAgBp1G,CAAM,CAAC,GACpD7iC,IAAKoiC;AACX,MAAA3I,GAAS0P,GAAOnpC,CAAE,GAClB6jC,EAAY9pB,GAAMovB,CAAK;AACvB,YAAMlwB,IAAM,SAAS;AACrB,aAAAA,EAAI,eAAejZ,EAAG,GAAG,GACzBiZ,EAAI,aAAajZ,EAAG,GAAG,GAChBiZ;AAAA,IACb,GACUo/H,KAAU,CAAAx1G,MAAU;AACxB,MAAAA,EAAO,GAAG,cAActhB,GAAMq/F,IAAe/9E,CAAM,CAAC;AAAA,IAC1D,GAEU4e,KAAW,CAAA62F,MAAkB,CAAA7kH,OAAS,MAAMA,EAAK,KAAK,OAAO,IAAI,KAAK,QAAQ6kH,CAAc,MAAM,IAClGC,KAAuB,CAAC11G,GAAQpI,GAAS4mB,MACtC,SAAUjI,GAAO;AACtB,YAAM77B,IAAO,WAAWhC,IAAQgC,EAAKA,EAAK,SAAS,CAAC,GAC9Ci7H,IAAWj9H,IAAQ,IAAIkf,EAAQ,OAAOlf,IAAQ,CAAC,IAAI;AACzD,UAAIi9H,MAAa;AACf,eAAOp/F;AAET,UAAIo/F,MAAa,KAAK;AACpB,cAAMC,IAAoBh+G,EAAQ,YAAY,KAAKlf,CAAK;AACxD,YAAIk9H,MAAsB,MACRh+G,EAAQ,UAAUg+G,GAAmBl9H,CAAK,EAC9C,QAAQ,yBAAyB,MAAM;AACjD,iBAAO69B;AAAA,MAGZ;AACD,aAAO,kBAAkBiI,IAAM,yBAAyBxe,EAAO,IAAI,OAAOtlB,EAAK,CAAC,CAAC,IAAI,OAAOslB,EAAO,IAAI,OAAO,OAAOtlB,EAAK,CAAC,KAAM,WAAWA,EAAK,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAI;AAAA,IACzK,GAEUm7H,KAA8B,CAAC71G,GAAQ81G,GAAoB57I,MAAM;AACrE,UAAI0E,IAAIk3I,EAAmB,QAAQl+G,IAAU19B,EAAE;AAC/C,UAAIA,EAAE,WAAW,OAGjB;AAAA,eAAO0E;AACL,UAAAg5B,IAAUA,EAAQ,QAAQk+G,EAAmBl3I,CAAC,GAAG82I,GAAqB11G,GAAQpI,GAAS0iC,GAAoBt6B,CAAM,CAAC,CAAC;AAErH,QAAA9lC,EAAE,UAAU09B;AAAA;AAAA,IAClB,GACUm+G,KAAU,CAAA/1G,MAAU;AACxB,YAAMg2G,IAA0B,mBAC1BC,IAAY,MAAM/pH,GAAM,KAAKquC,GAAiBv6B,CAAM,CAAC,IAAI,KACzDk2G,IAAe,MAAMhqH,GAAM,KAAKouC,GAAoBt6B,CAAM,CAAC,IAAI,KAC/Dm2G,IAAev3F,GAASq3F,CAAS,GACjCG,IAAkBx3F,GAASs3F,CAAY,GACvCJ,IAAqBt7E,GAAsBx6B,CAAM;AACvD,MAAI81G,EAAmB,SAAS,KAC9B91G,EAAO,GAAG,oBAAoB,CAAA9lC,MAAK;AACjC,QAAA27I,GAA4B71G,GAAQ81G,GAAoB57I,CAAC;AAAA,MACnE,CAAS,GAEH8lC,EAAO,OAAO,mBAAmB,SAAS,CAAAvI,MAAS;AACjD,YAAI74B,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,UAAIu3I,EAAavlH,CAAI,IACnBA,EAAK,KAAKolH,GAAyB,MAAM,IAChCI,EAAgBxlH,CAAI,KAC7BA,EAAK,KAAKolH,GAAyB,OAAO;AAAA,QAE7C;AAAA,MACT,CAAO,GACDh2G,EAAO,WAAW,mBAAmBg2G,GAAyB,CAAAv+G,MAAS;AACrE,YAAI74B,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,UAAI,CAACu3I,EAAavlH,CAAI,KAAK,CAACwlH,EAAgBxlH,CAAI,MAG5CklH,EAAmB,SAAS,KAAKllH,EAAK,KAAK,kBAAkB,KAC/DA,EAAK,OAAO,SACZA,EAAK,OAAO,GACZA,EAAK,MAAM,IACXA,EAAK,QAAQA,EAAK,KAAK,kBAAkB,KAEzCA,EAAK,KAAKolH,GAAyB,IAAI;AAAA,QAE1C;AAAA,MACT,CAAO;AAAA,IACP,GAEUK,KAA0B,CAAAr2G,MAAU7K,GAAapE,EAAa,QAAQiP,EAAO,QAAO,CAAE,GAAG,mBAAmB,EAAE,IAAI,CAAAd,MAAOA,EAAI,GAAG,EAAE,aAClIo3G,KAA0B,CAACt2G,GAAQu2G,MAAwB;AAC/D,MAAIA,EAAoB,aAAa,gBAAgB,MACnDl1G,GAAwBk1G,CAAmB,GAC3Cv2G,EAAO,UAAU,OAAOA,EAAO,UAAU,OAAM,CAAE,GACjDA,EAAO,UAAU,eAAeu2G,CAAmB;AAAA,IAE3D,GACUC,KAAuB,CAACx2G,GAAQ9lC,MAAM;AAC1C,YAAMq8I,IAAsBF,GAAwBr2G,CAAM;AAC1D,UAAKu2G,GAGL;AAAA,YAAIr8I,EAAE,SAAS,oBAAoB;AACjC,UAAAA,EAAE,eAAc,GAChBA,EAAE,gBAAe,GACjBo8I,GAAwBt2G,GAAQu2G,CAAmB;AACnD;AAAA,QACD;AACD,QAAIj2G,GAAWi2G,CAAmB,MAChCD,GAAwBt2G,GAAQu2G,CAAmB,GACnDv2G,EAAO,YAAY;;IAE3B,GACUy2G,KAAU,CAAAz2G,MAAU;AACxB,MAAAA,EAAO,GAAG,0BAA0BthB,GAAM83H,IAAsBx2G,CAAM,CAAC;AAAA,IAC7E,GAEU02G,KAA2B15G,IAC3B25G,KAA4B,CAAC/tF,GAAW5oB,GAAQwB,MAAU+rG,GAAiBvtG,GAAQ4oB,GAAWpnB,GAAO6kD,IAA8BC,IAA6BowD,EAAwB,GACxLE,KAA0B,CAAChuF,GAAW5oB,GAAQwB,MAG3CosG,GAAe5tG,GAAQ4oB,GAAWpnB,GAFxB,CAAA4rB,MAAiBi5B,GAA6Bj5B,CAAa,KAAK+4B,GAAc/4B,CAAa,GAC5F,CAAAA,MAAiBk5B,GAA4Bl5B,CAAa,KAAKg5B,GAAah5B,CAAa,GACtCspF,EAAwB,GAEvFG,KAAkB,CAAA72G,MAAU;AAChC,YAAM82G,IAAY92G,EAAO,IAAI,OAAOw1B,GAAmBx1B,CAAM,CAAC;AAC9D,aAAA82G,EAAU,YAAY,2BACfA;AAAA,IACb,GACUC,KAAe,CAAC/2G,GAAQ4oB,GAAWpnB,MAAU;AACjD,YAAM83D,IAAc93B,GAAYxhC,EAAO,QAAS,CAAA,GAC1Cg3G,IAA2Bt4H,GAAMyhD,IAAwBvX,MAAc,IAAI0wC,EAAY,OAAOA,EAAY,IAAI;AACpH,UAAI93D,EAAM,WAAW;AACnB,cAAMq/D,IAAM7gE,EAAO,IAAI,UAAUwB,EAAM,gBAAgB,KAAK;AAC5D,YAAI,CAACq/D;AACH;AAGF,YAAI,CADam2C,EAAyBxpF,GAAc,eAAehsB,CAAK,CAAC,GAC9D;AACb,gBAAMy1G,IAAWlmH,EAAa,QAAQ8lH,GAAgB72G,CAAM,CAAC;AAC7D,UAAI4oB,MAAc,IAChBjyB,GAAQ5F,EAAa,QAAQ8vE,CAAG,GAAGo2C,CAAQ,IAE3CxgH,GAAS1F,EAAa,QAAQ8vE,CAAG,GAAGo2C,CAAQ,GAE9Cj3G,EAAO,UAAU,OAAOi3G,EAAS,KAAK,EAAI,GAC1Cj3G,EAAO,UAAU;QAClB;AAAA,MACF;AAAA,IACP,GACUk3G,KAAqB,CAACl3G,GAAQkwB,MAAY;AAC9C,YAAMtH,IAAYsH,IAAUqQ,GAAW,WAAWA,GAAW,WACvD/+B,IAAQxB,EAAO,UAAU,OAAM;AACrC,aAAO22G,GAA0B/tF,GAAW5oB,GAAQwB,CAAK,EAAE,QAAQ,OACjEu1G,GAAa/2G,GAAQ4oB,GAAWpnB,CAAK,GAC9BniB,EAAS,OACjB;AAAA,IACP,GACU83H,KAAmB,CAACn3G,GAAQo3G,MAAS;AACzC,YAAMxuF,IAAYwuF,IAAO,IAAI,IACvB51G,IAAQxB,EAAO,UAAU,OAAM;AACrC,aAAO42G,GAAwBhuF,GAAW5oB,GAAQwB,CAAK,EAAE,QAAQ,OAC/Du1G,GAAa/2G,GAAQ4oB,GAAWpnB,CAAK,GAC9BniB,EAAS,OACjB;AAAA,IACP,GACUg4H,KAAgB,CAACpnF,GAAWC,MAAY;AAC5C,YAAMhxB,IAAMgxB,IAAUD,EAAU,OAAO,EAAI,IAAIA,EAAU,SAAS,EAAI;AACtE,aAAOs8B,GAAMrtD,CAAG,IAAI,CAACgxB,IAAUA;AAAA,IACrC,GACUonF,KAAU,CAACt3G,GAAQkwB,MAAYgnF,GAAmBl3G,GAAQq3G,GAAcr3G,EAAO,WAAWkwB,CAAO,CAAC,EAAE,OAAO,CAAAuoB,OAC/G40D,GAAYrtG,GAAQy4C,CAAQ,GACrB,GACR,GACK8+D,KAAU,CAACv3G,GAAQo3G,MAASD,GAAiBn3G,GAAQo3G,CAAI,EAAE,OAAO,CAAA3+D,OACtE40D,GAAYrtG,GAAQy4C,CAAQ,GACrB,GACR,GACK++D,KAAuB,CAACx3G,GAAQkwB,MAE7Bs+E,GAAqBxuG,GAAQkwB,GADdA,IAAUo2B,KAA8BD,EACJ,GAEtDoxD,KAAmB,CAACz3G,GAAQkwB,MAAYy1E,GAAmB3lG,GAAQ,CAACkwB,CAAO,EAAE,IAAI,CAAApvB,MAAO;AAC5F,YAAM1qB,IAAM0qB,EAAI,WACV42G,IAAS13G,EAAO,UAAU,OAAM;AACtC,aAAIkwB,IACF95C,EAAI,SAASshI,EAAO,gBAAgBA,EAAO,WAAW,IAEtDthI,EAAI,OAAOshI,EAAO,cAAcA,EAAO,SAAS,GAE3CthI;AAAA,IACb,CAAK,EAAE,OAAO,CAAAA,OACRi3H,GAAYrtG,GAAQ5pB,CAAG,GAChB,GACR,GAEKuhI,KAAW,CAAA/mH,MAAQzQ,EAAW,CAAC,YAAY,GAAGiD,GAAKwN,CAAI,CAAC,GACxDgnH,KAAwB,CAAC92G,GAAK5pB,GAAMwoB,MAAW;AACnD,YAAMnN,IAAS7T,GAAMiF,IAAIzM,CAAI;AAC7B,aAAOyd,GAAU5D,EAAa,QAAQ+P,EAAI,UAAS,CAAE,GAAG,CAAA1M,MAAMsL,EAAO,QAAQtc,GAAKgR,CAAE,CAAC,GAAG7B,CAAM,EAAE,OAAOolH,EAAQ;AAAA,IACrH,GACUE,KAAsB,CAAC3gI,GAAMg5C,GAASpvB,MAAQovB,IAAUm7E,GAAan0H,EAAK,KAAK4pB,CAAG,IAAIsqG,GAAcl0H,EAAK,KAAK4pB,CAAG,GACjHg3G,KAA0B,CAAC93G,GAAQkwB,MAAY;AACnD,YAAMh5C,IAAO6Z,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC5Cc,IAAM0sB,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AAClE,aAAO43G,GAAsB92G,GAAK5pB,GAAM8oB,EAAO,MAAM,EAAE,OAAO,MAAM;AAClE,YAAI63G,GAAoB3gI,GAAMg5C,GAASpvB,CAAG,GAAG;AAE3C,gBAAM1qB,IAAMm/H,GAAgBv1G,GAAQ9oB,GADnBg5C,IAAUt5B,KAAWC,EACY;AAClD,iBAAAmJ,EAAO,UAAU,OAAO5pB,CAAG,GACpB;AAAA,QACjB;AACU,iBAAO;AAAA,MAEjB,CAAO;AAAA,IACP,GACU2hI,KAAU,CAAC/3G,GAAQkwB,MACnBlwB,EAAO,UAAU,gBACZ83G,GAAwB93G,GAAQkwB,CAAO,IAEvC,IAIL8nF,KAAS,CAACh4G,GAAQ0uD,GAASupD,MAAY;AAC3C,YAAM7hI,IAAM4pB,EAAO,UAAU,OAAM,GAC7Bc,IAAM0sB,GAAc,eAAep3C,CAAG;AAE5C,aADa4pB,EAAO,UACX,eAAe0uD,KAAW08C,GAAc6M,GAASn3G,CAAG,KAC3Dd,EAAO,YAAY,sBAAsB,GAClC,MAEA;AAAA,IAEf,GACUk4G,KAAW,CAACl4G,GAAQ0uD,MAAY;AACpC,YAAMt4E,IAAM4pB,EAAO,UAAU,OAAM,GAC7Bc,IAAM0sB,GAAc,eAAep3C,CAAG;AAE5C,aADa4pB,EAAO,UACX,cAAc0uD,KAAW28C,GAAa38C,GAAS5tD,CAAG,KACzDd,EAAO,YAAY,qBAAqB,GACjC,MAEA;AAAA,IAEf,GACUm4G,KAAS,CAACn4G,GAAQkwB,MAClBA,IACK7wC,EAAS,KAAK2gB,EAAO,IAAI,UAAUA,EAAO,UAAU,WAAW,SAAS,CAAC,EAAE,IAAI,CAAA0uD,MAAWwpD,GAASl4G,GAAQ0uD,CAAO,CAAC,EAAE,MAAM,EAAK,IAEhIrvE,EAAS,KAAK2gB,EAAO,IAAI,UAAUA,EAAO,UAAU,QAAS,GAAE,SAAS,CAAC,EAAE,KAAK,CAAAi4G,MAAW54H,EAAS,KAAK2gB,EAAO,IAAI,UAAUi4G,GAAS,SAAS,CAAC,EAAE,IAAI,CAAAvpD,MAAWspD,GAAOh4G,GAAQ0uD,GAASupD,CAAO,CAAC,CAAC,EAAE,MAAM,EAAK,GAGrNG,KAAU,CAACp4G,GAAQkwB,MAAYioF,GAAOn4G,GAAQkwB,CAAO,GAErDmoF,KAAiB;AAAA,MACrB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACf,GACUC,KAAkB,CAAA1kF,MAAYvzC,GAAMuzC,GAAU,CAAAZ,OAAY;AAAA,MAC9D,GAAGqlF;AAAA,MACH,GAAGrlF;AAAA,IACJ,EAAC,GACIulF,KAAyB,CAAA3kF,MAAYvzC,GAAMuzC,GAAU,CAAAZ,OAAY;AAAA,MACrE,GAAGqlF;AAAA,MACH,GAAGrlF;AAAA,IACJ,EAAC,GACIwlF,KAAe,CAACxlF,GAASra,MAAQA,EAAI,YAAYqa,EAAQ,WAAWra,EAAI,aAAaqa,EAAQ,YAAYra,EAAI,WAAWqa,EAAQ,UAAUra,EAAI,YAAYqa,EAAQ,WAAWra,EAAI,YAAYqa,EAAQ,SACrMylF,KAAU,CAAC7kF,GAAUjb,MAAQv3B,GAAOk3H,GAAgB1kF,CAAQ,GAAG,CAAAZ,MAAWwlF,GAAaxlF,GAASra,CAAG,IAAI,CAACqa,CAAO,IAAI,CAAA,CAAE,GACrH0lF,KAAe,CAAC9kF,GAAUjb,MAAQv3B,GAAOm3H,GAAuB3kF,CAAQ,GAAG,CAAAZ,MAAWwlF,GAAaxlF,GAASra,CAAG,IAAI,CAACqa,CAAO,IAAI,CAAA,CAAE,GACjI6T,KAAS,CAAC9nE,MAAMhC,MAAM,MAAMgC,EAAE,MAAM,MAAMhC,CAAC,GAC3C47I,KAAU,CAAC/kF,GAAUjb,MAAQ13B,GAAOw3H,GAAQ7kF,GAAUjb,CAAG,GAAG,CAAAqa,MAAWA,EAAQ,OAAQ,CAAA,GACvF4lF,KAA2B,CAAChlF,GAAUjb,MAAQz2B,GAAQw2H,GAAa9kF,GAAUjb,CAAG,GAAG,CAAAqa,MAAWA,EAAQ,OAAQ,CAAA,GAE9G6lF,KAAU,CAAC74G,GAAQkwB,MAAY;AACnC,YAAMtH,IAAYsH,IAAUqQ,GAAW,WAAWA,GAAW,WACvD/+B,IAAQxB,EAAO,UAAU,OAAM;AACrC,aAAOutG,GAAiBvtG,GAAQ4oB,GAAWpnB,GAAOykD,IAAeC,IAAc/oD,EAAS,EAAE,OAAO,CAAAs7C,OAC/F40D,GAAYrtG,GAAQy4C,CAAQ,GACrB,GACR;AAAA,IACP,GACUqgE,KAAU,CAAC94G,GAAQo3G,MAAS;AAChC,YAAMxuF,IAAYwuF,IAAO,IAAI,IACvB51G,IAAQxB,EAAO,UAAU,OAAM;AACrC,aAAO4tG,GAAe5tG,GAAQ4oB,GAAWpnB,GAAOykD,IAAeC,IAAc/oD,EAAS,EAAE,OAAO,CAAAs7C,OAC7F40D,GAAYrtG,GAAQy4C,CAAQ,GACrB,GACR;AAAA,IACP,GACUsgE,KAAqB,CAAC/4G,GAAQkwB,MAE3Bs+E,GAAqBxuG,GAAQkwB,GADhBA,IAAUg2B,KAAeD,EACW,GAGpD7zB,KAAMH,GAAI,SAAS;AAAA,MACvB,EAAE,MAAM,CAAC,SAAS,EAAG;AAAA,MACrB,EAAE,OAAO,CAAC,SAAS,EAAG;AAAA,MACtB;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,MACD,EAAE,MAAM,CAAC,SAAS,EAAG;AAAA,IAC3B,CAAK,GAEK+mF,KAAe;AAAA,MACnB,GAAG5mF;AAAA,MACH,MAHW,CAAAxoC,MAAWwoC,GAAI,KAAKxoC,CAAO;AAAA,IAI5C,GAEUqvH,KAAa,CAAC7rH,GAAOiE,MAClB6nH,GAAiB9rH,GAAOiE,GAAUjS,EAAM,GAE3C85H,KAAmB,CAAC9rH,GAAOiE,GAAUvU,MAClCsE,GAAO0R,GAAW1F,CAAK,GAAG,CAAArwB,MAC3Bq0B,GAAKr0B,GAAGs0B,CAAQ,IACXvU,EAAU/f,CAAC,IAAI,CAACA,CAAC,IAAI,CAAA,IAErBm8I,GAAiBn8I,GAAGs0B,GAAUvU,CAAS,CAEjD,GAGGq8H,KAAW,CAACC,GAAMnrH,GAASsE,IAASpT,OAAU;AAClD,UAAIoT,EAAOtE,CAAO;AAChB,eAAO5O,EAAS;AAElB,UAAIc,EAAWi5H,GAAMh2H,GAAK6K,CAAO,CAAC;AAChC,eAAO5O,EAAS,KAAK4O,CAAO;AAE9B,YAAMorH,IAAqB,CAAAn6G,MAAO9N,GAAK8N,GAAK,OAAO,KAAK3M,EAAO2M,CAAG;AAClE,aAAOhK,GAAWjH,GAASmrH,EAAK,KAAK,GAAG,GAAGC,CAAkB;AAAA,IACnE,GACU7zE,KAAO,CAACv3C,GAASsE,MAAW4mH,GAAS;AAAA,MACzC;AAAA,MACA;AAAA,IACN,GAAOlrH,GAASsE,CAAM,GACZ+8D,KAAQ,CAAA76D,MAAYwkH,GAAWxkH,GAAU,OAAO,GAChD85D,KAAQ,CAACtgE,GAASsE,MAAW6C,GAAUnH,GAAS,SAASsE,CAAM,GAE/Do2B,KAAO,CAAC9pC,GAAK+K,GAASlR,GAAOkwC,GAAW0wF,IAAal6H,OAAW;AACpE,YAAM8gE,IAAWt3B,MAAc;AAC/B,UAAI,CAACs3B,KAAYxnE,KAAS;AACxB,eAAOsgI,GAAa,MAAMn6H,EAAI,CAAC,CAAC;AAC3B,UAAIqhE,KAAYxnE,KAASmG,EAAI,SAAS;AAC3C,eAAOm6H,GAAa,KAAKn6H,EAAIA,EAAI,SAAS,CAAC,CAAC;AACvC;AACL,cAAM06H,IAAW7gI,IAAQkwC,GACnBt3B,IAAOzS,EAAI06H,CAAQ;AACzB,eAAOD,EAAWhoH,CAAI,IAAI0nH,GAAa,OAAOpvH,GAAS0H,CAAI,IAAIq3B,GAAK9pC,GAAK+K,GAAS2vH,GAAU3wF,GAAW0wF,CAAU;AAAA,MAClH;AAAA,IACP,GACUE,KAAS,CAAC5vH,GAAS2I,MAChBg8D,GAAM3kE,GAAS2I,CAAM,EAAE,KAAK,CAAAg8D,MAAS;AAC1C,YAAM1vE,IAAMywE,GAAMf,CAAK;AAEvB,aADcrtE,GAAYrC,GAAK,CAAA9hB,MAAK4mB,GAAGiG,GAAS7sB,CAAC,CAAC,EACrC,IAAI,CAAA2b,OAAU;AAAA,QACzB,OAAAA;AAAA,QACA,KAAAmG;AAAA,MACD,EAAC;AAAA,IACV,CAAO,GAEGwrB,KAAO,CAACzgB,GAAS0vH,GAAY/mH,MACfinH,GAAO5vH,GAAS2I,CAAM,EACvB,KAAK,MACbymH,GAAa,KAAKpvH,CAAO,GAC/B,CAAA7C,MACM4hC,GAAK5hC,EAAK,KAAK6C,GAAS7C,EAAK,OAAO,GAAGuyH,CAAU,CACzD,GAEGlvG,KAAO,CAACxgB,GAAS0vH,GAAY/mH,MACfinH,GAAO5vH,GAAS2I,CAAM,EACvB,KAAK,MACbymH,GAAa,QACnB,CAAAjyH,MACM4hC,GAAK5hC,EAAK,KAAK6C,GAAS7C,EAAK,OAAO,IAAIuyH,CAAU,CAC1D,GAGGG,KAAU,CAACtwF,GAAMq8B,OAAW;AAAA,MAChC,MAAMr8B,EAAK,OAAOq8B;AAAA,MAClB,KAAKr8B,EAAK,MAAMq8B;AAAA,MAChB,OAAOr8B,EAAK,QAAQq8B,IAAQ;AAAA,MAC5B,QAAQr8B,EAAK,SAASq8B,IAAQ;AAAA,MAC9B,OAAOr8B,EAAK,QAAQq8B;AAAA,MACpB,QAAQr8B,EAAK,SAASq8B;AAAA,IAC5B,IACUk0D,KAAa,CAACC,GAAeC,MAAQx4H,GAAOw4H,GAAK,CAAAn6B,MAAM;AAC3D,YAAMt2D,IAAOswF,GAAQvwF,GAAQu2D,EAAG,uBAAuB,GAAG,EAAE;AAC5D,aAAO;AAAA,QACL;AAAA,UACE,GAAGt2D,EAAK;AAAA,UACR,GAAGwwF,EAAcxwF,CAAI;AAAA,UACrB,MAAMs2D;AAAA,QACP;AAAA,QACD;AAAA,UACE,GAAGt2D,EAAK;AAAA,UACR,GAAGwwF,EAAcxwF,CAAI;AAAA,UACrB,MAAMs2D;AAAA,QACP;AAAA,MACT;AAAA,IACA,CAAK,GACKo6B,KAAoB,CAACC,GAAS/8I,GAAG4S,MAAMmR,GAAMg5H,GAAS,CAACj5H,GAAKk5H,MAAcl5H,EAAI,KAAK,MAAMxB,EAAS,KAAK06H,CAAS,GAAG,CAAAC,MAAa;AACpI,YAAMC,IAAU,KAAK,KAAK,KAAK,IAAID,EAAU,IAAIj9I,CAAC,IAAI,KAAK,IAAIi9I,EAAU,IAAIrqI,CAAC,CAAC,GACzEuqI,IAAU,KAAK,KAAK,KAAK,IAAIH,EAAU,IAAIh9I,CAAC,IAAI,KAAK,IAAIg9I,EAAU,IAAIpqI,CAAC,CAAC;AAC/E,aAAO0P,EAAS,KAAK66H,IAAUD,IAAUF,IAAYC,CAAS;AAAA,IACpE,CAAK,GAAG36H,EAAS,KAAI,CAAE,GACb86H,KAAiB,CAACR,GAAeS,GAAgB7rD,GAAOxxF,GAAG4S,MAAM;AACrE,YAAM2/E,IAAQ90D,GAAYzJ,EAAa,QAAQw9D,CAAK,GAAG,eAAe,EAAE,IAAI,CAAAr0F,MAAKA,EAAE,GAAG,GAChF4/I,IAAUn5H,GAAS+4H,GAAWC,GAAerqD,CAAK,GAAG,CAAA+qD,MAAUD,EAAeC,GAAQ1qI,CAAC,CAAC;AAC9F,aAAOkqI,GAAkBC,GAAS/8I,GAAG4S,CAAC,EAAE,IAAI,CAAA0qI,MAAUA,EAAO,IAAI;AAAA,IACvE,GACUC,KAAiB,CAAAnxF,MAAQA,EAAK,QAC9BoxF,KAAc,CAAApxF,MAAQA,EAAK,KAC3BqxF,KAAU,CAACH,GAAQ1qI,MAAM0qI,EAAO,IAAI1qI,GACpC8qI,KAAU,CAACJ,GAAQ1qI,MAAM0qI,EAAO,IAAI1qI,GACpC+qI,KAAsBh8H,GAAMy7H,IAAgBG,IAAgBE,EAAO,GACnEG,KAAsBj8H,GAAMy7H,IAAgBI,IAAaE,EAAO,GAChEG,KAAiC,CAACrsD,GAAOztD,MAAQ/e,GAAK+e,EAAI,eAAc,CAAE,EAAE,KAAK,CAAAqoB,MAAQuxF,GAAoBnsD,GAAOplC,EAAK,MAAMA,EAAK,GAAG,CAAC,EAAE,KAAK,CAAAqc,MAAQslE,GAA8BS,GAAqB/lE,CAAI,GAAG1kC,CAAG,CAAC,GACrN+5G,KAAiC,CAACtsD,GAAOztD,MAAQ9e,GAAO8e,EAAI,eAAc,CAAE,EAAE,KAAK,CAAAqoB,MAAQwxF,GAAoBpsD,GAAOplC,EAAK,MAAMA,EAAK,GAAG,CAAC,EAAE,KAAK,CAAAqc,MAAQslE,GAA8BQ,GAAsB9lE,CAAI,GAAG1kC,CAAG,CAAC,GAExNg6G,KAAe,CAACxQ,GAAmBl9G,GAAOmhH,MAAaA,EAAS,QAAQ,OAAO,CAAAwM,MAAYzQ,EAAkBl9G,GAAO2tH,CAAQ,EAAE,QAAQ,OAAM,CAAE,GAC9IC,KAAsB,CAAAzM,MAAYA,EAAS,cAAcvE,GAAU,QAAQuE,EAAS,UAAU,WAAW,GACzG0M,KAAoB,CAAA1M,MAAYA,EAAS,cAAcvE,GAAU,MAAMuE,EAAS,UAAU,WAAW,GACrG2M,KAAoB,CAAC5Q,GAAmBl9G,GAAO0T,MAAQ;AAC3D,YAAMytG,IAAWjE,EAAkBl9G,GAAO0T,CAAG;AAC7C,aAAIk6G,GAAoBzM,CAAQ,KAAK,CAAC1xG,GAAOiE,EAAI,SAAS,KAAKm6G,GAAkB1M,CAAQ,IAChF,CAACuM,GAAaxQ,GAAmBl9G,GAAOmhH,CAAQ,IAEhDA,EAAS,QAAQ;IAEhC,GACU4M,KAAyBz8H,GAAMw8H,IAAmBlQ,EAA6B,GAC/EoQ,KAAwB18H,GAAMw8H,IAAmBjQ,EAAyB,GAC1EoQ,KAA6B,CAACnrF,GAAS95C,GAAKm4E,MAAU;AAC1D,YAAMzP,IAAWtxB,GAAc,eAAep3C,CAAG;AACjD,aAAOisD,GAAW,CAACnS,GAASq+B,CAAK,EAAE,OAAO,CAAAztD,MAAOA,EAAI,QAAQg+C,CAAQ,CAAC;AAAA,IAC5E,GACUw8D,KAAuB,CAACt7G,GAAQkwB,GAASq+B,GAAOgtD,MAAQ;AAC5D,YAAMnlI,IAAM4pB,EAAO,UAAU,OAAM,GAC7B4oB,IAAYsH,IAAU,IAAI;AAChC,aAAIwN,GAAyB,KAAI29E,GAA2BnrF,GAAS95C,GAAKm4E,CAAK,KAC7E81C,GAAUz7E,GAAW5oB,GAAQuuD,GAAO,CAACr+B,GAAS,EAAK,EAAE,KAAK,CAAArD,MAAU;AAClE,QAAAwgF,GAAYrtG,GAAQ6sB,CAAM;AAAA,MACpC,CAAS,GACM,MAEF;AAAA,IACb,GACU2uF,KAA0B,CAACtkI,GAAMq3E,GAAO3mE,MAAUgzH,GAA+BrsD,GAAO3mE,CAAK,EAAE,QAAQ,MAAM7F,GAAK6F,EAAM,eAAc,CAAE,EAAE,KAAK,CAAAuhC,MAAQuhF,GAAuCQ,GAAkBh0H,GAAMs2C,GAAc,OAAO+gC,CAAK,CAAC,GAAGplC,EAAK,IAAI,CAAC,CAAC,EAAE,MAAMqE,GAAc,OAAO+gC,CAAK,CAAC,GAClSktD,KAA0B,CAACvkI,GAAMq3E,GAAO3mE,MAAUizH,GAA+BtsD,GAAO3mE,CAAK,EAAE,QAAQ,MAAM7F,GAAK6F,EAAM,eAAc,CAAE,EAAE,KAAK,CAAAuhC,MAAQuhF,GAAuCS,GAAkBj0H,GAAMs2C,GAAc,MAAM+gC,CAAK,CAAC,GAAGplC,EAAK,IAAI,CAAC,CAAC,EAAE,MAAMqE,GAAc,MAAM+gC,CAAK,CAAC,GAChSmtD,KAAW,CAACC,GAAU76G,MAAQ;AAClC,YAAMlQ,IAAOkQ,EAAI,QAAQ66G,CAAQ;AACjC,aAAOv/G,GAAUxL,CAAI,IAAIvR,EAAS,KAAKuR,CAAI,IAAIvR,EAAS;IAC9D,GACUu8H,KAAc,CAACxE,GAAMp3G,GAAQuuD,MAAU;AAC3C,MAAAvuD,EAAO,YAAY,SAAS,MAAM;AAChC,cAAM67G,IAAWzE,IAAOzgH,KAAUF,IAC5BrgB,IAAMm/H,GAAgBv1G,GAAQjP,EAAa,QAAQw9D,CAAK,GAAGstD,CAAQ;AACzE,QAAAxO,GAAYrtG,GAAQ5pB,CAAG;AAAA,MAC/B,CAAO;AAAA,IACP,GACU41E,KAAY,CAAChsD,GAAQo3G,GAAMt2G,MAAQ;AACvC,YAAMytD,IAAemtD,GAAP,EAAAtE,GAAsBt2G,CAAG,GACjC+4C,IAAOu9D,MAAS;AACtB,MAAA7oD,EAAM,KAAK,MAAM8+C,GAAYrtG,GAAQc,EAAI,SAAS,GAAG,CAAAytD,MAASlsB,GAAWwX,GAAM75C,EAAO,QAAO,CAAE,EAAE,OAAO,CAAA4pD,MAAWA,EAAQ,QAAQ9oD,CAAG,CAAC,EAAE,KAAK,MAAMusG,GAAYrtG,GAAQc,EAAI,QAAS,CAAA,GAAG,CAAAlxB,MAAKgsI,GAAYxE,GAAMp3G,GAAQuuD,CAAK,CAAC,CAAC;AAAA,IACpO,GACUutD,KAAqB,CAAC97G,GAAQo3G,GAAM7oD,GAAOkxB,MAAO;AACtD,YAAMrpG,IAAM4pB,EAAO,UAAU,OAAM,GAC7Bc,IAAM0sB,GAAc,eAAep3C,CAAG,GACtCc,IAAO8oB,EAAO;AACpB,UAAI,CAACo3G,KAAQ+D,GAAuB17B,GAAI3+E,CAAG,GAAG;AAC5C,cAAMgmD,IAAS00D,GAAwBtkI,GAAMq3E,GAAOztD,CAAG;AACvD,eAAAkrD,GAAUhsD,GAAQo3G,GAAMtwD,CAAM,GACvB;AAAA,MACR,WAAUswD,KAAQgE,GAAsB37B,GAAI3+E,CAAG,GAAG;AACjD,cAAMgmD,IAAS20D,GAAwBvkI,GAAMq3E,GAAOztD,CAAG;AACvD,eAAAkrD,GAAUhsD,GAAQo3G,GAAMtwD,CAAM,GACvB;AAAA,MACf;AACQ,eAAO;AAAA,IAEf,GACUi1D,KAAS,CAAC/7G,GAAQkwB,GAAS8rF,MAAU38H,EAAS,KAAK2gB,EAAO,IAAI,UAAUA,EAAO,UAAU,QAAO,GAAI,OAAO,CAAC,EAAE,KAAK,CAAAy/E,MAAMpgG,EAAS,KAAK2gB,EAAO,IAAI,UAAUy/E,GAAI,OAAO,CAAC,EAAE,IAAI,CAAAlxB,MAASytD,EAAMh8G,GAAQkwB,GAASq+B,GAAOkxB,CAAE,CAAC,CAAC,EAAE,MAAM,EAAK,GACtOw8B,KAAQ,CAACj8G,GAAQkwB,MAAY6rF,GAAO/7G,GAAQkwB,GAASorF,EAAoB,GACzEY,KAAQ,CAACl8G,GAAQkwB,MAAY6rF,GAAO/7G,GAAQkwB,GAAS4rF,EAAkB,GACvEK,KAA6B,CAAA32E,MAAQ;AACzC,YAAMvV,IAAYumB,GAAa,MAAMhR,GAAM,GAAGA,GAAM,CAAC;AACrD,aAAOuR,GAAS9mB,CAAS;AAAA,IAC/B,GACUmsF,KAAQ,CAACp8G,GAAQzN,GAAQizC,MACtBA,EAAK,KAAKnmD,EAAS,MAAMA,EAAS,MAAM,CAACg9H,GAAUhyG,MACjDw2C,GAAMx2C,CAAI,EAAE,IAAI,CAAAm7B,MACd22E,GAA2B32E,CAAI,CACvC,GACA,CAAA57C,OACDoW,EAAO,YAAY,wBAAwB,GACpCs8G,GAAWt8G,GAAQzN,GAAQ3I,CAAO,EAC1C,GAEG0yH,KAAa,CAACt8G,GAAQzN,GAAQizC,MAAS42E,GAAMp8G,GAAQzN,GAAQ8X,GAAKm7B,GAAMlwC,EAAY,CAAC,GACrFinH,KAAc,CAACv8G,GAAQzN,GAAQizC,MAAS42E,GAAMp8G,GAAQzN,GAAQ6X,GAAKo7B,GAAMlwC,EAAY,CAAC,GACtFknH,KAAY,CAACx8G,GAAQkwB,MAAY;AACrC,YAAMusF,IAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACR,GACYrjH,IAAOrI,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC5CzN,IAAS,CAAAtE,MAAW;AACxB,cAAMyoD,IAAStzD,GAAK6K,CAAO;AAC3B,eAAOtK,GAAGsK,GAASmL,CAAI,KAAKjZ,EAAWs8H,GAAc/lE,CAAM;AAAA,MACnE,GACYtgE,IAAM4pB,EAAO,UAAU,OAAM,GAC7B/H,IAAYlH,EAAa,QAASm/B,IAA+B95C,EAAI,eAAzBA,EAAI,cAAiC;AACvF,aAAOovD,GAAKvtC,GAAW1F,CAAM,EAAE,IAAI,CAAAizC,OACjC+oB,GAAM/oB,GAAMjzC,CAAM,EAAE,KAAK,CAAAg8D,MAAS;AAChC,QAAAvuD,EAAO,MAAM,MAAM,mBAAmBuuD,EAAM,GAAG;AAAA,MACzD,CAAS,GACDvuD,EAAO,UAAU,SAAS,CAACkwB,CAAO,IACdA,IAAwBosF,KAAdC,IACPv8G,GAAQzN,GAAQizC,CAAI,EACvC,KAAK,CAAAhkC,MAAS;AAChB,QAAAxB,EAAO,UAAU,OAAOwB,CAAK;AAAA,MACvC,CAAS,GACM,GACR,EAAE,MAAM,EAAK;AAAA,IACpB,GAEUk7G,KAA2B,CAAC18G,GAAQs9B,GAAO3kB,MAAQ;AACvD,YAAMgkG,IAAQtxH,GAAI,GAAG,QAAS,KAAIA,GAAI,GAAG;AACzC,MAAAstH,GAAQ;AAAA,QACN;AAAA,UACE,SAAS3oE,GAAG;AAAA,UACZ,QAAQnJ,GAAOywE,IAASt3G,GAAQ,EAAI;AAAA,QACrC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOywE,IAASt3G,GAAQ,EAAK;AAAA,QACtC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO0wE,IAASv3G,GAAQ,EAAK;AAAA,QACtC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO0wE,IAASv3G,GAAQ,EAAI;AAAA,QACrC;AAAA,QACD,GAAG28G,IAAQ;AAAA,UACT;AAAA,YACE,SAAS3sE,GAAG;AAAA,YACZ,QAAQnJ,GAAO4wE,IAAkBz3G,GAAQ,EAAK;AAAA,YAC9C,SAAS;AAAA,YACT,UAAU;AAAA,UACX;AAAA,UACD;AAAA,YACE,SAASgwC,GAAG;AAAA,YACZ,QAAQnJ,GAAO4wE,IAAkBz3G,GAAQ,EAAI;AAAA,YAC7C,SAAS;AAAA,YACT,UAAU;AAAA,UACX;AAAA,QACX,IAAY,CAAE;AAAA,QACN;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOo1E,IAAOj8G,GAAQ,EAAI;AAAA,QACnC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOo1E,IAAOj8G,GAAQ,EAAK;AAAA,QACpC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOq1E,IAAOl8G,GAAQ,EAAK;AAAA,QACpC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOq1E,IAAOl8G,GAAQ,EAAI;AAAA,QACnC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOq1E,IAAOl8G,GAAQ,EAAK;AAAA,QACpC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOuxE,IAASp4G,GAAQ,EAAK;AAAA,QACtC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOuxE,IAASp4G,GAAQ,EAAI;AAAA,QACrC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOgyE,IAAS74G,GAAQ,EAAI;AAAA,QACrC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOgyE,IAAS74G,GAAQ,EAAK;AAAA,QACtC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOiyE,IAAS94G,GAAQ,EAAK;AAAA,QACtC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOiyE,IAAS94G,GAAQ,EAAI;AAAA,QACrC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO4oE,IAAQzvG,GAAQs9B,GAAO,EAAI;AAAA,QAC3C;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,QAAQnJ,GAAO4oE,IAAQzvG,GAAQs9B,GAAO,EAAK;AAAA,QAC5C;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,SAAS,CAAC2sE;AAAA,UACV,QAAQA;AAAA,UACR,QAAQ91E,GAAOgpE,IAAc7vG,GAAQs9B,CAAK;AAAA,QAC3C;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,SAAS,CAAC2sE;AAAA,UACV,QAAQA;AAAA,UACR,QAAQ91E,GAAOipE,IAAc9vG,GAAQs9B,CAAK;AAAA,QAC3C;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,QAAQnJ,GAAOkxE,IAAS/3G,GAAQ,EAAK;AAAA,QACtC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOkxE,IAAS/3G,GAAQ,EAAI;AAAA,QACrC;AAAA,MACT,GAAS2Y,CAAG,EAAE,KAAK,CAAA/oC,MAAK;AAChB,QAAA+oC,EAAI,eAAc;AAAA,MAC1B,CAAO;AAAA,IACP,GACUikG,KAAU,CAAC58G,GAAQs9B,MAAU;AACjC,MAAAt9B,EAAO,GAAG,WAAW,CAAA2Y,MAAO;AAC1B,QAAKA,EAAI,wBACP+jG,GAAyB18G,GAAQs9B,GAAO3kB,CAAG;AAAA,MAErD,CAAO;AAAA,IACP,GAEUmX,KAAQ,CAAC73B,GAAWzhB,OAAY;AAAA,MACpC,WAAAyhB;AAAA,MACA,QAAAzhB;AAAA,IACN,IAEUqmI,KAAQniG,GAAS,KACjBoiG,KAAa,CAAAniH,MAAa,CAAA/J,MAAQ+J,MAAc/J,IAAO,KAAK,GAC5D83B,KAAa,CAAA95B,MAAO,CAAAgC,MAAQhC,EAAI,QAAQgC,CAAI,KAAKzQ,EAAW;AAAA,MAChE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,GAAOyQ,EAAK,QAAQ,KAAKhC,EAAI,mBAAmBgC,CAAI,MAAM,SAChDmsH,KAAa,CAACnsH,GAAMpa,GAAQokB,MAAa;AAC7C,UAAI2B,GAAS3L,CAAI,KAAKpa,KAAU;AAC9B,eAAO6I,EAAS,KAAKywC,GAAMl/B,GAAMpa,CAAM,CAAC;AACnC;AACL,cAAMs0D,IAAajiB,GAAWg0F,EAAK;AACnC,eAAOx9H,EAAS,KAAKyrD,EAAW,UAAUl6C,GAAMpa,GAAQsmI,GAAWlsH,CAAI,GAAGgK,CAAQ,CAAC,EAAE,IAAI,CAAAwP,MAAQ0lB,GAAM1lB,EAAK,WAAWA,EAAK,UAAU,KAAK,MAAM,CAAC;AAAA,MACnJ;AAAA,IACP,GACU4yG,KAAY,CAACpsH,GAAMpa,GAAQokB,MAAa;AAC5C,UAAI2B,GAAS3L,CAAI,KAAKpa,KAAUoa,EAAK;AACnC,eAAOvR,EAAS,KAAKywC,GAAMl/B,GAAMpa,CAAM,CAAC;AACnC;AACL,cAAMs0D,IAAajiB,GAAWg0F,EAAK;AACnC,eAAOx9H,EAAS,KAAKyrD,EAAW,SAASl6C,GAAMpa,GAAQsmI,GAAWlsH,CAAI,GAAGgK,CAAQ,CAAC,EAAE,IAAI,CAAAwP,MAAQ0lB,GAAM1lB,EAAK,WAAW,CAAC,CAAC;AAAA,MACzH;AAAA,IACP,GACU6yG,KAAW,CAACrsH,GAAMpa,GAAQokB,MAAa;AAC3C,UAAI,CAAC2B,GAAS3L,CAAI;AAChB,eAAOvR,EAAS;AAElB,YAAMyR,IAAOF,EAAK;AAClB,UAAIpa,KAAU,KAAKA,KAAUsa,EAAK;AAChC,eAAOzR,EAAS,KAAKywC,GAAMl/B,GAAMpa,CAAM,CAAC;AACnC;AACL,cAAMs0D,IAAajiB,GAAWg0F,EAAK;AACnC,eAAOx9H,EAAS,KAAKyrD,EAAW,UAAUl6C,GAAMpa,GAAQsmI,GAAWlsH,CAAI,GAAGgK,CAAQ,CAAC,EAAE,KAAK,CAAAwP,MAAQ;AAChG,gBAAMoiF,IAAWpiF,EAAK,UAAU;AAChC,iBAAO6yG,GAAS7yG,EAAK,WAAW5zB,IAASg2G,EAAS,QAAQ5xF,CAAQ;AAAA,QAC5E,CAAS;AAAA,MACF;AAAA,IACP,GACUsiH,KAAY,CAACtsH,GAAMpa,GAAQokB,MAAa;AAC5C,UAAI,CAAC2B,GAAS3L,CAAI;AAChB,eAAOvR,EAAS;AAElB,YAAMyR,IAAOF,EAAK;AAClB,UAAIpa,KAAUsa,EAAK;AACjB,eAAOzR,EAAS,KAAKywC,GAAMl/B,GAAMpa,CAAM,CAAC;AACnC;AACL,cAAMs0D,IAAajiB,GAAWg0F,EAAK;AACnC,eAAOx9H,EAAS,KAAKyrD,EAAW,SAASl6C,GAAMpa,GAAQsmI,GAAWlsH,CAAI,GAAGgK,CAAQ,CAAC,EAAE,KAAK,CAAAyP,MAAQ6yG,GAAU7yG,EAAK,WAAW7zB,IAASsa,EAAK,QAAQ8J,CAAQ,CAAC;AAAA,MAC3J;AAAA,IACP,GACUuiH,KAAa,CAACvuH,GAAKgC,GAAMpa,GAAQuyC,GAASnuB,MAAa;AAC3D,YAAMohD,IAASnzB,GAAWj6B,GAAK85B,GAAW95B,CAAG,CAAC;AAC9C,aAAOvP,EAAS,KAAK28D,EAAO,UAAUprD,GAAMpa,GAAQuyC,GAASnuB,CAAQ,CAAC;AAAA,IAC5E,GAEUwiH,KAAmB,CAAAhnI,MAAOA,EAAI,aAAammB,GAASnmB,EAAI,cAAc,GACtEinI,KAAU,CAAAjnI,MAAO0pB,EAAO1pB,EAAI,SAAU,EAAC,QAAQ,WAAW,GAAG,CAAC,GAC9DknI,KAAe,CAAA7xG,MAAOA,MAAQ,MAAM;AAAA,OAAoB,QAAQA,CAAG,MAAM,IAEzE8xG,KAAe,CAACzsH,GAAM0sH,MAAY1sH,EAAK,UAAU0sH,EAAQ,MAAM,GAC/DC,KAAc,CAAC3sH,GAAMpY,GAAO8kI,MAAY;AAC5C,UAAI5+I;AACJ,YAAM8+I,IAAYF,EAAQ,OAAO,CAAC;AAClC,WAAK5+I,IAAI8Z,IAAQ,GAAG9Z,KAAK,GAAGA,KAAK;AAC/B,cAAM8+B,IAAO5M,EAAK,OAAOlyB,CAAC;AAC1B,YAAI0+I,GAAa5/G,CAAI;AACnB,iBAAOre,EAAS;AAElB,YAAIq+H,MAAchgH,KAAQ1V,GAAW8I,GAAM0sH,GAAS5+I,GAAG8Z,CAAK;AAC1D;AAAA,MAEH;AACD,aAAO2G,EAAS,KAAKzgB,CAAC;AAAA,IAC5B,GACU++I,KAAY,CAAC/uH,GAAKgvH,GAAWJ,GAASK,IAAW,MAAM;AAC3D,UAAI,CAACT,GAAiBQ,CAAS;AAC7B,eAAOv+H,EAAS;AAElB,YAAMy+H,IAAS;AAAA,QACb,MAAM;AAAA,QACN,QAAQ;AAAA,MAChB,GACYC,IAAmB,CAAC9vH,GAASzX,GAAQsa,OACzCgtH,EAAO,OAAOhtH,IAAOgtH,EAAO,MAC5BA,EAAO,UAAUtnI,GACVinI,GAAYK,EAAO,MAAMA,EAAO,QAAQN,CAAO,EAAE,MAAMhnI,CAAM,IAEhEU,IAAO0X,EAAI,UAAUgvH,EAAU,gBAAgBhvH,EAAI,OAAO,KAAKA,EAAI;AACzE,aAAOuuH,GAAWvuH,GAAKgvH,EAAU,gBAAgBA,EAAU,aAAaG,GAAkB7mI,CAAI,EAAE,KAAK,CAAA8mI,MAAQ;AAC3G,cAAMx8G,IAAQo8G,EAAU;AAGxB,YAFAp8G,EAAM,SAASw8G,EAAK,WAAWA,EAAK,MAAM,GAC1Cx8G,EAAM,OAAOo8G,EAAU,cAAcA,EAAU,SAAS,GACpDp8G,EAAM;AACR,iBAAOniB,EAAS;AAElB,cAAMyR,IAAOusH,GAAQ77G,CAAK;AAE1B,eADqB1Q,EAAK,YAAY0sH,CAAO,MACxB,KAAKD,GAAazsH,GAAM0sH,CAAO,EAAE,SAASK,IACtDx+H,EAAS,SAETA,EAAS,KAAK;AAAA,UACnB,MAAMk+H,GAAazsH,GAAM0sH,CAAO;AAAA,UAChC,OAAAh8G;AAAA,UACA,SAAAg8G;AAAA,QACZ,CAAW;AAAA,MAEX,CAAO;AAAA,IACP,GACUpjG,KAAa,CAACxrB,GAAKgvH,GAAWJ,GAASK,IAAW,MAAM38D,GAASnwD,EAAa,QAAQ6sH,EAAU,cAAc,CAAC,EAAE,KAAK,MAAMD,GAAU/uH,GAAKgvH,GAAWJ,GAASK,CAAQ,GAAG,CAAA3+G,MAAO;AACrL,YAAMsC,IAAQ5S,EAAI;AAClB,MAAA4S,EAAM,WAAWtC,EAAI,GAAG;AACxB,YAAMpO,IAAOusH,GAAQ77G,CAAK;AAC1B,aAAOniB,EAAS,KAAK;AAAA,QACnB,OAAAmiB;AAAA,QACA,MAAM+7G,GAAazsH,GAAM0sH,CAAO;AAAA,QAChC,SAAAA;AAAA,MACR,CAAO;AAAA,IACP,CAAK,GAEKS,KAAW,CAAArtH,MAAQA,EAAK,aAAa5C,IACrC0/G,KAAY,CAAA98G,MAAQA,EAAK,aAAa7C,IACtCmwH,KAAS,CAAAttH,MAAQ;AACrB,UAAIqtH,GAASrtH,CAAI;AACf,eAAOk/B,GAAMl/B,GAAMA,EAAK,KAAK,MAAM;AAC9B;AACL,cAAM0G,IAAW1G,EAAK;AACtB,eAAO0G,EAAS,SAAS,IAAI4mH,GAAO5mH,EAASA,EAAS,SAAS,CAAC,CAAC,IAAIw4B,GAAMl/B,GAAM0G,EAAS,MAAM;AAAA,MACjG;AAAA,IACP,GACU6mH,KAAS,CAACvtH,GAAMpa,MAAW;AAC/B,YAAM8gB,IAAW1G,EAAK;AACtB,aAAI0G,EAAS,SAAS,KAAK9gB,IAAS8gB,EAAS,SACpC6mH,GAAO7mH,EAAS9gB,CAAM,GAAG,CAAC,IACxB8gB,EAAS,SAAS,KAAKo2G,GAAU98G,CAAI,KAAK0G,EAAS,WAAW9gB,IAChE0nI,GAAO5mH,EAASA,EAAS,SAAS,CAAC,CAAC,IAEpCw4B,GAAMl/B,GAAMpa,CAAM;AAAA,IAEjC,GAEU4nI,KAAwB,CAACxvH,GAAKyvH,MAAS;AAC3C,UAAIz3I;AACJ,YAAMsQ,KAAQtQ,IAAKgoB,EAAI,UAAUyvH,EAAK,WAAWzvH,EAAI,OAAO,OAAO,QAAQhoB,MAAO,SAASA,IAAKgoB,EAAI;AACpG,aAAOuuH,GAAWvuH,GAAKyvH,EAAK,WAAWA,EAAK,QAAQ,CAACC,GAAU9nI,MAAWA,MAAW,IAAI,KAAKA,GAAQU,CAAI,EAAE,OAAO,CAAA8mI,MAAQ;AACzH,cAAMtgH,IAAOsgH,EAAK,UAAU,KAAK,OAAOA,EAAK,SAAS,CAAC;AACvD,eAAO,CAACV,GAAa5/G,CAAI;AAAA,MACjC,CAAO,EAAE,OAAM;AAAA,IACf,GACU6gH,KAAgB,CAAA3vH,MAAO,CAAAxY,MAAO;AAClC,YAAMioI,IAAOF,GAAO/nI,EAAI,gBAAgBA,EAAI,WAAW;AACvD,aAAO,CAACgoI,GAAsBxvH,GAAKyvH,CAAI;AAAA,IAC7C,GACUG,KAAoB,CAAC5vH,GAAKgvH,GAAWa,MAAav8H,GAAQu8H,EAAS,UAAU,CAAAjB,MAAWpjG,GAAWxrB,GAAKgvH,GAAWJ,CAAO,CAAC,GAC3Hh/G,KAAS,CAACwB,GAAQ0+G,MAAgB;AACtC,YAAMD,IAAWC,KACXtoI,IAAM4pB,EAAO,UAAU,OAAM;AACnC,aAAOw+G,GAAkBx+G,EAAO,KAAK5pB,GAAKqoI,CAAQ,EAAE,KAAK,CAAAphG,MAAWshG,GAAkB3+G,GAAQ0+G,GAAarhG,CAAO,CAAC;AAAA,IACzH,GACUshG,KAAoB,CAAC3+G,GAAQ0+G,GAAarhG,GAASuhG,IAAe,OAAO;AAC7E,UAAIh4I;AACJ,YAAM63I,IAAWC,KAEXG,KAAaj4I,IADPo5B,EAAO,UAAU,OAAM,EACP,eAAe,eAAe,QAAQp5B,MAAO,SAASA,IAAK,IACjFk4I,IAAiBn+H,GAAS89H,EAAS,gBAAgBphG,EAAQ,OAAO,GAAG,CAAAurE,MAAiBvrE,EAAQ,KAAK,UAAUurE,EAAc,YAAYA,EAAc,QAAQ,WAAW,MAAM21B,GAAcv+G,EAAO,GAAG,CAAC,EAAEqd,EAAQ,OAAOwhG,GAAWxhG,EAAQ,IAAI,CAAC;AACtP,UAAIyhG,EAAe,WAAW;AAC5B,eAAOz/H,EAAS;AAElB,YAAM0/H,IAAa,QAAQ,IAAI1+H,GAAMy+H,GAAgB,CAAAE,MAC/BA,EAAG,MAAM3hG,EAAQ,MAAM2hG,EAAG,YAAYJ,CAAY,EACnD,KAAK,CAAAj1G,OAAY;AAAA,QAClC,WAAW0T,EAAQ;AAAA,QACnB,OAAO1T;AAAA,QACP,SAASq1G,EAAG;AAAA,QACZ,UAAUA,EAAG;AAAA,QACb,aAAaA,EAAG;AAAA,MACjB,EAAC,CACH,CAAC;AACF,aAAO3/H,EAAS,KAAK;AAAA,QACnB,YAAA0/H;AAAA,QACA,SAAA1hG;AAAA,MACR,CAAO;AAAA,IACP;AAEI,QAAI4hG;AACJ,KAAC,SAAUA,GAAkB;AAC3B,MAAAA,EAAiBA,EAAiB,QAAW,CAAC,IAAI,SAClDA,EAAiBA,EAAiB,QAAW,CAAC,IAAI;AAAA,IACnD,GAACA,OAAqBA,KAAmB,CAAE,EAAC;AAC7C,UAAMC,KAAS,CAACjqH,GAAK48B,GAASF,MAAY18B,EAAI,UAAUgqH,GAAiB,QAAQptF,EAAQ58B,EAAI,MAAM,IAAI08B,EAAQ18B,EAAI,MAAM,GACnHkqH,KAAY,CAAAx1G,MAAW;AAC3B,YAAMtmB,IAAS,CAAA,GACTyvC,IAAS,CAAA;AACf,aAAAxyC,EAAOqpB,GAAS,CAAAnnB,MAAO;AACrB,QAAA08H,GAAO18H,GAAK,CAAAwvC,MAAOc,EAAO,KAAKd,CAAG,GAAG,CAAAtW,MAAOr4B,EAAO,KAAKq4B,CAAG,CAAC;AAAA,MACpE,CAAO,GACM;AAAA,QACL,QAAAr4B;AAAA,QACA,QAAAyvC;AAAA,MACR;AAAA,IACA,GACUssF,KAAW,CAACnqH,GAAKl2B,MACjBk2B,EAAI,UAAUgqH,GAAiB,QAC1B;AAAA,MACL,OAAOA,GAAiB;AAAA,MACxB,QAAQlgJ,EAAEk2B,EAAI,MAAM;AAAA,IAC9B,IAEeA,GAGLrJ,KAAM,CAACqJ,GAAKl2B,MACZk2B,EAAI,UAAUgqH,GAAiB,QAC1B;AAAA,MACL,OAAOA,GAAiB;AAAA,MACxB,QAAQlgJ,EAAEk2B,EAAI,MAAM;AAAA,IAC9B,IAEeA,GAGLoqH,KAAS,CAACpqH,GAAKl2B,MACfk2B,EAAI,UAAUgqH,GAAiB,QAC1BlgJ,EAAEk2B,EAAI,MAAM,IAEZA,GAGLqqH,KAAY,CAACrqH,GAAKl2B,MAClBk2B,EAAI,UAAUgqH,GAAiB,QAC1BlgJ,EAAEk2B,EAAI,MAAM,IAEZA,GAGLsqH,KAAS,CAAAxvI,OAAM;AAAA,MACnB,OAAOkvI,GAAiB;AAAA,MACxB,QAAQlvI;AAAA,IACd,IACUyvI,KAAS,QAAM;AAAA,MACnB,OAAOP,GAAiB;AAAA,MACxB,QAAQ;AAAA,IACd,IAGUQ,KAAe;AAAA,MACnB,YAFiB,CAAAxqH,MAAOA,EAAI,KAAKuqH,IAAQD,EAAM;AAAA,MAG/C,UAJe,CAAAtqH,MAAOiqH,GAAOjqH,GAAK28B,GAAO,OAAOA,GAAO,KAAK;AAAA,MAK5D,QAAA2tF;AAAA,MACA,WAAAJ;AAAA,MACA,QAAAK;AAAA,MACA,MAAMH;AAAA,MACN,WAAAC;AAAA,MACA,KAAA1zH;AAAA,MACA,UAAAwzH;AAAA,MACA,MAAMF;AAAA,IACZ,GAEUQ,KAAY,CAAAr8D,MACTxqE,GAASwqE,CAAK,KAAKhhE,GAAKghE,CAAK,EAAE,SAAS,MAAM,yBAAyB,KAAK,UAAUA,GAAO,MAAM,CAAC,GAEvGs8D,KAAe,CAAA7sF,MAAU;AAC7B,YAAMl/C,IAAKk/C,EAAO,SAAS,KAAKA,EAAO,MAAM,GAAG,EAAE,EAAE,OAAO,CAAC;AAAA,QACxD,MAAM,CAAE;AAAA,QACR,cAAcv0C,GAAS,uCAAuC;AAAA,MACxE,CAAS,CAAC,IAAIu0C;AACR,aAAOzyC,GAAMzM,GAAI,CAAA1Z,MACR,mBAAmBA,EAAE,KAAK,KAAK,KAAK,IAAI;AAAA,IAAQA,EAAE,cAC1D;AAAA,IACP,GAEUw1B,KAAK,CAACvD,GAAMyzH,MACTH,GAAa,OAAO,CAAC;AAAA,MACxB,MAAAtzH;AAAA,MACA,cAAAyzH;AAAA,IACD,CAAA,CAAC,GAEAC,KAAkB,CAAC1zH,GAAM5I,GAAKf,MAAQkN,GAAGvD,GAAM,MAAM,gDAAgD5I,IAAM,UAAUm8H,GAAUl9H,CAAG,CAAC,GACnIs9H,KAAa,CAAC3zH,GAAM5I,MAAQmM,GAAGvD,GAAM,MAAM,gDAAgD5I,IAAM,GAAG,GACpGw8H,KAAgB,CAAC5zH,GAAMsmC,GAAUutF,MAAWtwH,GAAGvD,GAAM,MAAM,yBAAyB6zH,IAAS,kCAAkCN,GAAUjtF,CAAQ,CAAC,GAClJwtF,KAAS,CAAC9zH,GAAM6lC,MAAQtiC,GAAGvD,GAAM5N,GAASyzC,CAAG,CAAC,GAE9CkuF,KAAa,CAAC/zH,GAAMk3D,GAAO5wB,GAAUnH,MAC1BhoC,GAAMmvC,GAAUnH,CAAE,EACnB,KAAK,MAAMy0F,GAAc5zH,GAAMsmC,GAAUnH,CAAE,GAAG,CAAAtP,MAAMA,EAAG,QAAQ7vB,EAAK,OAAO,CAAC,aAAam/B,CAAE,CAAC,GAAG+3B,CAAK,CAAC,GAE/G88D,KAAW,CAAC58H,GAAKkvC,OAMd;AAAA,MACL,SANc,CAACtmC,GAAMk3D,MACN//D,GAAM+/D,GAAO9/D,CAAG,EACjB,KAAK,MAAMu8H,GAAW3zH,GAAM5I,CAAG,GAAG,CAAA68H,MAAUF,GAAW/zH,GAAMk3D,GAAO5wB,GAAU2tF,CAAM,CAAC;AAAA,MAKnG,UAHe,MAAM,cAAc78H,IAAM,yBAAyBlB,GAAKowC,CAAQ;AAAA,IAIvF,IAGU53B,KAAU,CAACwlH,GAAK3wH,MACbA,GAEHksB,KAAO,CAACykG,GAAK3wH,MACGpS,GAAc+iI,CAAG,KAAK/iI,GAAcoS,CAAE,IACrC4wH,GAAUD,GAAK3wH,CAAE,IAAIA,GAEtC6wH,KAAY,CAAAC,MACT,IAAIC,MAAY;AACrB,UAAIA,EAAQ,WAAW;AACrB,cAAM,IAAI,MAAM,0BAA0B;AAE5C,YAAMhuH,IAAM,CAAA;AACZ,eAAS53B,IAAI,GAAGA,IAAI4lJ,EAAQ,QAAQ5lJ,KAAK;AACvC,cAAM6lJ,IAAYD,EAAQ5lJ,CAAC;AAC3B,mBAAW0oB,KAAOm9H;AAChB,UAAIl9H,GAAMk9H,GAAWn9H,CAAG,MACtBkP,EAAIlP,CAAG,IAAIi9H,EAAO/tH,EAAIlP,CAAG,GAAGm9H,EAAUn9H,CAAG,CAAC;AAAA,MAG/C;AACD,aAAOkP;AAAA,IACf,GAEU6tH,KAAYC,GAAU3kG,EAAI,GAC1Bw+C,KAAQmmD,GAAU1lH,EAAO,GAEzB8lH,KAAW,OAAO;AAAA,MACtB,KAAK;AAAA,MACL,SAAS,CAAE;AAAA,IACjB,IACUC,KAAiB,CAAAC,OAAkB;AAAA,MACvC,KAAK;AAAA,MACL,SAASA;AAAA,IACf,IACUC,KAAc,CAAAC,MAAYH,GAAeriI,GAASwiI,CAAQ,CAAC,GAC3DC,KAAW,OAAO;AAAA,MACtB,KAAK;AAAA,MACL,SAAS,CAAE;AAAA,IACjB,IAEUC,KAAc,CAAC59H,GAAQmO,MAASnO,EAAO,SAAS,IAAIo8H,GAAa,OAAOa,GAAU9uH,GAAM4oE,GAAM,MAAM,QAAW/2E,CAAM,CAAC,CAAC,IAAIo8H,GAAa,OAAOjuH,CAAI,GACnJ0vH,KAAc,CAAApuF,MAAU50C,GAAQuhI,GAAa,QAAQt+H,EAAO,EAAE2xC,CAAM,GASpEquF,KAAgB;AAAA,MACpB,gBATqB,CAACV,GAASjvH,MAAS;AACxC,cAAM2tH,IAAYM,GAAa,UAAUgB,CAAO;AAChD,eAAOtB,EAAU,OAAO,SAAS,IAAI+B,GAAY/B,EAAU,MAAM,IAAI8B,GAAY9B,EAAU,QAAQ3tH,CAAI;AAAA,MAC7G;AAAA,MAOM,gBANqB,CAAAivH,MAAW;AAChC,cAAMW,IAAa3B,GAAa,UAAUgB,CAAO;AACjD,eAAOW,EAAW,OAAO,SAAS,IAAIF,GAAYE,EAAW,MAAM,IAAI3B,GAAa,OAAO2B,EAAW,MAAM;AAAA,MAClH;AAAA,IAIA,GAEUC,KAAU,CAAC99H,GAAK+9H,GAAQC,GAAU18D,OAAU;AAAA,MAChD,KAAK;AAAA,MACL,KAAAthE;AAAA,MACA,QAAA+9H;AAAA,MACA,UAAAC;AAAA,MACA,MAAA18D;AAAA,IACN,IACU28D,KAAgB,CAACF,GAAQG,OAAkB;AAAA,MAC/C,KAAK;AAAA,MACL,QAAAH;AAAA,MACA,cAAAG;AAAA,IACN,IACUC,KAAO,CAAC/pI,GAAOgqI,GAASC,MAAa;AACzC,cAAQjqI,EAAM,KAAG;AAAA,QACjB,KAAK;AACH,iBAAOgqI,EAAQhqI,EAAM,KAAKA,EAAM,QAAQA,EAAM,UAAUA,EAAM,IAAI;AAAA,QACpE,KAAK;AACH,iBAAOiqI,EAASjqI,EAAM,QAAQA,EAAM,YAAY;AAAA,MACjD;AAAA,IACP,GAEUA,KAAQ,CAAAkqI,MAAa;AACzB,YAAMC,IAAU,CAAC31H,GAAMuvB,MACd+jG,GAAa,UAAUoC,EAAUnmG,CAAG,GAAG,CAAAsW,MAAOiuF,GAAO9zH,GAAM6lC,CAAG,CAAC,GAElErd,IAAWp2B,GAAS,KAAK;AAC/B,aAAO;AAAA,QACL,SAAAujI;AAAA,QACA,UAAAntG;AAAA,MACR;AAAA,IACA,GACUotG,KAAapqI,GAAM8nI,GAAa,MAAM,GAEtCuC,KAAiB,CAAC71H,GAAM3J,GAAKe,GAAK0+H,MAAW3+H,GAAMd,GAAKe,CAAG,EAAE,KAAK,MAAMs8H,GAAgB1zH,GAAM5I,GAAKf,CAAG,GAAGy/H,CAAM,GAC/GC,KAAiB,CAAC1/H,GAAKe,GAAKw9H,GAAUkB,MAAW;AACrD,YAAMlyI,IAAIuT,GAAMd,GAAKe,CAAG,EAAE,WAAW,MAAMw9H,EAASv+H,CAAG,CAAC;AACxD,aAAOy/H,EAAOlyI,CAAC;AAAA,IACrB,GACUoyI,KAAe,CAAC3/H,GAAKe,GAAK0+H,MAAWA,EAAO3+H,GAAMd,GAAKe,CAAG,CAAC,GAC3D6+H,KAAwB,CAAC5/H,GAAKe,GAAKw9H,GAAUkB,MAAW;AAC5D,YAAMI,IAAM/+H,GAAMd,GAAKe,CAAG,EAAE,IAAI,CAAAm4B,MAAOA,MAAQ,KAAOqlG,EAASv+H,CAAG,IAAIk5B,CAAG;AACzE,aAAOumG,EAAOI,CAAG;AAAA,IACvB,GACUC,KAAe,CAACz5E,GAAO18C,GAAM3J,GAAKe,GAAKshE,MAAS;AACpD,YAAMo9D,IAAS,CAAAM,MAAM19D,EAAK,QAAQ14D,EAAK,OAAO,CAAC5I,CAAG,CAAC,GAAGg/H,CAAE,GAClDC,IAAiB,CAAAC,MAAYA,EAAS,KAAK,MAAMhD,GAAa,OAAOpgI,EAAS,KAAM,CAAA,GAAG,CAAAqjI,MAAM;AACjG,cAAM3qI,IAAS8sE,EAAK,QAAQ14D,EAAK,OAAO,CAAC5I,CAAG,CAAC,GAAGm/H,CAAE;AAClD,eAAOjD,GAAa,IAAI1nI,GAAQsH,EAAS,IAAI;AAAA,MACrD,CAAO;AACD,cAAQwpD,EAAM,KAAG;AAAA,QACjB,KAAK;AACH,iBAAOm5E,GAAe71H,GAAM3J,GAAKe,GAAK0+H,CAAM;AAAA,QAC9C,KAAK;AACH,iBAAOC,GAAe1/H,GAAKe,GAAKslD,EAAM,SAASo5E,CAAM;AAAA,QACvD,KAAK;AACH,iBAAOE,GAAa3/H,GAAKe,GAAKi/H,CAAc;AAAA,QAC9C,KAAK;AACH,iBAAOJ,GAAsB5/H,GAAKe,GAAKslD,EAAM,SAAS25E,CAAc;AAAA,QACtE,KAAK;AACD,iBAAON,GAAe1/H,GAAKe,GAAKhF,GAAS,CAAA,CAAE,GAAG,CAAAxO,MAAK;AACjD,kBAAMgI,IAASuoI,GAAUz3E,EAAM,QAAQrmD,CAAG,GAAGzS,CAAC;AAC9C,mBAAOkyI,EAAOlqI,CAAM;AAAA,UAChC,CAAW;AAAA,MAEJ;AAAA,IACP,GACU4qI,KAAgB,CAACx2H,GAAM3J,GAAKogI,MAAW;AAC3C,YAAMh6G,IAAU,CAAA,GACVkqB,IAAS,CAAA;AACf,iBAAW+V,KAAS+5E;AAClB,QAAAlB,GAAK74E,GAAO,CAACtlD,GAAK+9H,GAAQC,GAAU18D,MAAS;AAC3C,gBAAM9sE,IAASuqI,GAAaf,GAAUp1H,GAAM3J,GAAKe,GAAKshE,CAAI;AAC1D,UAAA46D,GAAa,KAAK1nI,GAAQ,CAAAi6C,MAAO;AAC/B,YAAAc,EAAO,KAAK,GAAGd,CAAG;AAAA,UACnB,GAAE,CAAA/8B,MAAO;AACR,YAAA2T,EAAQ04G,CAAM,IAAIrsH;AAAA,UAC9B,CAAW;AAAA,QACX,GAAW,CAACqsH,GAAQG,MAAiB;AAC3B,UAAA74G,EAAQ04G,CAAM,IAAIG,EAAaj/H,CAAG;AAAA,QAC5C,CAAS;AAEH,aAAOswC,EAAO,SAAS,IAAI2sF,GAAa,OAAO3sF,CAAM,IAAI2sF,GAAa,OAAO72G,CAAO;AAAA,IAC1F,GACUi6G,KAAQ,CAAAx/H,OAML;AAAA,MACL,SANc,CAAC8I,GAAMttB,MAAM8jJ,GAAcx2H,GAAMttB,GAAGwkB,CAAM;AAAA,MAOxD,UANe,MAER;AAAA,IADchD,GAAMgD,GAAQ,CAAA1L,MAAS+pI,GAAK/pI,GAAO,CAAC4L,GAAKu/H,GAAOC,GAAWl+D,MAASthE,IAAM,SAASshE,EAAK,SAAQ,GAAI,CAACy8D,GAAQ0B,MAAkB,WAAW1B,IAAS,GAAG,CAAC,EAC7I,KAAK;AAAA,CAAI,IAAI;AAAA,IAKpD,IAEU2B,KAAQ,CAAAp+D,OAML;AAAA,MACL,SANc,CAAC14D,GAAMnI,MAAU;AAC/B,cAAM2lB,IAAUtpB,GAAM2D,GAAO,CAAC1pB,GAAGsE,MAAMimF,EAAK,QAAQ14D,EAAK,OAAO,CAAC,MAAMvtB,IAAI,GAAG,CAAC,GAAGtE,CAAC,CAAC;AACpF,eAAO6mJ,GAAc,eAAex3G,CAAO;AAAA,MACnD;AAAA,MAIQ,UAHe,MAAM,WAAWk7C,EAAK,SAAQ,IAAK;AAAA,IAI1D,IAGUq+D,KAAU,CAAArB,MAAalqI,GAAM,CAAA5H,MAAK8xI,EAAU9xI,CAAC,EAAE,KAAK0vI,GAAa,QAAQA,GAAa,MAAM,CAAC,GAC7F0D,KAAe,CAACvwF,GAAOiyB,GAAMriE,MAAQ;AACzC,YAAMyS,IAAM4vD,EAAK,QAAQ,CAACjyB,CAAK,GAAGpwC,CAAG;AACrC,aAAOi9H,GAAa,SAASxqH,GAAK,CAAAmuH,OAAS;AAAA,QACzC,OAAO5gI;AAAA,QACP,QAAQ4gI;AAAA,MACT,EAAC;AAAA,IACR,GACUC,KAAQ,CAACzwF,GAAOiyB,GAAMriE,MAAQi9H,GAAa,SAAS0D,GAAavwF,GAAOiyB,GAAMriE,CAAG,CAAC,GAClF8gI,KAAc,CAAAC,MACX;AAAA,IAAe5D,GAAa4D,EAAQ,MAAM,EAAE,KAAK;AAAA,CAAI,IAAI;AAAA;AAAA,kBAAuB7D,GAAU6D,EAAQ,KAAK,GAE1GC,KAAS,CAACjgI,GAAKkvC,MAAa0tF,GAAS58H,GAAKb,GAAM+vC,GAAUowF,EAAK,CAAC,GAEhEY,KAAWllI,GAASwjI,EAAU,GAC9B2B,KAAa,CAAC7B,GAAW8B,MAAiBhsI,GAAM,CAAArd,MAAK;AACzD,YAAMspJ,IAAa,OAAOtpJ;AAC1B,aAAOunJ,EAAUvnJ,CAAC,IAAImlJ,GAAa,OAAOnlJ,CAAC,IAAImlJ,GAAa,OAAO,kBAAmBkE,CAAY,aAAeC,CAAU,EAAG;AAAA,IACpI,CAAK,GACKC,KAASH,GAAW5lI,IAAU,QAAQ,GACtCrF,KAASirI,GAAWrmI,IAAU,QAAQ,GACtCymI,KAAUJ,GAAWjmI,IAAW,SAAS,GACzCsmI,KAAoBL,GAAW7lI,GAAY,UAAU,GAErDgrD,KAAQw4E,IACR2C,KAAcxC,IACdyC,KAAe,CAAA5gI,MAAU6/H,GAAQ,CAAAvrI,MAASwI,EAAWkD,GAAQ1L,CAAK,IAAIi6C,GAAO,MAAMj6C,CAAK,IAAIi6C,GAAO,MAAM,uBAAwBj6C,sBAA4B0L,EAAO,KAAK,IAAI,KAAM,CAAC,GACpL6gI,KAAa,CAAC3gI,GAAKmc,MAAWmpC,GAAMtlD,GAAKA,GAAKo9H,MAAYjhH,CAAM,GAChEykH,KAAiB,CAAA5gI,MAAO2gI,GAAW3gI,GAAK9K,EAAM,GAC9C2rI,KAAmB,CAAA7gI,MAAO2gI,GAAW3gI,GAAKwgI,EAAiB,GAC3DM,KAAkB,CAAC9gI,GAAKmc,MAAWmpC,GAAMtlD,GAAKA,GAAKo9H,GAAU,GAAEsC,GAAMvjH,CAAM,CAAC,GAC5E4kH,KAAW,CAAC/gI,GAAKmc,MAAWmpC,GAAMtlD,GAAKA,GAAKy9H,MAAYthH,CAAM,GAC9D6kH,KAAe,CAAAhhI,MAAO+gI,GAAS/gI,GAAK9K,EAAM,GAC1C+rI,KAAiB,CAAAjhI,MAAO+gI,GAAS/gI,GAAKwgI,EAAiB,GACvDU,KAAY,CAAClhI,GAAKw9H,MAAal4E,GAAMtlD,GAAKA,GAAKu9H,GAAYC,CAAQ,GAAG0C,GAAU,CAAA,GAChFiB,KAAc,CAACnhI,GAAKw9H,GAAUrhH,MAAWmpC,GAAMtlD,GAAKA,GAAKu9H,GAAYC,CAAQ,GAAGrhH,CAAM,GACtFilH,KAAkB,CAACphI,GAAKw9H,MAAa2D,GAAYnhI,GAAKw9H,GAAU8C,EAAM,GACtEe,KAAkB,CAACrhI,GAAKw9H,MAAa2D,GAAYnhI,GAAKw9H,GAAUtoI,EAAM,GACtEosI,KAAsB,CAACthI,GAAKw9H,GAAU19H,MAAWqhI,GAAYnhI,GAAKw9H,GAAUkD,GAAa5gI,CAAM,CAAC,GAChGyhI,KAAmB,CAACvhI,GAAKw9H,MAAa2D,GAAYnhI,GAAKw9H,GAAU+C,EAAO,GACxEiB,KAAoB,CAACxhI,GAAKw9H,MAAa2D,GAAYnhI,GAAKw9H,GAAUgD,EAAiB,GACnFiB,KAAmB,CAACzhI,GAAKw9H,GAAUrhH,MAAWglH,GAAYnhI,GAAKw9H,GAAUkC,GAAMvjH,CAAM,CAAC,GAEtF5mB,KAAOqrI,GAAe,MAAM,GAC5Bc,KAAUb,GAAiB,OAAO,GAClCc,KAAWd,GAAiB,UAAU,GACtCe,KAAUJ,GAAkB,WAAW,MAAM9mI,EAAI,GACjDmnI,KAAeb,GAAa,MAAM,GAClCc,KAAed,GAAa,MAAM,GAClCe,KAAkBf,GAAa,SAAS,GACxCgB,KAAgBhB,GAAa,OAAO,GACpCiB,KAASV,GAAiB,UAAU,EAAK,GACzCW,KAAUX,GAAiB,WAAW,EAAI,GAC1CY,KAAUZ,GAAiB,WAAW,EAAK,GAC3Ca,KAAmB,CAAA58H,MAAO07H,GAAU,WAAW17H,CAAG,GAClD68H,KAAgB,CAAA9sI,MAAQ8rI,GAAgB,QAAQ9rI,CAAI,GAEpD+sI,KAAsBhD,GAAM;AAAA,MAChC/pI;AAAA,MACAqrI,GAAe,SAAS;AAAA,MACxBQ,GAAgB,YAAY,CAAC;AAAA,MAC7BgB,GAAiB,CAAC;AAAA,MAClBhB,GAAgB,cAAc,EAAE;AAAA,MAChCH,GAAe,SAAS;AAAA,MACxBS;AAAA,MACAC;AAAA,MACAF,GAAiB,eAAe,CAAE,GAAEvsI,EAAM;AAAA,IAChD,CAAK,GACKqtI,KAAsB,CAAAh9C,MAAQu6C,GAAM,iBAAiBwC,IAAqB;AAAA,MAC9E,SAAS/8C,EAAK;AAAA,MACd,GAAGA;AAAA,IACT,CAAK,GAEKi9C,KAA0B;AAAA,MAC9BN;AAAA,MACAH;AAAA,MACAD;AAAA,MACAD;AAAA,MACAD;AAAA,IACN,GAEUa,KAAgC,CAACR,EAAM,EAAE,OAAOO,EAAuB,GAEvEE,KAAmB;AAAA,MACvBlB,GAAkB,aAAa5lI,EAAK;AAAA,MACpC0lI,GAAoB,SAAS,QAAQ;AAAA,QACnC;AAAA,QACA;AAAA,MACR,CAAO;AAAA,MACDA,GAAoB,YAAY,aAAa;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO;AAAA,IACP,GAEUqB,KAAsBH,GAAwB,OAAO;AAAA,MACzDH,GAAc,mBAAmB;AAAA,MACjCF;AAAA,MACAR;AAAA,MACAlB,GAAY,YAAYxlI,EAAQ;AAAA,IACtC,CAAK,GACK2nI,KAA4BH,GAA8B,OAAO;AAAA,MACrEJ,GAAc,mBAAmB;AAAA,MACjCF;AAAA,MACAR;AAAA,MACAlB,GAAY,YAAYxlI,EAAQ;AAAA,IACtC,CAAK,GACK4nI,KAAqBL,GAAwB,OAAO,CAACH,GAAc,mBAAmB,CAAC,CAAC,GACxFS,KAA2BL,GAA8B,OAAO,CAACJ,GAAc,yBAAyB,CAAC,CAAC,GAC1GU,KAAiB9C,GAAO,QAAQ;AAAA,MACpC,mBAAmB0C;AAAA,MACnB,yBAAyBC;AAAA,IAC/B,CAAK;AACD,IAAAtD,GAAM;AAAA,MACJ+C,GAAc,aAAa;AAAA,MAC3Bb,GAAkB,aAAaxmI,GAAS,EAAE,CAAC;AAAA,MAC3CgnI;AAAA,MACAlB,GAAgB,YAAYiC,EAAc;AAAA,MAC1ChC,GAAS,UAAUd,GAAO,QAAQ;AAAA,QAChC,mBAAmB4C;AAAA,QACnB,yBAAyBC;AAAA,MACjC,CAAO,CAAC;AAAA,IACR,EAAM,OAAOJ,EAAgB,CAAC;AAE1B,UAAMM,KAAa,CAAAvmH,MAAU;AAC3B,YAAMwmH,IAASxmH,EAAO,GAAG,SAAS,OAAQ,EAAC,QACrCymH,IAAU/jI,GAAM8jI,GAAQ,CAAAE,MAASZ,GAAoBY,CAAK,EAAE,KAAK,CAAA10F,MAAO;AAC5E,cAAM,IAAI,MAAMsxF,GAAYtxF,CAAG,CAAC;AAAA,MACxC,GAASxzC,EAAQ,CAAC,GACNmoI,IAAW/iI,GAAYT,GAAWsjI,GAAS,CAAA12I,MAAKA,EAAE,OAAO,CAAC,GAC1D62I,IAAgBvjI,GAAOojI,CAAO;AAEpC,aAAO;AAAA,QACL,SAAAA;AAAA,QACA,UAAAE;AAAA,QACA,iBAJsB,CAAAnJ,MAAW78H,GAASimI,GAAe,CAAAC,MAAMA,EAAG,YAAYrJ,CAAO;AAAA,MAK7F;AAAA,IACA,GAEUsJ,KAAmB,CAAC9mH,GAAQ24C,MAAQ;AACxC,YAAMouE,IAAS3hG,GAAOuzB,EAAI,MAAM,EAAE;AAClC,MAAA34C,EAAO,GAAG,2BAA2B,CAAA9lC,MAAK;AACxC,QAAIA,EAAE,UAAU,MAGhB6sJ,EAAO,SAAQ;AAAA,MACvB,CAAO,GACD/mH,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,cAAM4lG,IAAU5lG,EAAE;AAClB,QAAI4lG,MAAY,IACdinD,EAAO,SAAQ,IACNjnD,MAAY,MACrBnnB,EAAI,kBAAiB;AAAA,MAE/B,CAAO,GACD34C,EAAO,GAAG,UAAU+mH,EAAO,MAAM;AAAA,IACvC,GACUC,KAAU,CAAAhnH,MAAU;AACxB,YAAMinH,IAAsBjiG,MACtBkiG,IAAWllG,GAAK,EAAK,GACrBmlG,IAAWF,EAAoB,OAC/BG,IAAoB,MAAM;AAC9B,QAAID,EAAQ,MACVx7B,GAA8B3rF,CAAM,GACpC0vC,GAAqB1vC,CAAM,GAC3BknH,EAAS,IAAI,EAAK,GAClBD,EAAoB,MAAK;AAAA,MAEnC,GACYI,IAAsB,CAAAhqG,MAAW;AACrC,QAAK8pG,EAAQ,MACXz7B,GAA2B1rF,GAAQqd,EAAQ,KAAK,GAChD4pG,EAAoB,IAAI;AAAA,UACtB,SAAS5pG,EAAQ;AAAA,UACjB,aAAaA,EAAQ,KAAK;AAAA,QACtC,CAAW;AAAA,MAEX,GACYiqG,IAAoBviI,GAAO,MAAMwhI,GAAWvmH,CAAM,CAAC,GACnDunH,IAAW,CAAA3I,MAAgBqI,EAAoB,IAAG,EAAG,IAAI,CAAAjI,MAAM5kG,GAAWpa,EAAO,KAAKA,EAAO,UAAU,OAAQ,GAAEg/G,EAAG,OAAO,EAAE,KAAK,CAAAwI,MAAc7I,GAAkB3+G,GAAQsnH,GAAmBE,GAAY5I,CAAY,CAAC,CAAC,EAAE,WAAW,MAAMpgH,GAAOwB,GAAQsnH,CAAiB,CAAC,GAC3Q3+G,IAAO,CAAAi2G,MAAgB;AAC3B,QAAA2I,EAAS3I,CAAY,EAAE,KAAKwI,GAAmB,CAAAK,MAAc;AAC3D,UAAAJ,EAAoBI,EAAW,OAAO,GACtCA,EAAW,WAAW,KAAK,CAAA1I,MAAc;AACvC,YAAAkI,EAAoB,IAAG,EAAG,IAAI,CAAAjI,MAAM;AAClC,oBAAM3hG,IAAUoqG,EAAW;AAC3B,cAAIzI,EAAG,YAAY3hG,EAAQ,YACrBA,EAAQ,KAAK,SAAS2hG,EAAG,eAAe,KAC1CoI,OAEAH,EAAoB,IAAI;AAAA,gBACtB,GAAGjI;AAAA,gBACH,aAAa3hG,EAAQ,KAAK;AAAA,cAC9C,CAAmB,GACG6pG,EAAS,QACXz3E,GAAwBzvC,GAAQ,EAAE,YAAA++G,EAAU,CAAE,KAE9CmI,EAAS,IAAI,EAAI,GACjB13E,GAAuBxvC,GAAQ,EAAE,YAAA++G,EAAU,CAAE;AAAA,YAIjE,CAAa;AAAA,UACb,CAAW;AAAA,QACX,CAAS;AAAA,MACT;AACM,MAAA/+G,EAAO,WAAW,0BAA0B,CAAC0nH,GAAK/vI,MAAU;AAC1D,cAAMinI,IAAe/lI,GAASlB,CAAK,IAAIA,EAAM,eAAe;AAC5D,QAAAgxB,EAAKi2G,CAAY;AAAA,MACzB,CAAO,GACD5+G,EAAO,WAAW,yBAAyBonH,CAAiB,GAC5DN,GAAiB9mH,GAAQ;AAAA,QACvB,mBAAAonH;AAAA,QACA,MAAAz+G;AAAA,MACR,CAAO;AAAA,IACP,GAGUg/G,KADY38H,GAAU,EAAC,QACF,YACrB48H,KAAoB,CAAAh3H,MAAQ4O,GAAkBzO,EAAa,QAAQH,CAAI,CAAC,GACxEi3H,KAAuB,CAACzxI,GAAKwa,MAAS;AAC1C,UAAIhqB;AACJ,aAAOwP,EAAI,gBAAgB,KAAKA,EAAI,gBAAgBxP,IAAKgqB,EAAK,iBAAiB,QAAQhqB,MAAO,SAAS,SAASA,EAAG;AAAA,IACzH,GACUkhJ,KAA+B,CAACl5H,GAAKkS,MAAQzhB,EAAS,KAAKuP,EAAI,UAAUkS,EAAI,aAAa,SAAS,CAAC,GACpGinH,KAAqB,CAACn5H,GAAKkS,MAAQgnH,GAA6Bl5H,GAAKkS,CAAG,EAAE,UAC1EknH,KAAqB,CAACp5H,GAAKxY,MAAQ;AACvC,YAAM6xI,IAAe5oI,EAAS,KAAKuP,EAAI,UAAUxY,EAAI,gBAAgB,SAAS,CAAC,GACzE8xI,IAAa7oI,EAAS,KAAKuP,EAAI,UAAUxY,EAAI,cAAc,SAAS,CAAC;AAC3E,UAAI6xI,EAAa,OAAM,KAAMC,EAAW,OAAM,GAAI;AAChD,cAAMC,IAAeF,EAAa,KAAK,CAAAv5D,MAAWrvE,EAAS,KAAKuP,EAAI,OAAO,WAAW8/D,CAAO,EAAE,CAAC,CAAC,CAAC;AAClG,eAAOrvE,EAAS,KAAK;AAAA,UACnB,cAAA8oI;AAAA,UACA,cAAAF;AAAA,UACA,YAAAC;AAAA,QACV,CAAS;AAAA,MACT;AACQ,eAAO7oI,EAAS;IAExB,GACU+oI,KAA0B,CAACtpE,GAAU7wD,MAAYu0C,GAAgBv0C,CAAO,EAAE,OAAO,CAAA6S,MAAOA,EAAI,QAAQg+C,CAAQ,CAAC,GAC7GupE,KAAoB,CAACvpE,GAAU7wD,MAC5Bw0C,GAAex0C,CAAO,EAAE,OAAO,CAAA6S,MAChCjE,GAAOiE,EAAI,QAAO,CAAE,KACfyhC,GAAat0C,GAAS6S,CAAG,EAAE,OAAO,CAAAktB,MAAQA,EAAK,QAAQ8wB,CAAQ,CAAC,KAAKh+C,EAAI,QAAQg+C,CAAQ,CAInG,GAEGwpE,KAA0B,CAACxpE,GAAUypE,MAAoBA,EAAgB,aAAa,OAAO,CAAAtQ,MAAWmQ,GAAwBtpE,GAAUm5D,CAAO,CAAC,GAClJuQ,KAAwB,CAAC1pE,GAAUypE,MAAoBA,EAAgB,aAAa,OAAO,CAAAtQ,MAAWoQ,GAAkBvpE,GAAUm5D,CAAO,CAAC,GAC1IwQ,KAA+B,CAAC3pE,GAAUypE,MAAoBA,EAAgB,aAAa,OAAO,CAAA75D,MAAWnsB,GAAamsB,GAAS5P,CAAQ,EAAE,OAAO,CAAAh+C,MAAOynH,EAAgB,aAAa,OAAO,CAAAtQ,MAAW,CAACA,EAAQ,SAASn5D,EAAS,UAAS,CAAE,KAAKm5D,EAAQ,SAASn3G,EAAI,UAAS,CAAE,CAAC,CAAC,CAAC,GACxR4nH,KAA8B,CAACxxI,GAAM4nE,GAAUypE,MAAoBA,EAAgB,aAAa,OAAO,CAAA75D,MAAWpsB,GAAaprD,GAAM4nE,CAAQ,EAAE,OAAO,CAAAh+C,MAAO,CAAC4tD,EAAQ,SAAS5tD,EAAI,WAAW,CAAC,CAAC,GAChM6nH,KAAqB,CAAC3oH,GAAQ0hC,MAAa;AAC/C,YAAM9wC,IAAO8wC,EAAS;AACtB,MAAKhkD,GAAYkT,CAAI,KACnBoP,EAAO,UAAU,kBAAkBpP,GAAM8wC,EAAS,OAAM,CAAE;AAAA,IAElE,GACUknF,KAAwB,CAAC5oH,GAAQc,GAAKovB,MAAY;AACtD,YAAMw+B,IAAU1uD,EAAO,IAAI,UAAUc,EAAI,UAAS,GAAI,SAAS;AAC/D,UAAI4tD,KAAW,CAACA,EAAQ,MAAM;AAC5B,cAAMupD,IAAUj4G,EAAO,IAAI,OAAO,WAAW0uD,CAAO,EAAE,CAAC;AACvD,QAAIupD,MACa/nF,IAAUsS,GAAgBy1E,CAAO,IAAIx1E,GAAew1E,CAAO,GACnE,KAAK,CAAAn3G,MAAO6nH,GAAmB3oH,GAAQc,CAAG,CAAC;AAAA,MAE5D;AACQ,QAAA6nH,GAAmB3oH,GAAQc,CAAG;AAAA,IAEtC,GACU+nH,KAAkB,CAACzyI,GAAKmyI,MAAoB;AAChD,YAAMO,IAAgB,CAAA76H,MAAWA,EAAQ,SAAS7X,EAAI,cAAc,GAC9D2yI,IAAc,CAAA96H,MAAWA,EAAQ,SAAS7X,EAAI,YAAY,GAC1D4yI,IAAiBT,EAAgB,aAAa,OAAOO,CAAa,GAClEG,IAAeV,EAAgB,aAAa,OAAOQ,CAAW,GAC9DG,IAAqCX,EAAgB,aAAa,OAAO,CAAAN,MAAgBM,EAAgB,WAAW,OAAO,CAAAL,MAAcD,MAAiBC,CAAU,CAAC;AAE3K,cADsCc,KAAkBC,MAAiB,EAAED,KAAkBC,MACtDC;AAAA,IAC7C,GACUC,KAAiC,CAACnpH,GAAQkwB,GAASk5F,MAAgB;AACvE,YAAM,EAAC,KAAAx6H,GAAK,WAAAqhC,EAAS,IAAIjwB,GACnB9oB,IAAO8oB,EAAO;AACpB,UAAIopH,MAAgB,aAAa;AAC/B,cAAMtqE,IAAWtxB,GAAc,eAAeyC,EAAU,OAAQ,CAAA,GAC1DhqB,IAAcrX,EAAI,UAAUkwD,EAAS,aAAalwD,EAAI,OAAO,GAC7Dy6H,IAAuBvB,GAA6Bl5H,GAAKkwD,CAAQ,GACjEwqE,IAAqBrjH,KAAerX,EAAI,QAAQqX,CAAW,GAC3DsjH,IAAe/rI,GAAOyoB,KAAgB,OAAiC,SAASA,EAAY,eAAe,GAC3GujH,IAAchsI,GAAOyoB,KAAgB,OAAiC,SAASA,EAAY,WAAW;AAC5G,eAAIqjH,MACkBp5F,IAAUs5F,IAAcD,MAEbrnF,GAAS,CAAChS,GAASh5C,GAAM4nE,CAAQ,EAAE,OAAO,CAAAh+C,MAC9DinH,GAAmBn5H,GAAKkS,CAAG,KAAK,CAACpU,GAAO28H,GAAsBvB,GAA6Bl5H,GAAKkS,CAAG,CAAC,CAC5G,IAEQ,KAINohC,GAAShS,GAASh5C,GAAM4nE,CAAQ,EAAE,KAAK3/D,IAAO,CAAA2hB,MAAO;AAC1D,gBAAM2oH,IAAwB3B,GAA6Bl5H,GAAKkS,CAAG;AACnE,cAAIinH,GAAmBn5H,GAAKkS,CAAG,KAAK,CAACpU,GAAO28H,GAAsBI,CAAqB,GAAG;AAIxF,gBAHKv5F,KACH04F,GAAsB5oH,GAAQc,GAAK,EAAK,GAEtCmF,KAAeqjH,GAAoB;AACrC,kBAAIp5F,KAAWq5F;AACb,uBAAO;AACF,kBAAI,CAACr5F,KAAWs5F;AACrB,uBAAO;AAET,cAAAZ,GAAsB5oH,GAAQc,GAAKovB,CAAO,GAC1ClwB,EAAO,IAAI,OAAOiG,CAAW;AAAA,YAC9B;AACD,mBAAO;AAAA,UACnB;AACY,mBAAO;AAAA,QAEnB,CAAS;AAAA,MACT;AACQ,eAAO;AAAA,IAEf,GACUyjH,KAAmC,CAAC1pH,GAAQ2pH,GAAgBz5F,GAASk5F,MAAgB;AAEzF,YAAMhzI,IADY4pB,EAAO,UACH,UAChB8+C,IAAWtxB,GAAc,eAAep3C,CAAG,GAC3Cc,IAAO8oB,EAAO;AACpB,aAAIopH,MAAgB,cACXP,GAAgBzyI,GAAKuzI,CAAc,IACjCz5F,IACFs4F,GAAsB1pE,GAAU6qE,CAAc,KAAKjB,GAA4BxxI,GAAM4nE,GAAU6qE,CAAc,IAE7GrB,GAAwBxpE,GAAU6qE,CAAc,KAAKlB,GAA6B3pE,GAAU6qE,CAAc;AAAA,IAEzH,GACUC,KAA4B,CAAC5pH,GAAQkwB,GAASk5F,MAAgBpB,GAAmBhoH,EAAO,KAAKA,EAAO,UAAU,OAAQ,CAAA,EAAE,KAAK,MAAMmpH,GAA+BnpH,GAAQkwB,GAASk5F,CAAW,GAAG,CAAAb,MAAmBmB,GAAiC1pH,GAAQuoH,GAAiBr4F,GAASk5F,CAAW,KAAKD,GAA+BnpH,GAAQkwB,GAASk5F,CAAW,CAAC,GACnWS,KAA2B,CAAC7pH,GAAQkwB,GAASk5F,MAAgB;AACjE,YAAMn5F,IAAYjwB,EAAO,WACnBpP,IAAOq/B,EAAU,WACjB75C,IAAM65C,EAAU,UAChB6uB,IAAWtxB,GAAc,eAAep3C,CAAG;AACjD,aAAIknB,GAAY1M,CAAI,KACdw4H,MAAgB,eAAevB,GAAqBzxI,GAAKwa,CAAI,KAAK+8D,GAAgCz9B,GAAS4uB,GAAUluD,CAAI,IAC3Hg3H,GAAkBh3H,CAAI,IAEtBoP,EAAO,YAAY,SAAS,MAAM;AAChC,cAAMimC,IAAMhW,EAAU;AACtB,YAAI,EAAC,YAAA4+D,GAAY,cAAAi7B,GAAc,WAAAh7B,GAAW,aAAAi7B,EAAW,IAAI9jF,KAAuC,CAAA;AAChG,cAAM+jF,IAAiB,MAAM;AAC3B,UAAIpsI,GAAcixG,CAAU,KAAKjxG,GAAcksI,CAAY,KAAKlsI,GAAckxG,CAAS,KAAKlxG,GAAcmsI,CAAW,MACnH9jF,KAAQ,QAAkCA,EAAI,iBAAiB4oD,GAAYi7B,GAAch7B,GAAWi7B,CAAW;AAAA,QAE/H,GACkBE,IAAkB,MAAM;AAC5B,UAAAp7B,IAAa5oD,KAAQ,OAAyB,SAASA,EAAI,YAC3D6jF,IAAe7jF,KAAQ,OAAyB,SAASA,EAAI,cAC7D6oD,IAAY7oD,KAAQ,OAAyB,SAASA,EAAI,WAC1D8jF,IAAc9jF,KAAQ,OAAyB,SAASA,EAAI;AAAA,QAC1E,GACkBikF,IAAsB,CAACjoI,GAAMlT,OAAO;AACxC,UAAAuR,EAAO2B,EAAK,YAAY,CAAA6S,OAAS;AAC/B,YAAI0xC,GAAO1xC,EAAK,KACd/lB,GAAG,YAAY+lB,EAAK;AAAA,UAEtC,CAAe;AAAA,QACf,GACkBmD,IAAY+H,EAAO,IAAI,OAAO,QAAQ,EAAE,kBAAkB,IAAG,CAAE;AACrE,QAAAkqH,EAAoBt5H,GAAMqH,CAAS,GACnCrH,EAAK,YAAYqH,CAAS,GAC1B+xH,MACIZ,MAAgB,UAAUA,MAAgB,YAC5CnjF,KAAQ,QAAkCA,EAAI,OAAO,UAAU/V,IAAU,UAAU,QAAQk5F,CAAW,IAEpG,CAACn5F,EAAU,iBAAiB43F,GAAqB53F,EAAU,OAAM,GAAIh4B,CAAS,IAChF2vH,GAAkBh3H,CAAI,KAEtBoP,EAAO,YAAYkwB,IAAU,kBAAkB,QAAQ,GACvD+5F,KACAC,EAAoBjyH,GAAWrH,CAAI,GACnCo5H,MAEFhqH,EAAO,IAAI,OAAO/H,CAAS;AAAA,MACvC,CAAW,GAEI,MAEA;AAAA,IAEf,GACUkyH,KAAkB,CAACnqH,GAAQkwB,GAASk5F,MAAgBQ,GAA0B5pH,GAAQkwB,GAASk5F,CAAW,KAAKzB,MAAYkC,GAAyB7pH,GAAQkwB,GAASk5F,CAAW,IAAI/pI,EAAS,KAAKpB,EAAI,IAAIoB,EAAS,QAEnN+qI,KAA0B,CAAAC,MAAa,CAACrqH,GAAQsqH,GAAWC,IAAY,OAAO;AAClF,YAAMrhI,IAAS8W,EAAO,WAChBwqH,IAAY;AAAA,QAChB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAAthI;AAAA,QACA,eAAeA;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,gBAAgBA;AAAA,QAChB,wBAAwBA;AAAA,QACxB,WAAW;AAAA,QACX,YAAYA;AAAA,QACZ,YAAY;AAAA,QACZ,gBAAgBjL;AAAA,QAChB,WAAAqsI;AAAA,MACR,GACYjnE,IAAQhsC,GAAQ,IAAI,WAAWgzG,CAAS,CAAC;AAC/C,aAAOrqH,EAAO,SAASqqH,GAAW;AAAA,QAChC,GAAGhnE;AAAA,QACH,GAAGmnE;AAAA,QACH,GAAGD;AAAA,MACX,CAAO;AAAA,IACP,GACUE,KAAiBL,GAAwB,OAAO,GAChDM,KAAuBN,GAAwB,aAAa,GAE5DO,KAAa3/H,MACb5W,KAAKu2I,GAAW,IAChBC,KAAex2I,GAAG,QAAS,KAAIA,GAAG,MAAK,GAEvCy2I,KADUF,GAAW,QACD,aACpBG,KAA2B,CAAC9qH,GAAQs9B,GAAO3kB,MAAQ;AACvD,YAAM2xG,IAAY3xG,EAAI,YAAYq3B,GAAG,YAAY,0BAA0B,wBACrE22B,IAAc3mE,EAAO,UAAU,YAAW,GAC1C+qH,IAAwBpkD,IAAc,cAAc,aACpDqkD,IAAyB,CAAAC,MACzBtkD,IACKskD,IAAS,SAAS,SAElB;AAGX,MAAArS,GAAyB;AAAA,QACvB;AAAA,UACE,SAAS5oE,GAAG;AAAA,UACZ,QAAQnJ,GAAOotE,IAAmBj0G,CAAM;AAAA,QACzC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOsgE,IAAmBnnG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOsgE,IAAmBnnG,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO6+D,IAAmB1lG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO6+D,IAAmB1lG,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO4pE,IAAmBzwG,GAAQs9B,GAAO,EAAK;AAAA,QACvD;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,QAAQnJ,GAAO4pE,IAAmBzwG,GAAQs9B,GAAO,EAAI;AAAA,QACtD;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,QAAQnJ,GAAOutB,IAAmBp0D,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOutB,IAAmBp0D,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAO+qH,CAAqB;AAAA,QACrE;AAAA,QACD;AAAA,UACE,SAAS/6E,GAAG;AAAA,UACZ,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAM+qH,CAAqB;AAAA,QACpE;AAAA,QACD,GAAGH,KAAe;AAAA,UAChB;AAAA,YACE,SAAS56E,GAAG;AAAA,YACZ,QAAQ;AAAA,YACR,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAOgrH,EAAuB,EAAI,CAAC;AAAA,UAC5E;AAAA,UACD;AAAA,YACE,SAASh7E,GAAG;AAAA,YACZ,QAAQ;AAAA,YACR,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAMgrH,EAAuB,EAAI,CAAC;AAAA,UAC3E;AAAA,UACD;AAAA,YACE,SAASh7E,GAAG;AAAA,YACZ,SAAS;AAAA,YACT,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAOgrH,EAAuB,EAAK,CAAC;AAAA,UAC7E;AAAA,QACX,IAAY;AAAA,UACF;AAAA,YACE,SAASh7E,GAAG;AAAA,YACZ,SAAS;AAAA,YACT,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAOgrH,EAAuB,EAAI,CAAC;AAAA,UAC5E;AAAA,UACD;AAAA,YACE,SAASh7E,GAAG;AAAA,YACZ,SAAS;AAAA,YACT,QAAQnJ,GAAOsjF,IAAiBnqH,GAAQ,IAAMgrH,EAAuB,EAAI,CAAC;AAAA,UAC3E;AAAA,QACF;AAAA,QACD;AAAA,UACE,SAASh7E,GAAG;AAAA,UACZ,QAAQnJ,GAAOwgE,IAAmBrnG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOwgE,IAAmBrnG,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOksE,IAAmB/yG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOksE,IAAmB/yG,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOs9D,IAAmBnkG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOs9D,IAAmBnkG,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO68D,IAAmB1jG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO68D,IAAmB1jG,GAAQ,EAAI;AAAA,QAC/C;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO0rE,IAAmBvyG,GAAQ,EAAK;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO0rE,IAAmBvyG,GAAQ,EAAI;AAAA,QAC/C;AAAA,MACT,GAAS2Y,CAAG,EAAE,OAAO,CAAA/oC,MAAKowB,EAAO,UAAU,WAAY,CAAA,EAAE,KAAK,CAAAkrH,MAAe;AACrE,QAAAvyG,EAAI,eAAc,GACE+xG,GAAqB1qH,GAAQsqH,CAAS,EACzC,yBACfY,KACAT,GAAezqH,GAAQsqH,CAAS;AAAA,MAE1C,CAAO;AAAA,IACP,GACUa,KAAuB,CAACnrH,GAAQ2Y,GAAKyyG,MAAuBzS,GAAQ;AAAA,MACxE;AAAA,QACE,SAAS3oE,GAAG;AAAA,QACZ,QAAQnJ,GAAOqgE,IAAkBlnG,CAAM;AAAA,MACxC;AAAA,MACD;AAAA,QACE,SAASgwC,GAAG;AAAA,QACZ,QAAQnJ,GAAOqgE,IAAkBlnG,CAAM;AAAA,MACxC;AAAA,MACD,GAAG4qH,KAAe;AAAA,QAChB;AAAA,UACE,SAAS56E,GAAG;AAAA,UACZ,QAAQ;AAAA,UACR,QAAQnJ,GAAO8rE,IAAc3yG,CAAM;AAAA,QACpC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQ;AAAA,UACR,QAAQnJ,GAAO8rE,IAAc3yG,CAAM;AAAA,QACpC;AAAA,QACD,GAAGorH,IAAqB,CAAC;AAAA,UACrB,SAASP,KAAY,MAAM;AAAA,UAC3B,QAAQhkF,GAAO8rE,IAAc3yG,CAAM;AAAA,QACpC,CAAA,IAAI,CAAE;AAAA,MACjB,IAAU;AAAA,QACF;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,SAAS;AAAA,UACT,QAAQnJ,GAAO8rE,IAAc3yG,CAAM;AAAA,QACpC;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,SAAS;AAAA,UACT,QAAQnJ,GAAO8rE,IAAc3yG,CAAM;AAAA,QACpC;AAAA,MACF;AAAA,IACF,GAAE2Y,CAAG,GACA0yG,KAAU,CAACrrH,GAAQs9B,MAAU;AACjC,UAAI8tF,IAAqB;AACzB,MAAAprH,EAAO,GAAG,WAAW,CAAA2Y,MAAO;AAC1B,QAAAyyG,IAAqBzyG,EAAI,YAAYq3B,GAAG,WACnCr3B,EAAI,wBACPmyG,GAAyB9qH,GAAQs9B,GAAO3kB,CAAG;AAAA,MAErD,CAAO,GACD3Y,EAAO,GAAG,SAAS,CAAA2Y,MAAO;AACxB,QAAKA,EAAI,wBACPwyG,GAAqBnrH,GAAQ2Y,GAAKyyG,CAAkB,GAEtDA,IAAqB;AAAA,MAC7B,CAAO;AAAA,IACP,GAEUE,KAAgC,CAAA16H,MAAQ;AAC5C,aAAOA,KAAM;AACX,YAAIuK,GAAYvK,CAAI,KAAK2L,GAAS3L,CAAI,KAAKA,EAAK,QAAQ,WAAW,KAAKA,EAAK,IAAI;AAC/E,iBAAOA;AAET,QAAAA,IAAOA,EAAK;AAAA,MACb;AACD,aAAO;AAAA,IACb,GACU26H,KAAsB,CAACvrH,GAAQ9oB,MAAS;AAC5C,YAAM0X,IAAMoR,EAAO,KACbkR,IAAoClR,EAAO,OAAO,kCAAiC;AACzF,UAAI,CAAC9oB;AACH;AAEF,UAAI,eAAe,KAAKA,EAAK,QAAQ,GAAG;AACtC,cAAMkc,IAAak4H,GAA8Bp0I,EAAK,UAAU;AAChE,QAAIkc,KAAc,eAAe,KAAKA,EAAW,QAAQ,KACvDlc,EAAK,aAAa0X,EAAI,IAAI,eAAe4O,EAAI,GAAGtmB,EAAK,UAAU;AAAA,MAElE;AACD,YAAMd,IAAMwY,EAAI;AAEhB,UADA1X,EAAK,UAAS,GACVA,EAAK,iBAAiB;AACxB,cAAMgtB,IAAS,IAAIxJ,GAAcxjB,GAAMA,CAAI;AAC3C,YAAI60D,IAAW70D,GACX0Z;AACJ,eAAOA,IAAOsT,EAAO,aAAW;AAC9B,cAAI3H,GAAS3L,CAAI,GAAG;AAClB,YAAAxa,EAAI,SAASwa,GAAM,CAAC,GACpBxa,EAAI,OAAOwa,GAAM,CAAC;AAClB;AAAA,UACD;AACD,cAAIsgB,EAAkCtgB,EAAK,SAAS,YAAa,CAAA,GAAG;AAClE,YAAAxa,EAAI,eAAewa,CAAI,GACvBxa,EAAI,aAAawa,CAAI;AACrB;AAAA,UACD;AACD,UAAAm7C,IAAWn7C,GACXA,IAAOsT,EAAO;QACf;AACD,QAAKtT,MACHxa,EAAI,SAAS21D,GAAU,CAAC,GACxB31D,EAAI,OAAO21D,GAAU,CAAC;AAAA,MAEhC;AACQ,QAAIlvC,GAAO3lB,CAAI,IACTA,EAAK,eAAe0X,EAAI,QAAQ1X,EAAK,WAAW,KAClDd,EAAI,eAAec,CAAI,GACvBd,EAAI,aAAac,CAAI,MAErBd,EAAI,cAAcc,CAAI,GACtBd,EAAI,YAAYc,CAAI,MAGtBd,EAAI,SAASc,GAAM,CAAC,GACpBd,EAAI,OAAOc,GAAM,CAAC;AAGtB,MAAA8oB,EAAO,UAAU,OAAO5pB,CAAG,GAC3BulE,GAAoB37C,GAAQ5pB,CAAG;AAAA,IACrC,GACUo1I,KAAkB,CAAC58H,GAAKgC,MAAS;AACrC,YAAM1Z,IAAO0X,EAAI;AACjB,UAAI68H,GACAr5H,IAASxB;AACb,aAAOwB,MAAWlb,KAAQkb,KAAUxD,EAAI,mBAAmBwD,CAAM,MAAM,WAAS;AAC9E,YAAIxD,EAAI,mBAAmBwD,CAAM,MAAM,QAAQ;AAC7C,UAAAq5H,IAAer5H;AACf;AAAA,QACD;AACD,QAAAA,IAASA,EAAO;AAAA,MACjB;AACD,aAAOA,MAAWlb,IAAOu0I,IAAev0I;AAAA,IAC9C,GACUw0I,KAAmB,CAAA1rH,MAChB3gB,EAAS,KAAK2gB,EAAO,IAAI,UAAUA,EAAO,UAAU,SAAS,EAAI,GAAGA,EAAO,IAAI,OAAO,CAAC,GAE1F2rH,KAAqB,CAAA3rH,MAClB0rH,GAAiB1rH,CAAM,EAAE,KAAKzhB,GAAS,EAAE,GAAG,CAAA0nB,MAC1CA,EAAY,SAAS,aAC7B,GAEG2lH,KAAwB,CAAA5rH,MACrB0rH,GAAiB1rH,CAAM,EAAE,OAAO,CAAAd,MAC9BL,GAAa9N,EAAa,QAAQmO,CAAG,CAAC,CAC9C,EAAE,OAAM,GAEL0yD,KAAa,CAAA1yD,MAAO;AACxB,MAAAA,EAAI,YAAY;AAAA,IACtB,GACU2sH,KAAkB,CAAC7rH,GAAQpP,GAAMk7H,MAAyB;AAC9D,YAAMl9H,IAAMoR,EAAO;AACnB,MAAA3gB,EAAS,KAAKysI,EAAqB,KAAK,EAAE,IAAIl9H,EAAI,UAAU,EAAE,KAAK,CAAAm9H,MAAc;AAE/E,cAAMC,IAAY;AAAA,UAChB,GAFoB31H,GAAUtF,EAAa,QAAQH,CAAI,CAAC;AAAA,UAGxD,GAAGm7H;AAAA,QACb;AACQ,QAAAn9H,EAAI,UAAUgC,GAAMo7H,CAAS;AAAA,MACrC,CAAO;AACD,YAAMC,IAAiB5sI,EAAS,KAAKysI,EAAqB,KAAK,EAAE,IAAI,CAAAI,MAAeA,EAAY,MAAM,KAAK,CAAC,GACtGC,IAAoB9sI,EAAS,KAAKuR,EAAK,SAAS,EAAE,IAAI,CAAAw7H,MAAkBzrI,GAASyrI,EAAe,MAAM,KAAK,GAAG,CAAAr8H,MAASA,MAAU,EAAE,CAAC;AAC1I,MAAApD,GAAMs/H,GAAgBE,GAAmB,CAACD,GAAaE,MAAmB;AACxE,cAAMC,IAAkB1rI,GAASyrI,GAAgB,CAAAr8H,MAAS,CAAC5P,EAAW+rI,GAAan8H,CAAK,CAAC,GACnFu8H,IAAa;AAAA,UACjB,GAAGJ;AAAA,UACH,GAAGG;AAAA,QACb;AACQ,QAAAz9H,EAAI,UAAUgC,GAAM,SAAS07H,EAAW,KAAK,GAAG,CAAC;AAAA,MACzD,CAAO;AACD,YAAMC,IAAe;AAAA,QACnB;AAAA,QACA;AAAA,MACR,GACYC,IAAiBtpI,GAAS4oI,GAAsB,CAACl8I,GAAGmf,MAAU,CAAC5O,EAAWosI,GAAcx9H,CAAK,CAAC;AACpG,MAAAH,EAAI,WAAWgC,GAAM47H,CAAc;AAAA,IACzC,GACUC,KAAsB,CAACzsH,GAAQpP,MAAS;AAE5C,UAD4B4kC,GAAmBx1B,CAAM,EAC7B,YAAa,MAAKpP,EAAK,QAAQ,YAAW,GAAI;AACpE,cAAMk7H,IAAuBr2F,GAAwBz1B,CAAM;AAC3D,QAAA6rH,GAAgB7rH,GAAQpP,GAAMk7H,CAAoB;AAAA,MACnD;AAAA,IACP,GACUY,KAAiB,CAAC1sH,GAAQ/H,GAAWgO,GAAawlH,GAAckB,IAAa,IAAMvpI,GAAM2sB,MAAW;AACxG,YAAMnhB,IAAMoR,EAAO,KACbN,IAASM,EAAO,QAChB4sH,IAAep3F,GAAmBx1B,CAAM,GACxC6sH,IAAkB5mH,IAAcA,EAAY,SAAS,YAAa,IAAG;AAC3E,UAAIrV,IAAOqH;AACX,YAAMoiE,IAAqB36D,EAAO;AAClC,UAAI4G;AACJ,MAAIljB,KAAQypI,MAAoB,WAAWA,MAAoB,OAC7DvmH,IAAQ1X,EAAI,OAAOxL,KAAQwpI,GAAc78G,KAAU,CAAA,CAAE,IAErDzJ,IAAQL,EAAY,UAAU,EAAK;AAErC,UAAIgiG,IAAY3hG;AAChB,UAAI,CAACqmH;AACH,QAAA/9H,EAAI,UAAU0X,GAAO,SAAS,IAAI,GAClC1X,EAAI,UAAU0X,GAAO,SAAS,IAAI;AAAA;AAElC;AACE,cAAI+zD,EAAmBzpE,EAAK,QAAQ,GAAG;AACrC,gBAAI+xC,GAAY/xC,CAAI,KAAK6zC,GAAiB7zC,CAAI;AAC5C;AAEF,kBAAM8+F,IAAa9+F,EAAK,UAAU,EAAK;AACvC,YAAAhC,EAAI,UAAU8gG,GAAY,MAAM,EAAE,GAC9BppF,EAAM,mBACRopF,EAAW,YAAYppF,EAAM,UAAU,GACvCA,EAAM,YAAYopF,CAAU,MAE5BuY,IAAYvY,GACZppF,EAAM,YAAYopF,CAAU;AAAA,UAE/B;AAAA,gBACO9+F,IAAOA,EAAK,eAAeA,MAAS66H;AAEhD,aAAAgB,GAAoBzsH,GAAQsG,CAAK,GACjCsrD,GAAWq2C,CAAS,GACb3hG;AAAA,IACb,GAEUwmH,KAAiB,CAAC9sH,GAAQ/R,MAAY+R,EAAO,IAAI,UAAU/R,GAASoP,EAAS,GAC7E0vH,KAAkB,CAAC71I,GAAM+W,GAASo8C,MAAgB;AACtD,UAAIz5C,IAAO3C;AACX,aAAO2C,KAAQA,MAAS1Z,KAAQsG,GAAOoT,EAAK,WAAW,KAAG;AACxD,cAAMwB,IAASxB,EAAK;AACpB,YAAI,CAACwB,KAAU,CAACi4C,EAAYj4C,CAAM;AAChC,iBAAOiL,GAAUjL,CAAM;AAEzB,QAAAxB,IAAOwB;AAAA,MACR;AACD,aAAO;AAAA,IACb,GACU46H,KAA4B,CAAChtH,GAAQitH,GAAUh/H,MAAY,CAACg/H,KAAYh/H,EAAQ,SAAS,YAAa,MAAKunC,GAAmBx1B,CAAM,KAAKA,EAAO,IAAI,QAAQ/R,CAAO,KAAK8+H,GAAgB/sH,EAAO,QAAS,GAAE/R,GAAS,CAAAmG,MAAM5Q,GAAMwc,EAAO,OAAO,qBAAoB,GAAI5L,EAAG,SAAS,YAAa,CAAA,CAAC,GAC/R84H,KAAgB,CAACltH,GAAQ0sH,GAAgBzmH,MAAgB;AAC7D,UAAIr/B,GAAIw2C,GAAIw9C;AACZ,YAAMq8C,IAAWyV,EAAel3F,GAAmBx1B,CAAM,CAAC,GACpD9oB,IAAO41I,GAAe9sH,GAAQiG,CAAW;AAC/C,MAAK/uB,MAGL8oB,EAAO,IAAI,YAAYi3G,GAAU//H,CAAI,GACrCq0I,GAAoBvrH,GAAQi3G,CAAQ,KAC9Br8C,KAAMx9C,KAAMx2C,IAAKq/B,EAAY,mBAAmB,QAAQr/B,MAAO,SAAS,SAASA,EAAG,gBAAgB,QAAQw2C,MAAO,SAAS,SAASA,EAAG,YAAY,QAAQw9C,MAAO,SAASA,IAAK,KAAK,KAC1L56D,EAAO,IAAI,OAAOiG,CAAW;AAAA,IAErC,GAEUknH,KAAgB,CAACjuH,GAAK9b,MACnB8b,EAAI,cAAcA,EAAI,WAAW,aAAa9b,GAEjDgqI,KAAe,CAAAluH,MAAO;AAC1B,UAAIt4B;AACJ,eAASA,IAAKs4B,EAAI,gBAAgB,QAAQt4B,MAAO,SAAS,SAASA,EAAG,gBAAgBs4B;AAAA,IAC5F,GACUmuH,KAAY,CAACnuH,GAAKg4D,MAAe;AACrC,YAAMx2D,IAAaxB,KAAQ,OAAyB,SAASA,EAAI;AACjE,aAAOthB,GAAc8iB,CAAU,KAAKA,EAAW,aAAaw2D;AAAA,IAClE,GACUo2D,KAAc,CAAApuH,MACXthB,GAAcshB,CAAG,KAAK,eAAe,KAAKA,EAAI,QAAQ,GAEzDquH,KAAa,CAAAruH,MACVthB,GAAcshB,CAAG,KAAK,eAAe,KAAKA,EAAI,QAAQ,GAEzDsuH,KAAe,CAAAtuH,MACZouH,GAAYpuH,CAAG,KAAKouH,GAAYpuH,EAAI,UAAU,GAEjDuuH,KAAoB,CAAAC,MAAkB;AAC1C,YAAMC,IAAuBD,EAAe;AAC5C,aAAOH,GAAWI,CAAoB,IAAIA,IAAuBD;AAAA,IACvE,GACUE,KAAkB,CAACF,GAAgBznH,GAAa46C,MAAU;AAC9D,UAAIjwD,IAAO88H,EAAe7sE,IAAQ,eAAe,WAAW;AAC5D,aAAOjwD,KACD,CAAAuK,GAAYvK,CAAI;AAGpB,QAAAA,IAAOA,EAAKiwD,IAAQ,gBAAgB,iBAAiB;AAEvD,aAAOjwD,MAASqV;AAAA,IACtB,GACU4nH,KAAY,CAAA3uH,MAAOpe,GAAMqC,GAAWkT,GAAUtF,EAAa,QAAQmO,CAAG,CAAC,GAAG,CAACmpC,GAAO27B,MAAc,GAAIA,CAAW,KAAK37B,CAAK,GAAI,GAAG,CAACxnD,GAAK/hB,MAAM+hB,IAAM/hB,GAAG,EAAE,GACvJgvJ,KAAW,CAAC9tH,GAAQ0sH,GAAgBgB,GAAgBznH,GAAa2mH,MAAiB;AACtF,YAAMh+H,IAAMoR,EAAO,KACb5pB,IAAM4pB,EAAO,UAAU,OAAM,GAC7B+tH,IAAkBL,EAAe;AACvC,UAAIA,MAAmB1tH,EAAO,QAAS,KAAI,CAAC+tH;AAC1C;AAEF,MAAIP,GAAaE,CAAc,MAC7Bd,IAAe;AAEjB,YAAMoB,IAAoBT,GAAWtnH,CAAW,IAAI4nH,GAAU5nH,CAAW,IAAI;AAC7E,UAAIgxG,IAAWsW,GAAWtnH,CAAW,KAAK+nH,IAAoBtB,EAAeE,GAAc,EAAE,OAAOiB,GAAU5nH,CAAW,EAAC,CAAE,IAAIymH,EAAeE,CAAY;AAC3J,UAAIgB,GAAgBF,GAAgBznH,GAAa,EAAI,KAAK2nH,GAAgBF,GAAgBznH,GAAa,EAAK;AAC1G,YAAIonH,GAAUK,GAAgB,IAAI,GAAG;AACnC,gBAAMC,IAAuBF,GAAkBC,CAAc;AAC7D,UAAA9+H,EAAI,YAAYqoH,GAAU0W,CAAoB,GAC1CP,GAAaM,CAAc,IAC7B9+H,EAAI,OAAO++H,CAAoB,IAE/B/+H,EAAI,OAAO8+H,CAAc;AAAA,QAErC;AACU,UAAA9+H,EAAI,QAAQqoH,GAAUyW,CAAc;AAAA,eAE7BE,GAAgBF,GAAgBznH,GAAa,EAAI;AAC1D,QAAIonH,GAAUK,GAAgB,IAAI,KAChC9+H,EAAI,YAAYqoH,GAAUwW,GAAkBC,CAAc,CAAC,GAC3DzW,EAAS,YAAYroH,EAAI,IAAI,eAAe,GAAG,CAAC,GAChDqoH,EAAS,YAAYyW,CAAc,KAEnCK,EAAgB,aAAa9W,GAAUyW,CAAc,GAEvD9+H,EAAI,OAAOqX,CAAW;AAAA,eACb2nH,GAAgBF,GAAgBznH,GAAa,EAAK;AAC3D,QAAArX,EAAI,YAAYqoH,GAAUwW,GAAkBC,CAAc,CAAC,GAC3D9+H,EAAI,OAAOqX,CAAW;AAAA,WACjB;AACL,QAAAynH,IAAiBD,GAAkBC,CAAc;AACjD,cAAMO,IAAS73I,EAAI;AACnB,QAAA63I,EAAO,cAAchoH,CAAW,GAChCgoH,EAAO,YAAYP,CAAc;AACjC,cAAM51H,IAAWm2H,EAAO;AACxB,YAAIrB,MAAiB,QAAQO,GAAcr1H,GAAU,IAAI,GAAG;AAC1D,gBAAMo2H,IAAmBvtI,GAASN,GAAM42H,EAAS,UAAUlmH,EAAa,OAAO,GAAGjS,GAAI4P,GAAM,IAAI,CAAC,CAAC;AAClG,UAAAuoH,IAAWn/G,EAAS,YACpBlJ,EAAI,YAAYkJ,GAAU41H,CAAc,GACxCptI,EAAO4tI,GAAkB,CAAAp5H,MAAS+B,GAAQ9F,EAAa,QAAQkmH,CAAQ,GAAGniH,CAAK,CAAC,GAC5Ek5H,KACF/W,EAAS,aAAa,SAAS+W,CAAiB;AAAA,QAE5D;AACU,UAAAp/H,EAAI,YAAYkJ,GAAU41H,CAAc,GACxC9+H,EAAI,YAAYqoH,GAAUyW,CAAc;AAE1C,QAAA9+H,EAAI,OAAOqX,CAAW;AAAA,MACvB;AACD,MAAAslH,GAAoBvrH,GAAQi3G,CAAQ;AAAA,IAC1C,GAEUxxB,KAAW,CAAA3tF,MAAY;AAC3B,MAAAxX,EAAOia,GAAcxJ,EAAa,QAAQ+G,CAAQ,GAAGvJ,EAAQ,GAAG,CAAAuC,MAAQ;AACtE,cAAMqO,IAAUrO,EAAK;AACrB,QAAAqO,EAAQ,YAAYW,EAAOX,EAAQ,IAAI;AAAA,MAC/C,CAAO;AAAA,IACP,GACUgvH,KAA0B,CAACnuH,GAAQpP,MAAS;AAChD,YAAMw9H,IAAapuH,EAAO,IAAI,UAAUpP,GAAM,UAAU;AACxD,aAAOw9H,MAAe,QAAQpuH,EAAO,IAAI,yBAAyBouH,CAAU,MAAM;AAAA,IACxF,GACUC,KAAgB,CAACz/H,GAAKsQ,MACnBA,KAAOA,EAAI,aAAa,OAAOtQ,EAAI,QAAQsQ,CAAG,GAEjDovH,KAA0B,CAACr2H,GAAW0D,MACnC1D,EAAU,aAAa0D,KAAY1D,EAAU,mBAAmBA,EAAU,gBAAgB,aAAa0D,GAE1G4yH,KAAgB,CAAC3/H,GAAKgC,MACnBhT,GAAcgT,CAAI,KAAKhC,EAAI,QAAQgC,CAAI,KAAK,CAAC,yBAAyB,KAAKA,EAAK,QAAQ,KAAK,CAAC,qBAAqB,KAAKA,EAAK,MAAM,QAAQ,KAAKhC,EAAI,WAAWgC,EAAK,UAAU,KAAKhC,EAAI,mBAAmBgC,CAAI,MAAM,SAEvN49H,KAAsC,CAAC5/H,GAAKqiB,GAAqB3K,MAAU;AAC/E,UAAI1/B;AACJ,YAAM6nJ,IAAc,CAAA;AACpB,UAAI,CAACnoH;AACH;AAEF,UAAIu8B,IAAcv8B;AAClB,aAAOu8B,IAAcA,EAAY,cAAY;AAC3C,YAAIj0C,EAAI,QAAQi0C,CAAW;AACzB;AAEF,QAAI1nC,GAAY0nC,CAAW,KAAK,CAAC5xB,EAAoB4xB,EAAY,SAAS,YAAW,CAAE,KACrF4rF,EAAY,KAAK5rF,CAAW;AAAA,MAE/B;AACD,UAAI,IAAI4rF,EAAY;AACpB,aAAO;AACL,QAAA5rF,IAAc4rF,EAAY,CAAC,IACvB,CAAC5rF,EAAY,mBAAmBA,EAAY,eAAeA,EAAY,eAAej8D,IAAKi8D,EAAY,gBAAgB,QAAQj8D,MAAO,SAAS,SAASA,EAAG,eAAe,MAGxKynJ,GAAcz/H,GAAKi0C,CAAW,MAChCj0C,EAAI,OAAOi0C,CAAW;AAAA,IAIlC,GACU6rF,KAAsB,CAAC9mI,GAAOqQ,GAAWzhB,MACxC+lB,GAAStE,CAAS,IAEZrQ,IACFpR,MAAW,KAAKyhB,EAAU,KAAK,OAAOzhB,IAAS,CAAC,MAAMopB,IAAS,IAAIppB,IAEnEA,MAAWyhB,EAAU,KAAK,SAAS,KAAKA,EAAU,KAAK,OAAOzhB,CAAM,MAAMopB,IAAS3H,EAAU,KAAK,SAASzhB,IAJ3GA,GAOLm4I,KAAqB,CAAAv4I,MAAO;AAChC,YAAMy2C,IAASz2C,EAAI;AACnB,aAAAy2C,EAAO,SAASz2C,EAAI,gBAAgBs4I,GAAoB,IAAMt4I,EAAI,gBAAgBA,EAAI,WAAW,CAAC,GAClGy2C,EAAO,OAAOz2C,EAAI,cAAcs4I,GAAoB,IAAOt4I,EAAI,cAAcA,EAAI,SAAS,CAAC,GACpFy2C;AAAA,IACb,GACU+hG,KAAwB,CAAAh+H,MAAQ;AACpC,UAAIiyC,IAAcjyC;AAClB;AACE,QAAI2L,GAASsmC,CAAW,MACtBA,EAAY,OAAOA,EAAY,KAAK,QAAQ,YAAY,EAAE,IAE5DA,IAAcA,EAAY;AAAA,aACnBA;AAAA,IACf,GACUgsF,KAAoC,CAAC7uH,GAAQ4sH,GAAcx2I,GAAK6hB,GAAWzhB,MAAW;AAC1F,UAAI5P,GAAIw2C;AACR,YAAMxuB,IAAMoR,EAAO,KACbyrH,KAAgB7kJ,IAAK4kJ,GAAgB58H,GAAKqJ,CAAS,OAAO,QAAQrxB,MAAO,SAASA,IAAKgoB,EAAI,QAAO;AACxG,UAAIqX,IAAcrX,EAAI,UAAUqJ,GAAWrJ,EAAI,OAAO;AACtD,UAAI,CAACqX,KAAe,CAACsoH,GAAc3/H,GAAKqX,CAAW,GAAG;AAEpD,YADAA,IAAcA,KAAewlH,GACzB,CAACxlH,EAAY,iBAAiB;AAChC,gBAAMgxG,IAAWroH,EAAI,OAAOg+H,CAAY;AACxC,iBAAAH,GAAoBzsH,GAAQi3G,CAAQ,GACpChxG,EAAY,YAAYgxG,CAAQ,GAChC7gI,EAAI,SAAS6gI,GAAU,CAAC,GACxB7gI,EAAI,OAAO6gI,GAAU,CAAC,GACfA;AAAA,QACR;AACD,YAAIrmH,IAAOqH;AACX,eAAOrH,KAAQA,EAAK,eAAeqV;AACjC,UAAArV,IAAOA,EAAK;AAEd,YAAI+J;AACJ,eAAO/J,KAAQ,CAAChC,EAAI,QAAQgC,CAAI;AAC9B,UAAA+J,IAAY/J,GACZA,IAAOA,EAAK;AAEd,cAAMk+H,KAAiB1xG,IAAKziB,KAAc,OAA+B,SAASA,EAAU,mBAAmB,QAAQyiB,MAAO,SAAS,SAASA,EAAG;AACnJ,YAAIziB,KAAam0H,KAAiB9uH,EAAO,OAAO,aAAa8uH,GAAelC,EAAa,YAAW,CAAE,GAAG;AACvG,gBAAMmC,IAAkBp0H,EAAU,YAC5Bs8G,IAAWroH,EAAI,OAAOg+H,CAAY;AAIxC,eAHAH,GAAoBzsH,GAAQi3G,CAAQ,GACpC8X,EAAgB,aAAa9X,GAAUt8G,CAAS,GAChD/J,IAAO+J,GACA/J,KAAQ,CAAChC,EAAI,QAAQgC,CAAI,KAAG;AACjC,kBAAMyZ,IAAOzZ,EAAK;AAClB,YAAAqmH,EAAS,YAAYrmH,CAAI,GACzBA,IAAOyZ;AAAA,UACR;AACD,UAAAj0B,EAAI,SAAS6hB,GAAWzhB,CAAM,GAC9BJ,EAAI,OAAO6hB,GAAWzhB,CAAM;AAAA,QAC7B;AAAA,MACF;AACD,aAAOyhB;AAAA,IACb,GACU+2H,KAAuB,CAACpgI,GAAK0X,MAAU;AAC3C,MAAAA,EAAM,UAAS;AACf,YAAMjT,IAAYiT,EAAM;AACxB,OAAI,CAACjT,KAAa8H,GAAY9H,CAAS,KAAK,mBAAmB,KAAKzE,EAAI,SAASyE,GAAW,SAAS,EAAI,CAAC,MACxGzE,EAAI,IAAI0X,GAAO,IAAI;AAAA,IAE3B,GACU2oH,KAAqB,CAACjvH,GAAQ/H,MAAc;AAChD,YAAMi3H,IAAcp5F,GAA+B91B,CAAM;AACzD,aAAIriB,GAAWsa,CAAS,IACf,KACE5a,GAAS6xI,CAAW,IACtB/uI,EAAW+L,GAAM,QAAQgjI,CAAW,GAAGj3H,EAAU,SAAS,YAAW,CAAE,IAEvEi3H;AAAA,IAEf,GA0KUC,KAAa;AAAA,MACjB,QA1Ke,CAACnvH,GAAQ2Y,MAAQ;AAChC,YAAI1gB,GACAzhB,GACAq2I,GACAa,GACA0B,IAA6B;AACjC,cAAMxgI,IAAMoR,EAAO,KACbN,IAASM,EAAO,QAAQiR,IAAsBvR,EAAO,uBACrDtpB,IAAM4pB,EAAO,UAAU,OAAM,GAC7B4sH,IAAep3F,GAAmBx1B,CAAM,GACxCpY,IAAQmJ,EAAa,QAAQ3a,EAAI,cAAc,GAC/C0e,IAAQ3B,GAAQvL,GAAOxR,EAAI,WAAW,GACtCi5I,IAAQv6H,EAAM,OAAO,CAAA7G,OAAWI,GAAgBJ,EAAO,KAAK,CAACqH,GAAarH,EAAO,CAAC,GAClFqhI,IAAkBl5I,EAAI,aAAai5I,GACnCE,IAAmB,CAACnsI,IAAM2sB,OACvB28G,GAAe1sH,GAAQ/H,GAAWgO,IAAawlH,IAAc51F,GAAiB71B,CAAM,GAAG5c,IAAM2sB,EAAM,GAEtGy/G,KAA6B,CAAA5nI,OAAS;AAC1C,gBAAM6nI,KAAmBf,GAAoB9mI,IAAOqQ,GAAWzhB,CAAM;AACrE,cAAI+lB,GAAStE,CAAS,MAAMrQ,KAAQ6nI,KAAmB,IAAIA,KAAmBx3H,EAAU,KAAK;AAC3F,mBAAO;AAKT,cAHIA,EAAU,eAAegO,MAAempH,KAA8B,CAACxnI,MAGvEA,MAASuT,GAAYlD,CAAS,KAAKA,MAAcgO,GAAY;AAC/D,mBAAO;AAET,cAAIqoH,GAAwBr2H,GAAW,OAAO,KAAKq2H,GAAwBr2H,GAAW,IAAI;AACxF,mBAAOm3H,KAA8B,CAACxnI,MAAS,CAACwnI,KAA8BxnI;AAEhF,gBAAMsc,KAAS,IAAIxJ,GAAczC,GAAWgO,EAAW;AACvD,UAAI1J,GAAStE,CAAS,MAChBrQ,MAAS6nI,OAAqB,IAChCvrH,GAAO,KAAI,IACF,CAACtc,MAAS6nI,OAAqBx3H,EAAU,KAAK,UACvDiM,GAAO,KAAI;AAGf,cAAItT;AACJ,iBAAOA,KAAOsT,GAAO,aAAW;AAC9B,gBAAI/I,GAAYvK,EAAI;AAClB,kBAAI,CAACA,GAAK,aAAa,gBAAgB,GAAG;AACxC,sBAAMxN,KAAOwN,GAAK,SAAS,YAAW;AACtC,oBAAIqgB,EAAoB7tB,EAAI,KAAKA,OAAS;AACxC,yBAAO;AAAA,cAEV;AAAA,uBACQmZ,GAAS3L,EAAI,KAAK,CAAC8R,GAAiB9R,GAAK,IAAI;AACtD,qBAAO;AAET,YAAIhJ,KACFsc,GAAO,KAAI,IAEXA,GAAO,KAAI;AAAA,UAEd;AACD,iBAAO;AAAA,QACf,GACYwrH,KAAsB,MAAM;AAChC,cAAIppH;AACJ,iBAAI,wBAAwB,KAAKumH,CAAe,KAAK8C,OAAuB,WAC1ErpH,KAAQipH,EAAiB3C,CAAY,IAErCtmH,KAAQipH,EAAgB,GAEtBN,GAAmBjvH,GAAQ0tH,CAAc,KAAKa,GAAc3/H,GAAK8+H,CAAc,KAAK9+H,EAAI,QAAQqX,IAAa,QAAW,EAAE,aAAa,GAAI,CAAE,IAC/IK,KAAQ1X,EAAI,MAAM8+H,GAAgBznH,EAAW,IAE7CrX,EAAI,YAAY0X,IAAOL,EAAW,GAEpCslH,GAAoBvrH,GAAQsG,EAAK,GAC1BA;AAAA,QACf;AACM,QAAA6xC,EAAYvpD,GAAKxY,CAAG,EAAE,KAAK,CAAAgiE,OAAW;AACpC,UAAAhiE,EAAI,SAASgiE,GAAQ,gBAAgBA,GAAQ,WAAW,GACxDhiE,EAAI,OAAOgiE,GAAQ,cAAcA,GAAQ,SAAS;AAAA,QAC1D,CAAO,GACDngD,IAAY7hB,EAAI,gBAChBI,IAASJ,EAAI;AACb,cAAM62I,KAAW,CAAC,EAAEt0G,KAAOA,EAAI,WACzBi3G,KAAU,CAAC,EAAEj3G,KAAOA,EAAI;AAC9B,QAAIxd,GAAYlD,CAAS,KAAKA,EAAU,cAAa,KAAM,CAACq3H,MAC1DF,IAA6B54I,IAASyhB,EAAU,WAAW,SAAS,GACpEA,IAAYA,EAAU,WAAW,KAAK,IAAIzhB,GAAQyhB,EAAU,WAAW,SAAS,CAAC,CAAC,KAAKA,GACnFm3H,KAA8B7yH,GAAStE,CAAS,IAClDzhB,IAASyhB,EAAU,KAAK,SAExBzhB,IAAS;AAGb,cAAMi1I,KAAeD,GAAgB58H,GAAKqJ,CAAS;AACnD,YAAI,CAACwzH,MAAgB0C,GAAwBnuH,GAAQ/H,CAAS;AAC5D;AAEF,QAAKg1H,OACHh1H,IAAY42H,GAAkC7uH,GAAQ4sH,GAAcx2I,GAAK6hB,GAAWzhB,CAAM;AAE5F,YAAIyvB,KAAcrX,EAAI,UAAUqJ,GAAWrJ,EAAI,OAAO,KAAKA,EAAI;AAC/D,QAAA8+H,IAAiB9vI,GAAcqoB,MAAgB,OAAiC,SAASA,GAAY,UAAU,IAAIrX,EAAI,UAAUqX,GAAY,YAAYrX,EAAI,OAAO,IAAI,MACxKi+H,IAAkB5mH,KAAcA,GAAY,SAAS,YAAW,IAAK;AACrE,cAAM0pH,KAAqBjC,IAAiBA,EAAe,SAAS,YAAa,IAAG;AACpF,YAAIiC,OAAuB,QAAQ,CAACC,IAAS;AAC3C,gBAAMC,KAAUnC;AAChB,UAAAznH,KAAc4pH,IACdnC,IAAiBmC,GAAQ,YACzBhD,IAAkB8C;AAAA,QACnB;AACD,YAAIx0H,GAAYuyH,CAAc,KAAKV,GAA0BhtH,GAAQitH,IAAUhnH,EAAW;AACxF,iBAAOinH,GAAcltH,GAAQuvH,GAAkBtpH,EAAW;AAE5D,YAAI,eAAe,KAAK4mH,CAAe,KAAK1xH,GAAYuyH,CAAc,KAChE9+H,EAAI,QAAQqX,EAAW,GAAG;AAC5B,UAAA6nH,GAAS9tH,GAAQuvH,GAAkB7B,GAAgBznH,IAAa2mH,CAAY;AAC5E;AAAA,QACD;AAEH,YAAI,CAAC0C,MAAoBrpH,OAAgBjG,EAAO,aAAa,CAACuuH,GAAc3/H,GAAKqX,EAAW;AAC1F;AAEF,cAAM6pH,KAAoB7pH,GAAY;AACtC,YAAIgxG;AACJ,YAAIqY;AACF,UAAArY,KAAWsY,EAAiB3C,CAAY,GACxC93H,EAAM,KAAK,MAAM;AACf,YAAA8B,GAAShP,GAAOmJ,EAAa,QAAQkmH,EAAQ,CAAC;AAAA,UAC/C,GAAE,CAAAniH,OAAS;AACV,YAAA2B,GAAS3B,IAAO/D,EAAa,QAAQkmH,EAAQ,CAAC;AAAA,UACxD,CAAS,GACDj3G,EAAO,UAAU,kBAAkBi3G,IAAU,CAAC;AAAA,iBACrC92G,GAAwB8F,EAAW;AAC5C,UAAAgxG,KAAW51G,GAAwB4E,EAAW,GAC1CrX,EAAI,QAAQqX,EAAW,KACzB2rD,GAAW3rD,EAAW,GAExBwmH,GAAoBzsH,GAAQi3G,EAAQ,GACpCsU,GAAoBvrH,GAAQi3G,EAAQ;AAAA,iBAC3BuY,GAA2B,EAAK;AACzC,UAAAvY,KAAWyY,GAAmB;AAAA,iBACrBF,GAA2B,EAAI,KAAKM,IAAmB;AAChE,UAAA7Y,KAAW6Y,GAAkB,aAAaP,EAAkB,GAAEtpH,EAAW;AACzE,gBAAM8pH,KAAiBx8H,GAAcxC,EAAa,QAAQ3a,EAAI,cAAc,CAAC,KAAKA,EAAI;AACtF,UAAAm1I,GAAoBvrH,GAAQsuH,GAAwBroH,IAAa,IAAI,KAAK8pH,KAAiB9Y,KAAWhxG,EAAW;AAAA,QACzH,OAAa;AACL,gBAAMgoH,KAASU,GAAmBv4I,CAAG,EAAE,WAAU;AACjD,UAAA63I,GAAO,YAAYhoH,EAAW;AAC9B,gBAAMnO,KAAWm2H,GAAO;AACxB,UAAAxoC,GAAS3tF,EAAQ,GACjB82H,GAAsB92H,EAAQ,GAC9Bm/G,KAAWn/G,GAAS,YACpBlJ,EAAI,YAAYkJ,IAAUmO,EAAW,GACrCuoH,GAAoC5/H,GAAKqiB,GAAqBgmG,EAAQ,GACtE+X,GAAqBpgI,GAAKqX,EAAW,GACjCrX,EAAI,QAAQqX,EAAW,KACzB2rD,GAAW3rD,EAAW,GAExBgxG,GAAS,UAAS,GACdroH,EAAI,QAAQqoH,EAAQ,KACtBroH,EAAI,OAAOqoH,EAAQ,GACnByY,SAEAjD,GAAoBzsH,GAAQi3G,EAAQ,GACpCsU,GAAoBvrH,GAAQi3G,EAAQ;AAAA,QAEvC;AACD,QAAAroH,EAAI,UAAUqoH,IAAU,MAAM,EAAE,GAChCj3G,EAAO,SAAS,YAAY,EAAE,UAAAi3G,GAAU,CAAA;AAAA,MAC9C;AAAA,MAIM,eAHsB;AAAA,IAI5B,GAEU+Y,KAAsB,CAACtwH,GAAQzH,GAAWgO,MAAgB;AAC9D,YAAM/B,IAAS,IAAIxJ,GAAczC,GAAWgO,CAAW;AACvD,UAAIrV;AACJ,YAAMqgB,IAAsBvR,EAAO;AACnC,aAAO9O,IAAOsT,EAAO;AACnB,YAAI+M,EAAoBrgB,EAAK,SAAS,YAAa,CAAA,KAAK2L,GAAS3L,CAAI,KAAKA,EAAK,SAAS;AACtF,iBAAO;AAGX,aAAO;AAAA,IACb,GACUq/H,KAAoB,CAACjwH,GAAQkwH,GAAOC,MAAY;AACpD,YAAM/5I,IAAM4pB,EAAO,IAAI,UAAS;AAChC,MAAKmwH,KAIH/5I,EAAI,eAAe85I,CAAK,GACxB95I,EAAI,aAAa85I,CAAK,MAJtB95I,EAAI,cAAc85I,CAAK,GACvB95I,EAAI,YAAY85I,CAAK,IAKvBlwH,EAAO,UAAU,OAAO5pB,CAAG,GAC3BulE,GAAoB37C,GAAQ5pB,CAAG;AAAA,IACrC,GACUg6I,KAAkB,CAACpwH,GAAQ2Y,MAAQ;AACvC,YAAMsX,IAAYjwB,EAAO,WACnBpR,IAAMoR,EAAO,KACb5pB,IAAM65C,EAAU;AACtB,UAAIigG,GACAC,IAAU;AACd,MAAAh4E,EAAYvpD,GAAKxY,CAAG,EAAE,KAAK,CAAAgiE,MAAW;AACpC,QAAAhiE,EAAI,SAASgiE,EAAQ,gBAAgBA,EAAQ,WAAW,GACxDhiE,EAAI,OAAOgiE,EAAQ,cAAcA,EAAQ,SAAS;AAAA,MAC1D,CAAO;AACD,UAAI5hE,IAASJ,EAAI,aACb6hB,IAAY7hB,EAAI;AACpB,UAAI+kB,GAAYlD,CAAS,KAAKA,EAAU,cAAa,GAAI;AACvD,cAAMm3H,IAA6B54I,IAASyhB,EAAU,WAAW,SAAS;AAC1E,QAAAA,IAAYA,EAAU,WAAW,KAAK,IAAIzhB,GAAQyhB,EAAU,WAAW,SAAS,CAAC,CAAC,KAAKA,GACnFm3H,KAA8B7yH,GAAStE,CAAS,IAClDzhB,IAASyhB,EAAU,KAAK,SAExBzhB,IAAS;AAAA,MAEZ;AACD,UAAIyvB,IAAcrX,EAAI,UAAUqJ,GAAWrJ,EAAI,OAAO;AACtD,YAAM8+H,IAAiBznH,KAAeA,EAAY,aAAarX,EAAI,UAAUqX,EAAY,YAAYrX,EAAI,OAAO,IAAI,MAC9G+gI,IAAqBjC,IAAiBA,EAAe,SAAS,YAAa,IAAG,IAC9E2C,IAAe,CAAC,EAAE13G,KAAOA,EAAI;AACnC,MAAIg3G,MAAuB,QAAQ,CAACU,MAClCpqH,IAAcynH,IAEZnxH,GAAStE,CAAS,KAAKzhB,KAAUyhB,EAAU,KAAK,WAC7C+3H,GAAoBhwH,EAAO,QAAQ/H,GAAWgO,KAAerX,EAAI,QAAO,CAAE,MAC7EshI,IAAQthI,EAAI,OAAO,IAAI,GACvBxY,EAAI,WAAW85I,CAAK,GACpB95I,EAAI,cAAc85I,CAAK,GACvB95I,EAAI,YAAY85I,CAAK,GACrBC,IAAU,MAGdD,IAAQthI,EAAI,OAAO,IAAI,GACvBw/B,GAAgBx/B,GAAKxY,GAAK85I,CAAK,GAC/BD,GAAkBjwH,GAAQkwH,GAAOC,CAAO,GACxCnwH,EAAO,YAAY;IACzB,GACUswH,KAAiB,CAACtwH,GAAQ8M,MAAW;AACzC,YAAM3vC,IAAK4zB,EAAa,QAAQ,IAAI;AACpC,MAAA0F,GAAS1F,EAAa,QAAQ+b,CAAM,GAAG3vC,CAAE,GACzC6iC,EAAO,YAAY;IACzB,GACUuwH,KAAgB,CAACvwH,GAAQ8M,MAAW;AACxC,MAAK0jH,GAAWxwH,EAAO,QAAS,GAAE8M,CAAM,KACtCnW,GAAQ5F,EAAa,QAAQ+b,CAAM,GAAG/b,EAAa,QAAQ,IAAI,CAAC;AAElE,YAAM5zB,IAAK4zB,EAAa,QAAQ,IAAI;AACpC,MAAA4F,GAAQ5F,EAAa,QAAQ+b,CAAM,GAAG3vC,CAAE,GACxC8yJ,GAAkBjwH,GAAQ7iC,EAAG,KAAK,EAAK,GACvC6iC,EAAO,YAAY;IACzB,GACUywH,KAAa,CAAA3vH,MACVjE,GAAOiE,EAAI,QAAO,CAAE,GAEvB0vH,KAAa,CAAC51H,GAAUD,MACxB81H,GAAWjjG,GAAc,MAAM7yB,CAAS,CAAC,IACpC,KAEA2nC,GAAa1nC,GAAU4yB,GAAc,MAAM7yB,CAAS,CAAC,EAAE,IAAI,CAAAmG,MACzDjE,GAAOiE,EAAI,QAAO,CAAE,CAC5B,EAAE,MAAM,EAAK,GAGZ4vH,KAAe,CAAAxxH,MACZA,KAAOA,EAAI,aAAa,OAAO,UAAUA,GAE5CyxH,KAAiB,CAAA9wF,MACdA,EAAS,KAAK1gD,IAAOuxI,IAAcA,IAAcvxI,EAAK,GAEzDyxI,KAA2B,CAAA5wH,MAAU;AACzC,YAAM+uG,IAAmBrwH,GAAM4tE,IAAgBtsD,CAAM,GAC/C0hC,IAAWlU,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AACvE,aAAO6oG,GAAakG,GAAkB/uG,EAAO,QAAS,GAAE0hC,CAAQ,EAAE,OAAOivF,EAAc;AAAA,IAC7F,GACUE,KAAwB,CAAC7wH,GAAQ6/B,MAAa;AAClD,MAAAA,EAAS,KAAK5hD,IAAMS,GAAM4xI,IAAgBtwH,CAAM,GAAGthB,GAAM6xI,IAAevwH,CAAM,GAAG/hB,EAAI;AAAA,IAC3F,GAUU6yI,KAAY;AAAA,MAChB,QAVe,CAAC9wH,GAAQ2Y,MAAQ;AAChC,cAAMo4G,IAAiBH,GAAyB5wH,CAAM;AACtD,QAAI+wH,EAAe,WACjBA,EAAe,KAAKryI,GAAMmyI,IAAuB7wH,CAAM,CAAC,IAExDowH,GAAgBpwH,GAAQ2Y,CAAG;AAAA,MAEnC;AAAA,MAIM,eAHoB;AAAA,IAI1B,GAEUq4G,KAAkB,CAAChxH,GAAQ3O,MACxBq6H,GAAiB1rH,CAAM,EAAE,OAAO,CAAAiG,MAC9B5U,EAAS,SAAS,KAAKD,GAAKL,EAAa,QAAQkV,CAAW,GAAG5U,CAAQ,CAC/E,EAAE,OAAM,GAEL4/H,KAAiB,CAAAjxH,MACdgxH,GAAgBhxH,GAAQ21B,GAAqB31B,CAAM,CAAC,GAEvDkxH,KAAuB,CAAAlxH,MACpBgxH,GAAgBhxH,GAAQ41B,GAAqB51B,CAAM,CAAC,GAGvDmxH,KAAgBl/F,GAAI,SAAS;AAAA,MACjC,EAAE,IAAI,CAAA,EAAI;AAAA,MACV,EAAE,OAAO,CAAA,EAAI;AAAA,MACb,EAAE,MAAM,CAAA,EAAI;AAAA,IAClB,CAAK,GACKm/F,KAAqB,CAACpxH,GAAQqxH,MAC3BH,GAAqBlxH,CAAM,GAE9BsxH,KAAc,CAAAC,MACX,CAACvxH,GAAQqxH,MACPzF,GAAsB5rH,CAAM,MAAMuxH,GAGvCC,KAAU,CAACvwH,GAAWswH,MAAkB,CAACvxH,GAAQqxH,MACvC1F,GAAmB3rH,CAAM,MAAMiB,EAAU,YAAW,MACjDswH,GAEbE,KAAa,CAAAzxH,MAAU;AAC3B,YAAMyrH,IAAeD,GAAgBxrH,EAAO,KAAKA,EAAO,UAAU,SAAQ,CAAE;AAC5E,aAAOriB,GAAW8tI,CAAY;AAAA,IACpC,GACUiG,KAAa,CAAAH,MAAiBC,GAAQ,OAAOD,CAAa,GAC1DI,KAAiB,MAAMH,GAAQ,WAAW,EAAI,GAC9CI,KAAmB,CAAAL,MAChB,CAACvxH,GAAQqxH,MACP97F,GAAmBv1B,CAAM,MAAMuxH,GAGpCM,KAAc,CAAC7xH,GAAQqxH,MACpBJ,GAAejxH,CAAM,GAExB8xH,KAAc,CAACC,GAAS9E,MACrBA,GAEH+E,KAA4B,CAAAhyH,MAAU;AAC1C,YAAM0jE,IAAkBluC,GAAmBx1B,CAAM,GAC3CiyH,IAAezG,GAAgBxrH,EAAO,KAAKA,EAAO,UAAU,SAAQ,CAAE;AAC5E,aAAOpiB,GAAcq0I,CAAY,KAAKjyH,EAAO,OAAO,aAAaiyH,EAAa,UAAUvuD,CAAe;AAAA,IAC7G,GACUwuD,KAAyB,CAAAlyH,MAAU;AACvC,YAAM5pB,IAAM4pB,EAAO,UAAU,OAAM,GAC7BpY,IAAQmJ,EAAa,QAAQ3a,EAAI,cAAc,GAE/C+7I,IADQh/H,GAAQvL,GAAOxR,EAAI,WAAW,EACrB,IAAI,CAAA6X,MAAWI,GAAgBJ,CAAO,KAAK,CAACqH,GAAarH,CAAO,CAAC;AACxF,aAAO7X,EAAI,aAAa+7I,EAAS,MAAM,EAAI;AAAA,IACjD,GACU57G,KAAQ,CAAC67G,GAAYvrF,MAClB,CAAC7mC,GAAQitH,MACEnsI,GAAMsxI,GAAY,CAACn9H,GAAKxlB,MAC/BwlB,KAAOxlB,EAAEuwB,GAAQitH,CAAQ,GAC/B,EAAI,IACU5tI,EAAS,KAAKwnD,CAAM,IAAIxnD,EAAS,QAGhDgzI,KAAY,CAACryH,GAAQ2Y,MAClBwvF,GAAc;AAAA,MACnB5xF,GAAM,CAAC66G,EAAkB,GAAGD,GAAc,KAAI,CAAE;AAAA,MAChD56G,GAAM;AAAA,QACJm7G,GAAW,EAAI;AAAA,QACfD;AAAA,MACV,GAAWN,GAAc,MAAM;AAAA,MACvB56G,GAAM,CAACo7G,GAAc,CAAE,GAAGR,GAAc,GAAE,CAAE;AAAA,MAC5C56G,GAAM;AAAA,QACJm7G,GAAW,EAAI;AAAA,QACfE,GAAiB,EAAK;AAAA,QACtBE;AAAA,MACV,GAAWX,GAAc,IAAI;AAAA,MACrB56G,GAAM;AAAA,QACJm7G,GAAW,EAAI;AAAA,QACfE,GAAiB,EAAK;AAAA,MAChC,GAAWT,GAAc,OAAO;AAAA,MACxB56G,GAAM;AAAA,QACJm7G,GAAW,EAAI;AAAA,QACfE,GAAiB,EAAI;AAAA,QACrBE;AAAA,MACV,GAAWX,GAAc,OAAO;AAAA,MACxB56G,GAAM;AAAA,QACJm7G,GAAW,EAAI;AAAA,QACfE,GAAiB,EAAI;AAAA,MAC/B,GAAWT,GAAc,IAAI;AAAA,MACrB56G,GAAM;AAAA,QACJ+6G,GAAY,EAAI;AAAA,QAChBQ;AAAA,MACV,GAAWX,GAAc,IAAI;AAAA,MACrB56G,GAAM,CAAC+6G,GAAY,EAAI,CAAC,GAAGH,GAAc,OAAO;AAAA,MAChD56G,GAAM,CAACs7G,EAAW,GAAGV,GAAc,GAAE,CAAE;AAAA,MACvC56G,GAAM,CAACu7G,EAAW,GAAGX,GAAc,GAAE,CAAE;AAAA,MACvC56G,GAAM,CAACy7G,EAAyB,GAAGb,GAAc,MAAK,CAAE;AAAA,MACxD56G,GAAM,CAAC27G,EAAsB,GAAGf,GAAc,MAAK,CAAE;AAAA,IAC7D,GAAS;AAAA,MACDnxH;AAAA,MACA,CAAC,EAAE2Y,KAAOA,EAAI;AAAA,IACf,CAAA,EAAE,MAAMw4G,GAAc,KAAM,CAAA,GAGzBmB,KAAc,CAAC/nB,GAAWvqG,GAAQ2Y,MAAQ;AAI9C,MAHK3Y,EAAO,UAAU,iBACpBmtD,GAAwBntD,CAAM,GAE5B,EAAApiB,GAAc+6B,CAAG,KACL+xG,GAAqB1qH,GAAQuqG,EAAU,aAAa,EACxD,0BAIZA,EAAU,OAAOvqG,GAAQ2Y,CAAG,GACxB/6B,GAAc+6B,CAAG,KACnB8xG,GAAezqH,GAAQuqG,EAAU,aAAa;AAAA,IAEtD,GACUgoB,KAAW,CAACvyH,GAAQ2Y,MAAQ;AAChC,YAAMx7C,IAAK,MAAMm1J,GAAYxB,IAAW9wH,GAAQ2Y,CAAG,GAC7CrS,IAAQ,MAAMgsH,GAAYnD,IAAYnvH,GAAQ2Y,CAAG,GACjD65G,IAAgBH,GAAUryH,GAAQ2Y,CAAG;AAC3C,cAAQ+c,GAAmB11B,CAAM,GAAC;AAAA,QAClC,KAAK;AACH,UAAAwyH,EAAc,KAAKr1J,GAAIA,GAAI8gB,EAAI;AAC/B;AAAA,QACF,KAAK;AACH,UAAAu0I,EAAc,KAAKlsH,GAAOA,GAAOroB,EAAI;AACrC;AAAA,QACF,KAAK;AACH,UAAAu0I,EAAc,KAAKlsH,GAAOnpC,GAAI8gB,EAAI;AAClC;AAAA,QACF;AACE,UAAAu0I,EAAc,KAAKr1J,GAAImpC,GAAOroB,EAAI;AAClC;AAAA,MACD;AAAA,IACP,GAEUw0I,KAAaznI,MACb0nI,KAAcD,GAAW,GAAG,MAAO,KAAIA,GAAW,QAAQ,YAC1DE,KAAsB,CAAC3yH,GAAQ7L,MAAU;AAC7C,MAAIA,EAAM,yBAGVA,EAAM,eAAc,GACpB8yF,GAA0BjnF,EAAO,WAAW,GAC5CA,EAAO,YAAY,SAAS,MAAM;AAChC,QAAAuyH,GAASvyH,GAAQ7L,CAAK;AAAA,MAC9B,CAAO;AAAA,IACP,GACUy+H,KAA8B,CAAAx8I,MAAO;AACzC,UAAI,CAACA,EAAI;AACP,eAAO;AAET,YAAM00C,IAAiB10C,EAAI;AAC3B,UAAImmB,GAASuuB,CAAc,GAAG;AAC5B,cAAM+nG,IAAkB,yEAClBn1H,IAAOotB,EAAe,KAAK,OAAO10C,EAAI,cAAc,CAAC;AAC3D,eAAOy8I,EAAgB,KAAKn1H,CAAI;AAAA,MACxC;AACQ,eAAO;AAAA,IAEf,GACUo1H,KAAU,CAAA9yH,MAAU;AACxB,UAAI+yH,IAA2B1zI,EAAS;AACxC,YAAM2zI,IAA2B,CAAAhzH,MAAU;AACzC,QAAA+yH,IAA2B1zI,EAAS,KAAK2gB,EAAO,UAAU,YAAW,CAAE,GACvEA,EAAO,YAAY;MAC3B,GACYizH,IAAyB,CAACjzH,GAAQ7L,MAAU;AAChD,QAAA6L,EAAO,YAAY,QACnB+yH,EAAyB,KAAK90I,IAAM,CAAAnO,MAAKkwB,EAAO,UAAU,eAAelwB,CAAC,CAAC,GAC3E6iJ,GAAoB3yH,GAAQ7L,CAAK,GACjC4+H,IAA2B1zI,EAAS;MAC5C;AACM,MAAA2gB,EAAO,GAAG,WAAW,CAAA7L,MAAS;AAC5B,QAAIA,EAAM,YAAY67C,GAAG,UACnB0iF,MAAeE,GAA4B5yH,EAAO,UAAU,OAAQ,CAAA,IACtEgzH,EAAyBhzH,CAAM,IAE/B2yH,GAAoB3yH,GAAQ7L,CAAK;AAAA,MAG7C,CAAO,GACD6L,EAAO,GAAG,SAAS,CAAA7L,MAAS;AAC1B,QAAIA,EAAM,YAAY67C,GAAG,SACvB+iF,EAAyB,KAAK,MAAME,EAAuBjzH,GAAQ7L,CAAK,CAAC;AAAA,MAEnF,CAAO;AAAA,IACP,GAEU++H,KAA2B,CAAClzH,GAAQs9B,GAAO3kB,MAAQ;AACvD,YAAMgkG,IAAQtxH,GAAI,GAAG,QAAS,KAAIA,GAAI,GAAG;AACzC,MAAAstH,GAAQ;AAAA,QACN;AAAA,UACE,SAAS3oE,GAAG;AAAA,UACZ,QAAQnJ,GAAO2wE,IAAsBx3G,GAAQ,EAAI;AAAA,QAClD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO2wE,IAAsBx3G,GAAQ,EAAK;AAAA,QACnD;AAAA,QACD,GAAI28G,IAaA,CAAE,IAbM;AAAA,UACV;AAAA,YACE,SAAS3sE,GAAG;AAAA,YACZ,QAAQnJ,GAAO4wE,IAAkBz3G,GAAQ,EAAK;AAAA,YAC9C,SAAS;AAAA,YACT,UAAU;AAAA,UACX;AAAA,UACD;AAAA,YACE,SAASgwC,GAAG;AAAA,YACZ,QAAQnJ,GAAO4wE,IAAkBz3G,GAAQ,EAAI;AAAA,YAC7C,SAAS;AAAA,YACT,UAAU;AAAA,UACX;AAAA,QACX;AAAA,QACQ;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOkyE,IAAoB/4G,GAAQ,EAAI;AAAA,QAChD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOkyE,IAAoB/4G,GAAQ,EAAK;AAAA,QACjD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAOkpE,IAAsB/vG,GAAQ,IAAMs9B,CAAK;AAAA,QACzD;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,QAAQnJ,GAAOkpE,IAAsB/vG,GAAQ,IAAOs9B,CAAK;AAAA,QAC1D;AAAA,MACT,GAAS3kB,CAAG,EAAE,KAAK,CAAA/oC,MAAK;AAChB,QAAA+oC,EAAI,eAAc;AAAA,MAC1B,CAAO;AAAA,IACP,GACUw6G,KAAU,CAACnzH,GAAQs9B,MAAU;AACjC,MAAAt9B,EAAO,GAAG,WAAW,CAAA2Y,MAAO;AAC1B,QAAKA,EAAI,wBACPu6G,GAAyBlzH,GAAQs9B,GAAO3kB,CAAG;AAAA,MAErD,CAAO;AAAA,IACP,GAEUy6G,KAAU,CAAApzH,MAAU;AACxB,MAAAA,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,QAAKA,EAAE,eACL4vF,GAAuB9pD,CAAM;AAAA,MAEvC,CAAO;AAAA,IACP,GAEUqzH,KAAWroI,MACXsoI,KAAqB,CAACtzH,GAAQs9B,GAAO3kB,MAAQ;AACjD,MAAAggG,GAAQ;AAAA,QACN;AAAA,UACE,SAAS3oE,GAAG;AAAA,UACZ,QAAQnJ,GAAOkpE,IAAsB/vG,GAAQ,IAAOs9B,CAAK;AAAA,QAC1D;AAAA,QACD;AAAA,UACE,SAAS0S,GAAG;AAAA,UACZ,QAAQnJ,GAAOkpE,IAAsB/vG,GAAQ,IAAMs9B,CAAK;AAAA,QACzD;AAAA,MACF,GAAE3kB,CAAG;AAAA,IACZ,GACU46G,KAA2B,OAAK,EAAE,yBAAwB,GAC1DC,KAAe,CAAA76G,MAAOA,EAAI,YAAYq3B,GAAG,WAAWr3B,EAAI,YAAYq3B,GAAG,WACvEyjF,KAAuB,CAACC,GAAS1zH,GAAQsG,MAAU;AACvD,MAAIA,KAAS,CAACotH,EAAQ,QACpB1zH,EAAO,GAAG,cAAcuzH,IAA0B,EAAI,IAC7C,CAACjtH,KAASotH,EAAQ,IAAG,KAC9B1zH,EAAO,IAAI,cAAcuzH,EAAwB,GAEnDG,EAAQ,IAAIptH,CAAK;AAAA,IACvB,GACUqtH,KAAU,CAAC3zH,GAAQs9B,MAAU;AACjC,UAAI+1F,GAAS,GAAG;AACd;AAEF,YAAMK,IAAU1xG,GAAK,EAAK;AAC1B,MAAAhiB,EAAO,GAAG,WAAW,CAAA2Y,MAAO;AAC1B,QAAI66G,GAAa76G,CAAG,KAClB86G,GAAqBC,GAAS1zH,GAAQ,EAAI;AAAA,MAEpD,CAAO,GACDA,EAAO,GAAG,SAAS,CAAA2Y,MAAO;AACxB,QAAKA,EAAI,wBACP26G,GAAmBtzH,GAAQs9B,GAAO3kB,CAAG,GAEnC66G,GAAa76G,CAAG,KAAK+6G,EAAQ,IAAG,MAClCD,GAAqBC,GAAS1zH,GAAQ,EAAK,GAC3CA,EAAO,YAAW;AAAA,MAE5B,CAAO;AAAA,IACP,GAEU4zH,KAAU,CAAA5zH,MAAU;AACxB,MAAAA,EAAO,GAAG,eAAe,CAAA9lC,MAAK;AAC5B,SAAI,CAAC8lC,EAAO,UAAU,WAAU,KAAM5f,EAAOlmB,EAAE,gBAAiB,GAAE,CAAAkc,MAAO,CAACwpE,GAAgB5/C,EAAO,KAAK5pB,CAAG,CAAC,MACxGlc,EAAE,eAAc;AAAA,MAE1B,CAAO;AAAA,IACP,GAEU25J,KAAuB,CAAC/iI,GAAMgQ,MAAQ;AAC1C,YAAM7I,IAAY6I,EAAI,aAChBtqB,IAASsqB,EAAI;AACnB,aAAIvE,GAAStE,CAAS,KACpBA,EAAU,WAAWzhB,GAAQsa,CAAI,GAC1BzR,EAAS,KAAKmuC,GAAcv1B,GAAWzhB,IAASsa,EAAK,MAAM,CAAC,KAE5DmvC,GAAuBn/B,CAAG,EAAE,IAAI,CAAA5B,MAAO;AAC5C,cAAMuB,IAAW1P,EAAa,SAASD,CAAI;AAC3C,eAAIgQ,EAAI,YACNnK,GAAQuI,GAAKuB,CAAQ,IAErBhK,GAASyI,GAAKuB,CAAQ,GAEjB+sB,GAAc/sB,EAAS,KAAK3P,EAAK,MAAM;AAAA,MACxD,CAAS;AAAA,IAET,GACUgjI,KAAuBp1I,GAAMm1I,IAAsBr2H,EAAI,GACvDu2H,KAAwBr1I,GAAMm1I,IAAsB,GAAG,GAEvDG,KAA8B,CAAC98I,GAAM4pB,GAAKpB,MAAWmpD,GAAgB3xE,GAAM4pB,GAAKpB,CAAM,IAAIo0H,GAAqBhzH,CAAG,IAAIizH,GAAsBjzH,CAAG,GAC/ImzH,KAA0B,CAAA/8I,MAAQ,CAAA2oD,MAAYA,EAAS,KAAK,CAAA5xC,MAAWs0C,GAAarrD,EAAK,KAAKs2C,GAAc,OAAOv/B,CAAO,CAAC,GAAG,CAAAA,MAAWu0C,GAAgBv0C,CAAO,GAAG,CAAAA,MAAWw0C,GAAex0C,CAAO,GAAG,CAAAA,MAAWq0C,GAAaprD,EAAK,KAAKs2C,GAAc,MAAMv/B,CAAO,CAAC,CAAC,GACtQimI,KAAkC,CAACh9I,GAAM4pB,GAAKpB,MAAW,CAAAy0H,MAAYtrE,GAAgB3xE,GAAMi9I,GAAUz0H,CAAM,IAAIo0H,GAAqBhzH,CAAG,IAAIizH,GAAsBjzH,CAAG,GACpKszH,KAAe,CAAAp0H,MAAU,CAAAc,MAAO;AACpC,MAAAd,EAAO,UAAU,OAAOc,EAAI,QAAS,CAAA,GACrCd,EAAO,YAAW;AAAA,IACxB,GACUq0H,KAAkB,CAACC,GAAU1jI,MAAS0jI,EAAS,WAAWA,EAAS,UAAU1jI,GAAM,SAAS,CAAC,GAC7F2jI,KAA+B,CAAAv0H,MAAU;AAC7C,YAAMc,IAAM0sB,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE,GAC5D9oB,IAAO6Z,EAAa,QAAQiP,EAAO,QAAS,CAAA;AAClD,UAAIA,EAAO,UAAU,eAAe;AAClC,cAAM+uG,IAAmBrwH,GAAM4tE,IAAgBtsD,CAAM,GAC/CotB,IAAgBI,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AAC5E,eAAO6oG,GAAakG,GAAkB/uG,EAAO,QAAO,GAAIotB,CAAa,EAAE,KAAK6mG,GAAwB/8I,CAAI,CAAC,EAAE,IAAI,CAAAi9I,MAAY,MAAMD,GAAgCh9I,GAAM4pB,GAAKd,EAAO,MAAM,EAAEm0H,CAAQ,EAAE,KAAKC,GAAap0H,CAAM,CAAC,CAAC;AAAA,MACvO;AACQ,eAAO3gB,EAAS;IAExB,GACUm1I,KAA2C,CAAAx0H,MAAU;AACzD,YAAMy0H,IAAmB,MAAM;AAC7B,cAAMv9I,IAAO6Z,EAAa,QAAQiP,EAAO,QAAS,CAAA;AAClD,QAAKA,EAAO,UAAU,iBACpBA,EAAO,OAAM,EAAG,YAAY,QAAQ;AAEtC,cAAMc,IAAM0sB,GAAc,eAAextB,EAAO,UAAU,OAAM,CAAE;AAClE,QAAAg0H,GAA4B98I,GAAM4pB,GAAKd,EAAO,MAAM,EAAE,KAAKo0H,GAAap0H,CAAM,CAAC;AAAA,MACvF;AACM,aAAO/S,EAAO5B,GAAI,QAAQ,UAAS,KAAM2U,EAAO,UAAU,WAAY,KAAIq0H,GAAgBr0H,EAAO,KAAKA,EAAO,UAAU,OAAM,EAAG,cAAc,GAAGy0H,CAAgB;AAAA,IACvK,GAEUC,KAA2B,CAAC10H,GAAQ2Y,MAAQ;AAChD,MAAAigG,GAAyB;AAAA,QACvB;AAAA,UACE,SAAS5oE,GAAG;AAAA,UACZ,QAAQnJ,GAAO0tF,IAA8Bv0H,CAAM;AAAA,QACpD;AAAA,QACD;AAAA,UACE,SAASgwC,GAAG;AAAA,UACZ,QAAQnJ,GAAO2tF,IAA0Cx0H,CAAM;AAAA,QAChE;AAAA,MACT,GAAS2Y,CAAG,EAAE,KAAK,CAAAuyG,MAAe;AAC1B,QAAAvyG,EAAI,eAAc,GACJ+xG,GAAqB1qH,GAAQ,cAAc,EAAE,MAAM,IAAG,CAAE,EAC3D,yBACTkrH,KACAT,GAAezqH,GAAQ,cAAc,EAAE,MAAM,IAAK,CAAA;AAAA,MAE5D,CAAO;AAAA,IACP,GACU20H,KAAU,CAAA30H,MAAU;AACxB,MAAAA,EAAO,GAAG,WAAW,CAAA2Y,MAAO;AAC1B,QAAKA,EAAI,wBACP+7G,GAAyB10H,GAAQ2Y,CAAG;AAAA,MAE9C,CAAO;AAAA,IACP,GAEUi8G,KAAqB,CAAA50H,MACrBk7B,GAAsBl7B,CAAM,IACvB;AAAA,MACL;AAAA,QACE,SAASgwC,GAAG;AAAA,QACZ,QAAQnJ,GAAO21E,IAAWx8G,GAAQ,EAAI;AAAA,MACvC;AAAA,MACD;AAAA,QACE,SAASgwC,GAAG;AAAA,QACZ,UAAU;AAAA,QACV,QAAQnJ,GAAO21E,IAAWx8G,GAAQ,EAAK;AAAA,MACxC;AAAA,IACX,IAEe,IAGL60H,KAAyB,CAAC70H,GAAQ2Y,MAAQ;AAC9C,MAAAggG,GAAQ,CAAC,GAAGic,GAAmB50H,CAAM,CAAC,GAAG2Y,CAAG,EAAE,KAAK,CAAA/oC,MAAK;AACtD,QAAA+oC,EAAI,eAAc;AAAA,MAC1B,CAAO;AAAA,IACP,GACUm8G,KAAU,CAAA90H,MAAU;AACxB,MAAAA,EAAO,GAAG,WAAW,CAAA2Y,MAAO;AAC1B,QAAKA,EAAI,wBACPk8G,GAAuB70H,GAAQ2Y,CAAG;AAAA,MAE5C,CAAO;AAAA,IACP,GAEUo8G,KAAU,CAAA/0H,MAAU;AAGxB,UAFAA,EAAO,YAAY,UAAU,IAAI,UAAU,GAC3CgnH,GAAQhnH,CAAM,GACVupF,GAAMvpF,CAAM;AACd,eAAOgiB,GAAK,IAAI;AACX;AACL,cAAMsb,IAAQsyE,GAAmB5vG,CAAM;AACvC,eAAA4zH,GAAQ5zH,CAAM,GACdy2G,GAAQz2G,CAAM,GACd48G,GAAQ58G,GAAQs9B,CAAK,GACrB+tF,GAAQrrH,GAAQs9B,CAAK,GACrBw1F,GAAQ9yH,CAAM,GACd20H,GAAQ30H,CAAM,GACdozH,GAAQpzH,CAAM,GACd80H,GAAQ90H,CAAM,GACdmzH,GAAQnzH,GAAQs9B,CAAK,GACrBq2F,GAAQ3zH,GAAQs9B,CAAK,GACdA;AAAA,MACR;AAAA,IACP;AAAA,IAEI,MAAM03F,GAAW;AAAA,MACf,YAAYh1H,GAAQ;AAClB,aAAK,WAAW,IAChB,KAAK,SAASA;AACd,YAAIi1H;AACJ,cAAM3/G,IAAO;AACb,QAAM,uBAAuBtV,EAAO,OAAQ,KAC1CA,EAAO,GAAG,wCAAwC,CAAA9lC,MAAK;AACrD,gBAAMg7J,IAAYl1H,EAAO,UAAU,OAAM,GACnCm1H,IAAU;AAAA,YACd,gBAAgBD,EAAU;AAAA,YAC1B,aAAaA,EAAU;AAAA,YACvB,cAAcA,EAAU;AAAA,YACxB,WAAWA,EAAU;AAAA,UACnC;AACY,WAAIh7J,EAAE,SAAS,gBAAgB,CAACk9E,GAAO+9E,GAASF,CAAO,MACrDj1H,EAAO,SAAS,iBAAiB,GAEnCi1H,IAAUE;AAAA,QACtB,CAAW,GAEHn1H,EAAO,GAAG,eAAe,MAAM;AAC7B,UAAAA,EAAO,SAAS,iBAAiB;AAAA,QAC3C,CAAS,GACDA,EAAO,GAAG,mBAAmB,MAAM;AACjC,gBAAM6zC,IAAW7zC,EAAO,UAAU,SAAS,EAAI;AAC/C,UAAK6zC,KAGD7N,GAAahmC,CAAM,KAAK,CAACsV,EAAK,kBAAkBu+B,CAAQ,KAAK7zC,EAAO,IAAI,UAAU6zC,GAAU7zC,EAAO,QAAS,CAAA,KAC9GA,EAAO,YAAY,EAAE,iBAAiB,GAAM,CAAA;AAAA,QAExD,CAAS,GACDA,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,UAAI,CAACA,EAAE,mBAAoB,KAAI8rE,GAAahmC,CAAM,MAC5CA,EAAO,UAAU,QAAO,EAAG,aAAa,QAC1Cm9C,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,YAAAA,EAAO,YAAW;AAAA,UAClC,CAAe,IAEDA,EAAO,YAAW;AAAA,QAGhC,CAAS;AAAA,MACF;AAAA,MACD,YAAYtlB,IAAO,IAAI;AACrB,cAAMu1C,IAAY,KAAK,OAAO;AAC9B,YAAIr/B;AACJ,YAAI,KAAK,OAAO,eAAeq/B,KAAa,CAACsI,GAAwB,KAAK,MAAM,KAAK,CAAC,KAAK,OAAO,KAAK,WAAU,GAAI;AACnH,gBAAMrhD,IAAO,KAAK,OAAO,QAAO;AAChC,UAAA0Z,IAAOq/B,EAAU,SAAS,EAAI,KAAK/4C,IAC/B0Z,EAAK,kBAAkB,KAAK,OAAO,OAAQ,KAAI,CAAC,KAAK,OAAO,IAAI,UAAUA,GAAM1Z,CAAI,OACtF0Z,IAAO1Z;AAET,gBAAM2vB,IAAU,CAAA;AAChB,eAAK,OAAO,IAAI,UAAUjW,GAAM,CAAAA,MAC1BA,MAAS1Z,IACJ,MAEP2vB,EAAQ,KAAKjW,CAAI,GACV,GAEV,GACD,KAAK,OAAO,SAAS,cAAc;AAAA,YACjC,GAAGlW;AAAA,YACH,SAASkW;AAAA,YACT,SAAAiW;AAAA,UACZ,CAAW;AAAA,QACF;AAAA,MACF;AAAA,MACD,kBAAkBgtC,GAAU;AAC1B,YAAIj1E;AACJ,cAAMohC,IAAS,KAAK,QACdo1H,IAAc9zI,GAAQ0e,EAAO,IAAI,WAAW6zC,GAAUz0D,IAAQ4gB,EAAO,QAAO,CAAE,CAAC;AACrF,YAAIo1H,EAAY,WAAW,KAAK,SAAS,QAAQ;AAC/C,eAAKx2J,IAAIw2J,EAAY,QAAQx2J,KAAK,KAC5Bw2J,EAAYx2J,CAAC,MAAM,KAAK,SAASA,CAAC,GADHA;AACnC;AAIF,cAAIA,MAAM;AACR,wBAAK,WAAWw2J,GACT;AAAA,QAEV;AACD,oBAAK,WAAWA,GACT;AAAA,MACR;AAAA,IACF;AAED,UAAMC,KAAUttG,GAAW,OAAO,GAC5ButG,KAAe,CAAAC,MAAY;AAC/B,YAAMryJ,IAAKqyJ;AACX,aAAOl2I,EAAS,KAAKnc,EAAGmyJ,EAAO,CAAC;AAAA,IACtC,GACUG,KAAe,CAACD,GAAUE,MAAc;AAC5C,YAAMvyJ,IAAKqyJ;AACX,MAAAryJ,EAAGmyJ,EAAO,IAAII;AAAA,IACpB,GAEUC,KAAU3tG,GAAW,OAAO,GAC5B4tG,KAAW,CAAAJ,MAAY;AAC3B,YAAMryJ,IAAKqyJ;AACX,aAAOl2I,EAAS,KAAKnc,EAAGwyJ,EAAO,CAAC;AAAA,IACtC,GACUE,KAAe,CAAA98I,MAAQ,CAAAy8I,MAAY;AACvC,YAAMryJ,IAAKqyJ;AACX,MAAAryJ,EAAGwyJ,EAAO,IAAI58I;AAAA,IACpB,GACU+8I,KAAW,CAACN,GAAUz8I,MAAS88I,GAAa98I,CAAI,EAAEy8I,CAAQ,GAC1DO,KAAoBF,GAAa,CAAC,GAClCG,KAAeH,GAAa,CAAC,GAC7BI,KAAkBJ,GAAa,CAAC,GAKhCK,MAJa,CAAAtS,MAAgB,CAAA4R,MAAY;AAC7C,YAAMryJ,IAAKqyJ;AACX,aAAOl2I,EAAS,KAAKnc,EAAGwyJ,EAAO,CAAC,EAAE,OAAO,CAAA58I,MAAQA,MAAS6qI,CAAY;AAAA,IAC5E,GAC0C,CAAC,GAEjCuS,KAAsB,MAAM,OAAO,OAAO;AAAA,MAC9C,QAAQ;AAAA,MACR,MAAM,CAAAtmJ,MAAK;AAAA,IACjB,CAAK,GAEKumJ,KAASpuG,GAAW,MAAM,GAC1BquG,KAAU,CAAAb,MAAY;AAC1B,YAAMryJ,IAAKqyJ;AACX,aAAOl2I,EAAS,KAAKnc,EAAGizJ,EAAM,CAAC;AAAA,IACrC,GACUE,KAAc,CAAAvmH,MAAQ,CAAAylH,MAAY;AACtC,YAAMryJ,IAAKqyJ;AACX,MAAAryJ,EAAGizJ,EAAM,IAAIrmH;AAAA,IACnB,GACUwmH,KAAY,CAACf,GAAUzlH,MAASumH,GAAYvmH,CAAI,EAAEylH,CAAQ,GAC1DgB,KAAmBF,GAAY,CAAC,GAChCG,KAAkBH,GAAY,CAAC,GAC/BI,KAAmBJ,GAAY,CAAC,GAChCK,KAAY,CAAAC,MAAgB,CAAApB,MAAY;AAC5C,YAAMryJ,IAAKqyJ;AACX,aAAOl2I,EAAS,KAAKnc,EAAGizJ,EAAM,CAAC,EAAE,OAAO,CAAArmH,MAAQA,MAAS6mH,CAAY;AAAA,IAC3E,GACUC,KAAoBF,GAAU,CAAC,GAC/BG,KAAoBH,GAAU,CAAC,GAE/BI,KAAiB,CAACC,GAAcC,OAAe;AAAA,MACnD,GAAGA;AAAA,MACH,IAAI,SAAS;AACX,eAAOA,EAAU;AAAA,MAClB;AAAA,MACD,KAAK,CAACz/G,GAAMz+B,MAAS;AACnB,YAAI89I,GAAkBG,CAAY;AAChC,cAAI15I,GAASk6B,CAAI;AACf,gBAAI,CAAC75B,GAAY5E,CAAI;AACnB,qBAAOk+I,EAAU,IAAIz/G,GAAMz+B,CAAI;AAAA;AAGjC,mBAAOk+I,EAAU,IAAIz/G,CAAI;AAG7B,eAAO;AAAA,MACR;AAAA,MACD,QAAQ,CAAArvB,MAAO;AACb,QAAI0uI,GAAkBG,CAAY,KAChCC,EAAU,OAAO9uI,CAAG;AAAA,MAEvB;AAAA,MACD,OAAO,MAAM;AACX,QAAI0uI,GAAkBG,CAAY,KAChCC,EAAU,MAAK;AAAA,MAElB;AAAA,IACP,IAEUC,KAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,GACUC,KAAsB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,GACUC,KAAqB,MAAM;AAC/B,YAAMC,IAAmB,IAAI,OAAO;AACpC,UAAIC,IAAa,QACbC,IAAgB;AACpB,YAAMP,IAAe;AAAA,QACnB,IAAI,aAAa;AACf,iBAAOM;AAAA,QACR;AAAA,QACD,IAAI,WAAWE,GAAQ;AACrB,UAAIp3I,EAAW82I,IAAkBM,CAAM,MACrCF,IAAaE;AAAA,QAEhB;AAAA,QACD,IAAI,gBAAgB;AAClB,iBAAOD;AAAA,QACR;AAAA,QACD,IAAI,cAAcE,GAAS;AACzB,UAAIvB,GAAmBc,CAAY,KAAK52I,EAAW+2I,IAAqBM,CAAO,MAC7EF,IAAgBE;AAAA,QAEnB;AAAA,QACD,IAAI,QAAQ;AACV,iBAAOV,GAAeC,GAAcK,EAAiB,KAAK;AAAA,QAC3D;AAAA,QACD,IAAI,QAAQ;AACV,iBAAIP,GAAkBE,CAAY,IACzBb,GAAmB,IAEnBkB,EAAiB;AAAA,QAE3B;AAAA,QACD,IAAI,QAAQ;AACV,iBAAOA,EAAiB;AAAA,QACzB;AAAA,QACD,cAAc,CAAC96B,GAAOv/H,GAAG4S,MAAM;AAC7B,UAAIinJ,GAAkBG,CAAY,MAChCvB,GAAauB,GAAc;AAAA,YACzB,OAAAz6B;AAAA,YACA,GAAAv/H;AAAA,YACA,GAAA4S;AAAA,UACd,CAAa,GACDynJ,EAAiB,aAAa96B,GAAOv/H,GAAG4S,CAAC;AAAA,QAE5C;AAAA,QACD,SAAS,CAAA4jD,MACHsjG,GAAkBE,CAAY,IACzB,KAEAK,EAAiB,QAAQ7jG,CAAM;AAAA,QAG1C,SAAS,CAACA,GAAQhc,MAAS;AACzB,UAAIq/G,GAAkBG,CAAY,KAChCK,EAAiB,QAAQ7jG,GAAQhc,CAAI;AAAA,QAExC;AAAA,QACD,WAAW,CAAAgc,MAAU;AACnB,UAAIqjG,GAAkBG,CAAY,KAChCK,EAAiB,UAAU7jG,CAAM;AAAA,QAEpC;AAAA,MACT;AACM,aAAAgjG,GAAiBQ,CAAY,GACtBA;AAAA,IACb,GACUU,KAAoB,CAAAtvG,MAAY;AACpC,YAAMvsC,IAAQu7I,MACRO,IAAetB,GAAQjuG,CAAQ;AACrC,aAAAquG,GAAgBruG,CAAQ,GACxB2tG,GAAkBl6I,CAAK,GACvBA,EAAM,aAAausC,EAAS,YAC5BvsC,EAAM,gBAAgBusC,EAAS,eAC/BmtG,GAAantG,CAAQ,EAAE,KAAK,CAAAstG,MAAa75I,EAAM,aAAa65I,EAAU,OAAOA,EAAU,GAAGA,EAAU,CAAC,CAAC,GACtGn1I,EAAO6nC,EAAS,OAAO,CAAArvC,MAAQ;AAC7B,QAAIA,MAAS,WACX8C,EAAM,QAAQ9C,GAAMqvC,EAAS,QAAQrvC,CAAI,CAAC;AAAA,MAEpD,CAAO,GACDwH,EAAO6nC,EAAS,OAAO,CAAAwvG,MAAQ/7I,EAAM,MAAM,IAAI+7I,CAAI,CAAC,GACpDhC,GAASxtG,CAAQ,EAAE,KAAK,CAAArvC,MAAQ;AAC9B,QAAA+8I,GAASj6I,GAAO9C,CAAI;AAAA,MAC5B,CAAO,GACD4+I,EAAa,KAAK,CAAA5nH,MAAQ;AACxB,QAAAwmH,GAAUnuG,GAAUrY,CAAI,GACxBwmH,GAAU16I,GAAOk0B,CAAI;AAAA,MAC7B,CAAO,GACMl0B;AAAA,IACb,GAEUg8I,KAAc,CAAAb,MAAgB;AAClC,YAAMvmI,IAAOumI,EAAa,QAAQ,WAAW;AAC7C,aAAOvmI,MAAS,KAAKnR,EAAS,KAAM,IAAGA,EAAS,KAAKmR,CAAI;AAAA,IAC/D,GACUqnI,KAAc,CAACd,GAAcvmI,MAASumI,EAAa,QAAQ,aAAavmI,CAAI,GAE5EsnI,KAAmB,kBACnBC,KAAmBx5I,GAASu5I,EAAgB,GAC5CE,KAAe,UAAUF,KAAmB,QAC5CG,KAAO,CAAAznI,MAAQwnI,KAAexnI,GAC9B0nI,KAAS,CAAA1nI,MAAQA,EAAK,QAAQwnI,IAAc,EAAE,GAC9CG,KAAW,CAAA3nI,MAAQA,EAAK,QAAQwnI,EAAY,MAAM,IAElDI,KAAc,CAAAtnI,MACX,CAAC,wGAAwG,KAAKA,CAAI,GAErHunI,KAAgB,CAACC,GAASC,MAAc;AAC5C,UAAI1gJ,IAAM,MAAMygJ;AAChB,YAAMvpI,IAAQ5L,GAAWo1I,GAAW,CAAC5gJ,GAAO4L,MAAQA,IAAM,OAAO2oB,GAAS,aAAav0B,CAAK,IAAI,GAAG;AACnG,aAAIoX,EAAM,WACRlX,KAAO,MAAMkX,EAAM,KAAK,GAAG,IAEtBlX,IAAM;AAAA,IACnB,GACU2gJ,KAAkB,CAAC1nI,GAAMwnI,GAASC,MAAc;AACpD,YAAM33D,IAAS9vE,EAAK,MAAM,MAAM,GAC1B2nI,IAAUJ,GAAcC,GAASC,CAAS,GAC1CG,IAAW,OAAOJ,IAAU,KAC5BK,IAAat4I,GAAMugF,GAAQ,CAAAnxF,MACxBA,EAAE,MAAM,IAAI,EAAE,KAAK,QAAQ,CACnC,GACKmpJ,IAAS,CAAAnpJ,MACNgpJ,IAAUhpJ,IAAIipJ;AAEvB,aAAOC,EAAW,WAAW,IAAIA,EAAW,CAAC,IAAIt4I,GAAMs4I,GAAYC,CAAM,EAAE,KAAK,EAAE;AAAA,IACxF,GAEUC,KAAyB,iBACzBC,KAAW,CAAC94H,GAAQ+4H,MAAgB;AACxC,YAAM,EAAC,KAAAnqI,GAAK,WAAAqhC,EAAS,IAAIjwB,GACnB5G,IAAO4G,EAAO;AACpB,MAAA+4H,EAAY,IAAI9oG,EAAU,OAAQ,CAAA;AAClC,YAAM+oG,IAAcpqI,EAAI,IAAIoR,EAAO,QAAS,GAAE,OAAO;AAAA,QACnD,IAAM;AAAA,QACN,OAAS;AAAA,QACT,iBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,OAAS;AAAA,MACV,GAAE64H,EAAsB;AACzB,MAAIxtI,GAAI,QAAQ,eACduD,EAAI,SAASoqI,GAAa,QAAQpqI,EAAI,SAASwK,GAAM,aAAa,EAAI,MAAM,QAAQ,QAAQ,MAAM,GAEpGxK,EAAI,KAAKoqI,GAAa,qCAAqC,CAAA9+J,MAAK;AAC9D,QAAAA,EAAE,gBAAe;AAAA,MACzB,CAAO,GACD8+J,EAAY,MAAK,GACjB/oG,EAAU,OAAO+oG,GAAa,EAAI;AAAA,IACxC,GACUl7G,KAAS,CAAC9d,GAAQ+4H,MAAgB;AACtC,YAAMnqI,IAAMoR,EAAO;AACnB,UAAIi5H,GAAMj5H,CAAM,GAAG;AACjB,YAAIk5H;AACJ,cAAMjE,IAAU8D,EAAY;AAC5B,eAAOG,IAAgBD,GAAMj5H,CAAM;AACjC,UAAApR,EAAI,OAAOsqI,CAAa,GACxBtqI,EAAI,OAAOsqI,CAAa;AAE1B,QAAIjE,KACFj1H,EAAO,UAAU,OAAOi1H,CAAO;AAAA,MAElC;AACD,MAAA8D,EAAY,IAAI,IAAI;AAAA,IAC1B,GACUE,KAAQ,CAAAj5H,MAAUA,EAAO,IAAI,IAAI,aAAa,GAC9Cm5H,KAAa,CAAAj6H,MAAOthB,GAAcshB,CAAG,KAAKA,EAAI,OAAO,eACrDk6H,KAAU,CAAAp5H,MAAU;AACxB,YAAMpR,IAAMoR,EAAO,KACbq5H,IAAgB,CAACC,GAAOC,MAAY;AACxC,QAAAD,EAAM,YAAYC,CAAO,GACzB3qI,EAAI,OAAO2qI,GAAS,EAAI;AAAA,MAChC,GACY,CAACP,GAAa,GAAGQ,CAAc,IAAI74I,GAASqf,EAAO,QAAS,EAAC,YAAYm5H,EAAU;AACzF,MAAA74I,EAAOk5I,GAAgB,CAAAN,MAAiB;AACtC,QAAAG,EAAcL,GAAaE,CAAa;AAAA,MAChD,CAAO;AACD,YAAMO,IAAgB7qI,EAAI,OAAO,uBAAuBoqI,CAAW;AACnE,eAAS,IAAIS,EAAc,SAAS,GAAG,KAAK,GAAG,KAAK;AAClD,cAAMC,IAAe9qI,EAAI,OAAO,KAAK;AACrC,QAAAoqI,EAAY,aAAaU,GAAcD,EAAc,CAAC,CAAC,GACvDJ,EAAcK,GAAcD,EAAc,CAAC,CAAC;AAAA,MAC7C;AACD,aAAOT,IAAcA,EAAY,YAAY;AAAA,IACnD,GACUW,KAA2B,CAAA/hI,MAAWA,MAAYihI,IAClDe,KAAW,CAAA55H,MAAU;AACzB,YAAMi1H,IAAUjzG,GAAK,IAAI;AACzB,aAAO;AAAA,QACL,QAAQ,MAAM82G,GAAS94H,GAAQi1H,CAAO;AAAA,QACtC,QAAQ,MAAMn3G,GAAO9d,GAAQi1H,CAAO;AAAA,QACpC,OAAO,MAAMgE,GAAMj5H,CAAM;AAAA,QACzB,SAAS,MAAMo5H,GAAQp5H,CAAM;AAAA,QAC7B,YAAYi1H,EAAQ;AAAA,MAC5B;AAAA,IACA,GAEU4E,KAAW,CAACjiI,GAASlM,OACzBQ,GAAM,KAAKR,GAAO,CAAA3b,MAAK;AACrB,MAAIqN,GAAKrN,GAAG,MAAM,IAChB6nB,IAAUA,EAAQ,QAAQ7nB,GAAG,EAAE,IAE/B6nB,IAAUA,EAAQ,QAAQ7nB,EAAE,CAAC,GAAGA,EAAE,CAAC,CAAC;AAAA,IAE9C,CAAO,GACM6nB,IAEHkiI,KAAY,CAAAtpI,MAAQ;AACxB,YAAMkP,IAASsQ,MACT65D,IAAYkT,GAAU,CAAE,GAAEr9E,CAAM;AACtC,UAAI5O,IAAO;AACX,YAAMipI,IAAer6H,EAAO,mBACtBs6H,IAAiB9tI,GAAM,QAAQ,4DAA4D,GAAG,GAC9Fo+E,IAAgB5qE,EAAO,oBACvBipB,IAAO,CAAA/3B,MAAQ;AACnB,cAAMxN,IAAOwN,EAAK,MAAMiyC,IAAcjyC;AACtC,YAAIxN,MAAS,MAAM;AACjB,UAAA0N,KAAQ;AAAA;AACR;AAAA,QACD;AACD,YAAI1N,MAAS,OAMb;AAAA,cAHI22I,EAAa32I,CAAI,MACnB0N,KAAQ,MAENkpI,EAAe52I,CAAI,GAAG;AACxB,YAAA0N,KAAQ;AACR;AAAA,UACD;AAID,cAHIF,EAAK,SAAS,MAChBE,KAAQF,EAAK,QAEX,EAAEA,EAAK,QAAQ8O,EAAO,gBAAiB,IAAG;AAC5C,gBAAImjC,IAAcjyC,EAAK;AACvB,gBAAIiyC;AACF;AACE,gBAAAla,EAAKka,CAAW;AAAA,qBACTA,IAAcA,EAAY;AAAA,UAEtC;AACD,UAAIynC,EAAclnF,CAAI,KAAKy/C,EAAY,SACrC/xC,KAAQ;AAAA,GACJ1N,MAAS,QACX0N,KAAQ;AAAA;AAAA;AAAA,MAGpB;AACM,aAAAN,IAAOqpI,GAASrpI,GAAM,CAAC,gBAAgB,CAAC,GACxCm4B,EAAKkhD,EAAU,MAAMr5E,CAAI,CAAC,GACnBM;AAAA,IACb,GACUmpI,KAAW,CAAAzpI,OAOfA,IAAOqpI,GAASrpI,GAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,QACE;AAAA,QAVe,CAAC3R,GAAKq7I,GAAIC,MACvB,CAACD,KAAM,CAACC,IACH,MAEF38H;AAAA,MAQN;AAAA,MACD;AAAA,MACA;AAAA,IACR,CAAO,GACMhN,IAEH4pI,KAAoB,CAAAtyI,MAAU;AAClC,UAAIc,IAAQ;AACZ,aAAO,MACEd,IAASc;AAAA,IAExB,GACUyxI,KAAmB,CAAAruI,MAAO;AAC9B,YAAMsuI,IAAWtuI,EAAI,eACfuuI,IAAgB;AAAA,QACpB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,KAAK;AAAA,MACb;AACM,aAAOruI,GAAM,OAAOquI,GAAeD,CAAQ,IAAI,WAAWC,EAAcD,CAAQ,IAAI,WAAWA;AAAA,IACrG,GAEUE,KAAa,CAACx6H,GAAQxP,MAAS;AACnC,YAAM8qE,IAASyhB,GAAU;AAAA,QACvB,UAAUpiD,GAAkB36B,CAAM;AAAA,QAClC,iBAAiBs7B,GAAqBt7B,CAAM;AAAA,MACpD,GAASA,EAAO,MAAM;AAChB,MAAAs7D,EAAO,cAAc,QAAQ,CAAA7jE,MAAS;AACpC,QAAAvL,GAAM,KAAKuL,GAAO,CAAA7G,MAAQ;AACxB,UAAAA,EAAK,OAAM;AAAA,QACrB,CAAS;AAAA,MACT,CAAO;AACD,YAAMkH,IAAWwjE,EAAO,MAAM9qE,GAAM;AAAA,QAClC,mBAAmB;AAAA,QACnB,eAAe;AAAA,MACvB,CAAO;AACD,aAAO0zD,GAAe,EAAE,UAAU,GAAM,GAAElkD,EAAO,MAAM,EAAE,UAAUlI,CAAQ;AAAA,IACjF,GACU2iI,KAAgB,CAAC7iI,GAAS8iI,OAAe;AAAA,MAC7C,SAAA9iI;AAAA,MACA,WAAA8iI;AAAA,IACN,IACUC,KAAoB,CAAC36H,GAAQxP,GAAMo/C,MAAa;AACpD,YAAMgrF,IAAW56H,EAAO,IAAI,OAAO,OAAO,EAAE,OAAO,kBAAkBxP,CAAI,GACnEqqI,IAAkBhrF,GAAqB7vC,GAAQ46H,GAAUhrF,CAAQ;AACvE,aAAO6qF,GAAcI,EAAgB,KAAK,WAAWA,EAAgB,mBAAkB,CAAE;AAAA,IAC/F,GACUC,KAAgB,CAAC96H,GAAQpI,GAASg4C,MAAa;AACnD,YAAMmrF,IAAiBprF,GAAoB3vC,GAAQpI,GAASg4C,CAAQ,GAC9DorF,IAAkBR,GAAWx6H,GAAQ+6H,EAAe,OAAO;AACjE,aAAI/6H,EAAO,kBAAkB,kBAAkB,KAAK,CAAC+6H,EAAe,uBAC3DJ,GAAkB36H,GAAQg7H,GAAiBprF,CAAQ,IAEnD6qF,GAAcO,GAAiBD,EAAe,mBAAoB,CAAA;AAAA,IAEjF,GACUhyG,KAAU,CAAC/oB,GAAQxP,GAAMo/C,MACtBkrF,GAAc96H,GAAQxP,GAAMo/C,CAAQ,GAGvCqrF,KAAc,CAACj7H,GAAQxP,OAC3BwP,EAAO,cAAcxP,GAAM;AAAA,MACzB,OAAOupC,GAAwB/5B,CAAM;AAAA,MACrC,OAAO;AAAA,IACf,CAAO,GACM,KAEHk7H,KAAgB,CAAA9uI,MAAO,4CAA4C,KAAKA,CAAG,GAC3E+uI,KAAa,CAACn7H,GAAQ5T,MACnB8uI,GAAc9uI,CAAG,KAAKhM,EAAO66C,GAAyBj7B,CAAM,GAAG,CAAAlnB,MAAQqP,GAASiE,EAAI,YAAa,GAAE,IAAKtT,EAAK,YAAa,CAAA,EAAG,CAAC,GAEjIsiJ,KAAc,CAACp7H,GAAQ5T,GAAKivI,OAChCr7H,EAAO,YAAY,MAAM,MAAM;AAC7B,MAAAq7H,EAAYr7H,GAAQ5T,CAAG;AAAA,IAC/B,GAAS,MAAM;AACP,MAAA4T,EAAO,cAAc,eAAe5T,IAAM,IAAI;AAAA,IACtD,CAAO,GACM,KAEHkvI,KAAa,CAACt7H,GAAQ5T,GAAKivI,OAC/Br7H,EAAO,YAAY,MAAM,MAAM;AAC7B,MAAAq7H,EAAYr7H,GAAQ5T,CAAG;AAAA,IAC/B,GAAS,MAAM;AACP,MAAA4T,EAAO,YAAY,iBAAiB,IAAO5T,CAAG;AAAA,IACtD,CAAO,GACM,KAEHmvI,KAAgB,CAACv7H,GAAQxP,GAAM6qI,MAAgB,CAACr7H,EAAO,UAAU,YAAa,KAAIk7H,GAAc1qI,CAAI,IAAI8qI,GAAWt7H,GAAQxP,GAAM6qI,CAAW,IAAI,IAChJG,KAAc,CAACx7H,GAAQxP,GAAM6qI,MAAgBF,GAAWn7H,GAAQxP,CAAI,IAAI4qI,GAAYp7H,GAAQxP,GAAM6qI,CAAW,IAAI,IACjHI,KAAqB,CAACz7H,GAAQxP,MAAS;AAC3C,MAAAtE,GAAM,KAAK;AAAA,QACTqvI;AAAA,QACAC;AAAA,QACAP;AAAA,MACD,GAAE,CAAAp0F,MACM,CAACA,EAAO7mC,GAAQxP,GAAMyqI,EAAW,CACzC;AAAA,IACP,GACUS,KAAgB,CAAC17H,GAAQxP,GAAMmrI,MAAgB;AACnD,MAAIA,KAAe,CAAC3hG,GAAoBh6B,CAAM,IAC5Ci7H,GAAYj7H,GAAQxP,CAAI,IAExBirI,GAAmBz7H,GAAQxP,CAAI;AAAA,IAEvC,GAEUwuB,KAAWo7G,GAAkB,SAAS,GACtCwB,KAA0B,CAAAprI,MAAQ;AACtC,YAAMumI,IAAeI;AACrB,aAAAU,GAAYd,GAAcvmI,CAAI,GAC9BgmI,GAAgBO,CAAY,GACrBA;AAAA,IACb,GACU8E,KAAU,CAAC77H,GAAQpI,GAASg4C,GAAU+rF,GAAaG,MAA6B;AACpF,YAAM7mI,IAAM8zB,GAAQ/oB,GAAQpI,GAASg4C,CAAQ;AAC7C,UAAI,CAAC36C,EAAI,WAAW;AAClB,cAAM2C,IAAU3C,EAAI,SACd8mI,IAAgB,MAAML,GAAc17H,GAAQpI,GAAS+jI,CAAW;AACtE,QAAIG,IACWpR,GAAqB1qH,GAAQ,mBAAmB,EAAE,cAAc47H,GAAwBhkI,CAAO,EAAC,CAAE,EACrG,yBACRmkI,KACAtR,GAAezqH,GAAQ,iBAAiB,KAG1C+7H;MAEH;AAAA,IACP,GACUC,KAAY,CAACh8H,GAAQxP,GAAMyrI,GAAcH,MAA6B;AAC1E,YAAMlsF,IAAWqsF,KAA8B9D,GAAS3nI,CAAI;AAC5D,MAAAqrI,GAAQ77H,GAAQk4H,GAAO1nI,CAAI,GAAGo/C,GAAU,IAAOksF,CAAwB;AAAA,IAC7E,GACUI,KAAY,CAACl8H,GAAQlP,GAAMgrI,MAA6B;AAC5D,YAAMK,IAAcn8H,EAAO,IAAI,OAAOlP,CAAI,EAAE,QAAQ,SAAS;AAAA,CAAI,GAC3DsS,IAAiBL,GAAYo5H,GAAajiG,GAAkBl6B,CAAM,CAAC,GACnExP,IAAOgoI,GAAgBp1H,GAAgBoyB,GAAmBx1B,CAAM,GAAGy1B,GAAwBz1B,CAAM,CAAC;AACxG,MAAA67H,GAAQ77H,GAAQxP,GAAM,IAAO,IAAMsrI,CAAwB;AAAA,IACjE,GACUM,KAAuB,CAAArF,MAAgB;AAC3C,YAAMrrI,IAAQ,CAAA;AACd,UAAIqrI,KAAgBA,EAAa;AAC/B,iBAASn4J,IAAI,GAAGA,IAAIm4J,EAAa,MAAM,QAAQn4J,KAAK;AAClD,gBAAMy9J,IAActF,EAAa,MAAMn4J,CAAC;AACxC,cAAI;AACF,YAAA8sB,EAAM2wI,CAAW,IAAItF,EAAa,QAAQsF,CAAW;AAAA,UACtD,QAAY;AACX,YAAA3wI,EAAM2wI,CAAW,IAAI;AAAA,UACtB;AAAA,QACF;AAEH,aAAO3wI;AAAA,IACb,GACU4wI,KAAiB,CAACC,GAAkBrhD,MAAaA,KAAYqhD,KAAoBA,EAAiBrhD,CAAQ,EAAE,SAAS,GACrHshD,KAAgB,CAAA5kI,MAAW0kI,GAAe1kI,GAAS,WAAW,KAAK0kI,GAAe1kI,GAAS,YAAY,GACvG6kI,KAAkB,CAACz8H,GAAQxY,MAAQ;AACvC,YAAM9tB,IAAI8tB,EAAI,MAAM,8BAA8B;AAClD,aAAO5J,GAAclkB,CAAC,IAAIsmC,EAAO,IAAI,OAAOtmC,EAAE,CAAC,CAAC,IAAI;AAAA,IAC1D,GACUgjK,KAAiB,CAAC18H,GAAQ6rE,GAAW8rD,GAAMhsD,MAAW;AAC1D,YAAMl8E,IAAKuvB,MACL29G,IAAc3mG,GAAoBh2B,CAAM,KAAKpiB,GAAc+5I,EAAK,IAAI,GACpEv0I,IAAOu5I,IAAcF,GAAgBz8H,GAAQ23H,EAAK,IAAI,IAAIloI,GAC1DiqG,IAAWijC,IAAchF,EAAK,OAAO,QACrC7rD,IAAWD,EAAU,OAAOp8E,GAAIkoI,GAAMhsD,GAAQvoF,GAAMs2G,CAAQ;AAClE,aAAA7tB,EAAU,IAAIC,CAAQ,GACfA;AAAA,IACb,GACU8wD,KAAa,CAAC58H,GAAQ68H,MAAc;AACxC,MAAAlyD,GAAakyD,EAAU,GAAG,EAAE,KAAK,CAAC,EAAC,MAAAtlH,GAAM,MAAAz+B,GAAM,eAAA+xF,EAAa,MAAM;AAChE,cAAMc,IAASd,IAAgBtzD,IAAO,KAAKA,CAAI,GACzCogH,IAAOkF,EAAU,MACjBhxD,IAAY7rE,EAAO,aAAa,WAChC88H,IAAmBjxD,EAAU,UAAUF,GAAQ7yF,CAAI,GACnDgzF,IAAWgxD,KAA8EJ,GAAe18H,GAAQ6rE,GAAW8rD,GAAMhsD,CAAM;AAC7I,QAAAqwD,GAAUh8H,GAAQ,aAAc8rE,EAAS,QAAS,CAAA,MAAO,IAAO,EAAI;AAAA,MAC5E,CAAO;AAAA,IACP,GACUixD,KAAmB,CAAA5oI,MAASA,EAAM,SAAS,SAC3C6oI,KAAsB,CAAAtxI,MAAS,QAAQ,IAAIrL,GAAMqL,GAAO,CAAAisI,MACrDzsD,GAAcysD,CAAI,EAAE,KAAK,CAAA/sD,OAAQ;AAAA,MACtC,MAAA+sD;AAAA,MACA,KAAA/sD;AAAA,IACD,EAAC,CACH,CAAC,GACIn5B,KAAU,CAAAzxC,MAAU;AACxB,YAAMi9H,IAAoBhiG,GAAyBj7B,CAAM;AACzD,aAAO,CAAA23H,MAAQ5vI,GAAW4vI,EAAK,MAAM,QAAQ,KAAKv3I,EAAO68I,GAAmB,CAAAC,MACnE7C,GAAiB6C,CAAS,MAAMvF,EAAK,IAC7C;AAAA,IACP,GACUwF,KAA4B,CAACn9H,GAAQ+2H,MAAiB;AAC1D,YAAMrrI,IAAQqrI,EAAa,QAAQ31I,GAAOa,GAAK80I,EAAa,KAAK,GAAG,CAAAzyI,MAC3DA,EAAK,SAAS,SAAS,CAACA,EAAK,UAAS,CAAE,IAAI,EACpD,IAAI,CAAA,GACCs2B,IAAQm8G,EAAa,QAAQ90I,GAAK80I,EAAa,KAAK,IAAI;AAC9D,aAAOp2I,GAAS+K,EAAM,SAAS,IAAIA,IAAQkvB,GAAO62B,GAAQzxC,CAAM,CAAC;AAAA,IACvE,GACUo9H,KAAiB,CAACp9H,GAAQ9lC,GAAGkc,MAAQ;AACzC,YAAM2gJ,IAAegG,GAAiB7iK,CAAC,IAAIA,EAAE,gBAAgBA,EAAE;AAC/D,UAAIu/D,GAAsBz5B,CAAM,KAAK+2H,GAAc;AACjD,cAAMr+B,IAASykC,GAA0Bn9H,GAAQ+2H,CAAY;AAC7D,YAAIr+B,EAAO,SAAS;AAClB,iBAAAx+H,EAAE,eAAc,GAChB8iK,GAAoBtkC,CAAM,EAAE,KAAK,CAAA2kC,MAAe;AAC9C,YAAIjnJ,KACF4pB,EAAO,UAAU,OAAO5pB,CAAG,GAE7BkK,EAAO+8I,GAAa,CAAAtlJ,MAAU;AAC5B,cAAA6kJ,GAAW58H,GAAQjoB,CAAM;AAAA,YACvC,CAAa;AAAA,UACb,CAAW,GACM;AAAA,MAEV;AACD,aAAO;AAAA,IACb,GACUulJ,KAAgC,OAAK;AACzC,UAAI12J,GAAIw2C;AACR,aAAO/xB,GAAI,GAAG,UAAS,OAAQ+xB,KAAMx2C,IAAK,EAAE,mBAAmB,QAAQA,MAAO,SAAS,SAASA,EAAG,WAAW,QAAQw2C,MAAO,SAAS,SAASA,EAAG,YAAY;AAAA,IACpK,GACUmgH,KAAuB,OAAKvtF,GAAG,eAAe,CAAC,KAAK,EAAE,YAAY,MAAM,EAAE,YAAY,EAAE,YAAY,IACpGwtF,KAAyB,CAACx9H,GAAQu8H,GAAkB/rI,GAAMitI,GAAe3B,MAA6B;AAC1G,UAAIlkI,IAAUqiI,GAASzpI,CAAI;AAC3B,YAAMktI,IAAapB,GAAeC,GAAkBxE,GAAgB,CAAE,KAAKI,GAAS3nI,CAAI,GAClFmtI,IAAkB,CAACD,KAActF,GAAYxgI,CAAO,GACpDgmI,IAAkB1C,GAActjI,CAAO;AAW7C,OAVI+hI,GAAyB/hI,CAAO,KAAK,CAACA,EAAQ,UAAU+lI,KAAmB,CAACC,OAC9EH,IAAgB,MAEdA,KAAiBG,OACftB,GAAeC,GAAkB,YAAY,KAAKoB,IACpD/lI,IAAU2kI,EAAiB,YAAY,IAEvC3kI,IAAUkiI,GAAUliI,CAAO,IAG3B,CAAA+hI,GAAyB/hI,CAAO,MAGhC6lI,IACFvB,GAAUl8H,GAAQpI,GAASkkI,CAAwB,IAEnDE,GAAUh8H,GAAQpI,GAAS8lI,GAAY5B,CAAwB;AAAA,IAEvE,GACU+B,KAAwB,CAAC79H,GAAQ89H,GAAUC,MAAgB;AAC/D,UAAIC;AACJ,YAAMC,IAAa,MAAMH,EAAS,WAAY,KAAI99H,EAAO,UAAU;AACnE,MAAAA,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,QAAIqjK,GAAqBrjK,CAAC,KAAK,CAACA,EAAE,mBAAkB,MAClD8jK,IAA8B9jK,EAAE,YAAYA,EAAE,YAAY;AAAA,MAEpE,CAAO,GACD8lC,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,YAAIA,EAAE,mBAAkB,KAAMojK,GAA8BpjK,CAAC;AAC3D;AAEF,cAAMujK,IAAgBM,EAAY,IAAG,MAAO,UAAUC;AACtD,QAAAA,IAA8B;AAC9B,cAAMzB,IAAmBH,GAAqBliK,EAAE,aAAa;AAC7D,QAAI,CAACsiK,GAAcD,CAAgB,KAAKa,GAAep9H,GAAQ9lC,GAAG+jK,EAAU,CAAE,MAG1E3B,GAAeC,GAAkB,WAAW,KAC9CriK,EAAE,eAAc,GAChBsjK,GAAuBx9H,GAAQu8H,GAAkBA,EAAiB,WAAW,GAAGkB,GAAe,EAAI,KAC1FnB,GAAeC,GAAkB,YAAY,KAAKD,GAAeC,GAAkB,eAAe,KAC3GriK,EAAE,eAAc,GAChBsjK,GAAuBx9H,GAAQu8H,GAAkBA,EAAiB,YAAY,GAAGkB,GAAe,EAAI,MAEpGK,EAAS,OAAM,GACf3gF,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,gBAAMxP,IAAOstI,EAAS;AACtB,UAAAA,EAAS,OAAM,GACfN,GAAuBx9H,GAAQu8H,GAAkB/rI,GAAMitI,GAAe,EAAK;AAAA,QAC5E,GAAE,CAAC;AAAA,MAEd,CAAO;AAAA,IACP,GACUS,KAA0B,CAAAl+H,MAAU;AACxC,YAAMm+H,IAAkB,CAAAxxD,MAAO5kF,GAAW4kF,GAAK,iBAAiB,GAC1DyxD,IAAY,CAAAzxD,MAAO5kF,GAAW4kF,GAAK,OAAO,GAC1C0xD,IAAgB,CAAA3jJ,MAAQ;AAC5B,YAAI9T;AACJ,iBAASA,IAAK8T,EAAK,UAAU,QAAQ9T,MAAO,SAAS,SAASA,EAAG,WAAW;AAAA,MACpF;AACM,MAAAo5B,EAAO,OAAO,cAAc,OAAO,CAACvI,GAAOrU,GAAM1I,MAAS;AACxD,YAAI,CAAC++C,GAAsBz5B,CAAM,KAAKq+H,EAAc3jJ,CAAI;AACtD,qBAAWkW,KAAQ6G,GAAO;AACxB,kBAAMk1E,IAAM/7E,EAAK,KAAK,KAAK;AAC3B,YAAIvT,GAASsvF,CAAG,KAAK,CAAC/7E,EAAK,KAAK,iBAAiB,KAAK+7E,MAAQthF,GAAI,mBAC5D8yI,EAAgBxxD,CAAG,KAEZ,CAACxyC,GAAwBn6B,CAAM,KAAKo+H,EAAUzxD,CAAG,MAC1D/7E,EAAK,OAAM;AAAA,UAGhB;AAAA,MAEX,CAAO;AAAA,IACP,GACU0tI,KAA2B,CAACt+H,GAAQ89H,GAAUC,MAAgB;AAClE,MAAAF,GAAsB79H,GAAQ89H,GAAUC,CAAW,GACnDG,GAAwBl+H,CAAM;AAAA,IACpC,GAEUu+H,KAAuB,CAACv+H,GAAQ+9H,MAAgB;AACpD,MAAIA,EAAY,IAAK,MAAK,UACxBA,EAAY,IAAI,MAAM,GACtBjuF,GAAyB9vC,GAAQ,EAAK,MAEtC+9H,EAAY,IAAI,MAAM,GACtBjuF,GAAyB9vC,GAAQ,EAAI,IAEvCA,EAAO,MAAK;AAAA,IAClB,GACUw+H,KAAa,CAACx+H,GAAQ+9H,MAAgB;AAC1C,MAAA/9H,EAAO,WAAW,2BAA2B,MAAM;AACjD,QAAAu+H,GAAqBv+H,GAAQ+9H,CAAW;AAAA,MAChD,CAAO,GACD/9H,EAAO,WAAW,6BAA6B,CAACr0B,GAAIgM,MAAU;AAC5D,QAAIA,EAAM,QACRqkJ,GAAUh8H,GAAQroB,EAAM,MAAMA,EAAM,UAAU,EAAK,GAEjDA,EAAM,QACRukJ,GAAUl8H,GAAQroB,EAAM,MAAM,EAAK;AAAA,MAE7C,CAAO;AAAA,IACP,GAEU8mJ,KAAoB,CAACC,GAAeluI,GAAMM,MAAS;AACvD,UAAI4tI;AACF,YAAI;AACF,iBAAAA,EAAc,UAAS,GACvBA,EAAc,QAAQ,aAAaluI,CAAI,GACvCkuI,EAAc,QAAQ,cAAc5tI,CAAI,GACxC4tI,EAAc,QAAQ3G,GAAkB,GAAEvnI,CAAI,GACvC;AAAA,QACR,QAAW;AACV,iBAAO;AAAA,QACR;AAAA;AAED,eAAO;AAAA,IAEf,GACUmuI,KAAmB,CAAChmH,GAAKpB,GAAMwpG,GAAU1/F,MAAS;AACtD,MAAIo9G,GAAkB9lH,EAAI,eAAepB,EAAK,MAAMA,EAAK,IAAI,KAC3DoB,EAAI,eAAc,GAClB0I,OAEA0/F,EAASxpG,EAAK,MAAM8J,CAAI;AAAA,IAEhC,GACU0/F,KAAW,CAAA/gH,MAAU,CAACxP,GAAM6wB,MAAS;AACzC,YAAM,EAAC,KAAAzyB,GAAK,WAAAqhC,EAAS,IAAIjwB,GACnBgsF,IAAQp9F,EAAI,OAAO,OAAO;AAAA,QAC9B,iBAAmB;AAAA,QACnB,kBAAkB;AAAA,MAC1B,CAAO,GACKq9F,IAAQr9F,EAAI,OAAO,OAAO,EAAE,iBAAiB,UAAU4B,CAAI;AACjE,MAAA5B,EAAI,UAAUo9F,GAAO;AAAA,QACnB,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAClB,CAAO,GACDA,EAAM,YAAYC,CAAK,GACvBr9F,EAAI,IAAIoR,EAAO,QAAS,GAAEgsF,CAAK;AAC/B,YAAMxqF,IAAQyuB,EAAU;AACxB,MAAAg8D,EAAM,MAAK;AACX,YAAM2yC,IAAiBhwI,EAAI;AAC3B,MAAAgwI,EAAe,mBAAmB3yC,CAAK,GACvCh8D,EAAU,OAAO2uG,CAAc,GAC/BzhF,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,QAAAiwB,EAAU,OAAOzuB,CAAK,GACtB5S,EAAI,OAAOo9F,CAAK,GAChB3qE;MACD,GAAE,CAAC;AAAA,IACV,GACUw9G,KAAU,CAAA7+H,OAAW;AAAA,MACzB,MAAMi4H,GAAKj4H,EAAO,UAAU,WAAW,EAAE,YAAY,GAAI,CAAE,CAAC;AAAA,MAC5D,MAAMA,EAAO,UAAU,WAAW,EAAE,QAAQ,QAAQ;AAAA,IAC1D,IACU8+H,KAAmB,CAAA9+H,MAAU,CAAC,CAACA,EAAO,IAAI,UAAUA,EAAO,UAAU,SAAQ,GAAI,+CAA+CA,EAAO,QAAS,CAAA,GAChJ++H,KAAqB,CAAA/+H,MAAU,CAACA,EAAO,UAAU,YAAa,KAAI8+H,GAAiB9+H,CAAM,GACzFg/H,KAAM,CAAAh/H,MAAU,CAAA2Y,MAAO;AAC3B,MAAI,CAACA,EAAI,mBAAkB,KAAMomH,GAAmB/+H,CAAM,KAAKA,EAAO,UAAU,gBAC9E2+H,GAAiBhmH,GAAKkmH,GAAQ7+H,CAAM,GAAG+gH,GAAS/gH,CAAM,GAAG,MAAM;AAC7D,YAAI3U,GAAI,QAAQ,WAAU,KAAMA,GAAI,QAAQ,aAAa;AACvD,gBAAMjV,IAAM4pB,EAAO,UAAU,OAAM;AACnC,UAAAm9C,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,YAAAA,EAAO,UAAU,OAAO5pB,CAAG,GAC3B4pB,EAAO,YAAY,QAAQ;AAAA,UAC5B,GAAE,CAAC;AAAA,QAChB;AACY,UAAAA,EAAO,YAAY,QAAQ;AAAA,MAEvC,CAAS;AAAA,IAET,GACUne,KAAO,CAAAme,MAAU,CAAA2Y,MAAO;AAC5B,MAAI,CAACA,EAAI,mBAAoB,KAAIomH,GAAmB/+H,CAAM,KACxD2+H,GAAiBhmH,GAAKkmH,GAAQ7+H,CAAM,GAAG+gH,GAAS/gH,CAAM,GAAG/hB,EAAI;AAAA,IAErE,GACU8/G,KAAW,CAAA/9F,MAAU;AACzB,MAAAA,EAAO,GAAG,OAAOg/H,GAAIh/H,CAAM,CAAC,GAC5BA,EAAO,GAAG,QAAQne,GAAKme,CAAM,CAAC;AAAA,IACpC,GAEUi/H,KAAyB,CAACj/H,GAAQ9lC,MAAM;AAC5C,UAAI0M,GAAIw2C;AACR,aAAOm7B,EAAW,wBAAwB3xE,IAAK1M,EAAE,aAAa,QAAQ0M,MAAO,SAASA,IAAK,IAAIw2C,IAAKljD,EAAE,aAAa,QAAQkjD,MAAO,SAASA,IAAK,GAAGpd,EAAO,OAAQ,CAAA;AAAA,IACxK,GACUk/H,KAAqB,CAAAtnI,MAAW;AACpC,YAAMunI,IAAmBvnI,EAAQ,YAAY;AAC7C,aAAOunI,IAAmBA,EAAiB,QAAQ,SAAS,MAAM,IAAI;AAAA,IAC5E,GACUC,KAAkB,CAACp/H,GAAQ5pB,MAAQ;AACvC,MAAA4pB,EAAO,MAAK,GACR5pB,KACF4pB,EAAO,UAAU,OAAO5pB,CAAG;AAAA,IAEnC,GACUipJ,KAAW,CAAAtI,MAAgB32I,EAAO22I,EAAa,OAAO,CAAAY,MAAQ,WAAW,KAAKA,EAAK,IAAI,CAAC,GACxF2H,KAA0B,CAAC1wI,GAAK8Q,GAAQxW,GAAQq2I,MAAgB;AACpE,YAAMC,IAAoB5wI,EAAI,UAAU1F,GAAQ,CAAA0H,MAAQyV,GAAmB3G,GAAQ9O,CAAI,CAAC;AAExF,UADkB,CAACpT,GAAOoR,EAAI,UAAU1F,GAAQ,SAAS,CAAC;AAExD,eAAO;AACF,UAAIs2I,KAAqBh8I,GAAM+7I,GAAa,WAAW,GAAG;AAC/D,cAAMznI,IAAW,IAAI,UAAS,EAAG,gBAAgBynI,EAAY,WAAW,GAAG,WAAW,EAAE;AACxF,eAAO,CAAC/hJ,GAAOsa,EAAS,cAAc0nI,EAAkB,SAAS,YAAa,CAAA,CAAC;AAAA,MACvF;AACQ,eAAO;AAAA,IAEf,GACUC,KAA8B,CAAAz/H,MAAU;AAC5C,MAAAA,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,cAAMwlK,IAAe,CAAAtrI,MAAM5W,GAAO4W,EAAG,cAAc,SAAS,CAAC;AAC7D,YAAIl6B,EAAE,cAAc,gBAAgB;AAClC,gBAAMylK,IAAuBh/I,GAASqf,EAAO,IAAI,OAAO,SAAS,GAAG0/H,CAAY;AAChF,UAAAp/I,EAAOq/I,GAAsB,CAAAjxE,MAAW;AACtC,YAAI7xD,GAAO6xD,EAAQ,UAAU,KAC3BA,EAAQ,WAAW;AAErB,kBAAMupD,IAAUj4G,EAAO,IAAI,OAAO,SAAS;AAC3C,YAAAi4G,EAAQ,YAAY14G,GAAiB,EAAC,GAAG,GACzCmvD,EAAQ,QAAQupD,CAAO;AAAA,UACnC,CAAW;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,GACU2nB,KAAU,CAAC5/H,GAAQ6/H,MAA4B;AACnD,MAAIrmG,GAAqBx5B,CAAM,KAC7BA,EAAO,GAAG,mDAAmD,CAAA9lC,MAAK;AAChE,QAAAA,EAAE,eAAc,GAChBA,EAAE,gBAAe;AAAA,MAC3B,CAAS,GAEEu/D,GAAsBz5B,CAAM,KAC/BA,EAAO,GAAG,QAAQ,CAAA9lC,MAAK;AACrB,cAAM68J,IAAe78J,EAAE;AACvB,QAAI68J,KAAgBsI,GAAStI,CAAY,KACvC78J,EAAE,eAAc;AAAA,MAE5B,CAAS,GAEH8lC,EAAO,GAAG,QAAQ,CAAA9lC,MAAK;AACrB,YAAIA,EAAE;AACJ;AAEF,cAAMkc,IAAM6oJ,GAAuBj/H,GAAQ9lC,CAAC;AAC5C,YAAIyjB,GAAWvH,CAAG;AAChB;AAEF,cAAMmpJ,IAAcnD,GAAqBliK,EAAE,YAAY,GACjD01E,IAAW0sF,GAAeiD,GAAaxH,GAAkB,CAAA;AAC/D,aAAK,CAACyE,GAAc+C,CAAW,KAAKL,GAAmBK,CAAW,MAAMnC,GAAep9H,GAAQ9lC,GAAGkc,CAAG;AACnG;AAEF,cAAM0pJ,IAAkBP,EAAYxH,GAAgB,CAAE,GAChDngI,IAAUkoI,KAAmBP,EAAY,WAAW,KAAKA,EAAY,YAAY,GACjFQ,IAAoBT,GAAwBt/H,EAAO,KAAKA,EAAO,QAAQ5pB,EAAI,gBAAgBmpJ,CAAW,GACtGS,IAAiBH,EAAwB;AAC/C,QAAIG,KAAkB,CAACD,KAGnBnoI,MACF19B,EAAE,eAAc,GAChBijF,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,UAAAA,EAAO,YAAY,SAAS,MAAM;AAChC,aAAI8/H,KAAmBE,KAAkBD,MACvC//H,EAAO,YAAY,QAAQ,GAE7Bo/H,GAAgBp/H,GAAQ5pB,CAAG;AAC3B,kBAAM6pJ,IAAiBhG,GAASriI,CAAO;AACvC,YAAI2nI,EAAY,WAAW,IACzBvD,GAAUh8H,GAAQigI,GAAgBrwF,GAAU,EAAI,IAEhDssF,GAAUl8H,GAAQigI,GAAgB,EAAI;AAAA,UAEtD,CAAa;AAAA,QACb,CAAW;AAAA,MAEX,CAAO,GACDjgI,EAAO,GAAG,aAAa,CAAAvkC,MAAM;AAC3B,QAAAokK,EAAwB,IAAI,EAAI;AAAA,MACxC,CAAO,GACD7/H,EAAO,GAAG,oBAAoB,CAAA9lC,MAAK;AACjC,QAAIu/D,GAAsBz5B,CAAM,KAAK,CAAC6/H,EAAwB,IAAG,MAC/D3lK,EAAE,eAAc,GAChBklK,GAAgBp/H,GAAQi/H,GAAuBj/H,GAAQ9lC,CAAC,CAAC,IAEvDA,EAAE,SAAS,aACb2lK,EAAwB,IAAI,EAAK;AAAA,MAE3C,CAAO,GACDJ,GAA4Bz/H,CAAM;AAAA,IACxC,GAEUkgI,KAAU,CAAAlgI,MAAU;AACxB,YAAMmgI,IAAe,CAAAphK,MAAK,CAAA7E,MAAK;AAC7B,QAAA6E,EAAEihC,GAAQ9lC,CAAC;AAAA,MACnB,GACYsgK,IAAa9gG,GAAmB15B,CAAM;AAC5C,MAAIniB,EAAW28I,CAAU,KACvBx6H,EAAO,GAAG,mBAAmBmgI,EAAa3F,CAAU,CAAC;AAEvD,YAAMzqC,IAAcp2D,GAAoB35B,CAAM;AAC9C,MAAIniB,EAAWkyG,CAAW,KACxB/vF,EAAO,GAAG,oBAAoBmgI,EAAapwC,CAAW,CAAC;AAAA,IAE/D,GAEUqwC,KAAsB,CAACpgI,GAAQqgI,MAAe;AAClD,MAAArgI,EAAO,GAAG,mBAAmB,CAAA9lC,MAAK;AAChC,QAAAA,EAAE,UAAUmmK,EAAWrgI,GAAQ9lC,EAAE,SAASA,EAAE,QAAQ;AAAA,MAC5D,CAAO;AAAA,IACP,GACUomK,KAAY,4DACZC,KAAW,CAAA5oJ,MAASuU,GAAM,KAAKvU,CAAK,EAAE,QAAQ2oJ,IAAWzrH,EAAe,EAAE,YAAW,GACrF2rH,KAAqB,CAACxgI,GAAQpI,GAASg4C,MAAa;AACxD,YAAM6wF,IAAqB5mG,GAAqB75B,CAAM;AACtD,UAAI4vC,KAAY6wF,MAAuB,SAAS,CAAC3mG,GAA8B95B,CAAM;AACnF,eAAOpI;AAET,YAAM8oI,IAAeD,IAAqBA,EAAmB,MAAM,MAAM,IAAI;AAC7E,UAAIC,KAAgBD,MAAuB,QAAQ;AACjD,cAAM7xI,IAAMoR,EAAO,KAAKpP,IAAOoP,EAAO,UAAU;AAChD,QAAApI,IAAUA,EAAQ,QAAQ,sCAAsC,CAAC/Y,GAAK2hB,GAAQ7oB,GAAOo4C,MAAU;AAC7F,gBAAM4wG,IAAc/xI,EAAI,WAAWA,EAAI,OAAOjX,CAAK,CAAC,GAC9CipJ,IAAe,CAAA;AACrB,mBAAShiK,IAAI,GAAGA,IAAI8hK,EAAa,QAAQ9hK,KAAK;AAC5C,kBAAMiiK,IAAaF,EAAYD,EAAa9hK,CAAC,CAAC;AAC9C,gBAAIkiK,IAAeD,GACfr8D,KAAe51E,EAAI,SAASgC,GAAM8vI,EAAa9hK,CAAC,GAAG,EAAI;AAC3D,YAAI,QAAQ,KAAK8hK,EAAa9hK,CAAC,CAAC,MAC9BkiK,IAAeP,GAASO,CAAY,GACpCt8D,KAAe+7D,GAAS/7D,EAAY,IAElCA,OAAiBs8D,MACnBF,EAAaF,EAAa9hK,CAAC,CAAC,IAAIiiK;AAAA,UAEnC;AACD,gBAAME,IAAcnyI,EAAI,eAAegyI,GAAc,MAAM;AAC3D,iBAAIG,IACKvgI,IAAS,aAAaugI,IAAc,MAAMhxG,IAE5CvvB,IAASuvB;AAAA,QAC1B,CAAS;AAAA,MACT;AACQ,QAAAn4B,IAAUA,EAAQ,QAAQ,sCAAsC,MAAM;AAExE,aAAAA,IAAUA,EAAQ,QAAQ,+CAA+C,CAAC/Y,GAAK2hB,GAAQ7oB,GAAOo4C,MACrFvvB,IAAS,aAAa7oB,IAAQ,MAAMo4C,CAC5C,GACMn4B;AAAA,IACb,GACUopI,KAAU,CAAAhhI,MAAU;AACxB,OAAI3U,GAAI,QAAQ,WAAU,KAAMA,GAAI,QAAQ,eAC1C+0I,GAAoBpgI,GAAQwgI,EAAkB;AAAA,IAEtD,GAEUS,KAAU,CAAAjhI,MAAU;AACxB,YAAM6/H,IAA0B79G,GAAK,EAAK,GACpC+7G,IAAc/7G,GAAKiY,GAAqBj6B,CAAM,IAAI,SAAS,MAAM,GACjE89H,IAAWlE,GAAS55H,CAAM;AAChC,MAAAghI,GAAQhhI,CAAM,GACdw+H,GAAWx+H,GAAQ+9H,CAAW,GAC9BmC,GAAQlgI,CAAM,GACdA,EAAO,GAAG,WAAW,MAAM;AACzB,QAAA+9F,GAAS/9F,CAAM,GACf4/H,GAAQ5/H,GAAQ6/H,CAAuB,GACvCvB,GAAyBt+H,GAAQ89H,GAAUC,CAAW;AAAA,MAC9D,CAAO;AAAA,IACP,GAEUmD,KAAuB,CAAAlhI,MAAU;AACrC,MAAAA,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,QAAI8lC,EAAO,IAAI,UAAU9lC,EAAE,QAAQ,SAAS,KAC1CA,EAAE,eAAc;AAAA,MAE1B,CAAO;AAAA,IACP,GACUinK,KAAgB,CAAAnhI,MAAU;AAC9B,MAAAA,EAAO,OAAO,cAAc,WAAW,CAAAyc,MAAQ;AAC7C,cAAM2kH,IAAqBjmG,GAAuBn7B,CAAM;AACxD,QAAA1f,EAAOm8B,GAAM,CAAAiyC,MAAW;AACtB,UAAI0yE,MAAuB,aACzB1yE,EAAQ,KAAK,QAAQ,MAAM,IAClB0yE,MAAuB,eAChC1yE,EAAQ,KAAK,QAAQ,IAAI;AAAA,QAErC,CAAS;AAAA,MACT,CAAO,GACD1uD,EAAO,WAAW,cAAc,WAAW,CAAAyc,MAAQ;AACjD,cAAM4kH,IAAwBjmG,GAA0Bp7B,CAAM;AAC9D,QAAA1f,EAAOm8B,GAAM,CAAAiyC,MAAW;AACtB,UAAI2yE,MAA0B,aAC5B3yE,EAAQ,KAAK,QAAQ,MAAM,IAClB2yE,MAA0B,eACnC3yE,EAAQ,KAAK,QAAQ,IAAI;AAAA,QAErC,CAAS;AAAA,MACT,CAAO;AAAA,IACP,GACU4yE,KAAU,CAAAthI,MAAU;AACxB,MAAAkhI,GAAqBlhI,CAAM,GAC3BmhI,GAAcnhI,CAAM;AAAA,IAC1B,GAEUqvF,KAAOxyF,IACP0kI,KAAShlI,IACTilI,KAA2B,CAAAtiI,MAAOlC,GAAyBkC,EAAI,GAAG,GAClEuiI,KAAwB,CAAAviI,MAAOnC,GAAwBmC,EAAI,GAAG,GAC9D3M,KAAS,CAAAqI,MAAY,CAAAsE,MAAOvb,GAAGoN,EAAa,QAAQ6J,CAAQ,GAAGsE,CAAG,GAClEwiI,KAAkB,CAAC9wI,GAAMgK,GAAU8E,MAAW/K,GAAU5D,EAAa,QAAQH,CAAI,GAAG,CAAAsO,MAAOuiI,GAAsBviI,CAAG,KAAKQ,EAAO,QAAQtc,GAAK8b,CAAG,CAAC,GAAG3M,GAAOqI,CAAQ,CAAC,EAAE,MAAM7J,EAAa,QAAQ6J,CAAQ,CAAC,EAAE,KAC5M+mI,KAAgB,CAAC/wI,GAAMgK,MAAajG,GAAU5D,EAAa,QAAQH,CAAI,GAAG4wI,IAA0BjvI,GAAOqI,CAAQ,CAAC,GACpHgnI,KAAyB,CAACjnI,GAAWvN,GAAO8iC,MAAY;AAC5D,YAAMhsB,IAAS,IAAIxJ,GAAcC,GAAWvN,CAAK,GAC3Cid,IAAO6lB,IAAUhsB,EAAO,KAAK,KAAKA,CAAM,IAAIA,EAAO,KAAK,KAAKA,CAAM;AACzE,UAAInsB,IAAS4iB;AACb,eAAS/Q,IAAUsmC,IAAUv1B,IAAY0P,EAAM,GAAEzgB,KAAW,CAACylG,GAAKzlG,CAAO,GAAGA,IAAUygB,EAAI;AACxF,QAAIpI,GAAmBrY,CAAO,MAC5B7R,IAAS6R;AAGb,aAAO7R;AAAA,IACb,GACU8pJ,KAAwB,CAACC,GAAUlnI,GAAU8E,MAAW;AAE5D,YAAMqiI,IADWv0G,GAAc,eAAes0G,CAAQ,EAC3B,WACrB10I,IAAQs0I,GAAgBK,GAAWnnI,GAAU8E,CAAM,GACnD/E,IAAYinI,GAAuBG,GAAW30I,GAAO,EAAK,GAC1D04C,IAAU87F,GAAuBG,GAAW30I,GAAO,EAAI,GACvDhX,IAAM,SAAS;AACrB,aAAAurJ,GAAchnI,GAAWvN,CAAK,EAAE,KAAK,MAAM;AACzC,QAAIm0I,GAAO5mI,CAAS,IAClBvkB,EAAI,SAASukB,GAAW,CAAC,IAEzBvkB,EAAI,eAAeukB,CAAS;AAAA,MAEtC,GAAS,CAAAqnI,MAAO5rJ,EAAI,eAAe4rJ,EAAI,GAAG,CAAC,GACrCL,GAAc77F,GAAS14C,CAAK,EAAE,KAAK,MAAM;AACvC,QAAIm0I,GAAOz7F,CAAO,IAChB1vD,EAAI,OAAO0vD,GAASA,EAAQ,KAAK,MAAM,IAEvC1vD,EAAI,YAAY0vD,CAAO;AAAA,MAEjC,GAAS,CAAAk8F,MAAO5rJ,EAAI,YAAY4rJ,EAAI,GAAG,CAAC,GAC3B5rJ;AAAA,IACb,GACU6rJ,KAAsB,CAAAjiI,MAAU;AACpC,YAAM5pB,IAAMyrJ,GAAsB7hI,EAAO,UAAU,UAAUA,EAAO,QAAO,GAAIA,EAAO,MAAM;AAC5F,MAAAA,EAAO,UAAU,OAAOs3D,GAAUlhF,CAAG,CAAC;AAAA,IAC5C,GACU8rJ,KAAU,CAAAliI,MAAU;AACxB,MAAAA,EAAO,GAAG,aAAa,CAAA9lC,MAAK;AAC1B,QAAIA,EAAE,UAAU,MACdA,EAAE,eAAc,GAChB+nK,GAAoBjiI,CAAM;AAAA,MAEpC,CAAO;AAAA,IACP;AAEI,QAAImiI;AACJ,KAAC,SAAUA,GAAmB;AAC5B,MAAAA,EAAkB,SAAY,UAC9BA,EAAkB,QAAW;AAAA,IAC9B,GAACA,OAAsBA,KAAoB,CAAE,EAAC;AAC/C,UAAMC,KAAqB,CAAC31G,GAAY1C,MAAY,KAAK,IAAI0C,EAAW,OAAO1C,CAAO,GAChFs4G,KAAsB,CAAC51G,GAAY1C,MAAY,KAAK,IAAI0C,EAAW,QAAQ1C,CAAO,GAClFu4G,KAAY,CAACt4G,GAASyC,MAAezC,KAAWyC,EAAW,OAAOzC,KAAWyC,EAAW,QACxF81G,KAAY,CAAC/3G,GAAIC,MAAOD,EAAG,MAAMC,EAAG,UAAUD,EAAG,SAASC,EAAG,KAC7D+3G,KAAgB,CAACh4G,GAAIC,MAAO;AAChC,YAAMg4G,IAAUl4G,GAASC,GAAIC,CAAE,IAAI,KAAK,IAAID,EAAG,QAAQC,EAAG,MAAM;AAChE,aAAO83G,GAAU/3G,GAAIC,CAAE,KAAKg4G,IAAU;AAAA,IAC5C,GACUC,KAAoB,CAACx4G,GAAOv6C,MAAM;AACtC,YAAMgzJ,IAAoBhiJ,GAASupC,GAAO,CAAAf,MAAQm5G,GAAU3yJ,GAAGw5C,CAAI,CAAC;AACpE,aAAOc,GAA4B04G,CAAiB,EAAE,KAAK,MAAM;AAAA,QAC/D,CAAE;AAAA,QACFz4G;AAAA,MACD,GAAE,CAAA04G,MAAgB;AACjB,cAAM;AAAA,UACJ,MAAMC;AAAA,UACN,MAAMC;AAAA,QAChB,IAAYtiJ,GAAY0pC,GAAO,CAAAf,MAAQq5G,GAAcr5G,GAAMy5G,CAAY,CAAC;AAChE,eAAO;AAAA,UACLC;AAAA,UACAC;AAAA,QACV;AAAA,MACA,CAAO;AAAA,IACP,GACUC,KAAa,CAAC55G,GAAMY,OACjB;AAAA,MACL,MAAMZ,EAAK;AAAA,MACX,UAAUi5G,GAAmBj5G,GAAMY,CAAO,IAAIs4G,GAAoBl5G,GAAMY,CAAO,IAAIo4G,GAAkB,SAASA,GAAkB;AAAA,IACxI,IAEUa,KAAqB,CAAC75G,GAAMpsD,GAAGkmK,MAAOlmK,IAAIosD,EAAK,QAAQpsD,IAAIosD,EAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAIA,EAAK,OAAOpsD,CAAC,GAAG,KAAK,IAAIosD,EAAK,QAAQpsD,CAAC,CAAC,GACtImmK,KAAqC,CAAC5rI,GAAUyyB,GAASC,MAAY;AACzE,YAAMm5G,IAAqB,CAAAh6G,MACrBlnB,GAAmBknB,EAAK,IAAI,IACvB9pC,EAAS,KAAK8pC,CAAI,IAChBhuB,GAAYguB,EAAK,IAAI,IACvB+5G,GAAmCjhJ,GAAKknC,EAAK,KAAK,UAAU,GAAGY,GAASC,CAAO,IAE/E3qC,EAAS,QAGd+jJ,IAAqB,CAACl5G,GAAOm5G,MAAa;AAC9C,YAAIn5G,EAAM,UAAU,GAAG;AACrB,gBAAMM,IAAK24G,EAAmBj5G,EAAM,CAAC,CAAC,EAAE,MAAMA,EAAM,CAAC,CAAC,GAChDO,IAAK04G,EAAmBj5G,EAAM,CAAC,CAAC,EAAE,MAAMA,EAAM,CAAC,CAAC;AAEtD,cADsB,KAAK,IAAIm5G,EAAS74G,GAAIT,GAASC,CAAO,IAAIq5G,EAAS54G,GAAIV,GAASC,CAAO,CAAC,IAC1E,GAAG;AACrB,gBAAIztB,GAASiuB,EAAG,IAAI;AAClB,qBAAOnrC,EAAS,KAAKmrC,CAAE;AAClB,gBAAIjuB,GAASkuB,EAAG,IAAI;AACzB,qBAAOprC,EAAS,KAAKorC,CAAE;AAAA,UAE1B;AAAA,QACF;AACD,eAAOprC,EAAS;MACxB,GACYikJ,IAAoC,CAACp5G,GAAOm5G,MAAa;AAC7D,cAAME,IAAc5hJ,GAAKuoC,GAAO,CAACM,GAAIC,MAAO44G,EAAS74G,GAAIT,GAASC,CAAO,IAAIq5G,EAAS54G,GAAIV,GAASC,CAAO,CAAC;AAC3G,eAAOo5G,EAAmBG,GAAaF,CAAQ,EAAE,QAAQ,MAAMnhJ,GAAQqhJ,GAAaJ,CAAkB,CAAC;AAAA,MAC/G,GACY,CAACK,GAAiBC,CAAa,IAAIf,GAAkB90G,GAAet2B,CAAQ,GAAG0yB,CAAO,GACtF;AAAA,QACJ,MAAM05G;AAAA,QACN,MAAMC;AAAA,MACd,IAAUnjJ,GAAYijJ,GAAe,CAAAt6G,MAAQA,EAAK,MAAMa,CAAO;AACzD,aAAOs5G,EAAkCE,GAAiBR,EAAkB,EAAE,QAAQ,MAAMM,EAAkCK,GAAOv5G,EAAwB,CAAC,EAAE,QAAQ,MAAMk5G,EAAkCI,GAAOt5G,EAAwB,CAAC;AAAA,IACtP,GACUw5G,KAAa,CAACl8H,GAASta,GAAO28B,GAASC,MAAY;AACvD,YAAMm5E,IAAS,CAAC/1G,GAAOy2I,MAAc;AACnC,cAAMC,IAAuB,CAAAlzI,MAAQuK,GAAYvK,CAAI,KAAKA,EAAK,UAAU,SAAS,oBAAoB,GAChGmzI,IAAyBpjJ,GAASyM,EAAM,IAAI,YAAYtO,GAAIglJ,CAAoB,CAAC;AACvF,eAAOD,EAAU,KAAK,MAAMX,GAAmCa,GAAwBh6G,GAASC,CAAO,GAAG,CAAA65G,MAAa;AACrH,gBAAMG,IAAoBrjJ,GAASojJ,GAAwB,CAAAnzI,MAAQA,MAASizI,EAAU,GAAG;AACzF,iBAAOX,GAAmCc,GAAmBj6G,GAASC,CAAO;AAAA,QACvF,CAAS,EAAE,QAAQ,OACMrmC,GAAGyJ,GAAOsa,CAAO,IAAIroB,EAAS,KAAM,IAAGgT,GAAcjF,CAAK,GAC3D,KAAK,CAAA62I,MAAY9gC,EAAO8gC,GAAU5kJ,EAAS,KAAK+N,CAAK,CAAC,CAAC,CACtE;AAAA,MACT;AACM,aAAO+1G,EAAO/1G,GAAO/N,EAAS,KAAM,CAAA;AAAA,IAC1C,GACU6kJ,KAAgC,CAAChtJ,GAAM6yC,GAASC,MAAY;AAChE,YAAMtiB,IAAU3W,EAAa,QAAQ7Z,CAAI,GACnCitJ,IAAWnyI,GAAgB0V,CAAO,GAElCzZ,IADiB8C,EAAa,UAAUozI,GAAUp6G,GAASC,CAAO,EAAE,OAAO,CAAA9qB,MAAOtN,GAAS8V,GAASxI,CAAG,CAAC,EAC/E,MAAMwI,CAAO;AAC5C,aAAOk8H,GAAWl8H,GAASzZ,GAAS87B,GAASC,CAAO;AAAA,IAC1D,GACUo6G,KAA4B,CAACltJ,GAAM6yC,GAASC,MAAYk6G,GAA8BhtJ,GAAM6yC,GAASC,CAAO,EAAE,OAAO,CAAAb,MAAQwU,GAAkBxU,EAAK,IAAI,CAAC,EAAE,IAAI,CAAAA,MAAQ45G,GAAW55G,GAAMY,CAAO,CAAC,GAEhMs6G,KAAsB,CAAAnlI,MAAO;AACjC,UAAIt4B,GAAIw2C;AACR,YAAMqP,IAAavtB,EAAI,yBACjBzL,IAAMyL,EAAI,eACVolI,IAAU7wI,EAAI,iBACd4F,IAAM5F,EAAI;AAChB,aAAO;AAAA,QACL,KAAKg5B,EAAW,QAAQ7lD,IAAKyyB,KAAQ,OAAyB,SAASA,EAAI,aAAa,QAAQzyB,MAAO,SAASA,IAAK,KAAK09J,EAAQ;AAAA,QAClI,MAAM73G,EAAW,SAASrP,IAAK/jB,KAAQ,OAAyB,SAASA,EAAI,aAAa,QAAQ+jB,MAAO,SAASA,IAAK,KAAKknH,EAAQ;AAAA,MAC5I;AAAA,IACA,GACUC,KAAkB,CAAAvkI,MAAUA,EAAO,SAASqkI,GAAoBrkI,EAAO,QAAO,CAAE,IAAI;AAAA,MACxF,MAAM;AAAA,MACN,KAAK;AAAA,IACX,GACUwkI,KAAoB,CAAAxkI,MAAU;AAClC,YAAM5G,IAAO4G,EAAO;AACpB,aAAOA,EAAO,SAAS;AAAA,QACrB,MAAM5G,EAAK;AAAA,QACX,KAAKA,EAAK;AAAA,MAClB,IAAU;AAAA,QACF,MAAM;AAAA,QACN,KAAK;AAAA,MACb;AAAA,IACA,GACUqrI,KAAgB,CAAAzkI,MAAU;AAC9B,YAAM5G,IAAO4G,EAAO,QAAS,GAAEhP,IAASgP,EAAO,OAAQ,EAAC,iBAClD0kI,IAAe;AAAA,QACnB,MAAMtrI,EAAK;AAAA,QACX,KAAKA,EAAK;AAAA,MAClB,GACYurI,IAAe;AAAA,QACnB,MAAMvrI,EAAK,cAAcpI,EAAO;AAAA,QAChC,KAAKoI,EAAK,aAAapI,EAAO;AAAA,MACtC;AACM,aAAOgP,EAAO,SAAS0kI,IAAeC;AAAA,IAC5C,GACUC,KAAmB,CAAC5kI,GAAQ7L,MAAU;AAC1C,UAAIA,EAAM,OAAO,kBAAkB6L,EAAO,OAAM,GAAI;AAClD,cAAM6kI,IAAiBR,GAAoBrkI,EAAO,wBAAyB,CAAA,GACrE8kI,IAAiBL,GAAczkI,CAAM;AAC3C,eAAO;AAAA,UACL,MAAM7L,EAAM,QAAQ0wI,EAAe,OAAOC,EAAe;AAAA,UACzD,KAAK3wI,EAAM,QAAQ0wI,EAAe,MAAMC,EAAe;AAAA,QACjE;AAAA,MACO;AACD,aAAO;AAAA,QACL,MAAM3wI,EAAM;AAAA,QACZ,KAAKA,EAAM;AAAA,MACnB;AAAA,IACA,GACU4wI,KAAoB,CAACC,GAAcF,GAAgBG,OAAmB;AAAA,MAC1E,OAAOA,EAAc,OAAOD,EAAa,OAAOF,EAAe;AAAA,MAC/D,OAAOG,EAAc,MAAMD,EAAa,MAAMF,EAAe;AAAA,IACnE,IACUI,KAAO,CAACllI,GAAQ7L,MAAU4wI,GAAkBR,GAAgBvkI,CAAM,GAAGwkI,GAAkBxkI,CAAM,GAAG4kI,GAAiB5kI,GAAQ7L,CAAK,CAAC,GAE/HgxI,KAAiB,CAAAj8I,OAAW;AAAA,MAChC,QAAAA;AAAA,MACA,YAAYA;AAAA,IAClB,IACUk8I,KAA6B,CAACtsJ,GAAMq/B,GAAYjvB,GAAQ6tI,OAAkB;AAAA,MAC9E,GAAG5+G;AAAA,MACH,cAAA4+G;AAAA,MACA,MAAAj+I;AAAA,MACA,GAAGqsJ,GAAej8I,CAAM;AAAA,IAC9B,IACUm8I,KAAe,CAACvsJ,GAAMoQ,GAAQ6tI,MAAiB;AACnD,YAAMr2I,IAAO3B,GAAI,4CAA4C;AAkD7D,aAjDc;AAAA,QACZ,SAAS;AAAA,QACT,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,aAAa;AAAA,QACb,WAAW;AAAA,QACX,MAAAjG;AAAA,QACA,cAAc4H;AAAA,QACd,WAAWA;AAAA,QACX,gBAAgBzC;AAAA,QAChB,0BAA0BA;AAAA,QAC1B,iBAAiBA;AAAA,QACjB,WAAW,OAAO,MAAM;AAAA,QACxB,gBAAgB,OAAO,MAAM;AAAA,QAC7B,iBAAiB,OAAO,MAAM;AAAA,QAC9B,MAAM,OAAO,MAAM;AAAA,QACnB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,QACP,eAAe;AAAA,QACf,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,GAAG;AAAA,QACH,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAayC;AAAA,QACb,gBAAgBA;AAAA,QAChB,kBAAkBA;AAAA,QAClB,cAAAq2I;AAAA,QACA,GAAGoO,GAAej8I,CAAM;AAAA,MAChC;AAAA,IAEA,GACUo8I,KAAmC,CAACvO,GAAc1M,MAAc;AACpE,YAAMxoI,IAAO41I,GAAkBV,CAAY;AAC3C,aAAI1M,MAAc,eAChByL,GAAkBj0I,CAAI,GACtB00I,GAAiB10I,CAAI,KACZwoI,MAAc,UACvB0L,GAAal0I,CAAI,GACjB20I,GAAgB30I,CAAI,MAEpBm0I,GAAgBn0I,CAAI,GACpB40I,GAAiB50I,CAAI,IAEhBA;AAAA,IACb,GACU0jJ,KAAgB,CAACzsJ,GAAMoQ,GAAQ6tI,GAAc5+G,MAAe;AAChE,YAAMqtH,IAA0BF,GAAiCvO,GAAcj+I,CAAI;AACnF,aAAO4E,GAAYy6B,CAAU,IAAIktH,GAAavsJ,GAAMoQ,GAAQs8I,CAAuB,IAAIJ,GAA2BtsJ,GAAMq/B,GAAYjvB,GAAQs8I,CAAuB;AAAA,IACzK,GAEUC,KAA0B,IAC1BC,KAAsB,KACtBC,KAAwC,GACxCC,KAAyC,IACzCC,KAA2B7oI,IAC3B48D,KAAoBx9F,GAAGypK,IAA0B9oI,EAAuB,GACxE+oI,KAAc,CAACl3I,GAAK8Y,GAASxI,MAAQ2mI,GAAyB3mI,CAAG,KAAKA,MAAQwI,KAAW9Y,EAAI,WAAWsQ,EAAI,aAAa,GACzH6mI,KAAoB,CAAC/lI,GAAQqO,GAAe23H,MAC5CroJ,GAAW0wB,CAAa,KAEjBA,MAAkB23H,KAAehmI,EAAO,IAAI,UAAUqO,GAAe23H,CAAW,IADlF,KAIAhmI,EAAO,IAAI,WAAWqO,CAAa,GAGxC43H,KAAc,CAACjmI,GAAQd,GAAKhF,GAAOC,MAAW;AAClD,YAAMvL,IAAMoR,EAAO,KACbkmI,IAAYhnI,EAAI,UAAU,EAAI;AACpC,MAAAtQ,EAAI,UAAUs3I,GAAW;AAAA,QACvB,OAAAhsI;AAAA,QACA,QAAAC;AAAA,MACR,CAAO,GACDvL,EAAI,UAAUs3I,GAAW,qBAAqB,IAAI;AAClD,YAAM/zF,IAAWvjD,EAAI,OAAO,OAAO;AAAA,QACjC,OAAS;AAAA,QACT,kBAAkB;AAAA,QAClB,cAAgB;AAAA,QAChB,iBAAmB;AAAA,MAC3B,CAAO;AACD,aAAAA,EAAI,UAAUujD,GAAU;AAAA,QACtB,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAAj4C;AAAA,QACA,QAAAC;AAAA,MACR,CAAO,GACDvL,EAAI,UAAUs3I,GAAW;AAAA,QACvB,QAAQ;AAAA,QACR,WAAW;AAAA,MACnB,CAAO,GACD/zF,EAAS,YAAY+zF,CAAS,GACvB/zF;AAAA,IACb,GACUg0F,KAAoB,CAACh0F,GAAUgiD,MAAY;AAC/C,MAAIhiD,EAAS,eAAegiD,KAC1BA,EAAQ,YAAYhiD,CAAQ;AAAA,IAEpC,GACUi0F,KAAe,CAACx9G,GAAWy9G,MAAW,CAAAhtI,MAAO,MAAM;AACvD,YAAMzP,IAAUg/B,MAAc,SAASvvB,EAAI,UAAUA,EAAI;AACzD,MAAAA,EAAI,OAAO;AAAA,QACT,CAACuvB,CAAS,GAAGh/B,IAAUy8I;AAAA,QACvB,UAAU;AAAA,MAClB,CAAO;AAAA,IACP,GACU9sI,KAAa6sI,GAAa,QAAQ,CAACX,EAAuB,GAC1Da,KAAcF,GAAa,QAAQX,EAAuB,GAC1Dc,KAAWH,GAAa,OAAO,CAACX,EAAuB,GACvDe,KAAaJ,GAAa,OAAOX,EAAuB,GACxDgB,KAAY,CAACt0F,GAAUzQ,GAAUxnC,GAAOC,GAAQusI,GAAMC,GAAMC,GAAQC,GAAQC,GAAsBztI,GAAK2P,GAAO+9H,MAA4C;AAC9J,UAAIC,IAAY,GAAGt9G,IAAY;AAC/B,MAAAyoB,EAAS,MAAM,OAAOzQ,EAAS,QAAQ,MACvCyQ,EAAS,MAAM,MAAMzQ,EAAS,QAAQ,MAClCA,EAAS,QAAQxnC,IAAQwsI,MAC3BM,IAAYtlG,EAAS,QAAQxnC,IAAQwsI,IAEnChlG,EAAS,QAAQvnC,IAASwsI,MAC5Bj9G,IAAYgY,EAAS,QAAQvnC,IAASwsI,IAExCx0F,EAAS,MAAM,QAAQj4C,IAAQ8sI,IAAY,MAC3C70F,EAAS,MAAM,SAASh4C,IAASuvB,IAAY;AAC7C,YAAM2qE,IAAeyyC,EAAqB,cACpC1yC,IAAc0yC,EAAqB,aACnCG,IAAcL,IAASE,EAAqB,sBAAqB,EAAG,KACpEI,KAAcL,IAASC,EAAqB,sBAAqB,EAAG;AAC1E,MAAA99H,EAAM,GAAG,CAAAA,OAAS;AAChB,QAAAA,GAAM,WAAW,SACbA,GAAM,YAAY+9H,MAChBH,IAASjB,MAAyCtxC,IACpDrrF,GAAM,WAAW,IAAIw9H,GAAWntI,CAAG,CAAC,IAC3ButI,IAASjB,MAAyC,IAC3D38H,GAAM,WAAW,IAAIu9H,GAASltI,CAAG,CAAC,IACzBwtI,IAASlB,MAAyCvxC,IAC3DprF,GAAM,WAAW,IAAIs9H,GAAYjtI,CAAG,CAAC,IAC5BwtI,IAASlB,MAAyC,IAC3D38H,GAAM,WAAW,IAAIzP,GAAWF,CAAG,CAAC,IAC3B4tI,IAAcrB,MAA0C,OAAO,cACxE58H,GAAM,WAAW,IAAIw9H,GAAW,MAAM,CAAC,IAC9BS,IAAcrB,MAA0C,IACjE58H,GAAM,WAAW,IAAIu9H,GAAS,MAAM,CAAC,IAC5BW,KAActB,MAA0C,OAAO,aACxE58H,GAAM,WAAW,IAAIs9H,GAAY,MAAM,CAAC,IAC/BY,KAActB,MAA0C,KACjE58H,GAAM,WAAW,IAAIzP,GAAW,MAAM,CAAC;AAAA,MAGnD,CAAO;AAAA,IACP,GACU4tI,KAAgB,CAAAjoI,MAAO;AAC3B,MAAIA,KAAOA,EAAI,cACbA,EAAI,WAAW,YAAYA,CAAG;AAAA,IAEtC,GACUkoI,KAA2B,CAACx4I,GAAKsQ,MAAQ;AAC7C,YAAM+G,IAAcrX,EAAI,UAAUsQ,EAAI,YAAYtQ,EAAI,OAAO;AAC7D,MAAAu4I,GAAcjoI,CAAG,GACb+G,KAAeA,MAAgBrX,EAAI,QAAS,KAAIA,EAAI,QAAQqX,CAAW,KACzEzG,GAAkBzO,EAAa,QAAQkV,CAAW,CAAC;AAAA,IAE3D,GACUohI,KAA2B,OAAK,EAAE,WAAW,GAC7CC,KAAc,CAACt+H,GAAO04B,OAAc;AAAA,MACxC,OAAOA,EAAS,QAAQ14B,EAAM;AAAA,MAC9B,OAAO04B,EAAS,QAAQ;AAAA,IAC9B,IACU95C,KAAQ,CAACohB,GAAOhJ,MAAW,CAAA9lC,MAAK;AACpC,UAAImtK,GAAyBntK,CAAC,GAAG;AAC/B,cAAMqtK,IAAQtmJ,GAAO+e,EAAO,IAAI,WAAW9lC,EAAE,MAAM,GAAG0/F,EAAiB,EAAE,MAAM,IAAI;AACnF,YAAIh8E,GAAc2pJ,CAAK,KAAKzB,GAAY9lI,EAAO,KAAKA,EAAO,WAAWunI,CAAK,GAAG;AAC5E,gBAAMC,IAASxnI,EAAO,IAAI,OAAOunI,CAAK,GAChCpzC,IAAUn0F,EAAO,WACjBhP,IAASgP,EAAO,OAAM,EAAG;AAC/B,UAAAgJ,EAAM,IAAI;AAAA,YACR,SAASu+H;AAAA,YACT,cAAcpQ,GAAoB;AAAA,YAClC,UAAU;AAAA,YACV,SAASj9J,EAAE;AAAA,YACX,SAASA,EAAE;AAAA,YACX,OAAO8lC,EAAO,SAASm0F,EAAQ,cAAcnjG,EAAO,eAAe;AAAA,YACnE,OAAOgP,EAAO,SAASm0F,EAAQ,eAAenjG,EAAO,gBAAgB;AAAA,YACrE,MAAM92B,EAAE,QAAQstK,EAAO;AAAA,YACvB,MAAMttK,EAAE,QAAQstK,EAAO;AAAA,YACvB,OAAOD,EAAM;AAAA,YACb,QAAQA,EAAM;AAAA,YACd,OAAOtB,GAAYjmI,GAAQunI,GAAOA,EAAM,aAAaA,EAAM,YAAY;AAAA,YACvE,YAAY3iH,GAAW8gH,EAAmB;AAAA,UACtD,CAAW;AAAA,QACF;AAAA,MACF;AAAA,IACP,GACU+B,KAAe,CAACznI,GAAQ+pB,GAASC,MAAY;AACjD,MAAAhqB,EAAO,oBAAoB,iBAC3BokI,GAA0BpkI,EAAO,QAAS,GAAE+pB,GAASC,CAAO,EAAE,KAAK,MAAMhqB,EAAO,UAAU,aAAa+pB,GAASC,CAAO,GAAG,CAAA09G,MAAa;AACrI,cAAMlmI,IAAQxB,EAAO,oBAAoB,UAAU,GAAG0nI,EAAU,MAAMA,EAAU,aAAavF,GAAkB,QAAQ,EAAK;AAC5H,QAAI3gI,IACFxB,EAAO,UAAU,OAAOwB,CAAK,IAE7BxB,EAAO,UAAU,aAAa+pB,GAASC,CAAO;AAAA,MAExD,CAAO;AAAA,IACP,GACU29G,KAAoB,CAAC3nI,GAAQlnB,GAAMoQ,GAAQ6tI,GAAc5+G,MAAe;AAC5E,MAAIr/B,MAAS,eACX++I,GAAYd,GAAc/2H,EAAO,IAAI,aAAa9W,CAAM,CAAC;AAE3D,YAAMiL,IAAQoxI,GAAczsJ,GAAMoQ,GAAQ6tI,GAAc5+G,CAAU;AAElE,aADanY,EAAO,SAASlnB,GAAMqb,CAAK;AAAA,IAE9C,GACUyzI,KAAO,CAAC5+H,GAAOhJ,MAAW;AAC9B,YAAM6nI,IAAwB5iH,GAAQ,CAAC8E,GAASC,MAAYy9G,GAAaznI,GAAQ+pB,GAASC,CAAO,GAAG,CAAC;AACrG,MAAAhqB,EAAO,GAAG,UAAU6nI,EAAsB,MAAM;AAChD,YAAMC,IAAS9+H;AACf,aAAO,CAAA9uC,MAAK8uC,EAAM,GAAG,CAAAA,MAAS;AAC5B,cAAM++H,IAAW,KAAK,IAAI,KAAK,IAAI7tK,EAAE,UAAU8uC,EAAM,OAAO,GAAG,KAAK,IAAI9uC,EAAE,UAAU8uC,EAAM,OAAO,CAAC;AAClG,YAAI,CAACA,EAAM,YAAY++H,IAAW,IAAI;AACpC,gBAAMrtJ,IAAOitJ,GAAkB3nI,GAAQ,aAAagJ,EAAM,SAASA,EAAM,cAAc9uC,CAAC;AAIxF,cAHI0jB,GAAclD,EAAK,YAAY,MACjCsuB,EAAM,eAAetuB,EAAK,eAExBA,EAAK;AACP;AAEF,UAAAsuB,EAAM,WAAW,IACjBhJ,EAAO,MAAK;AAAA,QACb;AACD,YAAIgJ,EAAM,UAAU;AAClB,gBAAM+9H,IAA0C7sK,EAAE,kBAAkB8lC,EAAO,OAAQ,EAAC,iBAC9EgoI,IAAYV,GAAYt+H,GAAOk8H,GAAKllI,GAAQ9lC,CAAC,CAAC;AACpD,UAAAisK,GAAkBn9H,EAAM,OAAOhJ,EAAO,QAAS,CAAA,GAC/CymI,GAAUz9H,EAAM,OAAOg/H,GAAWh/H,EAAM,OAAOA,EAAM,QAAQA,EAAM,MAAMA,EAAM,MAAM9uC,EAAE,SAASA,EAAE,SAAS8lC,EAAO,2BAA2BA,EAAO,OAAM,GAAI8nI,GAAQf,CAAuC,GAC7Mc,EAAsB,SAAS3tK,EAAE,SAASA,EAAE,OAAO;AAAA,QACpD;AAAA,MACT,CAAO;AAAA,IACP,GACU+tK,KAAe,CAAAh4G,MAAa;AAChC,YAAMgW,IAAMhW,EAAU;AACtB,UAAIryC,GAAcqoD,CAAG,GAAG;AAEtB,cAAMnb,IADMmb,EAAI,WAAW,CAAC,EACD;AAC3B,eAAO1pC,GAASuuB,CAAc,IAAIA,EAAe,aAAaA;AAAA,MACtE;AACQ,eAAO;AAAA,IAEf,GACUo9G,KAAO,CAACl/H,GAAOhJ,MAAW,CAAA9lC,MAAK;AACnC,MAAA8uC,EAAM,GAAG,CAAAA,MAAS;AAChB,YAAIpiC;AAEJ,YADAoiC,EAAM,WAAW,SACbA,EAAM,UAAU;AAClB,cAAI+8H,GAAkB/lI,GAAQioI,GAAajoI,EAAO,SAAS,GAAGgJ,EAAM,OAAO,GAAG;AAC5E,kBAAMm/H,KAAcvhK,IAAKo5B,EAAO,SAAS,iBAAiB9lC,EAAE,SAASA,EAAE,OAAO,OAAO,QAAQ0M,MAAO,SAASA,IAAKo5B,EAAO;AAEzH,YADa2nI,GAAkB3nI,GAAQ,QAAQmoI,GAAYn/H,EAAM,cAAc9uC,CAAC,EACtE,wBACR8lC,EAAO,YAAY,SAAS,MAAM;AAChC,cAAAonI,GAAyBpnI,EAAO,KAAKgJ,EAAM,OAAO,GAClD4uH,GAAY5uH,EAAM,YAAY,EAAE,KAAK,CAAApR,MAAWoI,EAAO,cAAcpI,CAAO,CAAC,GAC7EoI,EAAO,oBAAoB;YAC3C,CAAe;AAAA,UAEJ;AACD,UAAA2nI,GAAkB3nI,GAAQ,WAAWA,EAAO,QAAO,GAAIgJ,EAAM,cAAc9uC,CAAC;AAAA,QAC7E;AAAA,MACT,CAAO,GACDkuK,GAAgBp/H,CAAK;AAAA,IAC3B,GACUq/H,KAAe,CAACr/H,GAAOhJ,GAAQ9lC,MAAM;AACzC,MAAA8uC,EAAM,GAAG,CAAAA,MAAS;AAChB,QAAAA,EAAM,WAAW,SACbA,EAAM,YACR9uC,EAAE,KAAK,MAAMytK,GAAkB3nI,GAAQ,WAAWgJ,EAAM,SAASA,EAAM,YAAY,GAAG,CAAAmP,MAAcwvH,GAAkB3nI,GAAQ,WAAWgJ,EAAM,SAASA,EAAM,cAAcmP,CAAU,CAAC;AAAA,MAEjM,CAAO,GACDiwH,GAAgBp/H,CAAK;AAAA,IAC3B,GACUxW,KAAO,CAACwW,GAAOhJ,MAAW,CAAA9lC,MAAKmuK,GAAar/H,GAAOhJ,GAAQ3gB,EAAS,KAAKnlB,CAAC,CAAC,GAC3EkuK,KAAkB,CAAAp/H,MAAS;AAC/B,MAAAA,EAAM,GAAG,CAAAA,MAAS;AAChB,QAAAA,EAAM,WAAW,SACjBm+H,GAAcn+H,EAAM,KAAK;AAAA,MACjC,CAAO,GACDA,EAAM,MAAK;AAAA,IACjB,GACUs/H,KAAqB,CAAAtoI,MAAU;AACnC,YAAMgJ,IAAQgc,MACRujH,IAAU7tH,GAAS,KACnB+1B,IAAe,UACf+3F,IAAmB5gJ,GAAMohB,GAAOhJ,CAAM,GACtCyoI,IAAcb,GAAK5+H,GAAOhJ,CAAM,GAChC0oI,IAAcR,GAAKl/H,GAAOhJ,CAAM,GAChC2oI,IAAiBn2I,GAAKwW,GAAOhJ,CAAM;AACzC,MAAAA,EAAO,GAAG,aAAawoI,CAAgB,GACvCxoI,EAAO,GAAG,aAAayoI,CAAW,GAClCzoI,EAAO,GAAG,WAAW0oI,CAAW,GAChCH,EAAQ,KAAK93F,GAAc,aAAag4F,CAAW,GACnDF,EAAQ,KAAK93F,GAAc,WAAWk4F,CAAc,GACpD3oI,EAAO,GAAG,UAAU,MAAM;AACxB,QAAAuoI,EAAQ,OAAO93F,GAAc,aAAag4F,CAAW,GACrDF,EAAQ,OAAO93F,GAAc,WAAWk4F,CAAc;AAAA,MAC9D,CAAO,GACD3oI,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,QAAIA,EAAE,YAAY81E,GAAG,OACnBq4F,GAAar/H,GAAOhJ,GAAQ3gB,EAAS,KAAM,CAAA;AAAA,MAErD,CAAO;AAAA,IACP,GACUupJ,KAA2B,CAAA5oI,MAAU;AACzC,YAAM6oI,IAAkB,CAAA3uK,MAAK;AAC3B,YAAI,CAACA,EAAE,sBAAsB;AAC3B,gBAAM68J,IAAe78J,EAAE;AACvB,UAAI68J,MAAiB52I,EAAW42I,EAAa,OAAO,OAAO,KAAKA,EAAa,MAAM,SAAS,OAC1F78J,EAAE,eAAc,GACZA,EAAE,SAAS,UACb88H,GAAah3F,GAAQ,oCAAoC;AAAA,QAG9D;AAAA,MACT,GACY8oI,IAA6B,CAAA5uK,MAAK;AACtC,QAAI6jF,GAAY/9C,GAAQ9lC,EAAE,MAAM,KAC9B2uK,EAAgB3uK,CAAC;AAAA,MAE3B,GACY0vH,IAAQ,MAAM;AAClB,cAAM2+C,IAAU7tH,GAAS,KACnB9rB,IAAMoR,EAAO,KACbvM,IAAM,UACNs1I,IAAa/oI,EAAO,SAASA,EAAO,YAAYA,EAAO,UACvDgpI,IAAa;AAAA,UACjB;AAAA,UACA;AAAA,QACV;AACQ,QAAA1oJ,EAAO0oJ,GAAY,CAAA5lJ,MAAQ;AACzB,UAAAmlJ,EAAQ,KAAK90I,GAAKrQ,GAAM0lJ,CAA0B,GAClDl6I,EAAI,KAAKm6I,GAAY3lJ,GAAMylJ,CAAe;AAAA,QACpD,CAAS,GACD7oI,EAAO,GAAG,UAAU,MAAM;AACxB,UAAA1f,EAAO0oJ,GAAY,CAAA5lJ,MAAQ;AACzB,YAAAmlJ,EAAQ,OAAO90I,GAAKrQ,GAAM0lJ,CAA0B,GACpDl6I,EAAI,OAAOm6I,GAAY3lJ,GAAMylJ,CAAe;AAAA,UACxD,CAAW;AAAA,QACX,CAAS;AAAA,MACT;AACM,MAAA7oI,EAAO,GAAG,QAAQ,MAAM;AACtB,QAAAm9C,GAAM,iBAAiBn9C,GAAQ4pF,GAAO,CAAC;AAAA,MAC/C,CAAO;AAAA,IACP,GACUq/C,KAAS,CAAAjpI,MAAU;AACvB,MAAAsoI,GAAmBtoI,CAAM,GACrB64B,GAA2B74B,CAAM,KACnC4oI,GAAyB5oI,CAAM;AAAA,IAEvC,GAEUkpI,KAAU,CAAAlpI,MAAU;AACxB,YAAMmpI,IAAmBlkH,GAAQ,MAAM;AACrC,YAAI,CAACjlB,EAAO,WAAWA,EAAO,QAAO,EAAG,SAAS,SAAS,aAAa,GAAG;AACxE,gBAAM5pB,IAAM4pB,EAAO,UAAU,OAAM;AACnC,cAAI5pB,EAAI,WAAW;AACjB,kBAAM+uH,IAAaN,GAAiB7kG,GAAQ5pB,GAAK,EAAK;AACtD,YAAA4pB,EAAO,UAAU,OAAOmlG,CAAU;AAAA,UACnC;AAAA,QACF;AAAA,MACF,GAAE,CAAC;AACJ,MAAAnlG,EAAO,GAAG,SAAS,MAAM;AACvB,QAAAmpI,EAAiB,SAAQ;AAAA,MACjC,CAAO,GACDnpI,EAAO,GAAG,QAAQ,MAAM;AACtB,QAAAmpI,EAAiB,OAAM;AAAA,MAC/B,CAAO;AAAA,IACP,GAEUC,KAAU,CAAAppI,MAAU;AACxB,MAAAA,EAAO,GAAG,QAAQ,MAAM;AACtB,QAAAA,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,gBAAMgvB,IAAShvB,EAAE;AACjB,cAAIijC,GAAUjU,CAAM,GAAG;AACrB,kBAAM07G,IAASvwC,GAAyBr0D,EAAO,QAAS,GAAE9W,CAAM,GAC1D0H,IAAOoM,GAAyB4nG,CAAM,IAAIA,IAAS17G;AACzD,YAAI8W,EAAO,UAAU,QAAO,MAAOpP,KACjC4zG,GAAWxkG,GAAQpP,CAAI,EAAE,KAAK,CAAAxa,MAAO4pB,EAAO,UAAU,OAAO5pB,CAAG,CAAC;AAAA,UAEpE;AAAA,QACX,CAAS;AAAA,MACT,CAAO;AAAA,IACP,GAEUizJ,KAAyBrsI,IACzBssI,KAAyB,CAACtpI,GAAQpP,MAASyjE,GAAyBr0D,EAAO,WAAWpP,CAAI,GAC1F24I,KAAqB,CAAAvpI,MAAU;AACnC,YAAMiwB,IAAYjwB,EAAO,WAAWpR,IAAMoR,EAAO,KAC3CpF,IAAWoF,EAAO,WAClBmwB,IAAY8M,GAAUj9B,GAAQpF,GAAUhM,EAAI,SAAS,MAAMsuC,GAASl9B,CAAM,CAAC,GAC3EwpI,IAAkB,SAAS56I,EAAI,SAAQ,GACvCqhD,IAAuB;AAC7B,UAAIw5F;AACJ,YAAMC,IAAyB,CAAA94I,OAAQhT,GAAcgT,EAAI,KAAKhC,EAAI,SAASgC,IAAM,yBAAyB,GACpG+4I,IAA+B,CAAA/4I,OAAQA,OAASgK,MAAayuI,GAAuBz4I,EAAI,KAAKuM,GAAUvM,EAAI,MAAMhC,EAAI,UAAUgC,IAAMgK,CAAQ,KAAKhM,EAAI,WAAWgC,GAAK,UAAU,GAChLg5I,IAAW,CAAApoI,OAAS;AACxB,QAAIA,MACFyuB,EAAU,OAAOzuB,EAAK;AAAA,MAEhC,GACY6iG,IAAY,CAACz7E,IAAWh4B,IAAM4P,IAAQ8jG,KAAiB,OACjDtkG,EAAO,SAAS,aAAa;AAAA,QACrC,QAAQpP;AAAA,QACR,WAAAg4B;AAAA,QACA,QAAApoB;AAAA,MACV,CAAS,EACK,uBACG,QAEL8jG,MACFr0E,EAAU,eAAer/B,IAAMg4B,OAAc,EAAE,GAE1CuH,EAAU,KAAK3vB,IAAQ5P,EAAI,IAE9B0lH,IAA0B,CAAAC,OAAuB;AACrD,QAAIA,GAAoB,aAAa,gBAAgB,MACnDl1G,GAAwBk1G,EAAmB,GAC3CtmF,EAAU,eAAesmF,EAAmB;AAAA,MAEtD,GACYnW,IAAiB,MAAM;AAC3B,QAAApgG,EAAO,GAAG,SAAS,CAAA9lC,OAAK;AACtB,UAAK00B,EAAI,WAAW10B,GAAE,MAAM,MAC1BA,GAAE,eAAc,GAChB8lC,EAAO,MAAK;AAAA,QAExB,CAAS,GACDA,EAAO,GAAG,iBAAiB6pI,EAAsB,GACjD7pI,EAAO,GAAG,uCAAuCmwB,EAAU,UAAU,GACrEnwB,EAAO,GAAG,OAAO,CAAA9lC,OAAK;AACpB,gBAAM24E,KAAY34E,GAAE,QACd4vK,KAAsBR,GAAuBtpI,GAAQ6yC,EAAS;AACpE,UAAIw2F,GAAuBS,EAAmB,KAC5C5vK,GAAE,eAAc,GAChBsqI,GAAWxkG,GAAQ8pI,EAAmB,EAAE,KAAKC,EAAmB,KACvDJ,EAA6B92F,EAAS,KAC/C2xD,GAAWxkG,GAAQ6yC,EAAS,EAAE,KAAKk3F,EAAmB;AAAA,QAEzD,GAAE,EAAI,GACP/pI,EAAO,GAAG,aAAa,CAAA9lC,OAAK;AAC1B,gBAAM24E,KAAY34E,GAAE;AAIpB,cAHI24E,OAAcj4C,KAAYi4C,GAAU,aAAa,UAAU,CAACjkD,EAAI,UAAUikD,IAAWj4C,CAAQ,KAG7F,CAAC25F,GAAkBv0F,GAAQ9lC,GAAE,SAASA,GAAE,OAAO;AACjD;AAEF,UAAA2vK,MACAG;AACA,gBAAMC,KAAyBX,GAAuBtpI,GAAQ6yC,EAAS;AACvE,UAAIw2F,GAAuBY,EAAsB,KAC/C/vK,GAAE,eAAc,GAChBsqI,GAAWxkG,GAAQiqI,EAAsB,EAAE,KAAKF,EAAmB,KAEnE3F,GAA0BxpI,GAAU1gC,GAAE,SAASA,GAAE,OAAO,EAAE,KAAK,CAAAwtK,OAAa;AAC1E,YAAAxtK,GAAE,eAAc;AAChB,kBAAMsnC,KAAQ6iG,EAAU,GAAGqjC,GAAU,MAAMA,GAAU,aAAavF,GAAkB,QAAQ,EAAK;AACjG,YAAAyH,EAASpoI,EAAK,GACVpG,GAAc6uI,EAAsB,IACtCA,GAAuB,MAAK,IAE5BjqI,EAAO,UAAU;UAEjC,CAAa;AAAA,QAEb,CAAS,GACDA,EAAO,GAAG,YAAY,CAAA9lC,OAAK;AACzB,UAAI81E,GAAG,gBAAgB91E,EAAC,KAGpBmvK,GAAuBp5G,EAAU,QAAO,CAAE,KAC5C/1D,GAAE,eAAc;AAAA,QAE5B,CAAS,GACD8lC,EAAO,GAAG,qBAAqB,CAAA9lC,OAAK;AAClC,cAAIkc,KAAMlc,GAAE;AACZ,cAAIuvK,GAAiB;AACnB,gBAAI,CAACA,EAAgB,YAAY;AAC/B,cAAAA,IAAkB;AAClB;AAAA,YACD;AACD,YAAArzJ,KAAMA,GAAI,cACVA,GAAI,WAAWqzJ,CAAe,GAC9BvvK,GAAE,QAAQkc;AAAA,UACX;AAAA,QACX,CAAS,GACD4pB,EAAO,GAAG,qBAAqB,CAAA9lC,OAAK;AAClC,UAAAA,GAAE,QAAQgwK,EAA8BhwK,GAAE,KAAK;AAC/C,gBAAMkc,KAAM2zJ,GAAoB7vK,GAAE,OAAOA,GAAE,OAAO;AAClD,UAAIkc,OACFlc,GAAE,QAAQkc;AAAA,QAEtB,CAAS;AACD,cAAM+iJ,KAAa,CAAAvoI,OAAQuK,GAAYvK,EAAI,KAAKA,GAAK,OAAO;AAC5D,QAAAoP,EAAO,GAAG,0BAA0B,CAAA9lC,OAAK;AACvC,gBAAMkc,KAAMlc,GAAE,OACRk4B,KAAShc,GAAI,eAAe;AAClC,UAAI,CAAC+zJ,EAAwB/zJ,EAAG,KAAK,CAAC+iJ,GAAW/mI,EAAM,KACrD43I,MAEGN,EAAuBt3I,EAAM,KAChCy3I;QAEZ,CAAS,GACDZ,GAAOjpI,CAAM,GACbkpI,GAAQlpI,CAAM,GACdopI,GAAQppI,CAAM;AAAA,MACtB,GACYoqI,IAAyB,CAAAx5I,OAAQyP,GAAmBzP,EAAI,KAAKgQ,GAA2BhQ,EAAI,KAAK+P,GAAyB/P,EAAI,GAC9Hu5I,IAA0B,CAAA/zJ,OAAOg0J,EAAuBh0J,GAAI,cAAc,KAAKg0J,EAAuBh0J,GAAI,YAAY,GACtH8zJ,IAAgC,CAAA9zJ,OAAO;AAC3C,cAAM2jJ,KAAe/5H,EAAO,OAAO,gBAAe,GAC5C6sB,KAASj+B,EAAI,aACbk8B,KAAiB10C,GAAI,gBACrB20C,KAAc30C,GAAI,aAClBs1D,KAAet1D,GAAI,cACnBu1D,KAAYv1D,GAAI;AACtB,eAAIoN,GAAMu2I,IAAcjvG,GAAe,SAAS,YAAa,CAAA,IACvDC,OAAgB,IAClB8B,GAAO,eAAe/B,EAAc,IAEpC+B,GAAO,cAAc/B,EAAc,IAGrC+B,GAAO,SAAS/B,IAAgBC,EAAW,GAEzCvnC,GAAMu2I,IAAcruF,GAAa,SAAS,YAAa,CAAA,IACrDC,OAAc,IAChB9e,GAAO,aAAa6e,EAAY,IAEhC7e,GAAO,YAAY6e,EAAY,IAGjC7e,GAAO,OAAO6e,IAAcC,EAAS,GAEhC9e;AAAA,MACf,GACYw9G,KAA0B,CAACz5I,IAAM05I,OAAgB;AACrD,cAAMlxI,KAAOrI,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC5CvM,KAAMuM,EAAO,UACbuqI,KAAyBp1I,GAAaiE,IAAM,MAAMowI,CAAe,EAAE,WAAW,MAAM;AACxF,gBAAMlxF,KAAevnD,EAAa,SAAS,oEAAoE0C,EAAG;AAClH,iBAAA5E,GAAMypD,IAAc,MAAMkxF,CAAe,GACzC5yI,GAASwC,IAAMk/C,EAAY,GACpBA;AAAA,QACjB,CAAS,GACKG,KAAW7pD,EAAI;AACrB,QAAAsI,GAAMqzI,EAAsB,GAC5BtzI,GAAOszI,IAAwB;AAAA,UAC7Bx5I,EAAa,SAASyM,IAAM/J,EAAG;AAAA,UAC/B1C,EAAa,QAAQu5I,EAAW;AAAA,UAChCv5I,EAAa,SAASyM,IAAM/J,EAAG;AAAA,QACzC,CAAS,GACDglD,GAAS,SAAS8xF,GAAuB,IAAI,YAAY,CAAC,GAC1D9xF,GAAS,OAAO8xF,GAAuB,IAAI,WAAW,CAAC,GACvDx0I,GAAOw0I,IAAwB,EAAE,KAAK37I,EAAI,OAAOgC,IAAMoP,EAAO,QAAO,CAAE,EAAE,IAAI,KAAM,CAAA,GACnF47C,GAAQ2uF,EAAsB;AAC9B,cAAMtkG,KAAMhW,EAAU;AACtB,eAAIgW,OACFA,GAAI,gBAAe,GACnBA,GAAI,SAASwS,EAAQ,IAEhBA;AAAA,MACf,GACY+xF,KAAgB,CAAAtrI,OAAO;AAC3B,cAAMorI,KAAcprI,GAAI,UAAU,EAAI,GAChChlC,KAAI8lC,EAAO,SAAS,kBAAkB;AAAA,UAC1C,QAAQd;AAAA,UACR,aAAAorI;AAAA,QACV,CAAS;AACD,YAAIpwK,GAAE;AACJ,iBAAO;AAET,cAAMsnC,KAAQ6oI,GAAwBnrI,IAAKhlC,GAAE,WAAW,GAClDuwK,KAAU15I,EAAa,QAAQmO,EAAG;AACxC,eAAA5e,EAAOka,GAAYzJ,EAAa,QAAQiP,EAAO,QAAO,CAAE,GAAG,KAAMiwC,CAAoB,GAAI,GAAG,CAAA/wC,OAAO;AACjG,UAAKvb,GAAG8mJ,IAASvrI,EAAG,KAClB/P,GAAS+P,IAAK+wC,CAAoB;AAAA,QAE9C,CAAS,GACIrhD,EAAI,UAAUsQ,IAAK+wC,CAAoB,KAC1C/wC,GAAI,aAAa+wC,GAAsB,GAAG,GAE5Cw5F,IAAkBvqI,IAClB8qI,MACOxoI;AAAA,MACf,GACYuoI,KAAsB,CAACvoI,IAAO0uB,OAAY;AAC9C,YAAI,CAAC1uB;AACH,iBAAO;AAET,YAAIA,GAAM,WAAW;AACnB,cAAI,CAAC2oI,EAAwB3oI,EAAK,GAAG;AACnC,kBAAM4hB,KAAM8M,KAAU,IAAI,IACpB9C,KAAgB2S,GAA2B3c,IAAKxoB,GAAU4G,EAAK,GAC/D+rB,KAAaH,GAAc,QAAQ,CAAC8C,EAAO;AACjD,gBAAItyC,GAAc2vC,EAAU,GAAG;AAC7B,kBAAIoQ,GAAkBpQ,EAAU;AAC9B,uBAAO82E,EAAUjhF,IAAKmK,IAAY2C,KAAU,CAAC9C,GAAc,QAAS,IAAG,IAAO,EAAK;AAErF,kBAAIhtB,GAAuBmtB,EAAU,KAAKvwB,GAAyBuwB,GAAW,WAAW,GAAG;AAC1F,sBAAMn3C,KAAMwY,EAAI;AAChB,uBAAAxY,GAAI,SAASm3C,IAAY,CAAC,GAC1Bn3C,GAAI,OAAOm3C,IAAY,CAAC,GACjBn3C;AAAA,cACR;AAAA,YACF;AACD,kBAAMs0J,KAAYt9G,GAAc,QAAQ8C,EAAO;AAC/C,gBAAItyC,GAAc8sJ,EAAS,GAAG;AAC5B,kBAAI/sG,GAAkB+sG,EAAS;AAC7B,uBAAOrmC,EAAUjhF,IAAKsnH,IAAWx6G,KAAU,KAAQ,CAAC9C,GAAc,WAAW,EAAK;AAEpF,kBAAIhtB,GAAuBsqI,EAAS,KAAK1tI,GAAyB0tI,GAAU,eAAe,GAAG;AAC5F,sBAAMt0J,KAAMwY,EAAI;AAChB,uBAAAxY,GAAI,SAASs0J,IAAW,CAAC,GACzBt0J,GAAI,OAAOs0J,IAAW,CAAC,GAChBt0J;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACD,iBAAO;AAAA,QACR;AACD,YAAI00C,KAAiBtpB,GAAM,gBACvBupB,KAAcvpB,GAAM;AACxB,cAAMmqC,KAAYnqC,GAAM;AAMxB,YALIjF,GAASuuB,EAAc,KAAKC,OAAgB,KAAKs+G,GAAuBv+G,GAAe,UAAU,MACnGA,KAAiBA,GAAe,YAChCC,KAAcn8B,EAAI,UAAUk8B,EAAc,GAC1CA,KAAiBA,GAAe,aAE9B,CAAC3vB,GAAY2vB,EAAc;AAC7B,iBAAO;AAET,YAAI6gB,OAAc5gB,KAAc,KAAKD,OAAmBtpB,GAAM,cAAc;AAC1E,gBAAM5Q,KAAOk6B,GAAe,WAAWC,EAAW;AAClD,cAAI4+G,EAA6B/4I,EAAI;AACnC,mBAAO45I,GAAc55I,EAAI;AAAA,QAE5B;AACD,eAAO;AAAA,MACf,GACYi5I,KAAyB,MAAM;AACnC,QAAIJ,KACFA,EAAgB,gBAAgBx5F,CAAoB,GAEtD96C,GAAapE,EAAa,QAAQiP,EAAO,QAAO,CAAE,GAAG,MAAMwpI,CAAe,EAAE,KAAKpyI,EAAQ,GACzFqyI,IAAkB;AAAA,MAC1B,GACYp2C,KAAU,MAAM;AACpB,QAAAljE,EAAU,QAAO,GACjBs5G,IAAkB;AAAA,MAC1B,GACYO,KAAgB,MAAM;AAC1B,QAAA75G,EAAU,KAAI;AAAA,MACtB;AACM,aAAKo5D,GAAMvpF,CAAM,KACfogG,KAEK;AAAA,QACL,WAAAiE;AAAA,QACA,yBAAAiS;AAAA,QACA,eAAA0zB;AAAA,QACA,SAAA32C;AAAA,MACR;AAAA,IACA,GAEUs3C,KAA0B,CAAC1yI,GAAWzhB,MAAW;AACrD,UAAIi5I,IAAmBj5I;AACvB,eAASoa,IAAOqH,EAAU,iBAAiBsE,GAAS3L,CAAI,GAAGA,IAAOA,EAAK;AACrE,QAAA6+H,KAAoB7+H,EAAK,KAAK;AAEhC,aAAO6+H;AAAA,IACb,GACUmb,KAAe,CAACh8I,GAAK1X,GAAM0Z,GAAMpa,GAAQgjC,MAAe;AAC5D,UAAIjd,GAAS3L,CAAI,MAAMpa,IAAS,KAAKA,IAASoa,EAAK,KAAK;AACtD,eAAO;AAET,YAAMnhB,IAAI+pC,KAAcjd,GAAS3L,CAAI,IAAI,CAAC+5I,GAAwB/5I,GAAMpa,CAAM,CAAC,IAAI,CAACA,CAAM;AAC1F,UAAIoT,IAAUgH;AACd,aAAOhH,MAAY1S,KAAQ0S,EAAQ;AACjC,QAAAna,EAAE,KAAKmf,EAAI,UAAUhF,GAAS4vB,CAAU,CAAC,GACzC5vB,IAAUA,EAAQ;AAEpB,aAAOA,MAAY1S,IAAOzH,EAAE,QAAO,IAAK,CAAA;AAAA,IAC9C,GACUo7J,KAAoB,CAACj8I,GAAK1X,GAAMyjB,GAAWowB,GAAa+a,GAAS6F,GAAWnyB,IAAa,OAAU;AACvG,YAAM5xB,IAAQgjJ,GAAah8I,GAAK1X,GAAMyjB,GAAWowB,GAAavR,CAAU,GAClEvxB,IAAM2iJ,GAAah8I,GAAK1X,GAAM4uD,GAAS6F,GAAWnyB,CAAU;AAClE,aAAO;AAAA,QACL,OAAA5xB;AAAA,QACA,KAAAK;AAAA,MACR;AAAA,IACA,GACU6iJ,KAAc,CAAC5zJ,GAAMiV,MAAS;AAClC,YAAM4+I,IAAW5+I,EAAK,SAChB3V,IAASu0J,EAAS;AACxB,aAAKjtJ,GAAStH,CAAM,IAGGsK,GAAMiqJ,GAAU,CAACC,GAAStyJ,MAAUsyJ,EAAQ,KAAK,CAAAp6I,MAAQvR,EAAS,KAAKuR,EAAK,WAAWlY,CAAK,CAAC,CAAC,GAAG2G,EAAS,KAAKnI,CAAI,CAAC,EACrH,KAAK,CAAA0Z,MACnB2L,GAAS3L,CAAI,MAAMpa,IAAS,KAAKA,IAASoa,EAAK,KAAK,UAC/CvR,EAAS,SAETA,EAAS,KAAK;AAAA,QACnB,MAAAuR;AAAA,QACA,QAAApa;AAAA,MACd,CAAa,CAEJ,IAZM6I,EAAS;IAcxB,GACU4rJ,KAAmB,CAAC/zJ,GAAMsqB,MAAUspI,GAAY5zJ,GAAMsqB,EAAM,KAAK,EAAE,KAAK,CAAC;AAAA,MAC7E,MAAM7G;AAAA,MACN,QAAQowB;AAAA,IACd,MAAU+/G,GAAY5zJ,GAAMsqB,EAAM,GAAG,EAAE,IAAI,CAAC;AAAA,MACtC,MAAMskC;AAAA,MACN,QAAQ6F;AAAA,IACd,MAAU;AACJ,YAAMv1D,IAAM,SAAS;AACrB,aAAAA,EAAI,SAASukB,GAAWowB,CAAW,GACnC30C,EAAI,OAAO0vD,GAAS6F,CAAS,GACtBv1D;AAAA,IACR,CAAA,CAAC,GACI80J,KAA6B,CAACt8I,GAAK1X,GAAMsqB,GAAOgY,IAAa,OAAUqxH,GAAkBj8I,GAAK1X,GAAMsqB,EAAM,gBAAgBA,EAAM,aAAaA,EAAM,cAAcA,EAAM,WAAWgY,CAAU,GAE5L2xH,KAAkB,CAACv8I,GAAKgC,GAAM2B,MAAW;AAC7C,UAAI3B,KAAQhC,EAAI,QAAQgC,CAAI,KAAK,CAAC2B,EAAO3B,CAAI,GAAG;AAC9C,cAAMwB,IAASxB,EAAK;AACpB,QAAAhC,EAAI,OAAOgC,GAAM2L,GAAS3L,EAAK,UAAU,KAAK8R,GAAiB9R,EAAK,WAAW,IAAI,CAAC,GACpFu6I,GAAgBv8I,GAAKwD,GAAQG,CAAM;AAAA,MACpC;AAAA,IACP,GACU64I,KAAY,CAACx8I,GAAKxY,GAAKmc,GAAQ84I,IAAQ,OAAS;AACpD,YAAMv5B,IAAc17H,EAAI,eAAe,YACjC47H,IAAY57H,EAAI,aAAa;AACnC,MAAAA,EAAI,eAAc,GACdi1J,KAAS,CAAC94I,EAAOnc,EAAI,cAAc,MACjCmmB,GAASnmB,EAAI,cAAc,KAAKA,EAAI,eAAe,KAAK,WAAW,KACrEwY,EAAI,OAAOxY,EAAI,cAAc,GAE3BmmB,GAASnmB,EAAI,YAAY,KAAKA,EAAI,aAAa,KAAK,WAAW,KACjEwY,EAAI,OAAOxY,EAAI,YAAY,GAE7B+0J,GAAgBv8I,GAAKkjH,GAAav/G,CAAM,GACpCu/G,MAAgBE,KAClBm5B,GAAgBv8I,GAAKojH,GAAWz/G,CAAM;AAAA,IAGhD,GACU+4I,KAAiB,CAACtrI,GAAQ5pB,MAAQiJ,EAAS,KAAK2gB,EAAO,IAAI,UAAU5pB,EAAI,gBAAgB4pB,EAAO,IAAI,OAAO,CAAC,GAC5GurI,KAA6B,CAACC,GAAYllI,GAAOmlI,MAAe;AACpE,YAAMC,IAAkBF,EAAW,sBAAsB;AAAA,QACvD,MAAMC;AAAA,QACN,OAAAnlI;AAAA,MACR,CAAO;AACD,aAAO;AAAA,QACL,GAAGklI;AAAA,QACH,eAAe73G,GAAiB+3G,CAAe,EAAE,OAAOF,EAAW,aAAa;AAAA,QAChF,gBAAgB33G,GAAkB63G,CAAe,EAAE,OAAOF,EAAW,cAAc;AAAA,MAC3F;AAAA,IACA,GACUG,KAAgB,CAAC/8I,GAAK0X,GAAO1V,GAAMpa,MAAW;AAClD,YAAMJ,IAAMwY,EAAI;AAChB,aAAAxY,EAAI,SAASkwB,GAAO,CAAC,GACrBlwB,EAAI,OAAOwa,GAAMpa,CAAM,GAChBJ,EAAI;IACjB,GAEUw1J,KAAwB,CAAA9sK,MAAK,WAAW,KAAKA,CAAC,GAC9C+sK,KAAe,CAACj9I,GAAK0X,GAAO0sB,MAAY;AAE5C,MADsBgqF,GAAU12G,GAAO,GAAGA,CAAK,EACjC,KAAK,CAAA03G,MAAQ;AACzB,cAAMptH,IAAOotH,EAAK;AAClB,QAAAd,GAAUtsH,GAAMoiC,EAAQ,MAAM,QAAQ1sB,CAAK,EAAE,KAAK,CAAAre,MAAO;AACvD,gBAAM7R,IAAMwY,EAAI;AAChB,UAAAxY,EAAI,SAASwa,GAAM,CAAC,GACpBxa,EAAI,OAAO6R,EAAI,WAAWA,EAAI,MAAM,GACpCmjJ,GAAUx8I,GAAKxY,GAAK,CAAAlc,MAAKA,MAAMosC,CAAK;AAAA,QAC9C,CAAS;AACD,cAAMxV,IAAOC,EAAa,QAAQH,CAAI,GAChCk7I,IAAc/tI,GAAMjN,CAAI;AAC9B,QAAI86I,GAAsBE,CAAW,KACnC9tI,GAAIlN,GAAMg7I,EAAY,MAAM,CAAC,CAAC;AAAA,MAExC,CAAO;AAAA,IACP,GACUC,KAAiB,CAAC/rI,GAAQuW,MAAU;AACxC,YAAM3nB,IAAMoR,EAAO,KACbgzB,IAAUzc,EAAM,SAChBngC,IAAM60J,GAAiBr8I,EAAI,QAAO,GAAI2nB,EAAM,KAAK,EAAE,SAAS,8BAA8B,GAC1Fy1H,IAAoB,CAAC5oJ,GAAM27E,MAAc;AAC7C,cAAMktE,IAAYltE,EAAU,IAAI37E,CAAI;AACpC,eAAO7F,GAAU0uJ,CAAS,KAAKlqJ,GAAKkqJ,CAAS,EAAE,OAAO,CAAA14G,MAAU/vC,GAAM+vC,GAAQ,OAAO,CAAC;AAAA,MAC9F;AACM,aAAA+3G,GAAetrI,GAAQ5pB,CAAG,EAAE,KAAK,CAAAkwB,MAAS;AACxC,QAAI0sB,EAAQ,SAAS,iBACfg5G,EAAkBh5G,EAAQ,QAAQhzB,EAAO,SAAS,KACpDA,EAAO,YAAY,SAAS,MAAM;AAChC,UAAA6rI,GAAa7rI,EAAO,KAAKsG,GAAO0sB,CAAO,GACvChzB,EAAO,UAAU,MAAMgzB,EAAQ,MAAM;AAAA,QACnD,CAAa,IAEMA,EAAQ,SAAS,mBAC1BhzB,EAAO,YAAY,SAAS,MAAM;AAChC,UAAA6rI,GAAa7rI,EAAO,KAAKsG,GAAO0sB,CAAO,GACvChzB,EAAO,YAAYgzB,EAAQ,KAAK,IAAOA,EAAQ,KAAK;AAAA,QAChE,CAAW;AAAA,MAEX,CAAO,GACM;AAAA,IACb,GACUk5G,KAAiB,CAAAt4G,MAAYjyC,GAAKiyC,GAAU,CAACt5D,GAAGwV,MAAMA,EAAE,MAAM,SAASxV,EAAE,MAAM,MAAM,GACrF6xK,KAAgB,CAACv4G,GAAU9iC,MAAS;AACxC,YAAMs7I,IAAiBF,GAAet4G,CAAQ,GACxCy4G,IAASv7I,EAAK,QAAQ0M,IAAM,GAAG;AACrC,aAAOvc,GAAOmrJ,GAAgB,CAAAp5G,MAAWliC,EAAK,QAAQkiC,EAAQ,KAAK,MAAM,KAAKq5G,EAAO,QAAQr5G,EAAQ,KAAK,MAAM,CAAC;AAAA,IACvH,GACUs5G,KAAiB,CAACtsI,GAAQsG,GAAOklI,GAAYe,MAAsB;AACvE,UAAI3lK;AACJ,YAAMgoB,IAAMoR,EAAO,KACb0jE,IAAkBluC,GAAmBx1B,CAAM;AACjD,UAAI,CAACpR,EAAI,GAAG0X,GAAOo9D,CAAe;AAChC,eAAO;AAET,YAAM8oE,KAAa5lK,IAAK0/B,EAAM,iBAAiB,QAAQ1/B,MAAO,SAASA,IAAK;AAC5E,aAAOulK,GAAcX,EAAW,eAAegB,CAAS,EAAE,IAAI,CAAAx5G,MACxD9mC,GAAM,KAAKsgJ,CAAS,EAAE,WAAWx5G,EAAQ,MAAM,SAC1C,KAEF,CAAC;AAAA,QACJ,SAAAA;AAAA,QACA,OAAO63G,GAAkBj8I,GAAKA,EAAI,QAAO,GAAI0X,GAAO,GAAGA,GAAO,GAAGimI,CAAiB;AAAA,MAC9F,CAAW,CACJ,EAAE,MAAM,CAAA,CAAE;AAAA,IACjB,GACUE,KAAiB,CAACzsI,GAAQ6M,MAAY;AAC1C,UAAIA,EAAQ,WAAW;AACrB;AAEF,YAAMk2B,IAAW/iC,EAAO,UAAU,YAAW;AAC7C,MAAA1f,EAAOusB,GAAS,CAAA0J,MAASw1H,GAAe/rI,GAAQuW,CAAK,CAAC,GACtDvW,EAAO,UAAU,eAAe+iC,CAAQ;AAAA,IAC9C,GAEU2pG,KAAY,CAAC99I,GAAKa,MAAOb,EAAI,OAAO,QAAQ;AAAA,MAChD,iBAAiB;AAAA,MACjB,IAAAa;AAAA,IACN,CAAK,GACKk9I,KAAkB,CAAC/9I,GAAK8H,MAAW;AACvC,YAAMtgB,IAAMwY,EAAI;AAChB,aAAAxY,EAAI,cAAcsgB,EAAO,KAAK,GAC9BtgB,EAAI,aAAasgB,EAAO,GAAG,GACpBtgB;AAAA,IACb,GACUw2J,KAAe,CAACh+I,GAAKi+I,GAAcC,MAAc;AACrD,YAAM12J,IAAM60J,GAAiBr8I,EAAI,QAAS,GAAEk+I,CAAS,EAAE,SAAS,8BAA8B,GACxFnyI,IAAYvkB,EAAI,gBAChB0vD,IAAU1vD,EAAI,cACd22J,IAAU32J,EAAI,cAAc,IAAI0vD,IAAUA,EAAQ,UAAU1vD,EAAI,SAAS,GACzE42J,IAAY52J,EAAI,gBAAgB,IAAIukB,IAAYA,EAAU,UAAUvkB,EAAI,WAAW,GACnF62J,IAAkBD,EAAU,YAC5BE,IAAgBH,EAAQ;AAC9B,aAAO;AAAA,QACL,QAAQF;AAAA,QACR,KAAKK,EAAc,aAAaR,GAAU99I,GAAKi+I,IAAe,MAAM,GAAGE,CAAO;AAAA,QAC9E,OAAOE,EAAgB,aAAaP,GAAU99I,GAAKi+I,IAAe,QAAQ,GAAGG,CAAS;AAAA,MAC9F;AAAA,IACA,GACUG,KAAe,CAACv+I,GAAK8H,GAAQnE,MAAW;AAC5C,MAAA44I,GAAgBv8I,GAAKA,EAAI,IAAI8H,EAAO,SAAS,MAAM,GAAGnE,CAAM,GAC5D44I,GAAgBv8I,GAAKA,EAAI,IAAI8H,EAAO,SAAS,QAAQ,GAAGnE,CAAM;AAAA,IACpE,GAEU66I,KAAuB,CAAAp6G,MAAWA,EAAQ,MAAM,WAAW,GAC3Dq6G,KAAiB,CAAAC,MAAkB,CAACr/I,GAASzX,MAAW;AAE5D,YAAM+2J,IADOt/I,EAAQ,KACG,UAAU,GAAGzX,CAAM,GACrCg3J,IAAgBD,EAAW,YAAYD,EAAe,OAAOA,EAAe,SAAS,CAAC,CAAC,GACvFz8E,IAAa08E,EAAW,YAAYD,CAAc;AACxD,aAAIz8E,MAAe,KACVA,IAAay8E,EAAe,SAC1BE,MAAkB,KACpBA,IAAgB,IAEhB;AAAA,IAEf,GACUC,KAA2B,CAAC7+I,GAAKokC,GAAS1sB,GAAO03G,MAAS;AAC9D,YAAM0vB,IAAe16G,EAAQ;AAE7B,aADkBmqF,GAAWvuH,GAAKovH,EAAK,WAAWA,EAAK,QAAQqvB,GAAeK,CAAY,GAAGpnI,CAAK,EACjF,KAAK,CAAA03G,MAAQ;AAC5B,YAAIp3I,GAAIw2C;AACR,cAAMuwH,KAAqBvwH,KAAMx2C,IAAK0/B,EAAM,iBAAiB,QAAQ1/B,MAAO,SAAS,SAASA,EAAG,QAAQ8mK,CAAY,OAAO,QAAQtwH,MAAO,SAASA,IAAK;AAEzJ,YADwBuwH,MAAsB,MAAM3vB,EAAK,UAAU2vB,IAAoBD,EAAa,QAC/E;AACnB,gBAAMt3J,IAAMwY,EAAI;AAChB,iBAAAxY,EAAI,SAAS4nI,EAAK,WAAWA,EAAK,SAAS0vB,EAAa,MAAM,GAC9Dt3J,EAAI,OAAO4nI,EAAK,WAAWA,EAAK,MAAM,GAC/B3+H,EAAS,KAAKjJ,CAAG;AAAA,QAClC,OAAe;AACL,gBAAMI,IAASwnI,EAAK,SAAS0vB,EAAa;AAC1C,iBAAOzwB,GAASe,EAAK,WAAWxnI,GAAQ8vB,CAAK,EAAE,IAAI,CAAAsnI,MAAY;AAC7D,kBAAMx3J,IAAMwY,EAAI;AAChB,mBAAAxY,EAAI,SAASw3J,EAAS,WAAWA,EAAS,MAAM,GAChDx3J,EAAI,OAAO4nI,EAAK,WAAWA,EAAK,MAAM,GAC/B5nI;AAAA,UACnB,CAAW,EAAE,OAAO,CAAAA,MAAOA,EAAI,eAAes3J,CAAY,EAAE,QAAQ,MAAMD,GAAyB7+I,GAAKokC,GAAS1sB,GAAOwpB,GAAMkuF,EAAK,WAAW,CAAC,CAAC,CAAC;AAAA,QACxI;AAAA,MACT,CAAO;AAAA,IACP,GACU6vB,KAAmB,CAACj/I,GAAKokC,GAASpiC,GAAMpa,GAAQ8vB,GAAOwnI,IAAa,OAAU;AAClF,UAAI96G,EAAQ,MAAM,WAAW,KAAK,CAAC86G,GAAY;AAC7C,cAAM13J,IAAMwY,EAAI;AAChB,eAAAxY,EAAI,SAASwa,GAAMpa,CAAM,GACzBJ,EAAI,OAAOwa,GAAMpa,CAAM,GAChB6I,EAAS,KAAKjJ,CAAG;AAAA,MACzB;AACD,aAAO2mI,GAAWnsH,GAAMpa,GAAQ8vB,CAAK,EAAE,KAAK,CAAA03G,MAC5ByvB,GAAyB7+I,GAAKokC,GAAS1sB,GAAO03G,CAAI,EACnD,KAAK,CAAA+vB,MAAc;AAC9B,YAAInnK;AACJ,YAAIknK,GAAY;AACd,cAAIC,EAAW,iBAAiB/vB,EAAK,aAAa+vB,EAAW,cAAc/vB,EAAK;AAC9E,mBAAO3+H,EAAS;AACX,cAAI2+H,EAAK,WAAW,OAAOp3I,IAAKmnK,EAAW,aAAa,iBAAiB,QAAQnnK,MAAO,SAAS,SAASA,EAAG,YAAYmnK,EAAW;AACzI,mBAAO1uJ,EAAS;QAEnB;AACD,eAAOA,EAAS,KAAK0uJ,CAAU;AAAA,MACzC,CAAS,CACF;AAAA,IACP,GACUC,KAAc,CAAChuI,GAAQsG,GAAOooD,GAAS69E,MAAsB;AACjE,YAAM39I,IAAMoR,EAAO,KACb9oB,IAAO0X,EAAI,WACXokC,IAAU07B,EAAQ,SAClB5oB,IAAU4oB,EAAQ,SAAS,WAC3B/iB,IAAY+iB,EAAQ,SAAS;AACnC,aAAOuuD,GAASn3E,GAAS6F,IAAY+iB,EAAQ,QAAQ,IAAI,QAAQpoD,CAAK,EAAE,KAAK,CAAA03G,MAAQ;AACnF,cAAMiwB,IAAapD,GAAkBj8I,GAAK1X,GAAM8mI,EAAK,WAAWA,EAAK,QAAQl4E,GAAS6F,GAAW4gG,CAAiB;AAClH,YAAIa,GAAqBp6G,CAAO;AAC9B,iBAAO3zC,EAAS,KAAK;AAAA,YACnB,SAAS,CAAC;AAAA,cACN,SAAA2zC;AAAA,cACA,UAAUi7G;AAAA,cACV,QAAQA;AAAA,YACxB,CAAe;AAAA,YACH,UAAUjwB;AAAA,UACtB,CAAW;AACI;AACL,gBAAMkwB,IAAaC,GAAgBnuI,GAAQ0uD,EAAQ,mBAAmBsvD,EAAK,WAAWA,EAAK,QAAQ13G,GAAOimI,CAAiB,GACrH5iI,IAAUukI,EAAW,MAAM;AAAA,YAC/B,SAAS,CAAE;AAAA,YACX,UAAUlwB;AAAA,UACtB,CAAW,GACKl9G,IAAM6I,EAAQ;AAEpB,iBADckkI,GAAiBj/I,GAAKokC,GAASlyB,EAAI,WAAWA,EAAI,QAAQwF,GAAO4nI,EAAW,OAAQ,CAAA,EACrF,IAAI,CAAApM,MAAY;AAC3B,kBAAMsM,IAAelD,GAA2Bt8I,GAAK1X,GAAM4qJ,GAAUyK,CAAiB;AACtF,mBAAO;AAAA,cACL,SAAS5iI,EAAQ,QAAQ,OAAO,CAAC;AAAA,gBAC7B,SAAAqpB;AAAA,gBACA,UAAUo7G;AAAA,gBACV,QAAQH;AAAA,cAC1B,CAAiB,CAAC;AAAA,cACJ,UAAUn+G,GAAMgyG,EAAS,gBAAgBA,EAAS,WAAW;AAAA,YAC3E;AAAA,UACA,CAAW;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,GACUqM,KAAkB,CAACnuI,GAAQ4zB,GAAUhjC,GAAMpa,GAAQ8vB,GAAOimI,MAAsB;AACpF,YAAM39I,IAAMoR,EAAO;AACnB,aAAO+8G,GAAWnsH,GAAMpa,GAAQoY,EAAI,SAAS,EAAE,KAAK,CAAAy/I,MAAW;AAC7D,cAAMv9I,IAAO66I,GAAc/8I,GAAK0X,GAAO1V,GAAMpa,CAAM;AACnD,iBAAS5X,IAAI,GAAGA,IAAIg1D,EAAS,QAAQh1D,KAAK;AACxC,gBAAMo0D,IAAUY,EAASh1D,CAAC;AAC1B,cAAI,CAACupB,GAAS2I,GAAMkiC,EAAQ,GAAG;AAC7B;AAEF,gBAAMs7G,IAAyB16G,EAAS;AACxC,UAAA06G,EAAuB,OAAO1vK,GAAG,CAAC;AAClC,gBAAMmZ,IAASi2J,GAAYhuI,GAAQsG,GAAO;AAAA,YACxC,SAAA0sB;AAAA,YACA,mBAAmBs7G;AAAA,YACnB,UAAUD;AAAA,UACX,GAAE9B,CAAiB;AACpB,cAAIx0J,EAAO,YAAYvB,IAAS;AAC9B,mBAAO23J,GAAgBnuI,GAAQ4zB,GAAUhjC,GAAMpa,IAAS,GAAG8vB,GAAOimI,CAAiB;AAErF,cAAIx0J,EAAO;AACT,mBAAOA;AAAA,QAEV;AACD,eAAOsH,EAAS;MACxB,CAAO;AAAA,IACP,GACUkvJ,KAAe,CAACvuI,GAAQgzB,GAASw7G,MAAiB;AACtD,MAAAxuI,EAAO,UAAU,OAAOwuI,CAAY,GAChCx7G,EAAQ,SAAS,kBACnB1yC,EAAO0yC,EAAQ,QAAQ,CAAAO,MAAU;AAC/B,QAAAvzB,EAAO,UAAU,MAAMuzB,CAAM;AAAA,MACvC,CAAS,IAEDvzB,EAAO,YAAYgzB,EAAQ,KAAK,IAAOA,EAAQ,KAAK;AAAA,IAE5D,GACUy7G,KAA0B,CAACzuI,GAAQgzB,GAASt8B,GAAQnE,MAAW;AACnE,YAAMm8I,IAAc/B,GAAgB3sI,EAAO,KAAKtJ,CAAM;AACtD,MAAA00I,GAAUprI,EAAO,KAAK0uI,GAAan8I,CAAM,GACzCg8I,GAAavuI,GAAQgzB,GAAS07G,CAAW;AAAA,IAC/C,GACUC,KAA0B,CAAC3uI,GAAQgzB,GAAS47G,GAAaC,GAAWt8I,MAAW;AACnF,YAAM3D,IAAMoR,EAAO,KACb8uI,IAAiBnC,GAAgB/9I,GAAKigJ,CAAS,GAC/CE,IAAmBpC,GAAgB/9I,GAAKggJ,CAAW;AACzD,MAAAxD,GAAUx8I,GAAKmgJ,GAAkBx8I,CAAM,GACvC64I,GAAUx8I,GAAKkgJ,GAAgBv8I,CAAM;AACrC,YAAMy8I,IAAgB;AAAA,QACpB,QAAQJ,EAAY;AAAA,QACpB,OAAOA,EAAY;AAAA,QACnB,KAAKC,EAAU;AAAA,MACvB,GACYL,IAAe7B,GAAgB/9I,GAAKogJ,CAAa;AACvD,MAAAT,GAAavuI,GAAQgzB,GAASw7G,CAAY;AAAA,IAChD,GACUS,KAAa,CAACrgJ,GAAKie,MAAY;AACnC,YAAMggI,IAAe9kH,GAAW,iBAAiB,GAC3CmnH,IAAkBtuJ,GAAMisB,GAAS,CAAChsB,GAAK01B,MAAU;AACrD,cAAMs4H,IAAYjC,GAAah+I,GAAKi+I,IAAe,OAAQhsJ,EAAI,MAAQ,IAAG01B,EAAM,MAAM;AACtF,eAAO11B,EAAI,OAAO,CAAC;AAAA,UACf,GAAG01B;AAAA,UACH,WAAAs4H;AAAA,QACD,CAAA,CAAC;AAAA,MACL,GAAE,CAAE,CAAA;AACL,aAAOjuJ,GAAMsuJ,GAAiB,CAACruJ,GAAK01B,MAAU;AAC5C,cAAMruB,IAAMgnJ,EAAgB,SAASruJ,EAAI,SAAS,GAC5C+tJ,IAAcxB,GAAqB72H,EAAM,OAAO,IAAIA,EAAM,YAAYq2H,GAAah+I,GAAKi+I,IAAe,SAAU3kJ,CAAK,IAAGquB,EAAM,QAAQ;AAC7I,eAAO11B,EAAI,OAAO,CAAC;AAAA,UACf,GAAG01B;AAAA,UACH,aAAAq4H;AAAA,QACD,CAAA,CAAC;AAAA,MACL,GAAE,CAAE,CAAA;AAAA,IACX,GACUO,KAAe,CAAAv7G,MAAYjyC,GAAKiyC,GAAU,CAACt5D,GAAGwV,MAAMA,EAAE,IAAI,SAASxV,EAAE,IAAI,MAAM,GAC/E80K,KAAiB,CAACviI,GAASwiI,MAA8B;AAC7D,YAAMC,IAAiBjuJ,GAAOwrB,GAAS,CAAA0J,MAASn2B,EAAOivJ,GAA2B,CAAAE,MAAeh5H,EAAM,QAAQ,UAAUg5H,EAAY,QAAQ,SAASh5H,EAAM,QAAQ,QAAQg5H,EAAY,QAAQ,GAAG,CAAC;AACpM,aAAI1iI,EAAQ,WAAWwiI,EAA0B,SAC3CC,IACKziI,IAEAwiI,IAGJxiI,EAAQ,SAASwiI,EAA0B,SAASxiI,IAAUwiI;AAAA,IAC3E,GACUG,KAAe,CAACxvI,GAAQsG,GAAO1V,GAAMpa,GAAQg1J,GAAYe,MAAsB;AACnF,YAAM1/H,IAAUshI,GAAgBnuI,GAAQwrI,EAAW,gBAAgB56I,GAAMpa,GAAQ8vB,GAAOimI,CAAiB,EAAE,KAAK,MAAM,CAAA,GAAI,CAAAx0J,MAAUA,EAAO,OAAO,GAC5Is3J,IAA4BlB,GAAgBnuI,GAAQmvI,GAAa3D,EAAW,cAAc,GAAG56I,GAAMpa,GAAQ8vB,GAAOimI,CAAiB,EAAE,KAAK,MAAM,CAAE,GAAE,CAAAx0J,MAAUA,EAAO,OAAO;AAClL,aAAOq3J,GAAeviI,GAASwiI,CAAyB;AAAA,IAC9D,GACUI,KAAe,CAACzvI,GAAQ6M,MAAY;AACxC,UAAIA,EAAQ,WAAW;AACrB;AAEF,YAAMje,IAAMoR,EAAO,KACb+iC,IAAW/iC,EAAO,UAAU,YAAW,GACvC0vI,IAAqBT,GAAWrgJ,GAAKie,CAAO;AAClD,MAAAvsB,EAAOovJ,GAAoB,CAAAn5H,MAAS;AAClC,cAAMjQ,IAAQ1X,EAAI,UAAU2nB,EAAM,YAAY,OAAO3nB,EAAI,OAAO,GAC1D2D,IAAS,CAAA3B,MAAQA,MAAS0V;AAChC,QAAI8mI,GAAqB72H,EAAM,OAAO,IACpCk4H,GAAwBzuI,GAAQuW,EAAM,SAASA,EAAM,WAAWhkB,CAAM,IAEtEo8I,GAAwB3uI,GAAQuW,EAAM,SAASA,EAAM,aAAaA,EAAM,WAAWhkB,CAAM,GAE3F46I,GAAav+I,GAAK2nB,EAAM,WAAWhkB,CAAM,GACzC46I,GAAav+I,GAAK2nB,EAAM,aAAahkB,CAAM;AAAA,MACnD,CAAO,GACDyN,EAAO,UAAU,eAAe+iC,CAAQ;AAAA,IAC9C,GAEU4sG,KAAc,CAAC3vI,GAAQwrI,MAAe;AAC1C,YAAMp1J,IAAM4pB,EAAO,UAAU,OAAM;AACnC,aAAOsrI,GAAetrI,GAAQ5pB,CAAG,EAAE,IAAI,CAAAkwB,MAAS;AAC9C,YAAI1/B;AACJ,cAAM4P,IAAS,KAAK,IAAI,GAAGJ,EAAI,WAAW,GACpCw5J,IAAoBrE,GAA2BC,GAAYllI,IAAQ1/B,IAAK0/B,EAAM,iBAAiB,QAAQ1/B,MAAO,SAASA,IAAK,EAAE,GAC9HipK,IAAgBL,GAAaxvI,GAAQsG,GAAOlwB,EAAI,gBAAgBI,GAAQo5J,GAAmB,EAAI,GAC/FE,IAAexD,GAAetsI,GAAQsG,GAAOspI,GAAmB,EAAI;AAC1E,eAAIE,EAAa,SAAS,KAAKD,EAAc,SAAS,KACpD7vI,EAAO,YAAY,OACnBA,EAAO,YAAY,MAAM,MAAM;AAC7B,UAAAA,EAAO,YAAY,kBAAkB;AAAA,QACjD,GAAa,MAAM;AACP,UAAAD,EAASC,CAAM,GACfyvI,GAAazvI,GAAQ6vI,CAAa,GAClCpD,GAAezsI,GAAQ8vI,CAAY;AACnC,gBAAMtuI,IAAQxB,EAAO,UAAU,OAAM,GAC/Bg+G,IAAOjB,GAAWv7G,EAAM,gBAAgBA,EAAM,aAAaxB,EAAO,IAAI,QAAO,CAAE;AACrF,UAAAA,EAAO,YAAY,kBAAkB,GACrCg+G,EAAK,KAAK,CAAAl/I,MAAK;AACb,kBAAM8xB,IAAO9xB,EAAE;AACf,YAAI8xB,EAAK,KAAK,OAAO9xB,EAAE,SAAS,CAAC,MAAMy+B,OACrC3M,EAAK,WAAW9xB,EAAE,SAAS,GAAG,CAAC,GAC/BqsK,GAAgBnrI,EAAO,KAAKpP,EAAK,YAAY,CAAA12B,MAAKA,MAAM8lC,EAAO,IAAI,QAAS,CAAA;AAAA,UAE5F,CAAa;AAAA,QACb,CAAW,GACM,MAEF;AAAA,MACf,CAAO,EAAE,MAAM,EAAK;AAAA,IACpB,GACU+vI,KAAkB,CAAC/vI,GAAQwrI,MAAe;AAC9C,YAAMp1J,IAAM4pB,EAAO,UAAU,OAAM;AACnC,MAAAsrI,GAAetrI,GAAQ5pB,CAAG,EAAE,IAAI,CAAAkwB,MAAS;AACvC,cAAM9vB,IAAS,KAAK,IAAI,GAAGJ,EAAI,cAAc,CAAC,GACxCq1J,IAAaE,GAAc3rI,EAAO,KAAKsG,GAAOlwB,EAAI,gBAAgBI,CAAM,GACxEo5J,IAAoBrE,GAA2BC,GAAYllI,GAAOmlI,CAAU,GAC5EoE,IAAgBL,GAAaxvI,GAAQsG,GAAOlwB,EAAI,gBAAgBI,GAAQo5J,GAAmB,EAAK;AACtG,QAAIC,EAAc,SAAS,KACzB7vI,EAAO,YAAY,SAAS,MAAM;AAChC,UAAAyvI,GAAazvI,GAAQ6vI,CAAa;AAAA,QAC9C,CAAW;AAAA,MAEX,CAAO;AAAA,IACP,GACUG,KAAgB,CAACC,GAAO97I,GAAOrX,MAAc;AACjD,eAASle,IAAI,GAAGA,IAAIqxK,EAAM,QAAQrxK;AAChC,YAAIke,EAAUmzJ,EAAMrxK,CAAC,GAAGu1B,CAAK;AAC3B,iBAAO;AAGX,aAAO;AAAA,IACb,GACU+7I,KAAe,CAACD,GAAO97I,MAAU67I,GAAcC,GAAO97I,GAAO,CAACsuB,GAAMtuB,MACjEsuB,MAAStuB,EAAM,WAAW,CAAC67C,GAAG,gBAAgB77C,CAAK,CAC3D,GACKg8I,KAAgB,CAAC9mF,GAAOl1D,MAAU67I,GAAc3mF,GAAOl1D,GAAO,CAACsX,GAAKtX,MACjEsX,EAAI,WAAW,CAAC,MAAMtX,EAAM,QACpC,GAEKi8I,KAAU,CAAApwI,MAAU;AACxB,YAAMqwI,IAAY;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,GACYC,IAAW,CAAC,EAAE,GACdC,IAAgB,MAAMz8G,GAAiBsG,GAAgBp6B,CAAM,GAAGq6B,GAAsBr6B,CAAM,CAAC,GAC7FwwI,IAAqB,MAAM31G,GAAsB76B,CAAM;AAC7D,MAAAA,EAAO,GAAG,WAAW,CAAA9lC,MAAK;AACxB,YAAIA,EAAE,YAAY,MAAM,CAAC81E,GAAG,gBAAgB91E,CAAC,KAAK8lC,EAAO,UAAU,YAAW,GAAI;AAChF,gBAAMwrI,IAAa+E;AAEnB,WADoB/E,EAAW,eAAe,SAAS,KAAKA,EAAW,cAAc,SAAS,KAAKgF,EAAkB,MAClGb,GAAY3vI,GAAQwrI,CAAU,KAC/CtxK,EAAE,eAAc;AAAA,QAEnB;AAAA,MACF,GAAE,EAAI;AACP,YAAMu2K,IAAsB,MAAM;AAChC,YAAIzwI,EAAO,UAAU,eAAe;AAClC,gBAAMwrI,IAAa+E;AAEnB,WADoB/E,EAAW,eAAe,SAAS,KAAKgF,QAE1DT,GAAgB/vI,GAAQwrI,CAAU;AAAA,QAErC;AAAA,MACT;AACM,MAAAxrI,EAAO,GAAG,SAAS,CAAA9lC,MAAK;AACtB,QAAIg2K,GAAaI,GAAUp2K,CAAC,KAC1Bu2K;MAEV,CAAO,GACDzwI,EAAO,GAAG,YAAY,CAAA9lC,MAAK;AACzB,QAAIi2K,GAAcE,GAAWn2K,CAAC,KAC5BijF,GAAM,iBAAiBn9C,GAAQywI,CAAmB;AAAA,MAE5D,CAAO;AAAA,IACP,GAEUC,KAAU,CAAA1wI,MAAU;AACxB,MAAAowI,GAAQpwI,CAAM;AAAA,IACpB,GAEU2wI,KAAS,CAAA3wI,MAAU;AACvB,YAAM4wI,IAAO1kJ,GAAM,MACb2kJ,IAAY7gG,GAAG,WAAWo0C,IAASp0C,GAAG,QAAQphD,IAAMoR,EAAO,KAAKiwB,IAAYjwB,EAAO,WAAWs7D,IAASt7D,EAAO,QAC9G9a,IAAUmG,GAAI,SACdylJ,IAAU5rJ,EAAQ,aAClB6rJ,IAAW7rJ,EAAQ,WAAY,KAAIA,EAAQ,SAAQ,GACnD8rJ,IAAQ3lJ,GAAI,WAAW,SAAU,KAAIA,GAAI,WAAW,UACpDsxH,IAAQtxH,GAAI,GAAG,QAAS,KAAIA,GAAI,GAAG,SACnC4lJ,IAAwB,CAACz9G,IAAKxqB,OAAU;AAC5C,YAAI;AACF,UAAAhJ,EAAO,OAAQ,EAAC,YAAYwzB,IAAK,IAAO,OAAOxqB,EAAK,CAAC;AAAA,QACtD,QAAY;AAAA,QACZ;AAAA,MACT,GACYkoI,IAAqB,CAAAh3K,OAClBA,GAAE,sBAELi3K,IAA0B,MAAM;AACpC,cAAMC,KAAe,CAAAh7J,OAAO;AAC1B,gBAAMgjB,KAAOxK,EAAI,OAAO,MAAM,GACxByiJ,KAAWj7J,GAAI;AACrB,iBAAAgjB,GAAK,YAAYi4I,EAAQ,GAClBphH,EAAU,WAAW,UAAU72B,IAAM,EAAE,QAAQ,OAAM,CAAE;AAAA,QACxE,GACck4I,KAAsB,CAAAl7J,OAAO;AACjC,gBAAM65C,KAAYmhH,GAAah7J,EAAG,GAC5Bm7J,KAAS3iJ,EAAI;AACnB,UAAA2iJ,GAAO,WAAWvxI,EAAO,QAAS,CAAA;AAClC,gBAAMwxI,KAAeJ,GAAaG,EAAM;AACxC,iBAAOthH,OAAcuhH;AAAA,QAC/B;AACQ,QAAAxxI,EAAO,GAAG,WAAW,CAAA9lC,OAAK;AACxB,gBAAM4lG,KAAU5lG,GAAE;AAClB,cAAI,CAACg3K,EAAmBh3K,EAAC,MAAM4lG,OAAYskB,KAAUtkB,OAAY+wE,MAAc7wI,EAAO,UAAU,WAAU,GAAI;AAC5G,kBAAM2mE,KAAc3mE,EAAO,UAAU,YAAW,GAC1C5G,KAAO4G,EAAO;AAIpB,gBAHI2mE,MAAe,CAACxiE,GAAUpT,EAAa,QAAQqI,EAAI,CAAC,KAGpD,CAACutE,MAAe,CAAC2qE,GAAoBtxI,EAAO,UAAU,OAAM,CAAE;AAChE;AAEF,YAAA9lC,GAAE,eAAc,GAChB8lC,EAAO,WAAW,EAAE,GAChB5G,GAAK,cAAcxK,EAAI,QAAQwK,GAAK,UAAU,IAChD4G,EAAO,UAAU,kBAAkB5G,GAAK,YAAY,CAAC,IAErD4G,EAAO,UAAU,kBAAkB5G,IAAM,CAAC,GAE5C4G,EAAO,YAAW;AAAA,UACnB;AAAA,QACX,CAAS;AAAA,MACT,GACYyxI,IAAY,MAAM;AACtB,QAAAzxI,EAAO,UAAU,IAAI,UAAU,MAAM,WAAW;AAAA,MACxD,GACY0xI,IAA8B,MAAM;AACxC,QAAK1xI,EAAO,UACVpR,EAAI,KAAKoR,EAAO,OAAM,GAAI,qBAAqB,CAAA9lC,OAAK;AAClD,cAAIkc;AACJ,cAAIlc,GAAE,WAAW8lC,EAAO,OAAM,EAAG;AAG/B,gBAFA5pB,KAAM65C,EAAU,UAChBjwB,EAAO,UAAU,SACb9lC,GAAE,SAAS,aAAa;AAC1B,kBAAImmC,GAAmBjqB,GAAI,cAAc;AACvC;AAEF,cAAA65C,EAAU,aAAa/1D,GAAE,SAASA,GAAE,OAAO;AAAA,YAC3D;AACgB,cAAA+1D,EAAU,OAAO75C,EAAG;AAAA,QAGpC,CAAW;AAAA,MAEX,GACYu7J,KAAsB,MAAM;AAChC,QAAA3xI,EAAO,GAAG,WAAW,CAAA9lC,OAAK;AACxB,cAAI,CAACg3K,EAAmBh3K,EAAC,KAAKA,GAAE,YAAY22K,GAAW;AACrD,gBAAI,CAAC7wI,EAAO,QAAO,EAAG,qBAAqB,IAAI,EAAE;AAC/C;AAEF,gBAAIiwB,EAAU,iBAAiBA,EAAU,OAAQ,EAAC,gBAAgB,GAAG;AACnE,oBAAMr/B,KAAOq/B,EAAU,WACjB2hH,KAAkBhhJ,GAAK;AAC7B,kBAAIA,GAAK,aAAa,MAAM;AAC1B,gBAAAhC,EAAI,OAAOgC,EAAI,GACf12B,GAAE,eAAc;AAChB;AAAA,cACD;AACD,cAAI03K,MAAmBA,GAAgB,YAAYA,GAAgB,SAAS,YAAa,MAAK,SAC5FhjJ,EAAI,OAAOgjJ,EAAe,GAC1B13K,GAAE,eAAc;AAAA,YAEnB;AAAA,UACF;AAAA,QACX,CAAS;AAAA,MACT,GACY6kF,KAAY,MAAM;AACtB,QAAK,MAAM,UAAU,kBACnB/+C,EAAO,GAAG,aAAa,CAAA9lC,OAAK;AAC1B,cAAI,CAACg3K,EAAmBh3K,EAAC,KAAKA,GAAE,OAAO,aAAa,QAAQ;AAC1D,kBAAMk/B,KAAO4G,EAAO;AACpB,YAAA5G,GAAK,KAAI,GACT+jD,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,cAAA5G,GAAK,MAAK;AAAA,YAC1B,CAAe;AAAA,UACF;AAAA,QACb,CAAW;AAAA,MAEX,GACYy4I,KAAwB,MAAM;AAClC,cAAMC,KAAwB94G,GAAyBh5B,CAAM;AAC7D,QAAAA,EAAO,GAAG,SAAS,CAAA9lC,OAAK;AACtB,gBAAMgvB,KAAShvB,GAAE;AACjB,UAAI,aAAa,KAAKgvB,GAAO,QAAQ,KAAK0F,EAAI,WAAW1F,EAAM,MAC7DhvB,GAAE,eAAc,GAChB8lC,EAAO,UAAU,OAAO9W,EAAM,GAC9B8W,EAAO,YAAW,IAEhB9W,GAAO,aAAa,OAAO0F,EAAI,SAAS1F,IAAQ4oJ,EAAqB,KAAK5oJ,GAAO,WAAW,WAAW,KAAK0F,EAAI,WAAW1F,GAAO,UAAU,MAC9IhvB,GAAE,eAAc,GAChB+1D,EAAU,OAAO/mC,EAAM;AAAA,QAEnC,CAAS;AAAA,MACT,GACY6oJ,KAA8C,MAAM;AACxD,cAAMC,KAA4B,MAAM;AACtC,gBAAMz/D,KAAW3jF,EAAI,WAAWqhC,EAAU,WAAW,UAAU,EAAK,CAAC;AACrE,iBAAO,MAAM;AACX,kBAAM/mC,KAAS+mC,EAAU;AACzB,YAAI/mC,OAAW8W,EAAO,cACpBpR,EAAI,UAAU1F,IAAQ,SAAS,IAAI,GACnC0nJ,EAAKr+D,IAAU,CAAAjjF,OAAQ;AACrB,cAAApG,GAAO,iBAAiBoG,GAAK,UAAU,EAAI,CAAC;AAAA,YAC5D,CAAe;AAAA,UAEf;AAAA,QACA,GACc2iJ,KAA4B,MACzB,CAAChiH,EAAU,YAAa,KAAIrhC,EAAI,UAAUqhC,EAAU,YAAYrhC,EAAI,OAAO,MAAMA,EAAI,UAAUqhC,EAAU,UAAUrhC,EAAI,OAAO;AAEvI,QAAAoR,EAAO,GAAG,YAAY,CAAA9lC,OAAK;AACzB,cAAI2xJ;AACJ,iBAAI,CAACqlB,EAAmBh3K,EAAC,MAAMA,GAAE,YAAY,KAAKA,GAAE,YAAY,OAAO+3K,GAAyB,KAC9FpmB,KAAkBmmB,GAAyB,GAC3ChyI,EAAO,OAAQ,EAAC,YAAY,UAAU,EAAK,GAC3C6rH,MACA3xJ,GAAE,eAAc,GACT,MAEA;AAAA,QAEnB,CAAS,GACD00B,EAAI,KAAKoR,EAAO,OAAM,GAAI,OAAO,CAAA9lC,OAAK;AACpC,cAAI,CAACg3K,EAAmBh3K,EAAC,KAAK+3K,GAAyB,GAAI;AACzD,kBAAMpmB,KAAkBmmB;AACxB,YAAA70F,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,cAAA6rH;YACd,CAAa;AAAA,UACF;AAAA,QACX,CAAS;AAAA,MACT,GACYqmB,KAA6B,MAAM;AACvC,QAAAlyI,EAAO,GAAG,WAAW,CAAA9lC,OAAK;AACxB,cAAI,CAACg3K,EAAmBh3K,EAAC,KAAKA,GAAE,YAAY22K,KACtC5gH,EAAU,iBAAiBA,EAAU,OAAQ,EAAC,gBAAgB,GAAG;AACnE,kBAAM2hH,KAAkB3hH,EAAU,QAAO,EAAG;AAC5C,gBAAI2hH,MAAmBA,GAAgB,YAAYA,GAAgB,SAAS,YAAa,MAAK;AAC5F,qBAAA13K,GAAE,eAAc,GACT;AAAA,UAEV;AAEH,iBAAO;AAAA,QACjB,CAAS;AAAA,MACT,GACYi4K,KAA8B,MAAM;AACxC,QAAAnyI,EAAO,GAAG,WAAW,CAAA9lC,OAAK;AACxB,cAAIg3K,EAAmBh3K,EAAC,KAAKA,GAAE,YAAY81E,GAAG;AAC5C;AAEF,cAAI55D,KAAM65C,EAAU;AACpB,gBAAMh4B,KAAY7hB,GAAI,gBAChBI,KAASJ,GAAI,aACbc,KAAO0X,EAAI;AACjB,cAAIwD,KAAS6F;AACb,cAAI,GAAC7hB,GAAI,aAAaI,OAAW,IAGjC;AAAA,mBAAO4b,GAAO,cAAcA,GAAO,WAAW,eAAeA,MAAUA,GAAO,eAAelb;AAC3F,cAAAkb,KAASA,GAAO;AAElB,YAAIA,GAAO,aAAa,iBACtB4N,EAAO,UAAU,OAAO,cAAc,QAAW5N,EAAM,GACvDhc,KAAMwY,EAAI,aACVxY,GAAI,SAAS6hB,IAAW,CAAC,GACzB7hB,GAAI,OAAO6hB,IAAW,CAAC,GACvBg4B,EAAU,OAAO75C,EAAG;AAAA;AAAA,QAEhC,CAAS;AAAA,MACT,GACYg8J,KAAyB,MAAM;AACnC,cAAMC,KAAU,MAAM;AACpB,UAAApB,EAAsB,gBAAgB,EAAK,GAC3CA,EAAsB,4BAA4B,EAAK,GAClD95G,GAAkBn3B,CAAM,KAC3BixI,EAAsB,wBAAwB,EAAK;AAAA,QAE/D;AACQ,QAAKz4G,GAAax4B,CAAM,KACtBA,EAAO,GAAG,+BAA+BqyI,EAAO;AAAA,MAE1D,GACYC,KAAsB,MAAM;AAChC,cAAMC,KAAW,MAAM;AACrB,UAAA3B,EAAKhiJ,EAAI,OAAO,yBAAyB,GAAG,CAAAgC,OAAQ;AAClD,gBAAIhqB;AACJ,gBAAI85B,KAAa9P,GAAK;AACtB,kBAAM1Z,KAAO0X,EAAI;AACjB,iBAAK8R,MAAe,OAAgC,SAASA,GAAW,eAAe9P,IAAM;AAC3F,qBAAO8P,MAAc,CAAC9R,EAAI,QAAQ8R,EAAU,KAAG;AAC7C,sBAAM95B,KAAK85B,GAAW,gBAAgB,QAAQ95B,OAAO,SAAS,SAASA,GAAG,eAAe85B,MAAcA,OAAexpB;AACpH;AAEF,gBAAAwpB,KAAaA,GAAW;AAAA,cACzB;AACD,cAAA9R,EAAI,IAAI8R,IAAY,MAAM,EAAE,kBAAkB,EAAC,CAAE;AAAA,YAClD;AAAA,UACb,CAAW;AAAA,QACX;AACQ,QAAAV,EAAO,GAAG,0BAA0B,CAAA9lC,OAAK;AACvC,WAAIA,GAAE,SAAS,gBAAgBA,GAAE,YAAY,oBAC3Cq4K;QAEZ,CAAS;AAAA,MACT,GACYC,KAAsB,MAAM;AAChC,QAAAxyI,EAAO,GAAG,QAAQ,MAAM;AACtB,UAAAixI,EAAsB,6BAA6Bz7G,GAAmBx1B,CAAM,CAAC;AAAA,QACvF,CAAS;AAAA,MACT,GACYyyI,KAAuB,CAAAzyI,OAAU;AACrC,cAAM5G,KAAO4G,GAAO,WACd5pB,KAAM4pB,GAAO,UAAU,OAAM;AACnC,eAAO5pB,GAAI,mBAAmBA,GAAI,gBAAgBA,GAAI,mBAAmBgjB,MAAQhjB,GAAI,gBAAgB,KAAKA,GAAI,cAAcgjB,GAAK,WAAW;AAAA,MACpJ,GACYylD,KAAqB,MAAM;AAC/B,QAAA7+C,EAAO,GAAG,yBAAyB,CAAA9lC,OAAK;AACtC,UAAI,CAAC81E,GAAG,gBAAgB91E,EAAC,KAAK,CAACu4K,GAAqBzyI,CAAM,KACxDiwB,EAAU,UAAS;AAAA,QAEtB,GAAE,EAAI;AAAA,MACf,GACYyiH,KAAsB,MAAM;AAChC,QAAA1yI,EAAO,cAAc,KAAK,iFAAqG;AAAA,MACvI,GACY2yI,KAAwB,MAAM;AAClC,QAAK3yI,EAAO,UACVA,EAAO,GAAG,WAAW,MAAM;AACzB,UAAI,SAAS,kBAAkB,SAAS,QACtCA,EAAO,SAAS;QAE9B,CAAW;AAAA,MAEX,GACY4yI,KAAa,MAAM;AACvB,QAAK5yI,EAAO,WACVA,EAAO,cAAc,KAAK,0BAA0B,GACpDA,EAAO,GAAG,SAAS,CAAA9lC,OAAK;AACtB,cAAIkc;AACJ,UAAIlc,GAAE,OAAO,aAAa,WACxBkc,KAAM4pB,EAAO,UAAU,UACvBA,EAAO,UAAU,SACjBA,EAAO,UAAU,OAAO5pB,EAAG,GAC3B4pB,EAAO,UAAU,aACjBA,EAAO,YAAW;AAAA,QAEhC,CAAW;AAAA,MAEX,GACY6yI,KAA0B,MAAM;AACpC,QAAIl2B,KACF38G,EAAO,GAAG,WAAW,CAAA9lC,OAAK;AACxB,UAAI81E,GAAG,eAAe91E,EAAC,KAAK,CAACA,GAAE,aAAaA,GAAE,YAAY,MAAMA,GAAE,YAAY,QAC5EA,GAAE,eAAc,GACE8lC,EAAO,UAAU,OAAM,EAC/B,OAAO,QAAQ9lC,GAAE,YAAY,KAAK,aAAa,WAAW,cAAc;AAAA,QAEhG,CAAW;AAAA,MAEX,GACY44K,KAAoB,MAAM;AAC9B,QAAA9yI,EAAO,GAAG,SAAS,CAAA9lC,OAAK;AACtB,cAAIglC,KAAMhlC,GAAE;AACZ;AACE,gBAAIglC,GAAI,YAAY,KAAK;AACvB,cAAAhlC,GAAE,eAAc;AAChB;AAAA,YACD;AAAA,iBACMglC,KAAMA,GAAI;AAAA,QAC7B,CAAS,GACDc,EAAO,cAAc,KAAK,iDAAiD;AAAA,MACnF,GACY+yI,KAA8B,MAAM;AACxC,QAAA/yI,EAAO,GAAG,QAAQ,MAAM;AACtB,UAAAA,EAAO,IAAI,KAAKA,EAAO,QAAS,GAAE,UAAU,CAAA9lC,OAAK;AAC/C,YAAAA,GAAE,eAAc;AAAA,UAC5B,CAAW;AAAA,QACX,CAAS;AAAA,MACT,GACY84K,KAA4B,MAAM;AACtC,QAAA13E,EAAO,cAAc,MAAM,CAAA7jE,OAAS;AAClC,cAAI74B,KAAI64B,GAAM;AACd,iBAAO74B;AACL,YAAI64B,GAAM74B,EAAC,EAAE,KAAK,OAAO,MAAM,+BAC7B64B,GAAM74B,EAAC,EAAE;QAGvB,CAAS;AAAA,MACT,GACYq0K,KAAyBh1J,IACzB8gC,KAAW,MAAM;AACrB,YAAI,CAAC+xH,KAAW9wI,EAAO;AACrB,iBAAO;AAET,cAAMimC,KAAMjmC,EAAO,UAAU,OAAM;AACnC,eAAO,CAACimC,MAAO,CAACA,GAAI,cAAcA,GAAI,eAAe;AAAA,MAC7D,GACYitG,KAAW,MAAM;AACrB,QAAInC,MACFW,KACAG,MACAkB,MACAtB,KACIT,MACF2B,MACAC,MACAE,QAGAhC,MACF/xF,MACAqzF,MACAM,MACAG;MAEV,GACYM,KAAmB,MAAM;AAC7B,QAAAnzI,EAAO,GAAG,QAAQ,CAAA7L,OAAS;AACzB,cAAIvtB;AACJ,gBAAM2wC,MAAQ3wC,KAAKutB,GAAM,kBAAkB,QAAQvtB,OAAO,SAAS,SAASA,GAAG,QAAQ,WAAW;AAClG,UAAIyW,GAASk6B,EAAI,KAAK,eAAe,KAAKA,EAAI,KAC5CvX,EAAO,SAAS,WAAW,IAAI,OAAO,UAAU,WAAW7L,EAAK,CAAC;AAAA,QAE7E,CAAS;AAAA,MACT,GACYy1F,KAAQ,MAAM;AAClB,QAAAuoD,MACAhB,KACK9lJ,GAAI,gBACPwzD,MAEEkyF,MACFW,KACAG,MACAW,MACAO,MACAb,MACAc,MACIhC,KACF2B,MACAC,MACAE,QAEArB,MAGAX,MACFa,MACA5yF,MACAgzF,MACAK,MACAE,MACAI,MACAG,MACAX,MACAiB;MAEV;AACM,aAAI5pD,GAAMvpF,CAAM,IACdkzI,OAEAtpD,MAEK;AAAA,QACL,wBAAAqpD;AAAA,QACA,UAAAl0H;AAAA,MACR;AAAA,IACA,GAEUq0H,KAAQ14H,GAAS,KACjB24H,KAAc,CAACrzI,GAAQlP,MAAS;AACpC,YAAMsI,IAAOrI,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC5C/H,IAAYnE,GAAkBD,GAAYuF,CAAI,CAAC,GAC/CivC,IAAQt3C,EAAa,QAAQ,OAAO;AAC1C,MAAAlC,GAAMw5C,GAAO,QAAQ,UAAU,GAC/BzxC,GAASyxC,GAAOt3C,EAAa,SAASD,CAAI,CAAC,GAC3C8F,GAASqB,GAAWowC,CAAK,GACzBroC,EAAO,GAAG,UAAU,MAAM;AACxB,QAAA5I,GAASixC,CAAK;AAAA,MACtB,CAAO;AAAA,IACP,GACUirG,KAAc,CAAAtzI,MAAUA,EAAO,SAASA,EAAO,WAAU,EAAG,SAAS,YAAa,IAAG,QACrFuzI,KAAkB,CAAA/wJ,MAAOU,GAASV,GAAK,CAAAzS,MAAK2N,GAAY3N,CAAC,MAAM,EAAK,GACpEyjK,KAAmB,CAAAxzI,MAAU;AACjC,YAAMlC,IAAYkC,EAAO,QAAQ,KAC3B6rE,IAAY7rE,EAAO,aAAa;AACtC,aAAOuzI,GAAgB;AAAA,QACrB,4BAA4Bz1I,EAAU,4BAA4B;AAAA,QAClE,sBAAsBA,EAAU,sBAAsB;AAAA,QACtD,qBAAqBA,EAAU,qBAAqB;AAAA,QACpD,4BAA4BA,EAAU,4BAA4B;AAAA,QAClE,mBAAmBA,EAAU,mBAAmB;AAAA,QAChD,0BAA0BA,EAAU,0BAA0B;AAAA,QAC9D,uBAAuBA,EAAU,uBAAuB;AAAA,QACxD,wBAAwBA,EAAU,wBAAwB;AAAA,QAC1D,mBAAmBA,EAAU,mBAAmB;AAAA,QAChD,yBAAyBA,EAAU,yBAAyB;AAAA,QAC5D,mBAAmBA,EAAU,mBAAmB;AAAA,QAChD,yBAAyBA,EAAU,yBAAyB;AAAA,QAC5D,gBAAgBA,EAAU,gBAAgB;AAAA,QAC1C,eAAeA,EAAU,eAAe;AAAA,QACxC,WAAWw1I,GAAYtzI,CAAM;AAAA,QAC7B,iBAAiBlC,EAAU,iBAAiB;AAAA,QAC5C,UAAUA,EAAU,kBAAkB;AAAA,QACtC,UAAU;AAAA,QACV,YAAY+tE;AAAA,QACZ,UAAU7rE,EAAO,OAAQ;AAAA,MACjC,CAAO;AAAA,IACP,GACUyzI,KAAmB,CAAAzzI,MAAU;AACjC,YAAMlC,IAAYkC,EAAO,QAAQ;AACjC,aAAOuzI,GAAgB;AAAA,QACrB,iBAAiBz1I,EAAU,iBAAiB;AAAA,QAC5C,yBAAyBA,EAAU,yBAAyB;AAAA,QAC5D,kBAAkBA,EAAU,kBAAkB;AAAA,QAC9C,gBAAgBA,EAAU,gBAAgB;AAAA,QAC1C,QAAQA,EAAU,QAAQ;AAAA,QAC1B,gBAAgBA,EAAU,gBAAgB;AAAA,QAC1C,eAAeA,EAAU,eAAe;AAAA,QACxC,gBAAgBA,EAAU,gBAAgB;AAAA,QAC1C,cAAcA,EAAU,cAAc;AAAA,QACtC,aAAaA,EAAU,aAAa;AAAA,QACpC,kCAAkCA,EAAU,oBAAoB;AAAA,MACxE,CAAO;AAAA,IACP,GACU41I,KAAuB,CAAA1zI,MAAU;AACrC,YAAMlC,IAAYkC,EAAO,QAAQ;AACjC,aAAO;AAAA,QACL,GAAGwzI,GAAiBxzI,CAAM;AAAA,QAC1B,GAAGyzI,GAAiBzzI,CAAM;AAAA,QAC1B,GAAGuzI,GAAgB;AAAA,UACjB,qBAAqBz1I,EAAU,qBAAqB;AAAA,UACpD,mBAAmBA,EAAU,mBAAmB;AAAA,UAChD,eAAeA,EAAU,eAAe;AAAA,UACxC,qBAAqBA,EAAU,qBAAqB;AAAA,UACpD,gBAAgBA,EAAU,gBAAgB;AAAA,UAC1C,UAAUA,EAAU,UAAU;AAAA,UAC9B,iBAAiBA,EAAU,iBAAiB;AAAA,UAC5C,QAAQA,EAAU,QAAQ;AAAA,UAC1B,cAAcA,EAAU,cAAc;AAAA,UACtC,eAAeA,EAAU,eAAe;AAAA,QAClD,CAAS;AAAA,MACT;AAAA,IACA,GACU61I,KAAe,CAAA3zI,MAAU;AAC7B,YAAMs7D,IAASyhB,GAAUy2D,GAAiBxzI,CAAM,GAAGA,EAAO,MAAM;AAChE,aAAAs7D,EAAO,mBAAmB,2BAA2B,CAAC7jE,GAAOrU,MAAS;AACpE,cAAMwL,IAAMoR,EAAO,KACbwa,IAAe,cAAcp3B;AACnC,YAAI,IAAIqU,EAAM;AACd,eAAO,OAAK;AACV,gBAAM7G,IAAO6G,EAAM,CAAC;AACpB,cAAI9f,IAAQiZ,EAAK,KAAKxN,CAAI;AAC1B,cAAIzL,KAAS,CAACiZ,EAAK,KAAK4pB,CAAY,GAAG;AACrC,gBAAI7iC,EAAM,QAAQ,OAAO,MAAM,KAAKA,EAAM,QAAQ,OAAO,MAAM;AAC7D;AAEF,YAAIyL,MAAS,WACXzL,IAAQiX,EAAI,eAAeA,EAAI,WAAWjX,CAAK,GAAGiZ,EAAK,IAAI,GACtDjZ,EAAM,WACTA,IAAQ,OAEViZ,EAAK,KAAK4pB,GAAc7iC,CAAK,GAC7BiZ,EAAK,KAAKxN,GAAMzL,CAAK,KACZyL,MAAS,cAClBwN,EAAK,KAAK4pB,GAAc7iC,CAAK,GAC7BiZ,EAAK,KAAKxN,GAAM,IAAI,KAEpBwN,EAAK,KAAK4pB,GAAcxa,EAAO,WAAWroB,GAAOyL,GAAMwN,EAAK,IAAI,CAAC;AAAA,UAEpE;AAAA,QACF;AAAA,MACT,CAAO,GACD0qE,EAAO,cAAc,UAAU,CAAA7jE,MAAS;AACtC,YAAI74B,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC,GACdka,IAAO8X,EAAK,KAAK,MAAM,KAAK;AAClC,UAAI9X,EAAK,QAAQ,MAAM,MAAM,KAC3B8X,EAAK,KAAK,QAAQ,SAAS9X,CAAI;AAAA,QAElC;AAAA,MACT,CAAO,GACG2hD,GAAoBz6B,CAAM,KAC5Bs7D,EAAO,cAAc,UAAU,CAAA7jE,MAAS;AACtC,YAAI7wB;AACJ,YAAIhI,IAAI64B,EAAM;AACd,eAAO74B,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,UAAAgyB,EAAK,OAAO,GACZA,EAAK,OAAO,YACZA,EAAK,QAAQ,YAAYoP,EAAO,IAAI,QAAQp5B,IAAKgqB,EAAK,WAAW,QAAQhqB,MAAO,SAASA,IAAK,EAAE,IAAI;AAAA,QACrG;AAAA,MACX,CAAS,GAEH00F,EAAO,cAAc,2BAA2B,CAAA7jE,MAAS;AACvD,YAAI74B,IAAI64B,EAAM;AACd,cAAMsoB,IAAmB/f,EAAO,OAAO,oBAAmB;AAC1D,eAAOphC,OAAK;AACV,gBAAMgyB,IAAO6G,EAAM74B,CAAC;AACpB,UAAIgyB,EAAK,QAAQmvB,CAAgB,KAAKnvB,EAAK,OAAO,IAAI,EAAE,WAAW,KACjEA,EAAK,OAAO,IAAI2wD,GAAQ,MAAM,CAAC,CAAC;AAAA,QAEnC;AAAA,MACT,CAAO,GACM+Z;AAAA,IACb,GACUs4E,KAAY,CAAA5zI,MAAU;AAC1B,YAAM4zI,IAAYv6G,GAAar5B,CAAM;AACrC,MAAI4zI,KACFz2F,GAAM,iBAAiBn9C,GAAQ,MAAM;AACnC,YAAIs/C;AACJ,QAAIs0F,MAAc,KAChBt0F,IAAct/C,IAEds/C,IAAct/C,EAAO,cAAc,IAAI4zI,CAAS,GAE9Ct0F,KAAe,CAACA,EAAY,cAC9BA,EAAY,MAAK,GACjBA,EAAY,UAAU;MAEzB,GAAE,GAAG;AAAA,IAEd,GACUu0F,KAAoC,CAAA7zI,MAAU;AAClD,YAAM9oB,IAAO8oB,EAAO,IAAI,QAAO;AAC/B,MAAI,CAACA,EAAO,WAAW,CAACgmC,GAAahmC,CAAM,KAAKA,EAAO,UAAU,SAAS,EAAI,MAAM9oB,MAClFsrD,GAAgBtrD,CAAI,EAAE,KAAK,CAAA4pB,MAAO;AAChC,cAAMlQ,IAAOkQ,EAAI,WACXg+C,IAAW1iD,GAAUxL,CAAI,IAAI4xC,GAAgB5xC,CAAI,EAAE,MAAMkQ,CAAG,IAAIA;AACtE,QAAAd,EAAO,UAAU,OAAO8+C,EAAS,QAAS,CAAA;AAAA,MACpD,CAAS;AAAA,IAET,GACUg1F,KAAa,CAAA9zI,MAAU;AAC3B,MAAAA,EAAO,0BAAyB,GAChCA,EAAO,cAAc,IACrB8uC,GAAS9uC,CAAM,GACfA,EAAO,MAAM,EAAI,GACjB6zI,GAAkC7zI,CAAM,GACxCA,EAAO,YAAY,EAAE,SAAS,GAAM,CAAA;AACpC,YAAM+zI,IAAuB56G,GAAwBn5B,CAAM;AAC3D,MAAIniB,EAAWk2J,CAAoB,KACjCA,EAAqB,KAAK/zI,GAAQA,CAAM,GAE1C4zI,GAAU5zI,CAAM;AAAA,IACtB,GACUg0I,KAAwB,CAAAh0I,MAAUA,EAAO,SAASA,EAAO,GAAG,mBAAmBA,EAAO,IAAI,kBAC1Fi0I,KAAgC,CAACj0I,GAAQhK,GAAKk+I,MAAgB;AAClE,YAAM;AAAA,QACJ,MAAMC;AAAA,QACN,MAAMC;AAAA,MACd,IAAU5zJ,GAAYwV,GAAK,CAAA5S,MAAQ,QAAQ,SAAS,IAAIy0G,GAA0Bz0G,CAAI,CAAC,CAAC,GAQ5Eu1G,IAAW;AAAA,QACf,GARsBw7C,EAAW,IAAI,CAAA/nJ,MAAO;AAC5C,gBAAM4J,IAAM,QAAQ,SAAS,IAAI6hG,GAA0BzrG,CAAG,CAAC;AAC/D,iBAAI/O,GAAS2Y,CAAG,IACP,QAAQ,QAAQg+I,GAAsBh0I,CAAM,EAAE,WAAW5T,GAAK4J,CAAG,CAAC,IAEpE,QAAQ;QACvB,CAAO;AAAA,QAGCg+I,GAAsBh0I,CAAM,EAAE,QAAQo0I,CAAS;AAAA,MACvD;AACM,aAAIp0I,EAAO,SACF24F,IAEAA,EAAS,OAAO,CAAC34F,EAAO,GAAG,iBAAiB,QAAQk0I,CAAW,CAAC,CAAC;AAAA,IAEhF,GACUG,KAAiB,CAAAr0I,MAAU;AAC/B,YAAMgb,IAAmBg5H,GAAsBh0I,CAAM,GAC/Cs0I,IAAUt9G,GAAWh3B,CAAM,GAC3BhK,IAAMgK,EAAO,YACbu0I,IAAY,MAAM;AACtB,QAAAv5H,EAAiB,UAAUhlB,CAAG,GACzBgK,EAAO,UACVA,EAAO,GAAG,iBAAiB,UAAUs0I,CAAO;AAAA,MAEtD,GACYE,IAAS,MAAM;AACnB,QAAIx0I,EAAO,UACTu0I,MAEAv0I,EAAO,GAAG,UAAUu0I,CAAS;AAAA,MAEvC;AACM,UAAIv0I,EAAO,cAAc,SAAS,GAAG;AACnC,YAAIy0I,IAAiB;AACrB,QAAAvoJ,GAAM,KAAK8T,EAAO,eAAe,CAAAqoC,MAAS;AACxC,UAAAosG,KAAkBpsG,IAAQ;AAAA;AAAA,QACpC,CAAS,GACDroC,EAAO,IAAI,SAASy0I,CAAc;AAAA,MACnC;AACD,YAAMC,IAAiB,QAAQ,IAAIT,GAA8Bj0I,GAAQhK,GAAKs+I,CAAO,CAAC,EAAE,KAAKE,CAAM,EAAE,MAAMA,CAAM,GAC3GG,IAAe59G,GAAgB/2B,CAAM;AAC3C,aAAI20I,KACFtB,GAAYrzI,GAAQ20I,CAAY,GAE3BD;AAAA,IACb,GACUE,KAAU,CAAA50I,MAAU;AACxB,YAAMvM,IAAMuM,EAAO,OAAM,GAAI5G,IAAO4G,EAAO;AAC3C,MAAA4uC,GAAY5uC,CAAM,GACbs5B,GAAwBt5B,CAAM,MACjCvM,EAAI,KAAK,aAAa,IACtB2/I,GAAM,UAAUh6I,GAAM,cAAc,OAAO,IAE7C4G,EAAO,SAAS2wI,GAAO3wI,CAAM,GAC7B6uC,GAAe7uC,CAAM;AACrB,YAAM60I,IAAiB59G,GAAkBj3B,CAAM;AAC/C,MAAI60I,MAAmB,WACrBz7I,EAAK,MAAMy7I;AAEb,YAAMC,IAAUv7G,GAAWv5B,CAAM;AACjC,MAAI80I,KACF90I,EAAO,GAAG,oBAAoB,CAAA9lC,MAAK;AACjC,QAAAgyB,GAAM,KAAK4oJ,GAAS,CAAA9hH,MAAW;AAC7B,UAAA94D,EAAE,UAAUA,EAAE,QAAQ,QAAQ84D,GAAS,CAAAxrC,MAC9B,uBAAuB,OAAOA,CAAG,IAAI,KAC7C;AAAA,QACb,CAAW;AAAA,MACX,CAAS,GAEHwY,EAAO,GAAG,cAAc,MAAM;AAC5B,QAAAA,EAAO,UAAUA,EAAO,QAAS,CAAA;AAAA,MACzC,CAAO,GACDA,EAAO,GAAG,mCAAmC,CAAA9lC,MAAK;AAChD,QAAA8lC,EAAO,YAAY9lC,EAAE,SAAS;AAAA,MACtC,CAAO;AAAA,IACP,GACU66K,KAAqB,CAAA/0I,MAAU;AACnC,MAAKupF,GAAMvpF,CAAM,KACfA,EAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,MAClB,CAAS,GAEHA,EAAO,eAAeA,EAAO,WAAW,EAAE,QAAQ,MAAK,CAAE;AAAA,IAC/D,GACUg1I,KAA+B,CAAAh1I,MAAU;AAC7C,MAAIA,EAAO,YAAY,OACrB+0I,GAAmB/0I,CAAM,GACzB8zI,GAAW9zI,CAAM;AAAA,IAEzB,GACUi1I,KAAgB,CAAAj1I,MAAU;AAC9B,UAAIk1I,IAAW;AACf,YAAMC,IAAkB,WAAW,MAAM;AACvC,QAAKD,KACHl1I,EAAO,iBAAiB,EAAI;AAAA,MAE/B,GAAE,GAAG;AACN,aAAO,MAAM;AACX,qBAAam1I,CAAe,GAC5BD,IAAW,IACXl1I,EAAO,iBAAiB,EAAK;AAAA,MACrC;AAAA,IACA,GACUo1I,KAAoB,CAAAp1I,MAAU;AAClC,YAAM6yC,IAAY7yC,EAAO;AACzB,UAAIvM,IAAMuM,EAAO;AACjB,MAAIA,EAAO,WACTozI,GAAM,SAASvgG,GAAW,kBAAkB,GAC5C7yC,EAAO,kBAAkBvM,IAAM,UAC/BuM,EAAO,gBAAgB,QACvBA,EAAO,cAAc6yC,GACrB7yC,EAAO,uBAAuB6yC;AAEhC,YAAMz5C,IAAO4G,EAAO;AACpB,MAAA5G,EAAK,WAAW,IAChB4G,EAAO,WAAWw4B,GAAax4B,CAAM,GACrCA,EAAO,gBAAgBy4B,GAAkBz4B,CAAM,GAC3C,CAACA,EAAO,YAAYA,EAAO,gBAAe,MACxCA,EAAO,UAAUozI,GAAM,SAASh6I,GAAM,YAAY,EAAI,MAAM,aAC9DA,EAAK,MAAM,WAAW,aAExBA,EAAK,kBAAkB,SAEzBA,EAAK,WAAW,IAChB4G,EAAO,eAAe07F,GAAa17F,CAAM,GACzCA,EAAO,SAASgQ,GAAOyjI,GAAiBzzI,CAAM,CAAC,GAC/CA,EAAO,MAAM0a,GAASjnB,GAAK;AAAA,QACzB,aAAa;AAAA,QACb,eAAeuM,EAAO;AAAA,QACtB,qBAAqBA;AAAA,QACrB,eAAe;AAAA,QACf,cAAcA,EAAO,SAASA,EAAO,QAAS,IAAG;AAAA,QACjD,SAASA,EAAO;AAAA,QAChB,QAAQA,EAAO;AAAA,QACf,gBAAgBw2B,GAAwBx2B,CAAM;AAAA,QAC9C,gBAAgBy2B,GAAkBz2B,CAAM;AAAA,QACxC,aAAa,CAAA9lC,MAAK;AAChB,UAAA8lC,EAAO,SAAS,aAAa9lC,CAAC;AAAA,QAC/B;AAAA,QACD,iBAAiBmhE,GAAoBr7B,CAAM;AAAA,MACnD,CAAO,GACDA,EAAO,SAAS2zI,GAAa3zI,CAAM,GACnCA,EAAO,aAAaswF,GAAcojD,GAAqB1zI,CAAM,GAAGA,CAAM,GACtEA,EAAO,YAAYwtF,GAAgBxtF,EAAO,KAAKA,EAAO,UAAUA,EAAO,YAAYA,CAAM,GACzFA,EAAO,YAAY+tC,GAAU/tC,CAAM,GACnCA,EAAO,YAAYigG,GAAUjgG,CAAM,GACnCA,EAAO,cAAc6gG,GAAY7gG,CAAM,GACvCA,EAAO,wBAAwB,IAAIg1H,GAAWh1H,CAAM,GACpDA,EAAO,sBAAsBupI,GAAmBvpI,CAAM,GACtD40G,GAAQ50G,CAAM,GACdshI,GAAQthI,CAAM,GACd+1G,GAAQ/1G,CAAM,GACTupF,GAAMvpF,CAAM,MACfkiI,GAAQliI,CAAM,GACd0wI,GAAQ1wI,CAAM;AAEhB,YAAMs9B,IAAQy3F,GAAQ/0H,CAAM;AAC5B,MAAAq0G,GAAQr0G,GAAQs9B,CAAK,GACrBk4E,GAAQx1G,CAAM,GACdqhG,GAAQrhG,CAAM,GACdihI,GAAQjhI,CAAM;AACd,YAAMq1I,IAAgB3rD,GAAQ1pF,CAAM;AACpC,MAAA40I,GAAQ50I,CAAM,GACdq1I,EAAc,KAAK,MAAM;AACvB,cAAMC,IAAiBL,GAAcj1I,CAAM;AAC3C,QAAAq0I,GAAer0I,CAAM,EAAE,KAAK,MAAM;AAChC,UAAAg1I,GAA6Bh1I,CAAM,GACnCs1I;QACV,CAAS;AAAA,MACF,GAAE,CAAApC,MAAY;AACb,QAAAlzI,EAAO,iBAAiB,EAAI,GAC5Bq0I,GAAer0I,CAAM,EAAE,KAAK,MAAM;AAChC,UAAAkzI,EAAU,EAAC,KAAK,CAAAqC,MAAY;AAC1B,YAAAv1I,EAAO,iBAAiB,EAAK,GAC7Bg1I,GAA6Bh1I,CAAM,GACnCyrF,GAAWzrF,CAAM;AAAA,UAClB,GAAE,CAAAgyB,MAAO;AACR,YAAAhyB,EAAO,oBAAoB,KAAK;AAAA,cAC9B,MAAM;AAAA,cACN,MAAM,OAAOgyB,CAAG;AAAA,YAC9B,CAAa,GACDgjH,GAA6Bh1I,CAAM,GACnCyrF,GAAWzrF,CAAM;AAAA,UAC7B,CAAW;AAAA,QACX,CAAS;AAAA,MACT,CAAO;AAAA,IACP,GAEUxH,KAASpZ,IACTghC,KAAO,CAACnyB,GAASkG,GAAOsE,MAAYI,GAAO5K,GAASkG,GAAOqE,IAAQC,CAAO,GAE1E+8I,KAAQ96H,GAAS,KACjB+6H,KAAsB,CAAChmJ,GAAIimJ,GAAOC,GAAaC,MAAa;AAChE,YAAMC,IAAS9kJ,EAAa,QAAQ,QAAQ;AAC5C,aAAA6kJ,EAAS,KAAK,CAAAz7K,MAAK00B,GAAMgnJ,GAAQ,YAAY17K,CAAC,CAAC,GAC/C20B,GAAS+mJ,GAAQF,CAAW,GAC5B7mJ,GAAS+mJ,GAAQ;AAAA,QACf,IAAIpmJ,IAAK;AAAA,QACT,aAAa;AAAA,QACb,mBAAmB;AAAA,QACnB,OAAAimJ;AAAA,MACR,CAAO,GACDxlJ,GAAM2lJ,GAAQ,uBAAuB,GAC9BA;AAAA,IACb,GACUC,KAAgB,CAAA91I,MAAU;AAC9B,UAAI+1I,IAAa7gH,GAAWl1B,CAAM,IAAI;AACtC,MAAIm1B,GAAmBn1B,CAAM,MAAMA,EAAO,oBACxC+1I,KAAc,iBAAiB/1I,EAAO,gBAAgB,OAAM,IAAK,SAEnE+1I,KAAc;AACd,YAAMC,IAAS5gH,GAAUp1B,CAAM,GACzBi2I,IAAY5gH,GAAar1B,CAAM,GAC/Bk2I,IAAqBl2I,EAAO,UAAUi5B,GAAkBj5B,CAAM,CAAC;AACrE,aAAIs1B,GAAyBt1B,CAAM,MACjC+1I,KAAc,yDAAyDzgH,GAAyBt1B,CAAM,IAAI,SAE5G+1I,KAAc,oBAA0BC,CAAQ,6BAA6BC,CAAW,cAAcj2I,EAAO,EAAI,iBAAiBk2I,CAAoB,wBAC/IH;AAAA,IACb,GACUI,KAAe,CAACn2I,GAAQo2I,MAAY;AACxC,YAAMC,IAAcr2I,EAAO,UAAU,gBAAgB,GAC/C41I,IAAW3mJ,GAAO8B,EAAa,QAAQiP,EAAO,WAAY,CAAA,GAAG,UAAU,EAAE,KAAKnX,EAAK,GACnFytJ,IAAMb,GAAoBz1I,EAAO,IAAIq2I,GAAaphH,GAAej1B,CAAM,GAAG41I,CAAQ,EAAE;AAC1F,MAAAU,EAAI,SAAS,MAAM;AACjB,QAAAA,EAAI,SAAS,MACbt2I,EAAO,SAAS,MAAM;AAAA,MAC9B,GACMA,EAAO,uBAAuBo2I,EAAQ,iBACtCp2I,EAAO,gBAAgBs2I,GACvBt2I,EAAO,aAAa81I,GAAc91I,CAAM,GACxCw1I,GAAM,IAAIY,EAAQ,iBAAiBE,CAAG;AAAA,IAC5C,GACUC,KAAkB,CAAAv2I,MAAU;AAChC,YAAM61I,IAAS71I,EAAO,eAChBw2I,IAAQ,MAAM;AAClB,QAAAx2I,EAAO,kBAAkB61I,EAAO,iBAChCT,GAAkBp1I,CAAM;AAAA,MAChC;AACM,UAAI46B,GAAuB56B,CAAM,KAAK3U,GAAI,QAAQ,UAAS,GAAI;AAC7D,cAAMoI,IAAMuM,EAAO;AACnB,QAAAvM,EAAI,KAAI,GACRA,EAAI,MAAMuM,EAAO,UAAU,GAC3BvM,EAAI,MAAK,GACT+iJ;MACR,OAAa;AACL,cAAM/2J,IAAS2gC,GAAKrvB,EAAa,QAAQ8kJ,CAAM,GAAG,QAAQ,MAAM;AAC9D,UAAAp2J,EAAO,OAAM,GACb+2J;QACV,CAAS;AACD,QAAAX,EAAO,SAAS71I,EAAO;AAAA,MACxB;AAAA,IACP,GACUy2I,KAAS,CAACz2I,GAAQo2I,MAAY;AAClC,MAAAD,GAAan2I,GAAQo2I,CAAO,GACxBA,EAAQ,oBACVA,EAAQ,gBAAgB,MAAM,UAAUp2I,EAAO,YAC/CA,EAAO,SAASw1I,GAAM,SAASY,EAAQ,eAAe,IAExDp2I,EAAO,WAAY,EAAC,MAAM,UAAU,QACpCw1I,GAAM,UAAUx1I,EAAO,IAAI,eAAe,MAAM,GAChDA,EAAO,WAAU,EAAG,MAAM,aAAaA,EAAO,eAC9Cu2I,GAAgBv2I,CAAM;AAAA,IAC5B,GAEU02I,KAAQh8H,GAAS,KACjBi8H,KAAa,CAAC32I,GAAQ42I,GAAoBnlD,MAAW;AACzD,YAAMolD,IAASlhD,GAAc,IAAIlE,CAAM,GACjCqlD,IAAYnhD,GAAc,KAAKlE,CAAM,KAAKzxF,EAAO,gBAAgB,QAAQ,OAAO,EAAE;AAExF,UADAyxF,IAASvlG,GAAM,KAAKulG,CAAM,GACtBolD,KAAU3qJ,GAAM,QAAQ0qJ,GAAoBnlD,CAAM,MAAM,IAAI;AAC9D,YAAIzxF,EAAO,QAAQyxF,CAAM;AACvB;AAEF,YAAI;AACF,gBAAMslD,IAAiBF,EAAO72I,GAAQ82I,CAAS,KAAK,CAAA;AACpD,UAAA92I,EAAO,QAAQyxF,CAAM,IAAIslD,GACrBl5J,EAAWk5J,EAAe,IAAI,MAChCA,EAAe,KAAK/2I,GAAQ82I,CAAS,GACrCF,EAAmB,KAAKnlD,CAAM;AAAA,QAEjC,SAAQv3H,GAAG;AACV,UAAAu9H,GAAgBz3F,GAAQyxF,GAAQv3H,CAAC;AAAA,QAClC;AAAA,MACF;AAAA,IACP,GACU88K,KAAmB,CAAA5zJ,MAChBA,EAAK,QAAQ,OAAO,EAAE,GAEzB6zJ,KAAc,CAAAj3I,MAAU;AAC5B,YAAM42I,IAAqB,CAAA;AAC3B,MAAAt2J,EAAOq4C,GAAW34B,CAAM,GAAG,CAAA5c,MAAQ;AACjC,QAAAuzJ,GAAW32I,GAAQ42I,GAAoBI,GAAiB5zJ,CAAI,CAAC;AAAA,MACrE,CAAO;AAAA,IACP,GACU8zJ,KAAY,CAAAl3I,MAAU;AAC1B,YAAMm3I,IAAejrJ,GAAM,KAAKgqC,GAAgBl2B,CAAM,CAAC,GACjDo3I,IAAep3I,EAAO,GAAG,SAAS,OAAQ,EAAC,OAC3Cq3I,IAAY;AAAA,QAChB,GAAG9jD,GAAY,IAAI,SAAS,EAAE;AAAA,QAC9B,GAAGA,GAAY,IAAI4jD,CAAY,EAAE;AAAA,MACzC;AACM,MAAA50J,GAAO80J,GAAW,CAACC,GAASC,MAAS;AACnC,QAAK/zJ,GAAM4zJ,GAAcG,CAAI,KAC3Bv3I,EAAO,GAAG,SAAS,QAAQu3I,GAAMD,CAAO;AAAA,MAElD,CAAO;AAAA,IACP,GACUE,KAAY,CAAAx3I,MAAU;AAC1B,YAAMi1F,IAAQz9D,GAASx3B,CAAM;AAC7B,UAAI3iB,GAAS43G,CAAK,GAAG;AACnB,cAAMwiD,IAAQ7hD,GAAa,IAAIX,CAAK;AACpC,QAAAj1F,EAAO,QAAQy3I,EAAMz3I,GAAQ41F,GAAa,KAAKX,CAAK,CAAC,KAAK,IACtDp3G,EAAWmiB,EAAO,MAAM,IAAI,KAC9BA,EAAO,MAAM,KAAKA,GAAQ41F,GAAa,KAAKX,CAAK,KAAKj1F,EAAO,gBAAgB,QAAQ,OAAO,EAAE,CAAC;AAAA,MAEzG;AACQ,QAAAA,EAAO,QAAQ;IAEvB,GACU03I,KAAY,CAAA13I,MAAU;AAC1B,YAAM23I,IAAQjgH,GAAS13B,CAAM,GACvB43I,IAAQnkD,GAAa,IAAIkkD,CAAK;AACpC,MAAA33I,EAAO,QAAQ43I,EAAM53I,GAAQyzF,GAAa,KAAKkkD,CAAK,CAAC;AAAA,IAC3D,GACUE,KAAwB,CAAA73I,MAAU;AACtC,YAAM83I,IAAS93I,EAAO,MAAM;AAC5B,aAAO83I,IAASA,EAAM,IAAKC,GAAiB/3I,CAAM;AAAA,IACxD,GACUg4I,KAAsB,CAAAh4I,MAAU;AACpC,YAAMd,IAAMc,EAAO,cAEbjZ,IADQywC,GAASx3B,CAAM,EACVA,GAAQd,CAAG;AAC9B,aAAInY,EAAK,gBAAgB,aACvBA,EAAK,gBAAgB,KAAKA,EAAK,gBAAgB,MAAMiZ,EAAO,KAAK,YAE/DjZ,EAAK,mBAAmBA,EAAK,gBAAgB,aAC/CA,EAAK,gBAAgB,KAAKA,EAAK,gBAAgB,MAAMiZ,EAAO,KAAK,qBAEnEjZ,EAAK,SAASA,EAAK,eAAeA,EAAK,eAAemY,EAAI,cACnDnY;AAAA,IACb,GACUkxJ,KAAyB,CAAChqJ,GAAS4nJ,OAChC;AAAA,MACL,iBAAiB5nJ;AAAA,MACjB,iBAAiB4nJ;AAAA,MACjB,KAAK,CAAE;AAAA,IACf,IAEUqC,KAAyB,CAAA7pI,MAAiB;AAC9C,YAAM8pI,IAAkBzB,GAAM,OAAO,KAAK;AAC1C,aAAAA,GAAM,YAAYyB,GAAiB9pI,CAAa,GACzC4pI,GAAuBE,GAAiBA,CAAe;AAAA,IACpE,GACUJ,KAAmB,CAAA/3I,MAAU;AACjC,YAAMqO,IAAgBrO,EAAO;AAC7B,aAAOA,EAAO,SAASi4I,GAAuB,IAAI,IAAIC,GAAuB7pI,CAAa;AAAA,IAChG,GACU+pI,KAAgB,CAAAp4I,MAAU;AAC9B,YAAMd,IAAMc,EAAO;AAEnB,aADAA,EAAO,aAAad,EAAI,MAAM,SAC1B7hB,GAASm6C,GAASx3B,CAAM,CAAC,IACpB63I,GAAsB73I,CAAM,IAC1BniB,EAAW25C,GAASx3B,CAAM,CAAC,IAC7Bg4I,GAAoBh4I,CAAM,IAE1B+3I,GAAiB/3I,CAAM;AAAA,IAEtC,GACUq4I,KAAqB,CAACr4I,GAAQ24C,MAAQ;AAC1C,YAAM2/F,IAAc;AAAA,QAClB,MAAMj5J,EAAS,KAAKs5D,EAAI,IAAI,EAAE,MAAM16D,EAAI;AAAA,QACxC,MAAMoB,EAAS,KAAKs5D,EAAI,IAAI,EAAE,MAAM16D,EAAI;AAAA,QACxC,WAAWoB,EAAS,KAAKs5D,EAAI,SAAS,EAAE,MAAMv5D,EAAM;AAAA,QACpD,YAAY,CAAA4pB,MAAS;AACnB,UAAKhJ,EAAO,KAAK,gBACf3gB,EAAS,KAAKs5D,EAAI,UAAU,EAAE,KAAK,CAAA55E,MAAKA,EAAEiqC,CAAK,CAAC;AAAA,QAEnD;AAAA,MACT;AACM,MAAAhJ,EAAO,KAAK;AAAA,QACV,GAAGA,EAAO;AAAA,QACV,GAAGs4I;AAAA,MACX;AAAA,IACA,GACU3vD,KAAO,OAAM3oF,MAAU;AAC3B,MAAAA,EAAO,SAAS,eAAe,GAC/Bk3I,GAAUl3I,CAAM,GAChBw3I,GAAUx3I,CAAM,GAChB03I,GAAU13I,CAAM,GAChBi3I,GAAYj3I,CAAM;AAClB,YAAMu4I,IAAa,MAAMH,GAAcp4I,CAAM;AAC7C,MAAAq4I,GAAmBr4I,GAAQ3gB,EAAS,KAAKk5J,EAAW,GAAG,EAAE,MAAM,CAAE,CAAA,CAAC,GAClEv4I,EAAO,kBAAkBu4I,EAAW,iBACpClgD,GAA6Br4F,CAAM,GAC/BA,EAAO,SACTo1I,GAAkBp1I,CAAM,IAExBy2I,GAAOz2I,GAAQ;AAAA,QACb,iBAAiBu4I,EAAW;AAAA,QAC5B,iBAAiBA,EAAW;AAAA,MACtC,CAAS;AAAA,IAET,GAEUC,KAAQ99H,GAAS,KACjB+9H,KAAoB,CAAAr1J,MAAQA,EAAK,OAAO,CAAC,MAAM,KAC/Cs1J,KAAe,CAACC,GAAc34I,MAAW;AAC7C,YAAM44I,IAAeliH,GAAgB12B,CAAM,GACrC64I,IAAcliH,GAAe32B,CAAM;AACzC,UAAI,CAACuiB,GAAK,QAAQq2H,CAAY,KAAKA,MAAiB,MAAM;AACxD,cAAMxsJ,IAAM3D,GAAWowJ,CAAW,IAAIA,IAAc,GAAI74I,EAAO,cAAc,OAAS,UAAU44I,CAAY;AAC5G,QAAAD,EAAa,IAAIvsJ,CAAG,EAAE,MAAM,MAAM;AAChC,UAAAkrG,GAAkBt3F,GAAQ5T,GAAKwsJ,CAAY;AAAA,QACrD,CAAS;AAAA,MACF;AAAA,IACP,GACUE,KAAY,CAAC94I,GAAQ5X,MAAW;AACpC,YAAM6sG,IAAQz9D,GAASx3B,CAAM;AAC7B,UAAI3iB,GAAS43G,CAAK,KAAK,CAACwjD,GAAkBxjD,CAAK,KAAK,CAACzxG,GAAMoyG,GAAa,MAAMX,CAAK,GAAG;AACpF,cAAM8jD,IAAWthH,GAAYz3B,CAAM,GAC7B5T,IAAM2sJ,IAAW/4I,EAAO,gBAAgB,WAAW+4I,CAAQ,IAAI,UAAW9jD,CAAK,SAAW7sG,CAAM;AACtG,QAAAwtG,GAAa,KAAKX,GAAO7oG,CAAG,EAAE,MAAM,MAAM;AACxC,UAAAmrG,GAAev3F,GAAQ5T,GAAK6oG,CAAK;AAAA,QAC3C,CAAS;AAAA,MACF;AAAA,IACP,GACU+jD,KAAY,CAACh5I,GAAQ5X,MAAW;AACpC,YAAMuvJ,IAAQjgH,GAAS13B,CAAM;AAC7B,UAAI23I,MAAU,YAAY,CAACn0J,GAAMiwG,GAAa,MAAMkkD,CAAK,GAAG;AAC1D,cAAMsB,IAAWthH,GAAY33B,CAAM,GAC7B5T,IAAM/O,GAAS47J,CAAQ,IAAIj5I,EAAO,gBAAgB,WAAWi5I,CAAQ,IAAI,UAAWtB,CAAK,SAAWvvJ,CAAM;AAChH,QAAAqrG,GAAa,KAAKkkD,GAAOvrJ,CAAG,EAAE,MAAM,MAAM;AACxC,UAAAorG,GAAex3F,GAAQ5T,GAAKurJ,CAAK;AAAA,QAC3C,CAAS;AAAA,MACF;AAAA,IACP,GACUuB,KAAyB,CAAAl5I,MAAU3gB,EAAS,KAAK82C,GAAYn2B,CAAM,CAAC,EAAE,OAAOvX,EAAU,EAAE,IAAI,CAAA2D,OAAQ;AAAA,MACzG,KAAAA;AAAA,MACA,MAAM/M,EAAS,KAAM;AAAA,IACtB,EAAC,GACI85J,KAA0B,CAACn5I,GAAQ5c,GAAMgF,MAAW/I,EAAS,KAAK+D,CAAI,EAAE,OAAO,CAAAA,MAAQqF,GAAWrF,CAAI,KAAK,CAACmwG,GAAY,IAAInwG,CAAI,CAAC,EAAE,IAAI,CAAAA,OAAS;AAAA,MACpJ,KAAK,GAAI4c,EAAO,cAAc,iBAAmB5c,CAAM,SAASgF,CAAM;AAAA,MACtE,MAAM/I,EAAS,KAAK+D,CAAI;AAAA,IACzB,EAAC,GACIi0J,KAAY,CAACsB,GAAc34I,GAAQ5X,MAAW;AAClD,YAAMgxJ,IAAkBD,GAAwBn5I,GAAQ,WAAW5X,CAAM,GACnEixJ,IAAiBH,GAAuBl5I,CAAM,EAAE,QAAQ,MAAMm5I,GAAwBn5I,GAAQk2B,GAAgBl2B,CAAM,GAAG,EAAE,CAAC;AAChI,MAAA1f,EAAOsM,GAAI;AAAA,QACTwsJ;AAAA,QACAC;AAAA,MACD,CAAA,GAAG,CAAAC,MAAW;AACb,QAAAX,EAAa,IAAIW,EAAQ,GAAG,EAAE,MAAM,MAAM;AACxC,UAAAjiD,GAAer3F,GAAQs5I,EAAQ,KAAKA,EAAQ,KAAK,eAAc,CAAE;AAAA,QAC3E,CAAS;AAAA,MACT,CAAO;AAAA,IACP,GACUC,KAAc,CAACv5I,GAAQ5X,MAAW;AACtC,YAAMoxJ,IAAa,CAACp2J,GAAMgJ,MAAQ;AAChC,QAAAupG,GAAc,KAAKvyG,GAAMgJ,CAAG,EAAE,MAAM,MAAM;AACxC,UAAAgrG,GAAgBp3F,GAAQ5T,GAAKhJ,CAAI;AAAA,QAC3C,CAAS;AAAA,MACT;AACM,MAAAb,GAAOq2C,GAAqB54B,CAAM,GAAG,CAAC5T,GAAKhJ,MAAS;AAClD,QAAAo2J,EAAWp2J,GAAMgJ,CAAG,GACpB4T,EAAO,QAAQ,IAAI,WAAW24B,GAAW34B,CAAM,EAAE,OAAO5c,CAAI,CAAC;AAAA,MACrE,CAAO,GACD9C,EAAOq4C,GAAW34B,CAAM,GAAG,CAAAyxF,MAAU;AACnC,QAAAA,IAASvlG,GAAM,KAAKulG,CAAM,GACtBA,KAAU,CAACkE,GAAc,KAAKlE,CAAM,KAAK,CAACgnD,GAAkBhnD,CAAM,KACpE+nD,EAAW/nD,GAAQ,WAAYA,CAAQ,UAAUrpG,CAAM,KAAM;AAAA,MAEvE,CAAO;AAAA,IACP,GACUqxJ,KAAgB,CAAAz5I,MAAU;AAC9B,YAAMi1F,IAAQz9D,GAASx3B,CAAM;AAC7B,aAAO,CAAC3iB,GAAS43G,CAAK,KAAKr3G,GAAcg4G,GAAa,IAAIX,CAAK,CAAC;AAAA,IACtE,GACUykD,KAAgB,CAAA15I,MAAU;AAC9B,YAAM23I,IAAQjgH,GAAS13B,CAAM;AAC7B,aAAOpiB,GAAc61G,GAAa,IAAIkkD,CAAK,CAAC;AAAA,IAClD,GACUgC,KAAc,CAAC35I,GAAQ5X,MAAW;AACtC,YAAMuwJ,IAAez3H,GAAa,cAC5B4yH,IAAa,MAAM;AACvB,QAAI,CAAC9zI,EAAO,WAAWy5I,GAAcz5I,CAAM,KAAK05I,GAAc15I,CAAM,KAClE2oF,GAAK3oF,CAAM;AAAA,MAErB;AACM,MAAA84I,GAAU94I,GAAQ5X,CAAM,GACxB4wJ,GAAUh5I,GAAQ5X,CAAM,GACxBswJ,GAAaC,GAAc34I,CAAM,GACjCq3I,GAAUsB,GAAc34I,GAAQ5X,CAAM,GACtCmxJ,GAAYv5I,GAAQ5X,CAAM,GAC1BuwJ,EAAa,UAAW,EAAC,KAAK7E,GAAYA,CAAU;AAAA,IAC1D,GACU8F,KAAsB,CAAC3rJ,GAAS+R,MAAW6J,GAAS,WAAW5b,GAAS;AAAA,MAC5E,gBAAgByqC,GAAkB14B,CAAM;AAAA,MACxC,gBAAgBy2B,GAAkBz2B,CAAM;AAAA,IAC9C,CAAK,GACK83I,KAAS,CAAA93I,MAAU;AACvB,YAAMvQ,IAAKuQ,EAAO;AAClB,MAAAuiB,GAAK,QAAQmU,GAAgB12B,CAAM,CAAC;AACpC,YAAMuY,IAAe,MAAM;AACzB,QAAAigI,GAAM,OAAO,QAAQ,SAASjgI,CAAY,GAC1CvY,EAAO,OAAM;AAAA,MACrB;AACM,UAAI,CAACwY,GAAW,MAAM,WAAW;AAC/B,QAAAggI,GAAM,KAAK,QAAQ,SAASjgI,CAAY;AACxC;AAAA,MACD;AACD,UAAI,CAACvY,EAAO;AACV;AAEF,YAAM/R,IAAU8C,EAAa,QAAQiP,EAAO,WAAY,CAAA,GAClD65I,IAAWxqJ,GAAQpB,CAAO;AAChC,MAAA+R,EAAO,GAAG,UAAU,MAAM;AACxB,QAAAzf,GAAM0N,EAAQ,IAAI,YAAY,CAAAqB,MAAQH,GAASlB,GAASqB,EAAK,IAAI,CAAC,GAClER,GAASb,GAAS4rJ,CAAQ;AAAA,MAClC,CAAO,GACD75I,EAAO,GAAG,mBAAmB45I,GAAoB3rJ,GAAS+R,CAAM,GAC3D+0B,GAAW/0B,CAAM,IAIpBA,EAAO,SAAS,MAHhBA,EAAO,gBAAgBA,EAAO,WAAU,EAAG,MAAM,YACjDA,EAAO,WAAY,EAAC,MAAM,aAAa;AAIzC,YAAMizF,IAAOjzF,EAAO,aAAa,QAAQw4I,GAAM,UAAU/oJ,GAAI,MAAM;AACnE,MAAIwjG,MACFjzF,EAAO,cAAcizF,GACjB/6D,GAAel4B,CAAM,KAAK,CAAC1D,GAAkB0D,EAAO,WAAU,CAAE,MAClEw4I,GAAM,YAAYA,GAAM,OAAO,SAAS;AAAA,QACtC,MAAM;AAAA,QACN,MAAM/oJ;AAAA,MAClB,CAAW,GAAGA,CAAE,GACNuQ,EAAO,iBAAiB,KAE1BA,EAAO,oBAAoB,CAAA9lC,MAAK;AAC9B,QAAA8lC,EAAO,SAAS9lC,EAAE,MAAMA,CAAC;AAAA,MACnC,GACQs+K,GAAM,KAAKvlD,GAAM,gBAAgBjzF,EAAO,iBAAiB,GACzDA,EAAO,GAAG,SAAS,MAAM;AACvB,QAAAA,EAAO,aAAY;AAAA,MAC7B,CAAS,GACGm4B,GAAkBn4B,CAAM,KAAK,CAACizF,EAAK,OAAO,YAAY,CAACA,EAAK,OAAO,UAAU,CAACA,EAAK,kBACrFA,EAAK,gBAAgBA,EAAK,QAC1BA,EAAK,SAAS,OACZjzF,EAAO,cAAc,eACrBA,EAAO,SAAS,EAAK,GACdizF,EAAK,cAAcA,CAAI,MAIpCjzF,EAAO,gBAAgB81F,GAAc91F,CAAM,GAC3CA,EAAO,sBAAsB80F,GAAoB90F,CAAM,GACnDg7B,GAAch7B,CAAM,KACtBA,EAAO,GAAG,cAAc,CAAA9lC,MAAK;AAC3B,QAAIA,EAAE,SACJA,EAAE,UAAUs+K,GAAM,OAAOt+K,EAAE,OAAO;AAAA,MAE9C,CAAS,GAECk+D,GAA2Bp4B,CAAM,KACnCA,EAAO,GAAG,UAAU,MAAM;AACxB,QAAIA,EAAO,eACTA,EAAO,KAAI;AAAA,MAEvB,CAAS,GAECq4B,GAAuBr4B,CAAM,MAC/BA,EAAO,gBAAgB,MAAM;AAC3B,QAAIA,EAAO,eAAe,CAACA,EAAO,aAAa,CAACA,EAAO,cACrDA,EAAO,KAAK;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,WAAW;AAAA,QACzB,CAAa;AAAA,MAEb,GACQA,EAAO,cAAc,GAAG,gBAAgBA,EAAO,aAAa,IAE9DA,EAAO,cAAc,IAAIA,CAAM,GAC/B25I,GAAY35I,GAAQA,EAAO,MAAM;AAAA,IACvC,GAEU85I,KAAkB,CAAC95I,GAAQgJ,MAAU;AACzC,MAAIhJ,EAAO,kBAAkBgJ,MAC3BhJ,EAAO,gBAAgBgJ,GAClBhJ,EAAO,aACVA,EAAO,QAAO,EAAG,kBAAkB,OAAOA,EAAO,gBAAe,CAAE,GAClEA,EAAO,YAAW,IAEpB+vC,GAA4B/vC,GAAQgJ,CAAK;AAAA,IAEjD,GACU+wI,KAAkB,CAAA/5I,MAAUA,EAAO,eAEnCg6I,KAAgB,CAACC,GAAUlyI,OAAc;AAAA,MAC7C,UAAUxpB,GAAS07J,CAAQ;AAAA,MAC3B,SAAS17J,GAASwpB,CAAQ;AAAA,IAChC,IACUmyI,KAAkBlvJ,GAAU,EAAC,YAC7BtF,KAAUw0J,GAAgB,WAC1Bz0J,KAAWy0J,GAAgB,YAC3BC,KAAmB,CAAA5oD,MAAW;AAClC,UAAI5zG,GAAW4zG,CAAO;AACpB,eAAO;AACF;AACL,cAAMC,IAAcj0G,GAAUg0G,CAAO,IAAIA,IAAUA,EAAQ,MAAM,MAAM,GACjE6oD,IAAiB/5J,GAAMmxG,GAAalpG,EAAM;AAChD,eAAO3H,GAASy5J,GAAgB3xJ,EAAU;AAAA,MAC3C;AAAA,IACP,GACU4xJ,KAAkB,CAACh4J,GAAMzL,MAAY;AACzC,YAAMmB,IAASkL,GAASrM,GAAS,CAACe,GAAO4L,MAChCpD,EAAWkC,GAAMkB,CAAG,CAC5B;AACD,aAAOy2J,GAAcjiK,EAAO,GAAGA,EAAO,CAAC;AAAA,IAC7C,GACUuiK,KAAa,CAACN,GAAe52J,GAAMm3J,IAAW,CAAA,MAAO;AACzD,YAAMN,IAAWD,EAAc,YACzBQ,IAAiBl3J,GAAM22J,GAAU72J,CAAI,EAAE,MAAM,CAAA,CAAE;AACrD,aAAO8I,GAAM,OAAO,CAAE,GAAEquJ,GAAUC,CAAc;AAAA,IACtD,GACUC,KAAa,CAACT,GAAe52J,MAC1BI,GAAMw2J,EAAc,SAAU,GAAE52J,CAAI,GAEvCs3J,KAAmB,CAACV,GAAe52J,MAChCq3J,GAAWT,GAAe52J,CAAI,IAAI42J,EAAc,SAAU,EAAC52J,CAAI,IAAI,IAEtEu3J,KAA2B,CAACC,GAAel1J,OASxC;AAAA,MACL,GAT2B;AAAA,QAC3B,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,cAAcpC,GAAMs3J,GAAe,cAAc,EAAE,MAAM,WAAW;AAAA,QACpE,gBAAgB;AAAA,MACxB;AAAA,MAIQ,GAAGl1J,IAHuB,EAAE,SAAS,OAGF,CAAE;AAAA,IAC7C,IAEUm1J,KAAqB,CAACC,GAAiBlkK,MAAY;AACvD,UAAIhQ;AACJ,YAAMm0K,KAA8Bn0K,IAAKgQ,EAAQ,sBAAsB,QAAQhQ,MAAO,SAASA,IAAK;AACpG,aAAIk0K,KAAmBA,EAAgB,mBAC9B5uJ,GAAM,OAAO,CAAA,GAAI4uJ,EAAgB,kBAAkBC,CAA0B,IAE7EA;AAAA,IAEf,GACUC,KAAiB,CAACC,GAAe1pD,MAAY;AAAA,MACjD,GAAG4oD,GAAiBc,CAAa;AAAA,MACjC,GAAGd,GAAiB5oD,CAAO;AAAA,IACjC,GACU2pD,KAAqB,CAACC,GAAgBnB,GAAeoB,GAAgBC,MACrEF,KAAkBV,GAAWT,GAAe,QAAQ,IAC/CqB,IAEAD,GAGLE,KAAiB,CAACH,GAAgBnB,GAAeuB,GAAwB3kK,MAAY;AACzF,YAAMqkK,IAAgBd,GAAiBoB,EAAuB,cAAc,GACtEH,IAAiBjB,GAAiBvjK,EAAQ,OAAO,GACjD4kK,IAAed,GAAiBV,GAAe,QAAQ,GACvDqB,IAAgBG,EAAa,UAAUrB,GAAiBqB,EAAa,OAAO,IAAIJ,GAChFK,IAAkBP,GAAmBC,GAAgBnB,GAAeoB,GAAgBC,CAAa,GACjGK,IAAkBV,GAAeC,GAAeQ,CAAe;AACrE,aAAOvvJ,GAAM,OAAOtV,GAAS;AAAA,QAC3B,gBAAgBqkK;AAAA,QAChB,SAASS;AAAA,MACjB,CAAO;AAAA,IACP,GACUC,KAAa,CAACR,GAAgBnB,MAC3BmB,KAAkBV,GAAWT,GAAe,QAAQ,GAEvD4B,KAAiB,CAACT,GAAgBz1J,GAASm2J,GAAgBN,GAAwB3kK,MAAY;AACnG,UAAIhQ;AACJ,YAAMk1K,IAAwBX,IAAiB,EAAE,QAAQR,IAA0B/zK,IAAKgQ,EAAQ,YAAY,QAAQhQ,MAAO,SAASA,IAAK,CAAA,GAAI8e,CAAO,EAAG,IAAG,IACpJs0J,IAAgBK,GAAgB,CAAC,QAAQ,GAAG/5B,GAAUw7B,GAAuBllK,CAAO,CAAC,GACrFmlK,IAAkB7vJ,GAAM,OAAO2vJ,GAAgBN,GAAwBvB,EAAc,QAAS,GAAE2B,GAAWR,GAAgBnB,CAAa,IAAIM,GAAWN,GAAe,QAAQ,IAAI,CAAE,GAAE,EAAE,kBAAkBa,GAAmBU,GAAwBvB,EAAc,QAAS,CAAA,EAAG,CAAA;AACrR,aAAOsB,GAAeH,GAAgBnB,GAAeuB,GAAwBQ,CAAe;AAAA,IAClG,GACUC,KAAmB,CAACT,GAAwB3kK,MAAYglK,GAAel2J,MAAWD,IAAUC,IAAS9O,GAAS2kK,GAAwB3kK,CAAO,GAE7IqlK,KAAY,CAACj8I,GAAQd,MAAQssF,GAAYxrF,GAAQd,CAAG,GAEpDg9I,KAAyB,CAAAl8I,MAAU;AACvC,YAAMkrF,IAAe,CAAC9nG,GAAMzL,MAAU;AACpC,QAAAqoB,EAAO,UAAU,OAAO5c,GAAMzL,CAAK,GACnCqoB,EAAO,YAAW;AAAA,MAC1B,GACYm8I,IAAc,CAAAC,MAAS,MAAM;AACjC,QAAA97J,EAAO,4BAA4B,MAAM,GAAG,GAAG,CAAA8C,MAAQ;AACrD,UAAIg5J,MAAUh5J,KACZ4c,EAAO,UAAU,OAAO,UAAU5c,CAAI;AAAA,QAElD,CAAS,GACGg5J,MAAU,UACZlxD,EAAa,UAAUkxD,CAAK;AAAA,MAEtC;AACM,MAAAp8I,EAAO,eAAe,YAAY;AAAA,QAChC,aAAam8I,EAAY,MAAM;AAAA,QAC/B,eAAeA,EAAY,QAAQ;AAAA,QACnC,cAAcA,EAAY,OAAO;AAAA,QACjC,aAAaA,EAAY,SAAS;AAAA,QAClC,aAAaA,EAAY,MAAM;AAAA,MACvC,CAAO;AAAA,IACP,GACUE,KAA+B,CAAAr8I,MAAU;AAC7C,YAAMs8I,IAAc,CAAAl5J,MAAQ,MAAM;AAChC,cAAM6sC,IAAYjwB,EAAO,WACnBvI,IAAQw4B,EAAU,YAAW,IAAK,CAACjwB,EAAO,IAAI,UAAUiwB,EAAU,QAAS,GAAEjwB,EAAO,IAAI,OAAO,CAAC,IAAIiwB,EAAU;AACpH,eAAO7vC,EAAOqX,GAAO,CAAA7G,MAAQhT,GAAcoiB,EAAO,UAAU,UAAUpP,GAAMxN,CAAI,CAAC,CAAC;AAAA,MAC1F;AACM,MAAA4c,EAAO,eAAe,YAAY;AAAA,QAChC,aAAas8I,EAAY,WAAW;AAAA,QACpC,eAAeA,EAAY,aAAa;AAAA,QACxC,cAAcA,EAAY,YAAY;AAAA,QACtC,aAAaA,EAAY,cAAc;AAAA,MACxC,GAAE,OAAO;AAAA,IAChB,GACUC,KAAqB,CAAAv8I,MAAU;AACnC,MAAAk8I,GAAuBl8I,CAAM,GAC7Bq8I,GAA6Br8I,CAAM;AAAA,IACzC,GAEUw8I,KAAqB,CAAAx8I,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,kBAAkB,CAAAyzB,MAAW;AAC3B,gBAAMhgC,IAAMuM,EAAO;AACnB,cAAIqJ;AACJ,cAAI;AACF,YAAA5V,EAAI,YAAYggC,CAAO;AAAA,UACxB,QAAY;AACX,YAAApqB,IAAS;AAAA,UACV;AAID,cAHIoqB,MAAY,WAAW,CAAChgC,EAAI,oBAAoBggC,CAAO,MACzDpqB,IAAS,KAEPA,KAAU,CAAC5V,EAAI,sBAAsBggC,CAAO,GAAG;AACjD,gBAAIz0C,IAAMghB,EAAO,UAAU,oHAAyH;AACpJ,aAAI3U,GAAI,GAAG,QAAO,KAAMA,GAAI,GAAG,aAC7BrM,IAAMA,EAAI,QAAQ,WAAW,IAAS,IAExCghB,EAAO,oBAAoB,KAAK;AAAA,cAC9B,MAAMhhB;AAAA,cACN,MAAM;AAAA,YACpB,CAAa;AAAA,UACF;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,GAEUy9J,KAAqB,CAAC7tJ,GAAKxY,GAAKoa,GAAMkP,MAAW;AACrD,YAAMxoB,IAAO6Z,EAAa,QAAQnC,EAAI,QAAS,CAAA;AAC/C,aAAIk6D,GAAkB5xE,GAAMs2C,GAAc,eAAep3C,CAAG,GAAGspB,CAAM,IACnElP,IAAOA,EAAK,QAAQ,MAAM,QAAQ,IAElCA,IAAOA,EAAK,QAAQ,WAAW,GAAG,GAEhCu4D,GAAmB7xE,GAAMs2C,GAAc,aAAap3C,CAAG,GAAGspB,CAAM,IAClElP,IAAOA,EAAK,QAAQ,2BAA2B,QAAQ,IAEvDA,IAAOA,EAAK,QAAQ,wBAAwB,GAAG,GAE1CA;AAAA,IACb,GAEUksJ,KAAiB,CAAA/kK,MAAS;AAC9B,UAAI,OAAOA,KAAU,UAAU;AAC7B,cAAM+2E,IAAUxiE,GAAM,OAAO;AAAA,UAC3B,OAAOvU,EAAM;AAAA,UACb,MAAM,EAAE,OAAOA,EAAM,MAAO;AAAA,QAC7B,GAAEA,CAAK;AACR,eAAO;AAAA,UACL,SAASA,EAAM;AAAA,UACf,SAAA+2E;AAAA,QACV;AAAA,MACO;AACD,aAAO;AAAA,QACL,SAAS/2E;AAAA,QACT,SAAS,CAAE;AAAA,MACnB;AAAA,IACA,GACUglK,KAAY,CAAC38I,GAAQroB,MAAU;AACnC,YAAMs4C,IAAYjwB,EAAO,WACnBpR,IAAMoR,EAAO;AACnB,aAAI,QAAQ,KAAKroB,CAAK,IACb8kK,GAAmB7tJ,GAAKqhC,EAAU,OAAQ,GAAEt4C,GAAOqoB,EAAO,MAAM,IAEhEroB;AAAA,IAEf,GACUilK,KAAgB,CAAC58I,GAAQroB,MAAU;AACvC,UAAIqoB,EAAO,UAAU,cAAc;AACjC,cAAM,EAAC,SAAApI,GAAS,SAAA82D,EAAO,IAAIguF,GAAe/kK,CAAK;AAC/C,QAAAunG,GAAqBl/E,GAAQ;AAAA,UAC3B,GAAG0uD;AAAA,UACH,SAASiuF,GAAU38I,GAAQpI,CAAO;AAAA,UAClC,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,WAAW;AAAA,QACrB,CAAS,EAAE,KAAK,CAAAld,MAAQ;AACd,gBAAMmiK,IAAkBvxD,GAAgBtrF,GAAQtlB,EAAK,SAASg0E,CAAO;AACrE,UAAA0wB,GAAsBp/E,GAAQ68I,GAAiBniK,CAAI,GACnDslB,EAAO,UAAS;AAAA,QAC1B,CAAS;AAAA,MACF;AAAA,IACP,GAEU88I,KAAqB,CAAA98I,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,YAAY,MAAM;AAChB,gBAAMwnF,IAAKxnF,EAAO,UAAU,YAAW;AACvC,UAAAA,EAAO,WAAWA,EAAO,WAAY,CAAA,GACrCA,EAAO,UAAU,eAAewnF,CAAE;AAAA,QACnC;AAAA,QACD,aAAa,CAACu1D,GAAUr1B,GAAK/vI,MAAU;AACrC,UAAAilK,GAAc58I,GAAQA,EAAO,IAAI,WAAW,OAAO,EAAE,KAAKroB,EAAO,CAAA,CAAC;AAAA,QACnE;AAAA,QACD,sBAAsB,MAAM;AAC1B,UAAAqoB,EAAO,YAAY,oBAAoB,IAAO,MAAM;AAAA,QACrD;AAAA,QACD,YAAY,CAAC+8I,GAAUr1B,GAAK/vI,MAAU;AACpC,UAAAilK,GAAc58I,GAAQA,EAAO,IAAI,OAAOroB,CAAK,CAAC;AAAA,QAC/C;AAAA,QACD,YAAY,CAAColK,GAAUr1B,GAAK/vI,MAAU;AACpC,UAAAilK,GAAc58I,GAAQroB,CAAK;AAAA,QAC5B;AAAA,QACD,kBAAkB,CAAColK,GAAUr1B,GAAK/vI,MAAU;AAC1C,UAAAilK,GAAc58I,GAAQroB,CAAK;AAAA,QAC5B;AAAA,QACD,eAAe,CAAColK,GAAUr1B,GAAK/vI,MAAU;AACvC,UAAAqoB,EAAO,WAAWroB,CAAK;AAAA,QACxB;AAAA,QACD,mBAAmB,CAAColK,GAAUr1B,GAAK/vI,MAAU;AAC3C,UAAAqoB,EAAO,YAAY,oBAAoB,IAAOroB,EAAM,QAAQ,oBAAoBqoB,EAAO,UAAU,WAAW,EAAE,QAAQ,OAAQ,CAAA,CAAC,CAAC;AAAA,QACjI;AAAA,QACD,gBAAgB,MAAM;AACpB,UAAAA,EAAO,WAAW45B,GAAsB55B,CAAM,CAAC;AAAA,QAChD;AAAA,MACT,CAAO;AAAA,IACP,GAEUg9I,KAAkB;AAAA,MACtB,aAAa;AAAA,MACb,eAAe;AAAA,IACrB,GACUC,KAASvuJ,GAAM,MAAM,GACrBwuJ,KAAuB,CAACvpD,GAAUjsF,GAASxI,MAAQ;AACvD,YAAMi+I,IAAc,CAAAj+I,MAAO/I,GAAO+I,GAAKy0F,CAAQ,EAAE,QAAQ,MACnDspD,GAAO/9I,CAAG,IACL5b,GAAM05J,IAAiBrpD,CAAQ,EAAE,KAAK,CAAAypD,MAAkBnuJ,GAAOiQ,GAAKk+I,CAAc,CAAC,IAEnF/9J,EAAS,MAEnB,GACKkT,IAAS,CAAA2M,MAAOvb,GAAGoN,EAAa,QAAQ2W,CAAO,GAAGxI,CAAG;AAC3D,aAAOs9D,GAAUzrE,EAAa,QAAQmO,CAAG,GAAG,CAAAA,MAAOi+I,EAAYj+I,CAAG,GAAG3M,CAAM;AAAA,IACjF,GACU8qJ,KAAsB,CAAAC,MAAcA,EAAW,QAAQ,aAAa,EAAE,EAAE,QAAQ,SAAS,GAAG,GAC5FC,KAAsB,CAAC5pD,GAAUz0F,MAAQ7f,EAAS,KAAKq7B,GAAS,IAAI,SAASxb,GAAKy0F,GAAU,EAAI,CAAC,GACjG6pD,KAAc,CAAA7pD,MAAY,CAACjsF,GAASxI,MAAQ7f,EAAS,KAAK6f,CAAG,EAAE,IAAInO,EAAa,OAAO,EAAE,OAAOzC,EAAW,EAAE,KAAK,CAAAL,MAAWivJ,GAAqBvpD,GAAUjsF,GAASzZ,EAAQ,GAAG,EAAE,GAAGsvJ,GAAoB5pD,GAAU1lG,EAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAC1OwvJ,KAAcD,GAAY,WAAW,GACrCE,KAAgBx/J,GAAQm/J,IAAqBG,GAAY,aAAa,CAAC,GAEvEG,KAAwB,CAAA39I,MAAUwiC,GAAgBxiC,EAAO,SAAS,EAAE,KAAK,CAAAs9B,MAAS;AACtF,YAAMrlC,IAAYqlC,EAAM;AACxB,aAAOj+C,EAAS,KAAKkd,GAAStE,CAAS,IAAIA,EAAU,aAAaA,CAAS;AAAA,IACjF,CAAK,GACK2lJ,KAAkB,CAAA59I,MAAU3gB,EAAS,KAAK2gB,EAAO,UAAU,OAAQ,CAAA,EAAE,KAAK,CAAA5pB,MAAO;AACrF,YAAMc,IAAO8oB,EAAO;AAEpB,aADsB5pB,EAAI,mBAAmBc,KAAQd,EAAI,gBAAgB,IAClDiJ,EAAS,KAAI,IAAKA,EAAS,KAAK2gB,EAAO,UAAU,SAAS,EAAI,CAAC;AAAA,IAC5F,CAAK,GACK69I,KAAY,CAAC79I,GAAQvgB,MAAWm+J,GAAgB59I,CAAM,EAAE,QAAQthB,GAAMi/J,IAAuB39I,CAAM,CAAC,EAAE,IAAIjP,EAAa,OAAO,EAAE,OAAOzC,EAAW,EAAE,KAAK7O,CAAM,GAC/Jq+J,KAAW,CAAC99I,GAAQxgB,MAAWq+J,GAAU79I,GAAQ5hB,GAASiB,EAAS,MAAMG,CAAM,CAAC,GAEhFu+J,KAAqB,CAAC/9I,GAAQroB,MAAU;AAC5C,UAAI,YAAY,KAAKA,CAAK,GAAG;AAC3B,cAAMqmK,IAAiB,SAASrmK,GAAO,EAAE;AACzC,YAAIqmK,KAAkB,KAAKA,KAAkB,GAAG;AAC9C,gBAAMl0E,IAAYhvC,GAAmB96B,CAAM,GACrCi+I,IAAcljH,GAAmB/6B,CAAM;AAC7C,iBAAIi+I,EAAY,SAAS,IAChBA,EAAYD,IAAiB,CAAC,KAAKrmK,IAEnCmyF,EAAUk0E,IAAiB,CAAC,KAAKrmK;AAAA,QAEpD;AACU,iBAAOA;AAAA,MAEjB;AACQ,eAAOA;AAAA,IAEf,GACUumK,KAAqB,CAAAC,MAAQ;AACjC,YAAMC,IAAQD,EAAK,MAAM,SAAS;AAClC,aAAO99J,GAAM+9J,GAAO,CAAAD,MACdA,EAAK,QAAQ,GAAG,MAAM,MAAM,EAAEp2J,GAAWo2J,GAAM,GAAG,KAAKp2J,GAAWo2J,GAAM,GAAG,KACtE,IAAKA,CAAM,MAEXA,CAEV,EAAE,KAAK,GAAG;AAAA,IACjB,GACUE,KAAiB,CAACr+I,GAAQroB,MAAU;AACxC,YAAMwmK,IAAOJ,GAAmB/9I,GAAQroB,CAAK;AAC7C,MAAAqoB,EAAO,UAAU,OAAO,YAAY,EAAE,OAAOk+I,GAAmBC,CAAI,EAAC,CAAE,GACvEn+I,EAAO,YAAW;AAAA,IACxB,GACUs+I,KAAgB,CAAAt+I,MAAU89I,GAAS99I,GAAQ,CAAAd,MAAOw+I,GAAc19I,EAAO,QAAS,GAAEd,EAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GACpGq/I,KAAiB,CAACv+I,GAAQroB,MAAU;AACxC,MAAAqoB,EAAO,UAAU,OAAO,YAAY,EAAE,OAAO+9I,GAAmB/9I,GAAQroB,CAAK,EAAC,CAAE,GAChFqoB,EAAO,YAAW;AAAA,IACxB,GACUw+I,KAAgB,CAAAx+I,MAAU89I,GAAS99I,GAAQ,CAAAd,MAAOu+I,GAAYz9I,EAAO,QAAS,GAAEd,EAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GAElGu/I,KAAkB,CAAAz+I,MAAU89I,GAAS99I,GAAQ,CAAAd,MAAO;AACxD,YAAMhoB,IAAO6Z,EAAa,QAAQiP,EAAO,QAAS,CAAA,GAC5C0+I,IAAiBliF,GAAUt9D,GAAK,CAAAA,MAAO/I,GAAO+I,GAAK,aAAa,GAAGxgB,GAAMiF,IAAIzM,CAAI,CAAC,GAClFynK,IAAgB,MAAM;AAC1B,cAAMC,IAAa,WAAW3oJ,GAAMiJ,GAAK,aAAa,CAAC,GACjD2/I,IAAW,WAAW5oJ,GAAMiJ,GAAK,WAAW,CAAC;AACnD,eAAO,OAAO0/I,IAAaC,CAAQ;AAAA,MAC3C;AACM,aAAOH,EAAe,WAAWC,CAAa;AAAA,IACpD,CAAK,EAAE,MAAM,EAAE,GACLG,KAAmB,CAAC9+I,GAAQ4+I,MAAe;AAC/C,MAAA5+I,EAAO,UAAU,OAAO,cAAc,EAAE,OAAO,OAAO4+I,CAAU,EAAC,CAAE,GACnE5+I,EAAO,YAAW;AAAA,IACxB,GAEU++I,KAAyB,CAAA/+I,MAAU;AACvC,YAAMkrF,IAAe,CAAC9nG,GAAMzL,MAAU;AACpC,QAAAqoB,EAAO,UAAU,OAAO5c,GAAMzL,CAAK,GACnCqoB,EAAO,YAAW;AAAA,MAC1B;AACM,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,6DAA6D,CAAAyzB,MAAW;AACtE,UAAAy3D,EAAaz3D,CAAO;AAAA,QACrB;AAAA,QACD,yBAAyB,CAACA,GAASi0F,GAAK/vI,MAAU;AAChD,UAAAuzG,EAAaz3D,GAAS,EAAE,OAAA97C,EAAK,CAAE;AAAA,QAChC;AAAA,QACD,WAAa,CAAColK,GAAUr1B,GAAK/vI,MAAU;AACrC,UAAAuzG,EAAa,eAAe,EAAE,OAAAvzG,EAAK,CAAE;AAAA,QACtC;AAAA,QACD,UAAY,CAAColK,GAAUr1B,GAAK/vI,MAAU;AACpC,UAAA0mK,GAAer+I,GAAQroB,CAAK;AAAA,QAC7B;AAAA,QACD,UAAY,CAAColK,GAAUr1B,GAAK/vI,MAAU;AACpC,UAAA4mK,GAAev+I,GAAQroB,CAAK;AAAA,QAC7B;AAAA,QACD,YAAc,CAAColK,GAAUr1B,GAAK/vI,MAAU;AACtC,UAAAmnK,GAAiB9+I,GAAQroB,CAAK;AAAA,QAC/B;AAAA,QACD,MAAQ,CAAC87C,GAASi0F,GAAKs3B,MAAS;AAC9B,cAAIp4K;AACJ,UAAAskH,EAAaz3D,GAAS;AAAA,YACpB,OAAOurH,EAAK;AAAA,YACZ,cAAcp4K,IAAKo4K,EAAK,gBAAgB,QAAQp4K,MAAO,SAASA,IAAK;AAAA,UACjF,CAAW;AAAA,QACF;AAAA,QACD,cAAgB,CAAA6sD,MAAW;AACzB,UAAAzzB,EAAO,UAAU,OAAOyzB,CAAO;AAAA,QAChC;AAAA,QACD,eAAiB,MAAM;AACrB,UAAAy3D,EAAa,YAAY;AAAA,QAC1B;AAAA,QACD,aAAe,CAAC6xD,GAAUr1B,GAAK/vI,MAAU;AACvC,UAAAuzG,EAAa7tG,GAAS1F,CAAK,IAAIA,IAAQ,GAAG;AAAA,QAC3C;AAAA,QACD,iBAAmB,CAAColK,GAAUr1B,GAAK/vI,MAAU;AAC3C,UAAAuzG,EAAavzG,CAAK;AAAA,QACnB;AAAA,MACT,CAAO;AAAA,IACP,GACUsnK,KAA6B,CAAAj/I,MAAU;AAC3C,YAAMk/I,IAAgB,CAAA97J,MAAQ4c,EAAO,UAAU,MAAM5c,CAAI;AACzD,MAAA4c,EAAO,eAAe,YAAY;AAAA,QAChC,6DAA6D,CAAAyzB,MAAWyrH,EAAczrH,CAAO;AAAA,QAC7F,eAAiB,MAAMyrH,EAAc,YAAY;AAAA,MAClD,GAAE,OAAO,GACVl/I,EAAO,eAAe,qBAAqB,YAAY,MAAMs+I,GAAct+I,CAAM,CAAC,GAClFA,EAAO,eAAe,qBAAqB,YAAY,MAAMw+I,GAAcx+I,CAAM,CAAC,GAClFA,EAAO,eAAe,qBAAqB,cAAc,MAAMy+I,GAAgBz+I,CAAM,CAAC;AAAA,IAC5F,GACUm/I,KAAqB,CAAAn/I,MAAU;AACnC,MAAA++I,GAAuB/+I,CAAM,GAC7Bi/I,GAA2Bj/I,CAAM;AAAA,IACvC,GAEUo/I,KAAqB,CAAAp/I,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,iBAAiB,MAAM;AACrB,UAAAA,EAAO,YAAY;QACpB;AAAA,QACD,iBAAiB,MAAM;AACrB,UAAAA,EAAO,YAAY;QACpB;AAAA,QACD,MAAM,MAAM;AACV,UAAAA,EAAO,YAAY;QACpB;AAAA,QACD,MAAM,MAAM;AACV,UAAAA,EAAO,YAAY;QACpB;AAAA,MACT,CAAO;AAAA,IACP,GAEUq/I,KAAqB,CAAAr/I,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,QAAQ,MAAM;AACZ,UAAA8jD,GAAO9jD,CAAM;AAAA,QACd;AAAA,QACD,SAAS,MAAM;AACb,UAAAg0G,GAAQh0G,CAAM;AAAA,QACf;AAAA,MACT,CAAO,GACDA,EAAO,eAAe,YAAY,EAAE,SAAS,MAAMyzG,GAAWzzG,CAAM,KAAK,OAAO;AAAA,IACtF,GAEUs/I,KAAqB,CAAAt/I,MAAU;AACnC,YAAMu/I,IAAuB,CAACxC,GAAUr1B,GAAK/vI,MAAU;AACrD,cAAM6nK,IAAcniK,GAAS1F,CAAK,IAAI,EAAE,MAAMA,EAAO,IAAGA,GAClD8nK,IAASz/I,EAAO,IAAI,UAAUA,EAAO,UAAU,WAAW,GAAG;AACnE,QAAInnB,GAAS2mK,CAAW,KAAKniK,GAASmiK,EAAY,IAAI,MACpDA,EAAY,OAAOA,EAAY,KAAK,QAAQ,MAAM,KAAK,IACnD,CAACC,KAAU,CAACD,EAAY,SAC1Bx/I,EAAO,UAAU,OAAO,MAAM,GAE5Bw/I,EAAY,QACdx/I,EAAO,UAAU,MAAM,QAAQw/I,GAAaC,CAAM;AAAA,MAG9D;AACM,MAAAz/I,EAAO,eAAe,YAAY;AAAA,QAChC,QAAQ,MAAM;AACZ,cAAIA,EAAO,UAAU,cAAc;AACjC,gBAAIA,EAAO,UAAU,eAAe;AAClC,oBAAMd,IAAMc,EAAO,IAAI,UAAUA,EAAO,UAAU,YAAY,GAAG;AACjE,cAAId,KACFc,EAAO,IAAI,OAAOd,GAAK,EAAI;AAE7B;AAAA,YACD;AACD,YAAAc,EAAO,UAAU,OAAO,MAAM;AAAA,UAC/B;AAAA,QACF;AAAA,QACD,eAAeu/I;AAAA,QACf,YAAYA;AAAA,MACpB,CAAO;AAAA,IACP,GAEUG,KAAyB,CAAA1/I,MAAU;AACvC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,yCAAyC,CAAAyzB,MAAW;AAClD,UAAAzzB,EAAO,OAAM,EAAG,YAAYyzB,CAAO;AACnC,gBAAM+tD,IAAUxhF,EAAO,IAAI,UAAUA,EAAO,UAAU,WAAW,OAAO;AACxE,cAAIwhF,GAAS;AACX,kBAAMm+D,IAAan+D,EAAQ;AAC3B,gBAAIm+D,KAAc,2BAA2B,KAAKA,EAAW,QAAQ,GAAG;AACtE,oBAAMn4D,IAAKxnF,EAAO,UAAU,YAAW;AACvC,cAAAA,EAAO,IAAI,MAAM2/I,GAAYn+D,CAAO,GACpCxhF,EAAO,UAAU,eAAewnF,CAAE;AAAA,YACnC;AAAA,UACF;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,GACUo4D,KAA6B,CAAA5/I,MAAU;AAC3C,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,yCAAyC,CAAAyzB,MAAW;AAClD,gBAAMosH,IAAO7/I,EAAO,IAAI,UAAUA,EAAO,UAAU,WAAW,OAAO;AACrE,iBAAO6/I,MAASpsH,MAAY,yBAAyBosH,EAAK,YAAY,QAAQpsH,MAAY,uBAAuBosH,EAAK,YAAY;AAAA,QACnI;AAAA,MACF,GAAE,OAAO;AAAA,IAChB,GACUC,KAAqB,CAAA9/I,MAAU;AACnC,MAAA0/I,GAAuB1/I,CAAM,GAC7B4/I,GAA2B5/I,CAAM;AAAA,IACvC,GAEU+/I,KAAoB,CAAC//I,GAAQpP,GAAM1Z,GAAM+gB,MAAc;AAC3D,YAAMrJ,IAAMoR,EAAO,KACb3O,IAAW,CAAAT,MAAQhC,EAAI,QAAQgC,CAAI,KAAKA,EAAK,kBAAkB1Z,GAC/D8oK,IAAiB3uJ,EAAST,CAAI,IAAIA,IAAOhC,EAAI,UAAUqJ,GAAW5G,GAAUna,CAAI;AACtF,aAAOmI,EAAS,KAAK2gK,CAAc,EAAE,IAAIjvJ,EAAa,OAAO;AAAA,IACnE,GACUkvJ,KAAS,CAACjgJ,GAAQQ,MAAW;AACjC,YAAM5R,IAAMoR,EAAO,KACb5pB,IAAM4pB,EAAO,UAAU,OAAM,GAC7BpP,IAAO4P,IAASR,EAAO,UAAU,SAAQ,IAAKA,EAAO,UAAU,UAC/D/H,IAAYuI,IAASpqB,EAAI,iBAAiBA,EAAI,cAC9Cc,IAAOs0I,GAAgB58H,GAAKqJ,CAAS;AAC3C,UAAI,CAAC/gB,KAAQ,CAACA,EAAK;AACjB;AAEF,YAAM2kI,IAAWr7G,IAAS/J,KAAWE,IAC/Bi2H,IAAep3F,GAAmBx1B,CAAM;AAC9C,MAAA+/I,GAAkB//I,GAAQpP,GAAM1Z,GAAM+gB,CAAS,EAAE,KAAK,CAAAgO,MAAe;AACnE,cAAMgxG,IAAWyV,GAAe1sH,GAAQ/H,GAAWgO,EAAY,KAAK/uB,GAAM,IAAO01I,CAAY;AAC7F,QAAA/Q,EAAS51G,GAAalV,EAAa,QAAQkmH,CAAQ,CAAC,GACpDj3G,EAAO,UAAU,kBAAkBi3G,GAAU,CAAC,GAC9Cj3G,EAAO,SAAS,YAAY,EAAE,UAAAi3G,EAAU,CAAA,GACxCwT,GAAezqH,GAAQ,iBAAiB;AAAA,MAChD,CAAO;AAAA,IACP,GACUkgJ,KAAe,CAAAlgJ,MAAUigJ,GAAOjgJ,GAAQ,EAAI,GAC5Cmf,KAAc,CAAAnf,MAAUigJ,GAAOjgJ,GAAQ,EAAK,GAE5CmgJ,KAAqB,CAAAngJ,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,sBAAsB,MAAM;AAC1B,UAAAkgJ,GAAalgJ,CAAM;AAAA,QACpB;AAAA,QACD,qBAAqB,MAAM;AACzB,UAAAmf,GAAYnf,CAAM;AAAA,QACnB;AAAA,MACT,CAAO;AAAA,IACP,GAEUogJ,KAAqB,CAAApgJ,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,iBAAiB,MAAM;AACrB,UAAAsyH,GAAYnD,IAAYnvH,CAAM;AAAA,QAC/B;AAAA,QACD,kBAAkB,CAAC+8I,GAAUr1B,GAAK/vI,MAAU;AAC1C,UAAA46I,GAASvyH,GAAQroB,CAAK;AAAA,QACvB;AAAA,QACD,iBAAiB,CAAColK,GAAUr1B,GAAKllD,MAAW;AAC1C,UAAA8vD,GAAYxB,IAAW9wH,CAAM;AAAA,QAC9B;AAAA,MACT,CAAO;AAAA,IACP,GAEUqgJ,KAAqB,CAAArgJ,MAAU;AACnC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,oBAAoB,CAAC+8I,GAAUr1B,GAAK/vI,MAAU;AAC5C,cAAIkjC,IAAU;AACd,UAAA7a,EAAO,IAAI,UAAUA,EAAO,UAAU,QAAS,GAAE,CAAApP,MAC3CuK,GAAYvK,CAAI,KAAKiqB,QAAcljC,KACrCqoB,EAAO,UAAU,OAAOpP,CAAI,GACrB,MAEA,IAERoP,EAAO,QAAO,CAAE;AAAA,QACpB;AAAA,QACD,eAAe,CAAC+8I,GAAUr1B,GAAK/vI,MAAU;AACvC,UAAAqoB,EAAO,UAAU,OAAOroB,CAAK;AAAA,QAC9B;AAAA,QACD,WAAW,MAAM;AACf,gBAAM+jF,IAAc17D,EAAO,IAAI,UAAUA,EAAO,UAAU,YAAYjD,EAAuB;AAC7F,cAAI2+D,GAAa;AACf,kBAAMtlF,IAAM4pB,EAAO,IAAI,UAAS;AAChC,YAAA5pB,EAAI,mBAAmBslF,CAAW,GAClC17D,EAAO,UAAU,OAAO5pB,CAAG;AAAA,UAC5B;AAAA,QACF;AAAA,MACT,CAAO;AAAA,IACP,GAEUkqK,KAAuB,CAAAtgJ,MAAU;AACrC,MAAAA,EAAO,eAAe,YAAY;AAAA,QAChC,eAAe,CAAC+8I,GAAUr1B,GAAK/vI,MAAU;AACvC,gBAAMiZ,IAAOjZ,KAA6CqoB,EAAO,UAAU;AAC3E,cAAIpP,MAASoP,EAAO,WAAW;AAC7B,kBAAMwnF,IAAKxnF,EAAO,UAAU,YAAW;AACvC,YAAAA,EAAO,IAAI,OAAOpP,GAAM,EAAI,GAC5BoP,EAAO,UAAU,eAAewnF,CAAE;AAAA,UACnC;AAAA,QACF;AAAA,QACD,UAAU,MAAM;AACd,UAAAxnF,EAAO,SAAS;QACjB;AAAA,QACD,UAAU,CAAC+8I,GAAUr1B,GAAK/vI,MAAU;AAClC,UAAA+nE,GAAM1/C,GAAQroB,MAAU,EAAI;AAAA,QAC7B;AAAA,QACD,oBAAoB,MAAM;AACxB,UAAAqoB,EAAO,YAAY,CAACA,EAAO,WAC3BA,EAAO,UAAS;AAAA,QACjB;AAAA,MACT,CAAO;AAAA,IACP,GACUugJ,KAAmB,CAAAvgJ,MAAU;AACjC,MAAAu8I,GAAmBv8I,CAAM,GACzBw8I,GAAmBx8I,CAAM,GACzBo/I,GAAmBp/I,CAAM,GACzBqgJ,GAAmBrgJ,CAAM,GACzB88I,GAAmB98I,CAAM,GACzBs/I,GAAmBt/I,CAAM,GACzBq/I,GAAmBr/I,CAAM,GACzBmgJ,GAAmBngJ,CAAM,GACzBogJ,GAAmBpgJ,CAAM,GACzB8/I,GAAmB9/I,CAAM,GACzBm/I,GAAmBn/I,CAAM,GACzBsgJ,GAAqBtgJ,CAAM;AAAA,IACjC,GAEUwgJ,KAAwB,CAAC,YAAY,GACrCC,KAAyB,CAAAhtH,MAAWtzC,EAAWqgK,IAAuB/sH,EAAQ,YAAW,CAAE;AAAA,IACjG,MAAMitH,GAAe;AAAA,MACnB,YAAY1gJ,GAAQ;AAClB,aAAK,WAAW;AAAA,UACd,OAAO,CAAE;AAAA,UACT,MAAM,CAAE;AAAA,UACR,OAAO,CAAE;AAAA,QACnB,GACQ,KAAK,SAASA;AAAA,MACf;AAAA,MACD,YAAYyzB,GAAS9nD,IAAK,IAAOgM,GAAO+C,GAAM;AAC5C,cAAMslB,IAAS,KAAK,QACd2gJ,IAAmBltH,EAAQ,eAC3BksB,IAAYjlE,KAAS,OAA0B,SAASA,EAAK;AAgBnE,YAfIslB,EAAO,YAGP2gJ,MAAqB,eACnB,CAAC,uCAAuC,KAAKA,CAAgB,KAAK,CAAChhG,IACrE3/C,EAAO,MAAK,IAEZ88C,GAAQ98C,CAAM,IAGAA,EAAO,SAAS,qBAAqB;AAAA,UACrD,SAAAyzB;AAAA,UACA,IAAA9nD;AAAA,UACA,OAAAgM;AAAA,QACV,CAAS,EACa;AACZ,iBAAO;AAET,cAAMkC,IAAO,KAAK,SAAS,KAAK8mK,CAAgB;AAChD,eAAI9iK,EAAWhE,CAAI,KACjBA,EAAK8mK,GAAkBh1K,GAAIgM,CAAK,GAChCqoB,EAAO,SAAS,eAAe;AAAA,UAC7B,SAAAyzB;AAAA,UACA,IAAA9nD;AAAA,UACA,OAAAgM;AAAA,QACZ,CAAW,GACM,MAEF;AAAA,MACR;AAAA,MACD,kBAAkB87C,GAAS;AACzB,YAAI,CAACgtH,GAAuBhtH,CAAO,KAAK,KAAK,OAAO,OAAO,SAAU,KAAI,KAAK,OAAO;AACnF,iBAAO;AAET,cAAMktH,IAAmBltH,EAAQ,eAC3B55C,IAAO,KAAK,SAAS,MAAM8mK,CAAgB;AACjD,eAAI9iK,EAAWhE,CAAI,IACVA,EAAK8mK,CAAgB,IAEvB;AAAA,MACR;AAAA,MACD,kBAAkBltH,GAAS;AACzB,YAAI,CAACgtH,GAAuBhtH,CAAO,KAAK,KAAK,OAAO,OAAO,SAAU,KAAI,KAAK,OAAO;AACnF,iBAAO;AAET,cAAMktH,IAAmBltH,EAAQ,eAC3B55C,IAAO,KAAK,SAAS,MAAM8mK,CAAgB;AACjD,eAAI9iK,EAAWhE,CAAI,IACVA,EAAK8mK,CAAgB,IAEvB;AAAA,MACR;AAAA,MACD,YAAYC,GAAa9nK,IAAO,QAAQ;AACtC,cAAM+nK,IAAW,KAAK;AACtB,QAAAt+J,GAAOq+J,GAAa,CAACx8J,GAAUqvC,MAAY;AACzC,UAAAnzC,EAAOmzC,EAAQ,YAAW,EAAG,MAAM,GAAG,GAAG,CAAAA,MAAW;AAClD,YAAAotH,EAAS/nK,CAAI,EAAE26C,CAAO,IAAIrvC;AAAA,UACtC,CAAW;AAAA,QACX,CAAS;AAAA,MACF;AAAA,MACD,WAAWqvC,GAASrvC,GAAUgJ,GAAO;AACnC,cAAMuzJ,IAAmBltH,EAAQ;AACjC,aAAK,SAAS,KAAKktH,CAAgB,IAAI,CAAC5D,GAAUpxK,GAAIgM,MAAUyM,EAAS,KAAKgJ,KAA6C,KAAK,QAAQzhB,GAAIgM,CAAK;AAAA,MAClJ;AAAA,MACD,sBAAsB87C,GAAS;AAC7B,cAAMktH,IAAmBltH,EAAQ;AACjC,eAAI,OAAK,SAAS,KAAKktH,CAAgB;AAAA,MAKxC;AAAA,MACD,qBAAqBltH,GAASrvC,GAAUgJ,GAAO;AAC7C,aAAK,SAAS,MAAMqmC,EAAQ,YAAa,CAAA,IAAI,MAAMrvC,EAAS,KAAKgJ,KAA6C,KAAK,MAAM;AAAA,MAC1H;AAAA,MACD,qBAAqBqmC,GAASrvC,GAAUgJ,GAAO;AAC7C,aAAK,SAAS,MAAMqmC,EAAQ,YAAa,CAAA,IAAI,MAAMrvC,EAAS,KAAKgJ,KAA6C,KAAK,MAAM;AAAA,MAC1H;AAAA,IACF;AAED,UAAM0zJ,KAA8B,4BAC9BviI,KAAc,CAACrf,GAAKsf,GAAKxV,MAAU;AACvC,MAAI1Y,GAAI4O,GAAKsf,CAAG,KAAK,CAACxV,IACpB5Y,GAAS8O,GAAKsf,CAAG,IACRxV,KACT9Y,GAAMgP,GAAKsf,CAAG;AAAA,IAEtB,GACUyyH,KAAwB,CAACjxI,GAAQwzB,GAAKxqB,MAAU;AACpD,UAAI;AACF,QAAAhJ,EAAO,OAAQ,EAAC,YAAYwzB,GAAK,IAAO,OAAOxqB,CAAK,CAAC;AAAA,MACtD,QAAY;AAAA,MACZ;AAAA,IACP,GACU+3I,KAAqB,CAAC7hJ,GAAK8J,MAAU;AACzC,MAAA9J,EAAI,IAAI,kBAAkB8J,IAAQ,SAAS;AAAA,IACjD,GACUg4I,KAA+B,CAAA9hJ,MAAO;AAC1C,MAAA5e,EAAOka,GAAY0E,GAAK,2BAA2B,GAAG,CAAAA,MAAO;AAC3D,QAAArQ,GAAMqQ,GAAK4hJ,IAA6B,MAAM,GAC9CC,GAAmB7hJ,GAAK,EAAK;AAAA,MACrC,CAAO;AAAA,IACP,GACU+hJ,KAA8B,CAAA/hJ,MAAO;AACzC,MAAA5e,EAAOka,GAAY0E,GAAK,KAAM4hJ,YAAsC,GAAG,CAAA5hJ,MAAO;AAC5E,QAAA/P,GAAS+P,GAAK4hJ,EAA2B,GACzCC,GAAmB7hJ,GAAK,EAAI;AAAA,MACpC,CAAO;AAAA,IACP,GACUgiJ,KAAsB,CAAAlhJ,MAAU;AACpC,MAAA3gB,EAAS,KAAK2gB,EAAO,UAAU,SAAS,EAAE,KAAK,CAAAd,MAAO;AACpD,QAAAA,EAAI,gBAAgB,mBAAmB;AAAA,MAC/C,CAAO;AAAA,IACP,GACUiiJ,KAAuB,CAAAnhJ,MAAU;AACrC,MAAAA,EAAO,UAAU,OAAOA,EAAO,UAAU,OAAM,CAAE;AAAA,IACvD,GACUohJ,KAAiB,CAACphJ,GAAQgJ,MAAU;AACxC,YAAM5P,IAAOrI,EAAa,QAAQiP,EAAO,QAAS,CAAA;AAClD,MAAAue,GAAYnlB,GAAM,wBAAwB4P,CAAK,GAC3CA,KACFhJ,EAAO,UAAU,iBAAiB,kBAClCA,EAAO,oBAAoB,iBAC3BkhJ,GAAoBlhJ,CAAM,GAC1BA,EAAO,WAAW,IAClB+gJ,GAAmB3nJ,GAAM,EAAK,GAC9B4nJ,GAA6B5nJ,CAAI,MAEjC4G,EAAO,WAAW,IACdA,EAAO,qBACT+gJ,GAAmB3nJ,GAAM,EAAI,GAE/B6nJ,GAA4B7nJ,CAAI,GAChC63I,GAAsBjxI,GAAQ,gBAAgB,EAAK,GACnDixI,GAAsBjxI,GAAQ,4BAA4B,EAAK,GAC/DixI,GAAsBjxI,GAAQ,wBAAwB,EAAK,GACvDq/C,GAAmBr/C,CAAM,KAC3BA,EAAO,MAAK,GAEdmhJ,GAAqBnhJ,CAAM,GAC3BA,EAAO,YAAW;AAAA,IAE1B,GACUqhJ,KAAa,CAAArhJ,MAAUA,EAAO,UAC9BshJ,KAAkB,CAAAthJ,MAAU;AAChC,MAAAA,EAAO,OAAO,mBAAmB,mBAAmB,CAAAvI,MAAS;AAC3D,QAAI4pJ,GAAWrhJ,CAAM,KACnB1f,EAAOmX,GAAO,CAAA7G,MAAQ;AACpB,UAAAA,EAAK,KAAKkwJ,IAA6BlwJ,EAAK,KAAK,iBAAiB,CAAC,GACnEA,EAAK,KAAK,mBAAmB,OAAO;AAAA,QAChD,CAAW;AAAA,MAEX,CAAO,GACDoP,EAAO,WAAW,mBAAmB8gJ,IAA6B,CAAArpJ,MAAS;AACzE,QAAI4pJ,GAAWrhJ,CAAM,KACnB1f,EAAOmX,GAAO,CAAA7G,MAAQ;AACpB,UAAAA,EAAK,KAAK,mBAAmBA,EAAK,KAAKkwJ,EAA2B,CAAC;AAAA,QAC/E,CAAW;AAAA,MAEX,CAAO,GACD9gJ,EAAO,WAAW,YAAY8gJ,EAA2B;AAAA,IAC/D,GACUS,KAAiC,CAAAvhJ,MAAU;AAC/C,MAAIA,EAAO,aACTshJ,GAAgBthJ,CAAM,IAEtBA,EAAO,GAAG,WAAW,MAAM;AACzB,QAAAshJ,GAAgBthJ,CAAM;AAAA,MAChC,CAAS;AAAA,IAET,GACUwhJ,KAAe,OAAK,EAAE,SAAS,SAC/BC,KAAgB,CAAC,MAAM,GACvBC,KAAyB,OAAKvhK,EAAWshK,IAAe,EAAE,IAAI,GAC9DE,KAAmB,CAAC3hJ,GAAQd,MAEzB9J,GAAU8J,GAAK,KADP,CAAAA,MAAOvb,GAAGub,GAAKnO,EAAa,QAAQiP,EAAO,QAAS,CAAA,CAAC,CACnC,EAAE,KAAK,CAAA1lC,MAAK20B,GAAO30B,GAAG,MAAM,CAAC,GAE1DsnL,KAAwB,CAAC5hJ,GAAQ9lC,MAAM;AAC3C,UAAIsnL,GAAatnL,CAAC,KAAK,CAAC81E,GAAG,eAAe91E,CAAC,GAAG;AAC5C,cAAMglC,IAAMnO,EAAa,QAAQ72B,EAAE,MAAM;AACzC,QAAAynL,GAAiB3hJ,GAAQd,CAAG,EAAE,KAAK,CAAA2iJ,MAAQ;AAEzC,cADA3nL,EAAE,eAAc,GACZ,KAAK,KAAK2nL,CAAI,GAAG;AACnB,kBAAMC,IAAW9hJ,EAAO,IAAI,OAAO,GAAI6hJ,YAAiBh6J,GAAcg6J,GAAM,GAAG,CAAG,IAAG;AACrF,YAAIC,EAAS,UACX9hJ,EAAO,UAAU,eAAe8hJ,EAAS,CAAC,GAAG,EAAI;AAAA,UAE/D;AACY,mBAAO,KAAKD,GAAM,UAAU,sGAAsG;AAAA,QAE9I,CAAS;AAAA,MACT;AAAa,QAAIH,GAAuBxnL,CAAC,KACjC8lC,EAAO,SAAS9lC,EAAE,MAAMA,CAAC;AAAA,IAEjC,GACU6nL,KAAoC,CAAA/hJ,MAAU;AAClD,MAAAA,EAAO,GAAG,aAAa,CAAA9lC,MAAK;AAC1B,QAAImnL,GAAWrhJ,CAAM,KACnB9lC,EAAE,eAAc;AAAA,MAE1B,CAAO,GACD8lC,EAAO,GAAG,kBAAkB,CAAA9lC,MAAK;AAC/B,QAAImnL,GAAWrhJ,CAAM,KACnB9lC,EAAE,eAAc;AAAA,MAE1B,CAAO;AAAA,IACP,GAEU8nL,KAAe91J,GAAM,QAAQ,sXAAqY,GAAG;AAAA,IAC3a,MAAM+1J,GAAgB;AAAA,MACpB,OAAO,SAAS7+J,GAAM;AACpB,eAAO,CAAC,CAAC4+J,GAAa5+J,EAAK,YAAa,CAAA;AAAA,MACzC;AAAA,MACD,YAAY2kB,GAAU;AACpB,aAAK,WAAW,IAChB,KAAK,WAAWA,KAAY,IAC5B,KAAK,QAAQ,KAAK,SAAS,SAAS,MACpC,KAAK,cAAc,KAAK,SAAS,eAAe5oB;AAAA,MACjD;AAAA,MACD,KAAKiE,GAAM1I,GAAM;AACf,eAAO,KAAK,SAAS0I,GAAM1I,CAAI;AAAA,MAChC;AAAA,MACD,SAAS0I,GAAM1I,GAAM;AACnB,cAAMmoC,IAASz/B,EAAK,eACd+Q,IAAQsjB,GAAYoL,GAAQnoC,KAA0C,CAAA,GAAI,KAAK,KAAK;AAC1F,QAAI,KAAK,SAAS,cAChB,KAAK,SAAS,WAAWyZ,CAAK;AAEhC,cAAMiwD,IAAW,KAAK,SAASvhC,CAAM;AACrC,YAAIuhC;AACF,mBAAS,IAAI,GAAG50E,IAAI40E,EAAS,QAAQ,IAAI50E,GAAG,KAAK;AAC/C,kBAAM4U,IAAWggE,EAAS,CAAC;AAC3B,gBAAI,CAAAhgE,EAAS,SAMb;AAAA,kBAHIA,EAAS,QACX,KAAK,IAAIy+B,GAAQz+B,EAAS,IAAI,GAE5B+P,EAAM;AACR,uBAAOA;AAET,kBAAI/P,EAAS,KAAK,KAAK,KAAK,OAAO+P,CAAK,MAAM;AAC5C,uBAAAA,EAAM,eAAc,GACbA;AAAA;AAAA,UAEV;AAEH,eAAOA;AAAA,MACR;AAAA,MACD,GAAG/Q,GAAMgB,GAAUyS,GAAS6zF,GAAO;AAIjC,YAHItmG,MAAa,OACfA,IAAWjF,KAETiF,GAAU;AACZ,gBAAM89J,IAAkB;AAAA,YACtB,MAAM99J;AAAA,YACN,SAAS;AAAA,UACrB;AACU,UAAIsmG,KACFx+F,GAAM,OAAOg2J,GAAiBx3D,CAAK;AAErC,gBAAMjvF,IAAQrY,EAAK,YAAa,EAAC,MAAM,GAAG;AAC1C,cAAIxkB,IAAI68B,EAAM;AACd,iBAAO78B,OAAK;AACV,kBAAMujL,IAAc1mJ,EAAM78B,CAAC;AAC3B,gBAAIwlF,IAAW,KAAK,SAAS+9F,CAAW;AACxC,YAAK/9F,MACHA,IAAW,CAAA,GACX,KAAK,YAAY+9F,GAAa,EAAI,IAEhCtrJ,IACFutD,IAAW;AAAA,cACT89F;AAAA,cACA,GAAG99F;AAAA,YACnB,IAEcA,IAAW;AAAA,cACT,GAAGA;AAAA,cACH89F;AAAA,YAChB,GAEY,KAAK,SAASC,CAAW,IAAI/9F;AAAA,UAC9B;AAAA,QACF;AACD,eAAO;AAAA,MACR;AAAA,MACD,IAAIhhE,GAAMgB,GAAU;AAClB,YAAIhB,GAAM;AACR,gBAAMqY,IAAQrY,EAAK,YAAa,EAAC,MAAM,GAAG;AAC1C,cAAIxkB,IAAI68B,EAAM;AACd,iBAAO78B,OAAK;AACV,kBAAMujL,IAAc1mJ,EAAM78B,CAAC;AAC3B,gBAAIwlF,IAAW,KAAK,SAAS+9F,CAAW;AACxC,gBAAI,CAACA;AACH,qBAAA5/J,GAAO,KAAK,UAAU,CAACigF,GAAQ4/E,MAAgB;AAC7C,qBAAK,YAAYA,GAAa,EAAK,GACnC,OAAO,KAAK,SAASA,CAAW;AAAA,cAChD,CAAe,GACM;AAET,gBAAIh+F,GAAU;AACZ,kBAAI,CAAChgE;AACH,gBAAAggE,EAAS,SAAS;AAAA,mBACb;AACL,sBAAMi+F,IAAmB7hK,GAAY4jE,GAAU,CAAA3rD,MAAWA,EAAQ,SAASrU,CAAQ;AACnF,gBAAAggE,IAAWi+F,EAAiB,MAC5B,KAAK,SAASF,CAAW,IAAI/9F,GAC7B9jE,EAAO+hK,EAAiB,MAAM,CAAA5pJ,MAAW;AACvC,kBAAAA,EAAQ,UAAU;AAAA,gBACpC,CAAiB;AAAA,cACF;AACD,cAAK2rD,EAAS,WACZ,KAAK,YAAYhhE,GAAM,EAAK,GAC5B,OAAO,KAAK,SAAS++J,CAAW;AAAA,YAEnC;AAAA,UACF;AAAA,QACX;AACU,UAAA5/J,GAAO,KAAK,UAAU,CAACigF,GAAQp/E,MAAS;AACtC,iBAAK,YAAYA,GAAM,EAAK;AAAA,UACxC,CAAW,GACD,KAAK,WAAW;AAElB,eAAO;AAAA,MACR;AAAA,MACD,KAAKA,GAAMgB,GAAUyS,GAAS;AAC5B,eAAO,KAAK,GAAGzT,GAAMgB,GAAUyS,GAAS,EAAE,MAAM,GAAI,CAAE;AAAA,MACvD;AAAA,MACD,IAAIzT,GAAM;AACR,QAAAA,IAAOA,EAAK;AACZ,cAAMk/J,IAAU,KAAK,SAASl/J,CAAI;AAClC,eAAO,EAAE,CAACk/J,KAAWA,EAAQ,WAAW;AAAA,MACzC;AAAA,IACF;AAED,UAAMC,KAAqB,CAAA//J,OACpBA,EAAI,qBACPA,EAAI,mBAAmB,IAAIy/J,GAAgB;AAAA,MACzC,OAAOz/J;AAAA,MACP,aAAa,CAACY,GAAM4lB,MAAU;AAC5B,QAAIi5I,GAAgB,SAAS7+J,CAAI,KAAKZ,EAAI,qBACxCA,EAAI,kBAAkBY,GAAM4lB,CAAK;AAAA,MAEpC;AAAA,IACX,CAAS,IAEIxmB,EAAI,mBAEPggK,KAAa;AAAA,MACjB,KAAKp/J,GAAM1I,GAAM+nK,GAAQ;AACvB,eAAO,KAAK,SAASr/J,GAAM1I,GAAM+nK,CAAM;AAAA,MACxC;AAAA,MACD,SAASr/J,GAAM1I,GAAM+nK,GAAQ;AAC3B,cAAMntI,IAAO;AACb,YAAIA,EAAK,WAAWlyB,MAAS,YAAYA,MAAS;AAChD,iBAAOq0B,GAAYr0B,EAAK,YAAW,GAAI1I,KAA0C,CAAE,GAAE46B,CAAI;AAE3F,cAAMotI,IAAiBH,GAAmBjtI,CAAI,EAAE,SAASlyB,GAAM1I,CAAI;AACnE,YAAI+nK,MAAW,MAASntI,EAAK,QAAQ;AACnC,cAAIljB,IAASkjB,EAAK;AAClB,iBAAOljB,KAAU,CAACswJ,EAAe;AAC/B,YAAAtwJ,EAAO,SAAShP,GAAMs/J,GAAgB,EAAK,GAC3CtwJ,IAASA,EAAO,SAASA,EAAO,OAAM,IAAK;AAAA,QAE9C;AACD,eAAOswJ;AAAA,MACR;AAAA,MACD,GAAGt/J,GAAMgB,GAAUyS,GAAS;AAC1B,eAAO0rJ,GAAmB,IAAI,EAAE,GAAGn/J,GAAMgB,GAAUyS,CAAO;AAAA,MAC3D;AAAA,MACD,IAAIzT,GAAMgB,GAAU;AAClB,eAAOm+J,GAAmB,IAAI,EAAE,IAAIn/J,GAAMgB,CAAQ;AAAA,MACnD;AAAA,MACD,KAAKhB,GAAMgB,GAAU;AACnB,eAAOm+J,GAAmB,IAAI,EAAE,KAAKn/J,GAAMgB,CAAQ;AAAA,MACpD;AAAA,MACD,kBAAkBhB,GAAM;AACtB,eAAOm/J,GAAmB,IAAI,EAAE,IAAIn/J,CAAI;AAAA,MACzC;AAAA,IACP,GAEUu/J,KAAQjoI,GAAS;AACvB,QAAIkoI;AACJ,UAAMC,KAAiB,CAAC7iJ,GAAQ8iJ,MAAc;AAC5C,UAAIA,MAAc;AAChB,eAAO9iJ,EAAO;AAEhB,UAAI,CAACA,EAAO,UAAU,2DAA2D,KAAK8iJ,CAAS;AAC7F,eAAO9iJ,EAAO,OAAQ,EAAC;AAEzB,YAAM+iJ,IAAYzrH,GAAat3B,CAAM;AACrC,aAAI+iJ,KACG/iJ,EAAO,cACVA,EAAO,YAAY2iJ,GAAM,OAAOI,CAAS,EAAE,CAAC,IAEvC/iJ,EAAO,aAETA,EAAO;IACpB,GACUgjJ,KAAc,CAAAhjJ,MAAU,CAACA,EAAO,UAAU,CAACqhJ,GAAWrhJ,CAAM,GAC5D4+E,KAAY,CAAC5+E,GAAQ8iJ,GAAW5oL,MAAM;AAC1C,MAAI8oL,GAAYhjJ,CAAM,IACpBA,EAAO,SAAS8iJ,GAAW5oL,CAAC,IACnBmnL,GAAWrhJ,CAAM,KAC1B4hJ,GAAsB5hJ,GAAQ9lC,CAAC;AAAA,IAEvC,GACU+oL,KAAoB,CAACjjJ,GAAQ8iJ,MAAc;AAI/C,UAHK9iJ,EAAO,cACVA,EAAO,YAAY,KAEjBA,EAAO,UAAU8iJ,CAAS,KAAK9iJ,EAAO;AACxC;AAEF,YAAMkjJ,IAAeL,GAAe7iJ,GAAQ8iJ,CAAS;AACrD,UAAIxrH,GAAat3B,CAAM,GAAG;AAcxB,YAbK4iJ,OACHA,KAA2B,CAAA,GAC3B5iJ,EAAO,cAAc,GAAG,gBAAgB,MAAM;AAC5C,UAAKA,EAAO,cAAc,gBACpB4iJ,OACFrgK,GAAOqgK,IAA0B,CAACpgF,GAAQp/E,MAAS;AACjD,YAAA4c,EAAO,IAAI,OAAO6iJ,GAAe7iJ,GAAQ5c,CAAI,CAAC;AAAA,UAChE,CAAiB,GACDw/J,KAA2B;AAAA,QAG3C,CAAW,IAECA,GAAyBE,CAAS;AACpC;AAEF,cAAMK,IAAW,CAAAjpL,MAAK;AACpB,gBAAMgvB,IAAShvB,EAAE,QACXkpL,IAAUpjJ,EAAO,cAAc,IAAG;AACxC,cAAIphC,IAAIwkL,EAAQ;AAChB,iBAAOxkL,OAAK;AACV,kBAAMw6B,IAAOgqJ,EAAQxkL,CAAC,EAAE,QAAO;AAC/B,aAAIw6B,MAASlQ,KAAUy5J,GAAM,UAAUz5J,GAAQkQ,CAAI,MACjDwlF,GAAUwkE,EAAQxkL,CAAC,GAAGkkL,GAAW5oL,CAAC;AAAA,UAErC;AAAA,QACX;AACQ,QAAA0oL,GAAyBE,CAAS,IAAIK,GACtCR,GAAM,KAAKO,GAAcJ,GAAWK,CAAQ;AAAA,MACpD,OAAa;AACL,cAAMA,IAAW,CAAAjpL,MAAK;AACpB,UAAA0kH,GAAU5+E,GAAQ8iJ,GAAW5oL,CAAC;AAAA,QACxC;AACQ,QAAAyoL,GAAM,KAAKO,GAAcJ,GAAWK,CAAQ,GAC5CnjJ,EAAO,UAAU8iJ,CAAS,IAAIK;AAAA,MAC/B;AAAA,IACP,GACUE,KAAmB;AAAA,MACvB,GAAGb;AAAA,MACH,4BAA4B;AAC1B,cAAMltI,IAAO;AACb,QAAAppB,GAAM,KAAKopB,EAAK,sBAAsB,CAAAlyB,MAAQ;AAC5C,UAAA6/J,GAAkB3tI,GAAMlyB,CAAI;AAAA,QACtC,CAAS;AAAA,MACF;AAAA,MACD,kBAAkBA,GAAM4lB,GAAO;AAC7B,cAAMsM,IAAO;AACb,QAAIlyB,MAAS,WAAWA,MAAS,UAG7BkyB,EAAK,YAGLtM,IACEsM,EAAK,cACP2tI,GAAkB3tI,GAAMlyB,CAAI,IAEvBkyB,EAAK,uBAGRA,EAAK,qBAAqB,KAAKlyB,CAAI,IAFnCkyB,EAAK,uBAAuB,CAAClyB,CAAI,IAK5BkyB,EAAK,eAAeA,EAAK,cAClCA,EAAK,IAAI,OAAOutI,GAAevtI,GAAMlyB,CAAI,GAAGA,GAAMkyB,EAAK,UAAUlyB,CAAI,CAAC,GACtE,OAAOkyB,EAAK,UAAUlyB,CAAI;AAAA,MAE7B;AAAA,MACD,wBAAwB;AACtB,cAAMkyB,IAAO,MACPlc,IAAOkc,EAAK,WACZ1mB,IAAM0mB,EAAK;AACjB,QAAIA,EAAK,cACP/yB,GAAO+yB,EAAK,WAAW,CAAC39B,GAAOyL,MAAS;AACtC,UAAAkyB,EAAK,IAAI,OAAOutI,GAAevtI,GAAMlyB,CAAI,GAAGA,GAAMzL,CAAK;AAAA,QACnE,CAAW,GACD,OAAO29B,EAAK,YAEV,CAACA,EAAK,UAAUlc,KAAQxK,MAC1BwK,EAAK,SAAS,MACdxK,EAAI,OAAO0mB,EAAK,OAAQ,CAAA,GACxB1mB,EAAI,OAAO0mB,EAAK,OAAQ,CAAA,IAEtB1mB,MACFA,EAAI,OAAOwK,CAAI,GACfxK,EAAI,OAAO0mB,EAAK,aAAc,CAAA;AAAA,MAEjC;AAAA,IACP,GAEUguI,KAAsB,CAAA3rK,MACtB0F,GAAS1F,CAAK,IACT;AAAA,MACL,OAAOA,EAAM,MAAM,MAAM;AAAA,MACzB,OAAO;AAAA,IACjB,IACiBoG,GAAUpG,GAAO0F,EAAQ,IAC3B;AAAA,MACL,OAAA1F;AAAA,MACA,OAAO;AAAA,IACjB,IAEe;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,IACnB,GAGU4rK,KAAsB,CAAAzqK,MAAQ;AAClC,YAAM+oI,KAAa,MAAM;AACvB,gBAAQ/oI,GAAI;AAAA,UACZ,KAAK;AACH,mBAAOyE;AAAA,UACT,KAAK;AACH,mBAAOE;AAAA,UACT,KAAK;AACH,mBAAOI;AAAA,UACT,KAAK;AACH,mBAAOC;AAAA,UACT,KAAK;AACH,mBAAOjF;AAAA,UACT,KAAK;AACH,mBAAOwE;AAAA,UACT,KAAK;AACH,mBAAOimK;AAAA,UACT,KAAK;AACH,mBAAO,CAAA5nI,MAAO39B,GAAU29B,GAAK7iC,EAAQ;AAAA,UACvC,KAAK;AACH,mBAAO,CAAA6iC,MAAOt+B,GAAKs+B,GAAK,MAAM;AAAA,UAChC;AACE,mBAAOt8B;AAAA,QACR;AAAA,MACT;AACM,aAAO,CAAAzH,MAAS6rK,GAAa7rK,GAAOkqI,GAAW,uBAAwB/oI,IAAQ;AAAA,IACrF,GACU2qK,KAAgB,CAAA36E,MAAQzrF,GAASyrF,EAAK,SAAS,GAC/C46E,KAAkB,CAAC9jK,GAAS7H,MAAW;AAC3C,YAAM4rK,IAAiBj7J,GAAU3Q,EAAO,OAAO,IAAI,KAAK,KAAMA,EAAO,OAAO;AAC5E,aAAO6H,IAAU+jK;AAAA,IACvB,GACUC,KAAgB,CAAA7rK,MAAUA,EAAO,OACjCyrK,KAAe,CAAC7rK,GAAOksK,GAAWjkK,IAAU,OAAO;AACvD,YAAM7H,IAAS8rK,EAAUlsK,CAAK;AAC9B,aAAI8F,GAAU1F,CAAM,IACXA,IAAS;AAAA,QACd,OAAOJ;AAAA,QACP,OAAO;AAAA,MACjB,IAAY;AAAA,QACF,OAAO;AAAA,QACP,SAAAiI;AAAA,MACV,IAEe7H;AAAA,IAEf,GACU+rK,KAAsB,CAAC1gK,GAAMssB,GAAcm0I,MAAc;AAC7D,UAAI,CAACnmK,GAAYgyB,CAAY,GAAG;AAC9B,cAAM33B,IAASyrK,GAAa9zI,GAAcm0I,CAAS;AACnD,YAAID,GAAc7rK,CAAM;AACtB,iBAAOA,EAAO;AAEd,gBAAQ,MAAM2rK,GAAgB,yCAA0CtgK,aAAiBrL,CAAM,CAAC;AAAA,MAEnG;AAAA,IAEP,GACUgsK,KAAW,CAAC/jJ,GAAQgkJ,MAAmB;AAC3C,YAAMv9H,IAAW,CAAA,GACXpjC,IAAS,CAAA,GACT4gK,IAAW,CAAC7gK,GAAMzL,GAAOksK,MAAc;AAC3C,cAAM9rK,IAASyrK,GAAa7rK,GAAOksK,CAAS;AAC5C,eAAID,GAAc7rK,CAAM,KACtBsL,EAAOD,CAAI,IAAIrL,EAAO,OACf,OAEP,QAAQ,KAAK2rK,GAAgB,gCAAiCtgK,YAAgBrL,CAAM,CAAC,GAC9E;AAAA,MAEjB,GACYgmH,IAAW,CAAC36G,GAAM0lF,MAAS;AAC/B,cAAM+6E,IAAYJ,GAAc36E,CAAI,IAAIy6E,GAAoBz6E,EAAK,SAAS,IAAIA,EAAK,WAC7Ep5D,IAAeo0I,GAAoB1gK,GAAM0lF,EAAK,SAAS+6E,CAAS;AACtE,QAAAp9H,EAASrjC,CAAI,IAAI;AAAA,UACf,GAAG0lF;AAAA,UACH,SAASp5D;AAAA,UACT,WAAAm0I;AAAA,QACV,GAC0BvgK,GAAMD,GAAQD,CAAI,EAAE,QAAQ,MAAME,GAAM0gK,GAAgB5gK,CAAI,CAAC,EACrE,KAAK,CAAAzL,MAASssK,EAAS7gK,GAAMzL,GAAOksK,CAAS,CAAC;AAAA,MAChE,GACYK,IAAe,CAAA9gK,MAAQI,GAAMijC,GAAUrjC,CAAI;AAwBjD,aAAO;AAAA,QACL,UAAA26G;AAAA,QACA,cAAAmmD;AAAA,QACA,KA1BU,CAAA9gK,MAAQE,GAAMD,GAAQD,CAAI,EAAE,QAAQ,MAAME,GAAMmjC,GAAUrjC,CAAI,EAAE,IAAI,CAAA0lF,MAAQA,EAAK,OAAO,CAAC,EAAE;QA2BrG,KA1BU,CAAC1lF,GAAMzL,MAAU;AAC3B,cAAKusK,EAAa9gK,CAAI,GAGf;AACL,kBAAM0lF,IAAOriD,EAASrjC,CAAI;AAC1B,mBAAI0lF,EAAK,aACP,QAAQ,MAAM,IAAK1lF,CAAM,gDAA+C,GACjE,MAEA6gK,EAAS7gK,GAAMzL,GAAOmxF,EAAK,SAAS;AAAA,UAE9C;AAVC,2BAAQ,KAAK,IAAK1lF,CAAM,6FAA4F,GAC7G;AAAA,QAUjB;AAAA,QAcQ,OAbY,CAAAA,MAAQ;AACpB,gBAAM+gK,IAAaD,EAAa9gK,CAAI;AACpC,iBAAI+gK,KACF,OAAO9gK,EAAOD,CAAI,GAEb+gK;AAAA,QACf;AAAA,QAQQ,OAPY,CAAA/gK,MAAQI,GAAMH,GAAQD,CAAI;AAAA,MAQ9C;AAAA,IACA,GAEUghK,KAAe;AAAA,MACnB;AAAA,MACA;AAAA,IACN,GACUC,KAAe,CAACrkJ,GAAQskJ,GAAYC,GAAgBz0I,MAAS;AACjE,YAAM00I,IAAUD,EAAeD,EAAW,IAAK,CAAA,GACzCG,IAAUF,EAAez0I,CAAI;AACnC,UAAI;AACF,QAAA20I,EAAQ,SAAQ;AAAA,MACjB,SAAQvqL,GAAG;AACV,gBAAQ,MAAM,wCAAyC41C,CAAI,KAAM51C,CAAC;AAClE;AAAA,MACD;AACD,MAAAsqL,EAAQ,WAAU,GACdA,EAAQ,mBAAmBC,EAAQ,kBACrCrD,GAAephJ,GAAQykJ,EAAQ,cAAc,GAE/CH,EAAW,IAAIx0I,CAAI,GACnB0+B,GAAexuC,GAAQ8P,CAAI;AAAA,IACjC,GACU40I,KAAU,CAAC1kJ,GAAQukJ,GAAgBD,GAAYx0I,MAAS;AAC5D,UAAIA,MAASw0I,EAAW,OAEjB;AAAA,YAAI,CAAC9gK,GAAM+gK,GAAgBz0I,CAAI;AACpC,gBAAM,IAAI,MAAM,gBAAiBA,CAAM,cAAa;AAEtD,QAAI9P,EAAO,cACTqkJ,GAAarkJ,GAAQskJ,GAAYC,GAAgBz0I,CAAI,IAErD9P,EAAO,GAAG,QAAQ,MAAMqkJ,GAAarkJ,GAAQskJ,GAAYC,GAAgBz0I,CAAI,CAAC;AAAA;AAAA,IAEtF,GACU60I,KAAe,CAACJ,GAAgBz0I,GAAM6oC,MAAQ;AAClD,UAAIx4D,EAAWikK,IAAct0I,CAAI;AAC/B,cAAM,IAAI,MAAM,gCAAiCA,CAAI,EAAG;AAE1D,aAAO;AAAA,QACL,GAAGy0I;AAAA,QACH,CAACz0I,CAAI,GAAG;AAAA,UACN,GAAG6oC;AAAA,UACH,YAAY,MAAM;AAChB,gBAAI;AACF,cAAAA,EAAI,WAAU;AAAA,YACf,SAAQz+E,GAAG;AACV,sBAAQ,MAAM,0CAA2C41C,CAAI,KAAM51C,CAAC;AAAA,YACrE;AAAA,UACF;AAAA,QACF;AAAA,MACT;AAAA,IACA,GAEU0qL,KAAW,CAAA5kJ,MAAU;AACzB,YAAMskJ,IAAatiI,GAAK,QAAQ,GAC1BuiI,IAAiBviI,GAAK;AAAA,QAC1B,QAAQ;AAAA,UACN,UAAU/jC;AAAA,UACV,YAAYA;AAAA,UACZ,gBAAgB;AAAA,QACjB;AAAA,QACD,UAAU;AAAA,UACR,UAAUA;AAAA,UACV,YAAYA;AAAA,UACZ,gBAAgB;AAAA,QACjB;AAAA,MACT,CAAO;AACD,aAAAsjK,GAA+BvhJ,CAAM,GACrC+hJ,GAAkC/hJ,CAAM,GACjC;AAAA,QACL,YAAY,MAAMqhJ,GAAWrhJ,CAAM;AAAA,QACnC,KAAK,CAAA8P,MAAQ40I,GAAQ1kJ,GAAQukJ,EAAe,IAAK,GAAED,GAAYx0I,CAAI;AAAA,QACnE,KAAK,MAAMw0I,EAAW,IAAK;AAAA,QAC3B,UAAU,CAACx0I,GAAM6oC,MAAQ;AACvB,UAAA4rG,EAAe,IAAII,GAAaJ,EAAe,IAAG,GAAIz0I,GAAM6oC,CAAG,CAAC;AAAA,QACjE;AAAA,MACT;AAAA,IACA,GAEUksG,KAAS34J,GAAM,MAAM44J,KAAU54J,GAAM,SACrC64J,KAAgB;AAAA,MACpB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACX,GACUC,KAAgB94J,GAAM,QAAQ,4BAA4B,GAC1D+4J,KAAa,CAAA1hK,MAAOA,KAAOyhK,IAC3BE,KAAgB,CAAAlyH,MAAW;AAC/B,YAAMmyH,IAAW,CAAA,GACXxoC,IAAQtxH,GAAI,GAAG,QAAS,KAAIA,GAAI,GAAG;AACzC,MAAAw5J,GAAOC,GAAQ9xH,EAAQ,YAAW,GAAI,GAAG,GAAG,CAAAr7C,MAAS;AACnD,QAAIstK,GAAWttK,CAAK,IAClBwtK,EAASxtK,CAAK,IAAI,KAEd,cAAc,KAAKA,CAAK,IAC1BwtK,EAAS,UAAU,SAASxtK,GAAO,EAAE,KAErCwtK,EAAS,WAAWxtK,EAAM,WAAW,CAAC,GACtCwtK,EAAS,UAAUJ,GAAcptK,CAAK,KAAKA,EAAM,YAAa,EAAC,WAAW,CAAC;AAAA,MAGvF,CAAO;AACD,YAAM8X,IAAK,CAAC01J,EAAS,OAAO;AAC5B,UAAI5hK;AACJ,WAAKA,KAAOyhK;AACV,QAAIG,EAAS5hK,CAAG,IACdkM,EAAG,KAAKlM,CAAG,IAEX4hK,EAAS5hK,CAAG,IAAI;AAGpB,aAAA4hK,EAAS,KAAK11J,EAAG,KAAK,GAAG,GACrB01J,EAAS,WACXA,EAAS,MAAM,IACXxoC,IACFwoC,EAAS,OAAO,KAEhBA,EAAS,QAAQ,KAGjBA,EAAS,SACPxoC,IACFwoC,EAAS,OAAO,MAEhBA,EAAS,OAAO,IAChBA,EAAS,OAAO,MAGbA;AAAA,IACb;AAAA,IACI,MAAMC,GAAU;AAAA,MACd,YAAYplJ,GAAQ;AAClB,aAAK,YAAY,IACjB,KAAK,kBAAkB,IACvB,KAAK,SAASA;AACd,cAAMsV,IAAO;AACb,QAAAtV,EAAO,GAAG,0BAA0B,CAAA9lC,MAAK;AACvC,WAAKo7C,EAAK,YAAYp7C,CAAC,KAAKo7C,EAAK,cAAcp7C,CAAC,MAAM,CAACA,EAAE,mBAAkB,MACzE2qL,GAAOvvI,EAAK,WAAW,CAAA6vI,MAAY;AACjC,YAAI7vI,EAAK,cAAcp7C,GAAGirL,CAAQ,MAChC7vI,EAAK,kBAAkB6vI,EAAS,YAAY,MAAM,CAAC,GAC/CjrL,EAAE,SAAS,aACbo7C,EAAK,sBAAsB6vI,CAAQ;AAAA,UAGrD,CAAa,GACG7vI,EAAK,cAAcp7C,GAAGo7C,EAAK,gBAAgB,CAAC,CAAC,MAC3CA,EAAK,gBAAgB,WAAW,KAC9Bp7C,EAAE,SAAS,aACbo7C,EAAK,sBAAsBA,EAAK,gBAAgB,CAAC,CAAC,GAGtDA,EAAK,gBAAgB;QAGnC,CAAS;AAAA,MACF;AAAA,MACD,IAAI0d,GAAS08C,GAAM21E,GAASj4J,GAAO;AACjC,cAAMkoB,IAAO,MACPz7B,IAAOy7B,EAAK,qBAAqB+vI,CAAO;AAC9C,eAAAR,GAAOC,GAAQ54J,GAAM,KAAK8mC,CAAO,CAAC,GAAG,CAAAA,MAAW;AAC9C,gBAAMmyH,IAAW7vI,EAAK,eAAe0d,GAAS08C,GAAM71F,GAAMuT,CAAK;AAC/D,UAAAkoB,EAAK,UAAU6vI,EAAS,EAAE,IAAIA;AAAA,QACxC,CAAS,GACM;AAAA,MACR;AAAA,MACD,OAAOnyH,GAAS;AACd,cAAMmyH,IAAW,KAAK,eAAenyH,CAAO;AAC5C,eAAI,KAAK,UAAUmyH,EAAS,EAAE,KAC5B,OAAO,KAAK,UAAUA,EAAS,EAAE,GAC1B,MAEF;AAAA,MACR;AAAA,MACD,qBAAqBE,GAAS;AAC5B,cAAM/vI,IAAO,MACPke,IAAM6xH;AACZ,eAAI,OAAO7xH,KAAQ,WACV,MAAM;AACX,UAAAle,EAAK,OAAO,YAAYke,GAAK,IAAO,IAAI;AAAA,QACpD,IACmBtnC,GAAM,QAAQsnC,CAAG,IACnB,MAAM;AACX,UAAAle,EAAK,OAAO,YAAYke,EAAI,CAAC,GAAGA,EAAI,CAAC,GAAGA,EAAI,CAAC,CAAC;AAAA,QAC1D,IAEiBA;AAAA,MAEV;AAAA,MACD,eAAeR,GAAS08C,GAAM21E,GAASj4J,GAAO;AAC5C,cAAMk4J,IAAYp5J,GAAM,IAAI44J,GAAQ9xH,GAAS,GAAG,GAAGkyH,EAAa;AAChE,eAAAI,EAAUA,EAAU,SAAS,CAAC,IAAIp5J,GAAM,OAAOo5J,EAAUA,EAAU,SAAS,CAAC,GAAG;AAAA,UAC9E,MAAMD;AAAA,UACN,OAAOj4J,KAAS,KAAK;AAAA,QAC/B,CAAS,GACMlB,GAAM,OAAOo5J,EAAU,CAAC,GAAG;AAAA,UAChC,MAAM,KAAK,OAAO,UAAU51E,CAAI;AAAA,UAChC,aAAa41E,EAAU,MAAM,CAAC;AAAA,QACxC,CAAS;AAAA,MACF;AAAA,MACD,YAAYprL,GAAG;AACb,eAAOA,EAAE,UAAUA,EAAE,WAAWA,EAAE;AAAA,MACnC;AAAA,MACD,cAAcA,GAAG;AACf,eAAOA,EAAE,SAAS,aAAaA,EAAE,WAAW,OAAOA,EAAE,WAAW;AAAA,MACjE;AAAA,MACD,cAAcA,GAAGirL,GAAU;AAOzB,eANI,CAACA,KAGDA,EAAS,SAASjrL,EAAE,WAAWirL,EAAS,SAASjrL,EAAE,WAGnDirL,EAAS,QAAQjrL,EAAE,UAAUirL,EAAS,UAAUjrL,EAAE,WAC7C,KAELA,EAAE,YAAYirL,EAAS,WAAWjrL,EAAE,YAAYA,EAAE,aAAairL,EAAS,YAC1EjrL,EAAE,eAAc,GACT,MAEF;AAAA,MACR;AAAA,MACD,sBAAsBirL,GAAU;AAC9B,eAAOA,EAAS,OAAOA,EAAS,KAAK,KAAKA,EAAS,KAAK,IAAI;AAAA,MAC7D;AAAA,IACF;AAED,UAAMI,KAAW,MAAM;AACrB,YAAMC,IAAU,CAAA,GACVC,IAAY,CAAA,GACZj/B,IAAS,CAAA,GACTk/B,IAAQ,CAAA,GACRC,IAAe,CAAA,GACfC,IAAkB,CAAA,GAClBC,IAAW,CAAA,GACXC,IAAQ,CAAA,GACRr4I,IAAM,CAAC/oB,GAAY5L,MAAS,CAACsK,GAAM0lF,MAAS;AAChD,QAAApkF,EAAWtB,EAAK,YAAW,CAAE,IAAI;AAAA,UAC/B,GAAG0lF;AAAA,UACH,MAAAhwF;AAAA,QACV;AAAA,MACA,GACYitK,IAAU,CAAC3iK,GAAMk0J,MAAYoO,EAAMtiK,EAAK,aAAa,IAAIk0J;AAC/D,aAAO;AAAA,QACL,WAAW7pI,EAAI+3I,GAAS,QAAQ;AAAA,QAChC,uBAAuB/3I,EAAI+3I,GAAS,oBAAoB;AAAA,QACxD,iBAAiB/3I,EAAI+3I,GAAS,cAAc;AAAA,QAC5C,eAAe/3I,EAAI+3I,GAAS,YAAY;AAAA,QACxC,gBAAgB/3I,EAAI+3I,GAAS,aAAa;AAAA,QAC1C,aAAa/3I,EAAIg4I,GAAW,UAAU;AAAA,QACtC,mBAAmBh4I,EAAIg4I,GAAW,gBAAgB;AAAA,QAClD,mBAAmBh4I,EAAIg4I,GAAW,gBAAgB;AAAA,QAClD,kBAAkBh4I,EAAI+4G,GAAQ,eAAe;AAAA,QAC7C,gBAAgB/4G,EAAIk4I,GAAc,aAAa;AAAA,QAC/C,mBAAmBl4I,EAAIm4I,GAAiB,gBAAgB;AAAA,QACxD,gBAAgBn4I,EAAIm4I,GAAiB,aAAa;AAAA,QAClD,YAAYn4I,EAAIo4I,GAAU,SAAS;AAAA,QACnC,SAASp4I,EAAIq4I,GAAO,OAAO;AAAA,QAC3B,SAAAC;AAAA,QACA,QAAQ,OAAO;AAAA,UACb,SAAAP;AAAA,UACA,WAAAC;AAAA,UACA,OAAAC;AAAA,UACA,QAAAl/B;AAAA,UACA,cAAAm/B;AAAA,UACA,iBAAAC;AAAA,UACA,UAAAC;AAAA,UACA,OAAAC;AAAA,QACV;AAAA,MACA;AAAA,IACA,GAEUr/H,KAAW,MAAM;AACrB,YAAMu/H,IAAST;AACf,aAAO;AAAA,QACL,kBAAkBS,EAAO;AAAA,QACzB,WAAWA,EAAO;AAAA,QAClB,gBAAgBA,EAAO;AAAA,QACvB,gBAAgBA,EAAO;AAAA,QACvB,mBAAmBA,EAAO;AAAA,QAC1B,SAASA,EAAO;AAAA,QAChB,eAAeA,EAAO;AAAA,QACtB,aAAaA,EAAO;AAAA,QACpB,mBAAmBA,EAAO;AAAA,QAC1B,YAAYA,EAAO;AAAA,QACnB,gBAAgBA,EAAO;AAAA,QACvB,iBAAiBA,EAAO;AAAA,QACxB,uBAAuBA,EAAO;AAAA,QAC9B,mBAAmBA,EAAO;AAAA,QAC1B,SAASA,EAAO;AAAA,QAChB,QAAQA,EAAO;AAAA,MACvB;AAAA,IACA,GAEUC,KAAQvrI,GAAS,KACjBwrI,KAASh6J,GAAM,QAAQi6J,KAASj6J,GAAM;AAAA,IAC5C,MAAMk6J,GAAO;AAAA,MACX,YAAY32J,GAAI7Y,GAASunE,GAAe;AACtC,aAAK,UAAU,IACf,KAAK,aAAa,IAClB,KAAK,gBAAgB,IACrB,KAAK,YAAY,IACjB,KAAK,aAAa,IAClB,KAAK,YAAY,IACjB,KAAK,YAAY,IACjB,KAAK,iBAAiB,IACtB,KAAK,gBAAgB,MACrB,KAAK,cAAc,IACnB,KAAK,WAAW,IAChB,KAAK,UAAU,IACf,KAAK,eAAe,IACpB,KAAK,uBAAuB,IAC5B,KAAK,cAAc,IACnB,KAAK,gBAAgB,IACrB,KAAK,gBAAgBA,GACrB,KAAK,kBAAkBA,EAAc,iBACrC+nG,GAAO,MAAM7C,EAAgB;AAC7B,cAAM/tI,IAAO;AACb,aAAK,KAAK7lB,GACV,KAAK,SAAS;AACd,cAAMsiG,IAAoBiqD,GAAiB79F,EAAc,gBAAgBvnE,CAAO;AAChF,aAAK,UAAUmtK,GAASzuI,GAAMy8E,CAAiB,GAC/Cl9D,GAAWvf,CAAI;AACf,cAAMxX,IAAY,KAAK,QAAQ;AAC/B,QAAIA,EAAU,sBAAsB,KAClC60F,GAAY/7G,GAASm7G,CAAiB;AAExC,cAAM3pG,IAAS0V,EAAU,QAAQ;AACjC,QAAI1V,MACF+1D,EAAc,SAAS/1D,IAEzB,KAAK,SAAS+1D,EAAc;AAC5B,cAAM/5B,IAAUtmB,EAAU,UAAU;AACpC,QAAIsmB,KACF+5B,EAAc,YAAY/5B,CAAO,GAEnC,KAAK,UAAU+5B,EAAc;AAC7B,cAAM/1C,IAAiBquB,GAAkBnhB,CAAI;AAC7C,QAAIlN,MACF8Y,GAAa,aAAa,mBAAmB9Y,CAAc,GAC3DsS,GAAS,IAAI,iBAAiB,mBAAmBtS,CAAc;AAEjE,cAAME,IAAiBowB,GAAkBpjB,CAAI;AAC7C,QAAI13B,GAAc0qB,CAAc,KAC9BoS,GAAS,IAAI,iBAAiB,mBAAmBpS,CAAc,GAEjE+a,GAAa,eAAevlB,EAAU,eAAe,GACrDulB,GAAa,UAAU86B,EAAc,SACrC,KAAK,SAAS,EAAK,GACnB,KAAK,kBAAkB,IAAIy6B,GAAIzjD,GAAmB7f,CAAI,GAAG,EAAE,UAAU,KAAK,QAAO,CAAE,GACnF,KAAK,UAAU,KAAK,SACpB,KAAK,SAASyf,GAAWzf,CAAI,GAC7B,KAAK,YAAYwjB,GAAoBxjB,CAAI,GACzC,KAAK,YAAY,IAAI8vI,GAAU,IAAI,GACnC,KAAK,iBAAiB,IAAI1E,GAAe,IAAI,GAC7CH,GAAiB,IAAI;AACrB,cAAMl0J,IAAcyR,EAAU,cAAc;AAC5C,QAAIzR,MACFhB,GAAI,cAAcgB,EAAY,QAAQ,YAAY,EAAE,IAEtD,KAAK,KAAK;AAAA,UACR,UAAUo6B,GAAU;AAAA,UACpB,kBAAkB;AAAA,UAClB,MAAMxoC;AAAA,UACN,MAAMA;AAAA,UACN,YAAYA;AAAA,UACZ,WAAWmB;AAAA,QACrB,GACQ,KAAK,OAAOwlK,GAAStvI,CAAI,GACzB6oC,EAAc,SAAS,eAAe,EAAE,QAAQ,KAAM,CAAA;AACtD,cAAMkoG,IAAgBntH,GAAiB5jB,CAAI;AAC3C,QAAIz3B,EAAWwoK,CAAa,KAC1BA,EAAc,KAAK/wI,GAAMA,CAAI;AAAA,MAEhC;AAAA,MACD,SAAS;AACP,QAAAwiI,GAAO,IAAI;AAAA,MACZ;AAAA,MACD,MAAMn4F,GAAW;AACf,aAAK,YAAY,YAAY,IAAOA,CAAS;AAAA,MAC9C;AAAA,MACD,WAAW;AACT,eAAOziB,GAAS,IAAI;AAAA,MACrB;AAAA,MACD,UAAUpsC,GAAM;AACd,eAAOyxB,GAAK,UAAUzxB,CAAI;AAAA,MAC3B;AAAA,MACD,SAAS1N,GAAMi4B,GAAYviC,GAAM;AAC/B,cAAMlC,IAAU,KAAK;AACrB,eAAKA,EAAQ,aAAawM,CAAI,MACxBxF,GAAc9E,CAAI,IACpBlC,EAAQ,SAASwM,GAAM;AAAA,UACrB,WAAWtK;AAAA,UACX,SAASuiC;AAAA,QACvB,CAAa,IAEDzkC,EAAQ,SAASwM,GAAM;AAAA,UACrB,WAAWhE;AAAA,UACX,SAASi8B;AAAA,QACvB,CAAa,IAGE,CAACzkC,EAAQ,MAAMwM,CAAI,KAAK,CAAC1F,GAAY29B,CAAU,IAAIA,IAAazkC,EAAQ,IAAIwM,CAAI;AAAA,MACxF;AAAA,MACD,UAAUA,GAAMoxJ,GAAQ;AAEtB,eADkBr0J,EAAWw4C,GAAW,IAAI,GAAGv1C,CAAI,IAE1CoxJ,IAAS7+C,GAAc,IAAIvyG,CAAI,MAAM,SAAY,KAEjD;AAAA,MAEV;AAAA,MACD,YAAY1I,GAAM;AAChB,aAAK,sBAAsB,YAAYA,CAAI;AAAA,MAC5C;AAAA,MACD,WAAW0I,GAAMgB,GAAUgJ,GAAO;AAChC,aAAK,eAAe,WAAWhK,GAAMgB,GAAUgJ,CAAK;AAAA,MACrD;AAAA,MACD,qBAAqBhK,GAAMgB,GAAUgJ,GAAO;AAC1C,aAAK,eAAe,qBAAqBhK,GAAMgB,GAAUgJ,CAAK;AAAA,MAC/D;AAAA,MACD,qBAAqBhK,GAAMgB,GAAUgJ,GAAO;AAC1C,aAAK,eAAe,qBAAqBhK,GAAMgB,GAAUgJ,CAAK;AAAA,MAC/D;AAAA,MACD,YAAY4lC,GAAS08C,GAAM21E,GAASj4J,GAAO;AACzC,aAAK,UAAU,IAAI4lC,GAAS08C,GAAM21E,GAASj4J,CAAK;AAAA,MACjD;AAAA,MACD,YAAYomC,GAAK7nD,GAAIgM,GAAO+C,GAAM;AAChC,eAAO,KAAK,eAAe,YAAY84C,GAAK7nD,GAAIgM,GAAO+C,CAAI;AAAA,MAC5D;AAAA,MACD,kBAAkB84C,GAAK;AACrB,eAAO,KAAK,eAAe,kBAAkBA,CAAG;AAAA,MACjD;AAAA,MACD,kBAAkBA,GAAK;AACrB,eAAO,KAAK,eAAe,kBAAkBA,CAAG;AAAA,MACjD;AAAA,MACD,sBAAsBA,GAAK;AACzB,eAAO,KAAK,eAAe,sBAAsBA,CAAG;AAAA,MACrD;AAAA,MACD,OAAO;AACL,cAAMle,IAAO;AACb,QAAIA,EAAK,WACPA,EAAK,SAAS,IACVA,EAAK,SACPA,EAAK,QAAO,EAAG,kBAAkB,UAEjC2wI,GAAM,KAAK3wI,EAAK,aAAc,CAAA,GAC9B2wI,GAAM,KAAK3wI,EAAK,EAAE,IAEpBA,EAAK,KAAI,GACTA,EAAK,SAAS,MAAM;AAAA,MAEvB;AAAA,MACD,OAAO;AACL,cAAMA,IAAO;AACb,QAAKA,EAAK,WACRA,EAAK,KAAI,GACLA,EAAK,UACPA,EAAK,QAAO,EAAG,kBAAkB,SAC7BA,MAASA,EAAK,cAAc,kBAC9BA,EAAK,cAAc,gBAAgB,UAGrC2wI,GAAM,KAAK3wI,EAAK,aAAc,CAAA,GAC9B2wI,GAAM,SAAS3wI,EAAK,IAAI,WAAWA,EAAK,UAAU,IAEpDA,EAAK,SAAS,IACdA,EAAK,SAAS,MAAM;AAAA,MAEvB;AAAA,MACD,WAAW;AACT,eAAO,KAAK;AAAA,MACb;AAAA,MACD,iBAAiBtM,GAAOvuB,GAAM;AAC5B,aAAK,SAAS,iBAAiB;AAAA,UAC7B,OAAAuuB;AAAA,UACA,MAAAvuB;AAAA,QACV,CAAS;AAAA,MACF;AAAA,MACD,KAAKC,IAAO,IAAI;AACd,cAAM46B,IAAO,MACPpW,IAAMoW,EAAK;AACjB,YAAIA,EAAK;AACP,iBAAO;AAET,YAAIpW,GAAK;AACP,gBAAMonJ,IAAW;AAAA,YACf,GAAG5rK;AAAA,YACH,MAAM;AAAA,UAClB,GACgB/C,IAAQ2kB,GAAkB4C,CAAG,IAAIA,EAAI,QAAQA,EAAI,WACjD1O,IAAO8kB,EAAK,WAAW39B,GAAO2uK,CAAQ;AAC5C,iBAAKA,EAAS,aACZhxI,EAAK,SAAS,eAAe;AAAA,YAC3B,GAAGgxI;AAAA,YACH,SAASpnJ;AAAA,UACvB,CAAa,GAEI1O;AAAA,QACjB;AACU,iBAAO;AAAA,MAEV;AAAA,MACD,KAAK9V,IAAO,IAAI;AACd,cAAM46B,IAAO;AACb,YAAIpW,IAAMoW,EAAK;AACf,YAAI,CAACpW,KAAO,CAACoW,EAAK,eAAeA,EAAK;AACpC,iBAAO;AAET,cAAMixI,IAAU;AAAA,UACd,GAAG7rK;AAAA,UACH,MAAM;AAAA,UACN,SAASwkB;AAAA,QACnB;AACQ,YAAI1O,IAAO8kB,EAAK,WAAWixI,CAAO;AAClC,cAAMC,IAAW;AAAA,UACf,GAAGD;AAAA,UACH,SAAS/1J;AAAA,QACnB;AAQQ,YAPKg2J,EAAS,aACZlxI,EAAK,SAAS,eAAekxI,CAAQ,GAEnCA,EAAS,WAAW,SACtBlxI,EAAK,SAAS,kBAAkBkxI,CAAQ,GAE1Ch2J,IAAOg2J,EAAS,SACXlqJ,GAAkB4C,CAAG;AAgBxB,UAAAA,EAAI,QAAQ1O;AAAA,aAhBe;AAC3B,WAAI9V,EAAK,eAAe,CAAC46B,EAAK,YAC5BpW,EAAI,YAAY1O;AAElB,gBAAMyiG,IAAOgzD,GAAM,UAAU3wI,EAAK,IAAI,MAAM;AAC5C,UAAI29E,KACFkzD,GAAOlzD,EAAK,UAAU,CAAA/zF,MAChBA,EAAI,SAASoW,EAAK,MACpBpW,EAAI,QAAQ1O,GACL,MAEA,EAEV;AAAA,QAEb;AAGQ,eAAAg2J,EAAS,UAAUD,EAAQ,UAAUrnJ,IAAM,MACvCsnJ,EAAS,cAAc,MACzBlxI,EAAK,SAAS,EAAK,GAEd9kB;AAAA,MACR;AAAA,MACD,WAAWoH,GAASld,GAAM;AACxB,eAAOqzG,GAAW,MAAMn2F,GAASld,CAAI;AAAA,MACtC;AAAA,MACD,WAAWA,GAAM;AACf,eAAOozG,GAAW,MAAMpzG,CAAI;AAAA,MAC7B;AAAA,MACD,cAAckd,GAASld,GAAM;AAC3B,QAAIA,MACFkd,IAAUsuJ,GAAO,EAAE,SAAAtuJ,EAAS,GAAEld,CAAI,IAEpC,KAAK,YAAY,oBAAoB,IAAOkd,CAAO;AAAA,MACpD;AAAA,MACD,aAAa6uJ,GAAgB;AAC3B,QAAIA,MAAmB,SACrB14D,GAAW,MAAM,KAAK,cAAc,EAAE,QAAQ,MAAK,CAAE,IAErDA,GAAW,MAAM04D,CAAc,GAEjC,KAAK,YAAY,SACjB,KAAK,SAAS,EAAK,GACnB,KAAK,YAAW;AAAA,MACjB;AAAA,MACD,UAAU;AACR,eAAO,CAAC,KAAK;AAAA,MACd;AAAA,MACD,SAASz9I,GAAO;AACd,cAAM09I,IAAW,CAAC,KAAK;AACvB,aAAK,aAAa,CAAC19I,GACfA,KAASA,MAAU09I,KACrB,KAAK,SAAS,OAAO;AAAA,MAExB;AAAA,MACD,eAAe;AACb,cAAMpxI,IAAO;AACb,eAAKA,EAAK,cACRA,EAAK,YAAYA,EAAK,mBAAmB2wI,GAAM,IAAI3wI,EAAK,KAAK,SAAS,IAEjEA,EAAK;AAAA,MACb;AAAA,MACD,0BAA0B;AACxB,eAAO,KAAK;AAAA,MACb;AAAA,MACD,aAAa;AACX,eAAK,KAAK,cACR,KAAK,YAAY2wI,GAAM,IAAI,KAAK,EAAE,IAE7B,KAAK;AAAA,MACb;AAAA,MACD,SAAS;AACP,cAAM3wI,IAAO;AACb,YAAI,CAACA,EAAK,eAAe;AACvB,gBAAMpW,IAAMoW,EAAK;AACjB,UAAIpW,MACFoW,EAAK,gBAAgBpW,EAAI;AAAA,QAE5B;AACD,eAAOoW,EAAK;AAAA,MACb;AAAA,MACD,SAAS;AACP,cAAMA,IAAO;AACb,YAAI,CAACA,EAAK,iBAAiB;AACzB,gBAAMjc,IAAMic,EAAK;AACjB,UAAIjc,MACFic,EAAK,kBAAkBjc,EAAI;AAAA,QAE9B;AACD,eAAOic,EAAK;AAAA,MACb;AAAA,MACD,UAAU;AACR,YAAI1uC,GAAIw2C;AACR,cAAM3pB,IAAM,KAAK;AACjB,gBAAQ2pB,KAAMx2C,IAAK,KAAK,iBAAiB,QAAQA,MAAO,SAASA,IAAK6sB,KAAQ,OAAyB,SAASA,EAAI,UAAU,QAAQ2pB,MAAO,SAASA,IAAK;AAAA,MAC5J;AAAA,MACD,WAAWhxB,GAAKhJ,GAAM8b,GAAK;AACzB,cAAMoW,IAAO,MAAMxX,IAAYwX,EAAK,QAAQ,KACtCqxI,IAAuBvtH,GAAwB9jB,CAAI;AACzD,YAAIz3B,EAAW8oK,CAAoB;AACjC,iBAAOA,EAAqB,KAAKrxI,GAAMlpB,GAAK8S,GAAK,IAAM9b,CAAI;AAE7D,YAAI,CAAC0a,EAAU,cAAc,KAAKoB,MAAQ,UAAUrmB,GAASqmB,CAAG,KAAKA,EAAI,aAAa,UAAU9S,EAAI,QAAQ,OAAO,MAAM,KAAKA,EAAI,WAAW;AAC3I,iBAAOA;AAET,cAAMw6J,IAAY,IAAIhuE,GAAIxsF,CAAG;AAC7B,eAAIw6J,EAAU,aAAa,UAAUA,EAAU,aAAa,WAAWA,EAAU,aAAa,KACrFx6J,IAEL0R,EAAU,eAAe,IACpBwX,EAAK,gBAAgB,WAAWlpB,CAAG,KAE5CA,IAAMkpB,EAAK,gBAAgB,WAAWlpB,GAAK0R,EAAU,oBAAoB,CAAC,GACnE1R;AAAA,MACR;AAAA,MACD,UAAU8S,GAAK;AACb,QAAA+8I,GAAU,MAAM/8I,CAAG;AAAA,MACpB;AAAA,MACD,gBAAgB8J,GAAO;AACrB,QAAA8wI,GAAgB,MAAM9wI,CAAK;AAAA,MAC5B;AAAA,MACD,kBAAkB;AAChB,eAAO+wI,GAAgB,IAAI;AAAA,MAC5B;AAAA,MACD,SAAS;AACP,QAAA7mD,GAAS,IAAI;AAAA,MACd;AAAA,MACD,QAAQI,GAAW;AACjB,QAAAD,GAAQ,MAAMC,CAAS;AAAA,MACxB;AAAA,MACD,eAAe;AACb,eAAO,KAAK,aAAa;MAC1B;AAAA,MACD,iBAAiB;AACf,eAAO,KAAK,aAAa;MAC1B;AAAA,IACF;AAED,UAAMuzD,KAAMnsI,GAAS,KACfk2H,KAAO1kJ,GAAM;AACnB,QAAI46J,KAAoB,IACpBC,IACA3D,KAAU,CAAA;AACd,UAAM4D,KAAsB,OAAK;AAC/B,YAAMluK,IAAO,EAAE;AACf,MAAA83J,GAAKqW,GAAc,IAAK,GAAE,CAAAjnJ,MAAU;AAClC,gBAAQlnB,GAAI;AAAA,UACZ,KAAK;AACH,YAAAknB,EAAO,SAAS,gBAAgB,CAAC;AACjC;AAAA,UACF,KAAK;AACH,YAAAA,EAAO,SAAS,gBAAgB,CAAC;AACjC;AAAA,QACD;AAAA,MACT,CAAO;AAAA,IACP,GACUknJ,KAAqB,CAAAl+I,MAAS;AAClC,UAAIA,MAAU89I,IAAmB;AAC/B,cAAMD,IAAMnsI,GAAS;AACrB,QAAI1R,KACF69I,EAAI,KAAK,QAAQ,UAAUG,EAAmB,GAC9CH,EAAI,KAAK,QAAQ,UAAUG,EAAmB,MAE9CH,EAAI,OAAO,QAAQ,UAAUG,EAAmB,GAChDH,EAAI,OAAO,QAAQ,UAAUG,EAAmB,IAElDF,KAAoB99I;AAAA,MACrB;AAAA,IACP,GACUm+I,KAAuB,CAAAC,MAAgB;AAC3C,YAAMC,IAAajE;AACnB,aAAAA,KAAUziK,GAASyiK,IAAS,CAAApjJ,MACnBonJ,MAAiBpnJ,CACzB,GACGinJ,GAAc,iBAAiBG,MACjCH,GAAc,eAAe7D,GAAQ,SAAS,IAAIA,GAAQ,CAAC,IAAI,OAE7D6D,GAAc,kBAAkBG,MAClCH,GAAc,gBAAgB,OAEzBI,EAAW,WAAWjE,GAAQ;AAAA,IAC3C,GACUkE,KAAuB,CAAAtnJ,MAAU;AACrC,MAAIA,KAAUA,EAAO,eAAe,EAAEA,EAAO,aAAY,KAAMA,EAAO,QAAS,GAAE,eAC/EmnJ,GAAqBnnJ,CAAM,GAC3BA,EAAO,sBAAqB,GAC5BA,EAAO,QAAQ,EAAI,GACnBA,EAAO,UAAU;AAAA,IAEzB,GACUunJ,KAAe,SAAS,eAAe,cACvCN,KAAgB;AAAA,MACpB,GAAGzE;AAAA,MACH,SAAS;AAAA,MACT,SAAS;AAAA,MACT,gBAAgB,CAAE;AAAA,MAClB,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa;AAAA,MACb,MAAMjgI;AAAA,MACN,cAAc;AAAA,MACd,eAAe;AAAA,MACf,QAAQ;AACN,cAAMjN,IAAO;AACb,YAAIkyI,IAAU,IACVp/J,IAAS,IACTq/J,IAAkB7uE,GAAI,mBAAmB,SAAS,QAAQ;AAC9D,QAAI,yBAAyB,KAAK6uE,CAAe,MAC/CA,IAAkBA,EAAgB,QAAQ,YAAY,EAAE,EAAE,QAAQ,iBAAiB,EAAE,GAChF,UAAU,KAAKA,CAAe,MACjCA,KAAmB;AAGvB,cAAM7S,IAAU,OAAO,WAAW,OAAO;AACzC,YAAIA;AACF,UAAA4S,IAAU5S,EAAQ,QAAQA,EAAQ,SAClCxsJ,IAASwsJ,EAAQ;AAAA,aACZ;AACL,gBAAMpzH,IAAU,SAAS,qBAAqB,QAAQ;AACtD,mBAAS,IAAI,GAAG,IAAIA,EAAQ,QAAQ,KAAK;AACvC,kBAAMmrD,IAAMnrD,EAAQ,CAAC,EAAE,OAAO;AAC9B,gBAAImrD,MAAQ;AACV;AAEF,kBAAM+6E,IAAY/6E,EAAI,UAAUA,EAAI,YAAY,GAAG,CAAC;AACpD,gBAAI,8CAA8C,KAAKA,CAAG,GAAG;AAC3D,cAAI+6E,EAAU,QAAQ,MAAM,MAAM,OAChCt/J,IAAS,SAEXo/J,IAAU76E,EAAI,UAAU,GAAGA,EAAI,YAAY,GAAG,CAAC;AAC/C;AAAA,YACD;AAAA,UACF;AACD,cAAI,CAAC66E,KAAW,SAAS,eAAe;AACtC,kBAAM76E,IAAM,SAAS,cAAc;AACnC,YAAIA,EAAI,QAAQ,MAAM,MAAM,OAC1BvkF,IAAS,SAEXo/J,IAAU76E,EAAI,UAAU,GAAGA,EAAI,YAAY,GAAG,CAAC;AAAA,UAChD;AAAA,QACF;AACD,QAAAr3D,EAAK,UAAU,IAAIsjE,GAAI6uE,CAAe,EAAE,WAAWD,CAAO,GAC1DlyI,EAAK,kBAAkBmyI,GACvBnyI,EAAK,UAAU,IAAIsjE,GAAItjE,EAAK,OAAO,GACnCA,EAAK,SAASltB,GACdq2D,GAAQnpC,CAAI;AAAA,MACb;AAAA,MACD,iBAAiBumI,GAAgB;AAC/B,cAAMz3H,IAAUy3H,EAAe;AAC/B,QAAIz3H,KACF,KAAK,YAAYA,CAAO;AAE1B,cAAMh8B,IAASyzJ,EAAe;AAC9B,QAAIzzJ,MACF,KAAK,SAASA,IAEhB,KAAK,iBAAiByzJ;AACtB,cAAM8L,IAAiB9L,EAAe;AACtC,QAAI8L,MAAmB,UACrBplK,GAAOolK,GAAgB,CAACC,GAAeC,MAAe;AACpD,UAAAxkI,GAAa,cAAc,KAAKwkI,CAAU,IAAID;AAAA,QAC1D,CAAW;AAAA,MAEJ;AAAA,MACD,KAAKhxK,GAAS;AACZ,cAAM0+B,IAAO;AACb,YAAIv9B;AACJ,cAAM+vK,IAAuB57J,GAAM,QAAQ,8MAAmN,GAAG,GAC3P67J,IAAwB,CAACnxK,GAASsoB,MAAQtoB,EAAQ,UAAUsoB,EAAI,QAAQ,YAAa,KAAI4oJ,GACzFE,IAAW,CAAA9oJ,MAAO;AACtB,cAAIzP,IAAKyP,EAAI;AACb,iBAAKzP,MACHA,IAAKnM,GAAM4b,GAAK,MAAM,EAAE,OAAO,CAAA9b,MAAQ,CAACyjK,GAAI,IAAIzjK,CAAI,CAAC,EAAE,WAAWyjK,GAAI,QAAQ,GAC9E3nJ,EAAI,aAAa,MAAMzP,CAAE,IAEpBA;AAAA,QACjB,GACcw4J,IAAe,CAAA7kK,MAAQ;AAC3B,gBAAMgB,IAAWxN,EAAQwM,CAAI;AAC7B,cAAKgB;AAGL,mBAAOA,EAAS,MAAMkxB,GAAM,CAAE,CAAA;AAAA,QACxC,GACc4yI,IAAc,CAAAtxK,MACdyU,GAAI,QAAQ,KAAI,KAAMA,GAAI,QAAQ,YACpCqsG,GAAU,sKAA2K,GAC9K,MACE6vD,MACT7vD,GAAU,4GAAiH,GACpH,MACEr6G,GAASzG,EAAQ,QAAQ,IAC3BiwK,GAAI,OAAOjwK,EAAQ,QAAQ,IACzBgH,GAAchH,EAAQ,MAAM,IAC9B,CAACA,EAAQ,MAAM,IAEf;AAGX,YAAIuxK,IAAiB,CAAA/E,MAAW;AAC9B,UAAArrK,IAASqrK;AAAA,QACnB;AACQ,cAAMgF,IAAc,MAAM;AACxB,cAAIC,IAAY;AAChB,gBAAMjF,IAAU,CAAA;AAChB,cAAInxG;AACJ,gBAAMq2G,IAAe,CAAC74J,GAAI7Y,GAASi8D,MAAc;AAC/C,kBAAM7yC,KAAS,IAAIomJ,GAAO32J,GAAI7Y,GAAS0+B,CAAI;AAC3C,YAAA8tI,EAAQ,KAAKpjJ,EAAM,GACnBA,GAAO,GAAG,QAAQ,MAAM;AACtB,cAAI,EAAEqoJ,MAAcp2G,EAAQ,UAC1Bk2G,EAAe/E,CAAO;AAAA,YAEtC,CAAa,GACDpjJ,GAAO,YAAYA,GAAO,aAAa6yC,GACvC7yC,GAAO,OAAM;AAAA,UACzB;AACU,UAAA6mJ,GAAI,OAAO,QAAQ,SAASuB,CAAW,GACvCH,EAAa,YAAY,GACzBh2G,IAAU9vD,GAAS+lK,EAAYtxK,CAAO,CAAC,GACvCsV,GAAM,KAAK+lD,GAAS,CAAA/yC,MAAO;AACzB,YAAAooJ,GAAqBhyI,EAAK,IAAIpW,EAAI,EAAE,CAAC;AAAA,UACjD,CAAW,GACD+yC,IAAU/lD,GAAM,KAAK+lD,GAAS,CAAA/yC,MACrB,CAACoW,EAAK,IAAIpW,EAAI,EAAE,CACxB,GACG+yC,EAAQ,WAAW,IACrBk2G,EAAe,CAAE,CAAA,IAEjBvX,GAAK3+F,GAAS,CAAA/yC,MAAO;AACnB,YAAI6oJ,EAAsBnxK,GAASsoB,CAAG,IACpCw4F,GAAU,uEAAuEx4F,CAAG,IAEpFopJ,EAAaN,EAAS9oJ,CAAG,GAAGtoB,GAASsoB,CAAG;AAAA,UAExD,CAAa;AAAA,QAEb;AACQ,eAAA2nJ,GAAI,KAAK,QAAQ,SAASuB,CAAW,GAC9B,IAAI,QAAQ,CAAAn/I,MAAW;AAC5B,UAAIlxB,IACFkxB,EAAQlxB,CAAM,IAEdowK,IAAiB,CAAA/E,MAAW;AAC1B,YAAAn6I,EAAQm6I,CAAO;AAAA,UAC7B;AAAA,QAEA,CAAS;AAAA,MACF;AAAA,MACD,IAAI3zJ,GAAI;AACN,eAAI,UAAU,WAAW,IAChB2zJ,GAAQ,MAAM,CAAC,IACb/lK,GAASoS,CAAE,IACbxO,GAAOmiK,IAAS,CAAApjJ,MACdA,EAAO,OAAOvQ,CACtB,EAAE,MAAM,IAAI,IACJ3R,GAAS2R,CAAE,KACb2zJ,GAAQ3zJ,CAAE,IAAI2zJ,GAAQ3zJ,CAAE,IAExB;AAAA,MAEV;AAAA,MACD,IAAIuQ,GAAQ;AACV,cAAMsV,IAAO,MACPizI,IAAiBjzI,EAAK,IAAItV,EAAO,EAAE;AACzC,eAAIuoJ,MAAmBvoJ,MAGnBuoJ,MAAmB,QACrBnF,GAAQ,KAAKpjJ,CAAM,GAErBknJ,GAAmB,EAAI,GACvB5xI,EAAK,eAAetV,GACpBsV,EAAK,SAAS,aAAa,EAAE,QAAAtV,EAAQ,CAAA,GAChC+mJ,OACHA,KAAuB,CAAA7sL,MAAK;AAC1B,gBAAMi6B,IAAQmhB,EAAK,SAAS,cAAc;AAC1C,cAAInhB,EAAM;AACR,mBAAAj6B,EAAE,eAAc,GAChBA,EAAE,cAAci6B,EAAM,aACfA,EAAM;AAAA,QAE3B,GACU,OAAO,iBAAiB,gBAAgB4yJ,EAAoB,KAEvD/mJ;AAAA,MACR;AAAA,MACD,aAAavQ,GAAI7Y,GAAS;AACxB,eAAO,KAAK,IAAI,IAAIwvK,GAAO32J,GAAI7Y,GAAS,IAAI,CAAC;AAAA,MAC9C;AAAA,MACD,OAAOya,GAAU;AACf,cAAMikB,IAAO;AACb,YAAItV;AACJ,YAAI,CAAC3O,GAAU;AACb,mBAASzyB,IAAIwkL,GAAQ,SAAS,GAAGxkL,KAAK,GAAGA;AACvC,YAAA02C,EAAK,OAAO8tI,GAAQxkL,CAAC,CAAC;AAExB;AAAA,QACD;AACD,YAAIye,GAASgU,CAAQ,GAAG;AACtB,UAAAu/I,GAAKiW,GAAI,OAAOx1J,CAAQ,GAAG,CAAA6N,MAAO;AAChC,YAAAc,IAASsV,EAAK,IAAIpW,EAAI,EAAE,GACpBc,KACFsV,EAAK,OAAOtV,CAAM;AAAA,UAEhC,CAAW;AACD;AAAA,QACD;AAED,eADAA,IAAS3O,GACL7T,GAAO83B,EAAK,IAAItV,EAAO,EAAE,CAAC,IACrB,QAELmnJ,GAAqBnnJ,CAAM,KAC7BsV,EAAK,SAAS,gBAAgB,EAAE,QAAAtV,EAAQ,CAAA,GAEtCojJ,GAAQ,WAAW,KACrB,OAAO,oBAAoB,gBAAgB2D,EAAoB,GAEjE/mJ,EAAO,OAAM,GACbknJ,GAAmB9D,GAAQ,SAAS,CAAC,GAC9BpjJ;AAAA,MACR;AAAA,MACD,YAAYwzB,GAAK7nD,GAAIgM,GAAO;AAC1B,YAAI/Q;AACJ,cAAM0uC,IAAO,MACPkzI,IAAW3vK,GAASlB,CAAK,KAAK/Q,IAAK+Q,EAAM,QAAQ,QAAQ/Q,MAAO,SAASA,IAAK+Q,EAAM,QAAQA;AAClG,gBAAQ67C,GAAG;AAAA,UACX,KAAK,gBAAgB;AACjB,gBAAI,CAACle,EAAK,IAAIkzI,CAAQ,GAAG;AACvB,oBAAMC,IAAgB9wK,EAAM;AAC5B,kBAAIyuK,GAAOoC,GAAUC,GAAenzI,CAAI,EAAE,OAAM;AAAA,YACjD;AACD,mBAAO;AAAA,UACR;AAAA,UACH,KAAK,mBAAmB;AACpB,kBAAMtV,IAASsV,EAAK,IAAIkzI,CAAQ;AAChC,mBAAIxoJ,KACFA,EAAO,OAAM,GAER;AAAA,UACR;AAAA,UACH,KAAK,mBAAmB;AACpB,kBAAMA,IAASsV,EAAK,IAAIkzI,CAAQ;AAChC,mBAAKxoJ,KAIDA,EAAO,aACTA,EAAO,KAAI,IAEXA,EAAO,KAAI,GAEN,OARLsV,EAAK,YAAY,gBAAgB,IAAO39B,CAAK,GACtC;AAAA,UAQV;AAAA,QACF;AACD,eAAI29B,EAAK,eACAA,EAAK,aAAa,YAAYke,GAAK7nD,GAAIgM,CAAK,IAE9C;AAAA,MACR;AAAA,MACD,aAAa,MAAM;AACjB,QAAAi5J,GAAKwS,IAAS,CAAApjJ,MAAU;AACtB,UAAAA,EAAO,KAAI;AAAA,QACrB,CAAS;AAAA,MACF;AAAA,MACD,SAAS,CAACyiB,GAAM/2B,MAAU;AACxB,QAAA62B,GAAK,IAAIE,GAAM/2B,CAAK;AAAA,MACrB;AAAA,MACD,WAAW,CAAAoF,MACFyxB,GAAK,UAAUzxB,CAAI;AAAA,MAE5B,UAAUkP,GAAQ;AAChB,cAAMu+C,IAAe,KAAK;AAC1B,QAAI,KAAK,iBAAiBv+C,MACpBu+C,KACFA,EAAa,SAAS,cAAc,EAAE,eAAev+C,EAAQ,CAAA,GAE/DA,EAAO,SAAS,YAAY,EAAE,eAAeu+C,EAAc,CAAA,IAE7D,KAAK,eAAev+C;AAAA,MACrB;AAAA,MACD,YAAYokB,GAAS;AACnB,aAAK,UAAU,IAAIw0D,GAAI,KAAK,eAAe,EAAE,WAAWx0D,EAAQ,QAAQ,QAAQ,EAAE,CAAC,GACnF,KAAK,UAAU,IAAIw0D,GAAI,KAAK,OAAO;AAAA,MACpC;AAAA,IACP;AACI,IAAAquE,GAAc,MAAK;AAqBnB,UAAMyB,MAnBQ,MAAM;AAClB,YAAMC,IAAY3jI,MACZ4jI,IAAoB,CAAAl9J,OAAU;AAAA,QAClC,OAAAA;AAAA,QACA,OAAOrJ,GAAKqJ,CAAK;AAAA,QACjB,SAAS,CAAA5S,MAAQwK,GAAMoI,GAAO5S,CAAI,EAAE,eAAgB;AAAA,MAC5D,IACY4sG,IAAQ,CAAAnuE,MAAQ;AACpB,QAAAoxI,EAAU,IAAIpxI,CAAI;AAAA,MAC1B,GACYmvF,IAAO,MAAMiiD,EAAU,IAAK,EAAC,eAAc,GAC3Cv+D,IAAQu+D,EAAU;AACxB,aAAO;AAAA,QACL,mBAAAC;AAAA,QACA,OAAAljE;AAAA,QACA,MAAAghB;AAAA,QACA,OAAAtc;AAAA,MACR;AAAA,IACA,MAGUz/D,KAAM,KAAK,KAAKC,KAAM,KAAK,KAAKi+H,KAAQ,KAAK,OAC7CC,KAAmB,CAAC3/H,GAAM4hF,GAAY/9B,MAAQ;AAClD,UAAIjwG,IAAIguI,EAAW,GACfp7H,IAAIo7H,EAAW;AACnB,YAAMjwI,IAAIquD,EAAK,GACTjnD,IAAIinD,EAAK,GACT4/H,IAAUh+C,EAAW,GACrBi+C,IAAUj+C,EAAW,GACrBk+C,KAAYj8E,KAAO,IAAI,MAAM,EAAE;AACrC,aAAIi8E,EAAS,CAAC,MAAM,QAClBt5K,KAAKq5K,IAEHC,EAAS,CAAC,MAAM,QAClBlsL,KAAKgsL,IAEHE,EAAS,CAAC,MAAM,QAClBt5K,KAAKk5K,GAAMG,IAAU,CAAC,IAEpBC,EAAS,CAAC,MAAM,QAClBlsL,KAAK8rL,GAAME,IAAU,CAAC,IAEpBE,EAAS,CAAC,MAAM,QAClBt5K,KAAKzN,IAEH+mL,EAAS,CAAC,MAAM,QAClBlsL,KAAKjC,IAEHmuL,EAAS,CAAC,MAAM,QAClBt5K,KAAKk5K,GAAM3mL,IAAI,CAAC,IAEd+mL,EAAS,CAAC,MAAM,QAClBlsL,KAAK8rL,GAAM/tL,IAAI,CAAC,IAEXouL,GAASnsL,GAAG4S,GAAG7U,GAAGoH,CAAC;AAAA,IAChC,GACUinL,KAA2B,CAAChgI,GAAM4hF,GAAYq+C,GAAeC,MAAS;AAC1E,eAASzqL,IAAI,GAAGA,IAAIyqL,EAAK,QAAQzqL,KAAK;AACpC,cAAMkiC,IAAMgoJ,GAAiB3/H,GAAM4hF,GAAYs+C,EAAKzqL,CAAC,CAAC;AACtD,YAAIkiC,EAAI,KAAKsoJ,EAAc,KAAKtoJ,EAAI,IAAIA,EAAI,KAAKsoJ,EAAc,IAAIA,EAAc,KAAKtoJ,EAAI,KAAKsoJ,EAAc,KAAKtoJ,EAAI,IAAIA,EAAI,KAAKsoJ,EAAc,IAAIA,EAAc;AACjK,iBAAOC,EAAKzqL,CAAC;AAAA,MAEhB;AACD,aAAO;AAAA,IACb,GACU0qL,KAAU,CAACngI,GAAMruD,GAAGoH,MACjBgnL,GAAS//H,EAAK,IAAIruD,GAAGquD,EAAK,IAAIjnD,GAAGinD,EAAK,IAAIruD,IAAI,GAAGquD,EAAK,IAAIjnD,IAAI,CAAC,GAElEqnL,KAAY,CAACpgI,GAAMqgI,MAAa;AACpC,YAAMC,IAAK7+H,GAAIzB,EAAK,GAAGqgI,EAAS,CAAC,GAC3BE,IAAK9+H,GAAIzB,EAAK,GAAGqgI,EAAS,CAAC,GAC3B1pE,IAAKn1D,GAAIxB,EAAK,IAAIA,EAAK,GAAGqgI,EAAS,IAAIA,EAAS,CAAC,GACjD3pE,IAAKl1D,GAAIxB,EAAK,IAAIA,EAAK,GAAGqgI,EAAS,IAAIA,EAAS,CAAC;AACvD,aAAI1pE,IAAK2pE,IAAK,KAAK5pE,IAAK6pE,IAAK,IACpB,OAEFR,GAASO,GAAIC,GAAI5pE,IAAK2pE,GAAI5pE,IAAK6pE,CAAE;AAAA,IAC9C,GACUC,KAAQ,CAACxgI,GAAMygI,GAAWC,MAAc;AAC5C,UAAIJ,IAAKtgI,EAAK,GACVugI,IAAKvgI,EAAK,GACV22D,IAAK32D,EAAK,IAAIA,EAAK,GACnB02D,IAAK12D,EAAK,IAAIA,EAAK;AACvB,YAAM2gI,IAAMF,EAAU,IAAIA,EAAU,GAC9BG,IAAMH,EAAU,IAAIA,EAAU,GAC9BI,IAAcp/H,GAAI,GAAGg/H,EAAU,IAAIH,CAAE,GACrCQ,IAAcr/H,GAAI,GAAGg/H,EAAU,IAAIF,CAAE,GACrCQ,IAAat/H,GAAI,GAAGk1D,IAAKgqE,CAAG,GAC5BK,IAAav/H,GAAI,GAAGi1D,IAAKkqE,CAAG;AAClC,aAAAN,KAAMO,GACNN,KAAMO,GACFJ,MACF/pE,KAAMkqE,GACNnqE,KAAMoqE,GACNR,KAAMS,GACNR,KAAMS,IAERrqE,KAAMoqE,GACNrqE,KAAMsqE,GACCjB,GAASO,GAAIC,GAAI5pE,IAAK2pE,GAAI5pE,IAAK6pE,CAAE;AAAA,IAC9C,GACUR,KAAW,CAACnsL,GAAG4S,GAAG7U,GAAGoH,OAClB;AAAA,MACL,GAAAnF;AAAA,MACA,GAAA4S;AAAA,MACA,GAAA7U;AAAA,MACA,GAAAoH;AAAA,IACR,IAKUkoL,KAAO;AAAA,MACX,SAAAd;AAAA,MACA,kBAAAR;AAAA,MACA,0BAAAK;AAAA,MACA,WAAAI;AAAA,MACA,OAAAI;AAAA,MACA,QAAQT;AAAA,MACR,gBAVqB,CAAAz8H,MACdy8H,GAASz8H,EAAW,MAAMA,EAAW,KAAKA,EAAW,OAAOA,EAAW,MAAM;AAAA,IAU1F,GAEU49H,KAAU,CAACC,GAAWC,GAAUC,IAAU,QAAS;AACvD,UAAInpI,IAAO,IACP8D,IAAQ;AACZ,YAAMslI,IAAW,CAAAC,MAAa,IAAIhwK,MAAS;AACzC,QAAK2mC,MACHA,IAAO,IACH8D,MAAU,SACZ,aAAaA,CAAK,GAClBA,IAAQ,OAEVulI,EAAU,MAAM,MAAMhwK,CAAI;AAAA,MAEpC,GACYuuB,IAAUwhJ,EAASH,CAAS,GAC5BnpI,IAASspI,EAASF,CAAQ;AAMhC,aAAO;AAAA,QACL,OANY,IAAI7vK,MAAS;AACzB,UAAI,CAAC2mC,KAAQ8D,MAAU,SACrBA,IAAQ,WAAW,MAAMhE,EAAO,MAAM,MAAMzmC,CAAI,GAAG8vK,CAAO;AAAA,QAEpE;AAAA,QAGQ,SAAAvhJ;AAAA,QACA,QAAAkY;AAAA,MACR;AAAA,IACA,GA2CUwpI,MA1CW,MAAM;AACrB,YAAMC,IAAQ,CAAA,GACRC,IAAY,CAAA,GACZC,IAAY,CAAA;AA+BlB,aAAO;AAAA,QACL,MA/BW,CAACr7J,GAAIrD,MAAQ;AACxB,gBAAM2+J,IAAa,kBAAmB3+J,CAAG,oBACnC4+J,IAAY,kBAAmB5+J,CAAK,0CAA0CqD,CAAI;AACxF,cAAIm7J,EAAMn7J,CAAE,MAAM;AAChB,mBAAOm7J,EAAMn7J,CAAE;AACV;AACL,kBAAMw7J,IAAO,IAAI,QAAQ,CAAChiJ,GAASkY,MAAW;AAC5C,oBAAM+pI,IAASb,GAAQphJ,GAASkY,CAAM;AACtC,cAAA0pI,EAAUp7J,CAAE,IAAIy7J,EAAO,SACvBhqI,GAAa,aAAa,WAAW90B,CAAG,EAAE,KAAK,MAAM8+J,EAAO,MAAMF,CAAS,GAAG,MAAME,EAAO,OAAOH,CAAU,CAAC;AAAA,YACzH,CAAW;AACD,mBAAAH,EAAMn7J,CAAE,IAAIw7J,GACLA;AAAA,UACR;AAAA,QACT;AAAA,QAkBQ,KAjBU,CAACx7J,GAAI8nB,MAAS;AACxB,UAAIszI,EAAUp7J,CAAE,MAAM,WACpBo7J,EAAUp7J,CAAE,EAAE8nB,CAAI,GAClB,OAAOszI,EAAUp7J,CAAE,IAErBm7J,EAAMn7J,CAAE,IAAI,QAAQ,QAAQ8nB,CAAI,GAChCuzI,EAAUr7J,CAAE,IAAI8nB;AAAA,QACxB;AAAA,QAWQ,KAVU,CAAA9nB,MACHA,KAAMq7J;AAAA,QAUb,KALU,CAAAr7J,MAAMq7J,EAAUr7J,CAAE;AAAA,QAM5B,QATa,CAAAA,MAAM;AACnB,iBAAOm7J,EAAMn7J,CAAE;AAAA,QACvB;AAAA,MAQA;AAAA,IACA,MAGU+tB,KAAS,OAAO,MAAM;AAC1B,UAAIjG,IAAO,CAAA,GACPl1B,IAAO,CAAA;AACX,YAAM8oK,IAAU;AAAA,QACd,SAAS,CAAA5nK,MAAO;AACd,gBAAMe,IAAOizB,EAAKh0B,CAAG;AACrB,iBAAOe,KAAc;AAAA,QACtB;AAAA,QACD,SAAS,CAACf,GAAK5L,MAAU;AACvB,UAAA0K,EAAK,KAAKkB,CAAG,GACbg0B,EAAKh0B,CAAG,IAAI,OAAO5L,CAAK;AAAA,QACzB;AAAA,QACD,KAAK,CAAAe,MACI2J,EAAK3J,CAAK;AAAA,QAEnB,YAAY,CAAA6K,MAAO;AACjB,UAAAlB,IAAOA,EAAK,OAAO,CAAApX,MAAKA,MAAMsY,CAAG,GACjC,OAAOg0B,EAAKh0B,CAAG;AAAA,QAChB;AAAA,QACD,OAAO,MAAM;AACX,UAAAlB,IAAO,CAAA,GACPk1B,IAAO,CAAA;AAAA,QACR;AAAA,QACD,QAAQ;AAAA,MAChB;AACM,oBAAO,eAAe4zI,GAAS,UAAU;AAAA,QACvC,KAAK,MAAM9oK,EAAK;AAAA,QAChB,cAAc;AAAA,QACd,YAAY;AAAA,MACpB,CAAO,GACM8oK;AAAA,IACb;AAEI,QAAIC;AACJ,QAAI;AACF,YAAMx2J,IAAO;AACb,MAAAw2J,KAAe,OAAO,cACtBA,GAAa,QAAQx2J,GAAMA,CAAI,GAC/Bw2J,GAAa,WAAWx2J,CAAI;AAAA,IAC7B,QAAW;AACV,MAAAw2J,KAAe5tI,GAAM;AAAA,IACtB;AACD,QAAI6tI,KAAeD;AAEnB,UAAME,KAAY;AAAA,MAChB,MAAM,EAAE,MAAAlB,GAAM;AAAA,MACd,MAAM;AAAA,QACJ,OAAAjtG;AAAA,QACA,OAAAjxD;AAAA,QACA,IAAA8jD;AAAA,QACA,KAAA4oC;AAAA,QACA,iBAAAqpE;AAAA,QACA,YAAAO;AAAA,QACA,MAAAjgI;AAAA,QACA,cAAA8oI;AAAA,QACA,eAAAhwD;AAAA,MACD;AAAA,MACD,KAAK;AAAA,QACH,YAAA7iF;AAAA,QACA,YAAY9d;AAAA,QACZ,YAAAmuB;AAAA,QACA,UAAAnO;AAAA,QACA,cAAAwG;AAAA,QACA,YAAAq3B;AAAA,QACA,YAAY+3C;AAAA,QACZ,kBAAAzoF;AAAA,QACA,kBAAA0oC;AAAA,QACA,iBAAArC;AAAA,QACA,WAAWs/C;AAAA,QACX,OAAOh1E,GAAW;AAAA,MACnB;AAAA,MACD,MAAM;AAAA,QACJ,QAAAzD;AAAA,QACA,UAAA7I;AAAA,QACA,MAAMq1C;AAAA,QACN,QAAAvxC;AAAA,QACA,WAAA+sE;AAAA,QACA,QAAAl5B;AAAA,QACA,YAAYK;AAAA,MACb;AAAA,MACD,KAAA74D;AAAA,MACA,cAAAg4B;AAAA,MACA,WAAA0qB;AAAA,MACA,WAAAkyD;AAAA,MACA,aAAAY;AAAA,MACA,gBAAA6/C;AAAA,MACA,eAAA5qD;AAAA,MACA,qBAAAhB;AAAA,MACA,kBAAAuuD;AAAA,MACA,WAAA+B;AAAA,MACA,QAAAgB;AAAA,MACA,cAAArpG;AAAA,MACA,eAAAkqG;AAAA,MACA,KAAKvsI,GAAS;AAAA,MACd,cAAcwG,GAAa;AAAA,MAC3B,eAAAy0E;AAAA,MACA,cAAAC;AAAA,MACA,cAAAnC;AAAA,MACA,aAAAF;AAAA,MACA,UAAAo3D;AAAA,MACA,eAAAjC;AAAA,MACA,MAAMx8J,GAAM;AAAA,MACZ,SAASA,GAAM;AAAA,MACf,IAAIA,GAAM;AAAA,MACV,SAASA,GAAM;AAAA,MACf,SAASA,GAAM;AAAA,MACf,MAAMA,GAAM;AAAA,MACZ,KAAKA,GAAM;AAAA,MACX,MAAMA,GAAM;AAAA,MACZ,SAASA,GAAM;AAAA,MACf,QAAQA,GAAM;AAAA,MACd,MAAMA,GAAM;AAAA,MACZ,SAASA,GAAM;AAAA,MACf,SAASA,GAAM;AAAA,MACf,iBAAiBA,GAAM;AAAA,IAC7B,GACUq/J,KAAYr/J,GAAM,OAAO+6J,IAAeqE,EAAS,GAEjDE,KAAwB,CAAAC,MAAW;AAErC,UAAI;AACF,QAAAC,EAAA,UAAiBD;AAAA,MAClB,QAAW;AAAA,MACX;AAAA,IAET;AAKI,KAJ6B,CAAAA,MAAW;AACtC,aAAO,UAAUA,GACjB,OAAO,UAAUA;AAAA,IACvB,GACyBF,EAAS,GAC9BC,GAAsBD,EAAS;AAAA,EAEnC;;;;CC1g+BC,WAAY;AAGT,MAAII,IAAW,QAAQ,KAAK,MAAM,QAAQ,sBAAsB;AAEhE,QAAM/uK,IAAW,CAAC7M,GAAG8M,GAAaC,MAAc;AAC9C,QAAIlW;AACJ,WAAIkW,EAAU/M,GAAG8M,EAAY,SAAS,IAC7B,OAEEjW,IAAKmJ,EAAE,iBAAiB,QAAQnJ,MAAO,SAAS,SAASA,EAAG,UAAUiW,EAAY;AAAA,EAEnG,GACUE,IAAS,CAAAhgB,MAAK;AAClB,UAAM5C,IAAI,OAAO4C;AACjB,WAAIA,MAAM,OACD,SACE5C,MAAM,YAAY,MAAM,QAAQ4C,CAAC,IACnC,UACE5C,MAAM,YAAYyiB,EAAS7f,GAAG,QAAQ,CAAC8B,GAAGme,MAAUA,EAAM,cAAcne,CAAC,CAAC,IAC5E,WAEA1E;AAAA,EAEf,GACU8iB,KAAW,CAAAnE,MAAQ,CAAAnB,MAASoF,EAAOpF,CAAK,MAAMmB,GAC9CoE,KAAe,CAAApE,MAAQ,CAAAnB,MAAS,OAAOA,MAAUmB,GACjDiD,KAAO,CAAA5hB,MAAK,CAAAG,MAAKH,MAAMG,GACvB+iB,KAAWJ,GAAS,QAAQ,GAC5BpE,KAAWoE,GAAS,QAAQ,GAC5B6G,KAAU7G,GAAS,OAAO,GAC1BO,KAASzB,GAAK,IAAI,GAClB0B,KAAYP,GAAa,SAAS,GAClCQ,KAAc3B,GAAK,MAAS,GAC5B4B,KAAa,CAAArjB,MAAKA,KAAM,MACxBsjB,KAAgB,CAAAtjB,MAAK,CAACqjB,GAAWrjB,CAAC,GAClCujB,KAAaX,GAAa,UAAU,GACpCY,KAAWZ,GAAa,QAAQ,GAEhCe,KAAO,MAAM;AAAA,EACvB,GACUC,KAAU,CAAClY,GAAImY,MACZ,IAAIzD,MACF1U,EAAGmY,EAAG,MAAM,MAAMzD,CAAI,CAAC,GAG5B0D,KAAW,CAACC,GAAKC,MAAQ,CAAAhkB,MAAK+jB,EAAIC,EAAIhkB,CAAC,CAAC,GACxCikB,KAAW,CAAA5G,MACR,MACEA,GAGL6G,KAAW,CAAAzhB,MACRA,GAEH0hB,KAAe,CAACnkB,GAAGwV,MAChBxV,MAAMwV;AAEf,WAAS4O,GAAMpd,MAAOqd,GAAa;AACjC,WAAO,IAAIC,MAAa;AACtB,YAAMC,IAAMF,EAAY,OAAOC,CAAQ;AACvC,aAAOtd,EAAG,MAAM,MAAMud,CAAG;AAAA,IACjC;AAAA,EACK;AACD,QAAMC,KAAM,CAAA/f,MAAK,CAAA5E,MAAK,CAAC4E,EAAE5E,CAAC,GACpB4kB,KAAM,CAAAC,MACH,MAAM;AACX,UAAM,IAAI,MAAMA,CAAG;AAAA,EAC3B,GAEU6uF,KAAQ,CAAA9uG,MACLA,EAAC,GAEJogB,KAAQZ,GAAS,EAAK,GACtBa,KAASb,GAAS,EAAI;AAAA,EAE5B,MAAMc,EAAS;AAAA,IACb,YAAYxH,GAAKF,GAAO;AACtB,WAAK,MAAME,GACX,KAAK,QAAQF;AAAA,IACd;AAAA,IACD,OAAO,KAAKA,GAAO;AACjB,aAAO,IAAI0H,EAAS,IAAM1H,CAAK;AAAA,IAChC;AAAA,IACD,OAAO,OAAO;AACZ,aAAO0H,EAAS;AAAA,IACjB;AAAA,IACD,KAAKC,GAAQC,GAAQ;AACnB,aAAI,KAAK,MACAA,EAAO,KAAK,KAAK,IAEjBD,EAAM;AAAA,IAEhB;AAAA,IACD,SAAS;AACP,aAAO,KAAK;AAAA,IACb;AAAA,IACD,SAAS;AACP,aAAO,CAAC,KAAK;AAAA,IACd;AAAA,IACD,IAAIE,GAAQ;AACV,aAAI,KAAK,MACAH,EAAS,KAAKG,EAAO,KAAK,KAAK,CAAC,IAEhCH,EAAS;IAEnB;AAAA,IACD,KAAKI,GAAQ;AACX,aAAI,KAAK,MACAA,EAAO,KAAK,KAAK,IAEjBJ,EAAS;IAEnB;AAAA,IACD,OAAOvC,GAAW;AAChB,aAAO,KAAK,OAAOA,EAAU,KAAK,KAAK;AAAA,IACxC;AAAA,IACD,OAAOA,GAAW;AAChB,aAAO,CAAC,KAAK,OAAOA,EAAU,KAAK,KAAK;AAAA,IACzC;AAAA,IACD,OAAOA,GAAW;AAChB,aAAI,CAAC,KAAK,OAAOA,EAAU,KAAK,KAAK,IAC5B,OAEAuC,EAAS;IAEnB;AAAA,IACD,MAAMK,GAAa;AACjB,aAAO,KAAK,MAAM,KAAK,QAAQA;AAAA,IAChC;AAAA,IACD,GAAGA,GAAa;AACd,aAAO,KAAK,MAAM,OAAOA;AAAA,IAC1B;AAAA,IACD,WAAWC,GAAO;AAChB,aAAO,KAAK,MAAM,KAAK,QAAQA,EAAK;AAAA,IACrC;AAAA,IACD,QAAQA,GAAO;AACb,aAAO,KAAK,MAAM,OAAOA,EAAK;AAAA,IAC/B;AAAA,IACD,SAASC,GAAS;AAChB,UAAK,KAAK;AAGR,eAAO,KAAK;AAFZ,YAAM,IAAI,MAAMA,KAAmD,yBAAyB;AAAA,IAI/F;AAAA,IACD,OAAO,KAAKjI,GAAO;AACjB,aAAOiG,GAAcjG,CAAK,IAAI0H,EAAS,KAAK1H,CAAK,IAAI0H,EAAS;IAC/D;AAAA,IACD,YAAY;AACV,aAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,IAChC;AAAA,IACD,iBAAiB;AACf,aAAO,KAAK;AAAA,IACb;AAAA,IACD,KAAKQ,GAAQ;AACX,MAAI,KAAK,OACPA,EAAO,KAAK,KAAK;AAAA,IAEpB;AAAA,IACD,UAAU;AACR,aAAO,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;AAAA,IAClC;AAAA,IACD,WAAW;AACT,aAAO,KAAK,MAAM,QAAS,KAAK,KAAO,MAAK;AAAA,IAC7C;AAAA,EACF;AACD,EAAAR,EAAS,gBAAgB,IAAIA,EAAS,EAAK;AAE3C,QAAMS,KAAc,MAAM,UAAU,OAC9BC,KAAgB,MAAM,UAAU,SAChCC,KAAa,MAAM,UAAU,MAC7BC,KAAa,CAACpM,GAAI1Z,MAAM4lB,GAAc,KAAKlM,GAAI1Z,CAAC,GAChDgmB,KAAa,CAACnK,GAAIjZ,MAAMkjB,GAAWjK,GAAIjZ,CAAC,IAAI,IAC5CqjB,KAAS,CAACpK,GAAIgI,MAAS;AAC3B,aAASpf,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,UAAIof,EAAKjhB,GAAG6B,CAAC;AACX,eAAO;AAAA,IAEV;AACD,WAAO;AAAA,EACb,GACUgtL,KAAU,CAAC7iK,GAAKhqB,MAAM;AAC1B,UAAM3E,IAAI,CAAA;AACV,aAASwE,IAAI,GAAGA,IAAImqB,GAAKnqB;AACvB,MAAAxE,EAAE,KAAK2E,EAAEH,CAAC,CAAC;AAEb,WAAOxE;AAAA,EACb,GACU+pB,KAAQ,CAACnO,GAAIjX,MAAM;AACvB,UAAMod,IAAMnG,EAAG,QACT5b,IAAI,IAAI,MAAM+hB,CAAG;AACvB,aAASvd,IAAI,GAAGA,IAAIud,GAAKvd,KAAK;AAC5B,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,MAAAxE,EAAEwE,CAAC,IAAIG,EAAEhC,GAAG6B,CAAC;AAAA,IACd;AACD,WAAOxE;AAAA,EACb,GACUyqL,KAAS,CAAC7uK,GAAIjX,MAAM;AACxB,aAASH,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,MAAAG,EAAEhC,GAAG6B,CAAC;AAAA,IACP;AAAA,EACP,GACU2hB,KAAQ,CAACvK,GAAIjX,MAAM;AACvB,aAASH,IAAIoX,EAAG,SAAS,GAAGpX,KAAK,GAAGA,KAAK;AACvC,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,MAAAG,EAAEhC,GAAG6B,CAAC;AAAA,IACP;AAAA,EACP,GACUugJ,KAAY,CAACnpI,GAAIgI,MAAS;AAC9B,UAAMyC,IAAO,CAAA,GACPC,IAAO,CAAA;AACb,aAAS9hB,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM,IAAIoX,EAAGpX,CAAC;AAEd,OADYof,EAAK,GAAGpf,CAAC,IAAI6hB,IAAOC,GAC5B,KAAK,CAAC;AAAA,IACX;AACD,WAAO;AAAA,MACL,MAAAD;AAAA,MACA,MAAAC;AAAA,IACR;AAAA,EACA,GACUo1E,KAAW,CAAC9/E,GAAIgI,MAAS;AAC7B,UAAM5jB,IAAI,CAAA;AACV,aAASwE,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,MAAIof,EAAKjhB,GAAG6B,CAAC,KACXxE,EAAE,KAAK2C,CAAC;AAAA,IAEX;AACD,WAAO3C;AAAA,EACb,GACUwmB,KAAQ,CAAC5K,GAAIjX,GAAG8hB,OACpBN,GAAMvK,GAAI,CAACjZ,GAAG6B,MAAM;AAClB,IAAAiiB,IAAM9hB,EAAE8hB,GAAK9jB,GAAG6B,CAAC;AAAA,EACzB,CAAO,GACMiiB,IAEHC,KAAQ,CAAC9K,GAAIjX,GAAG8hB,OACpBgkK,GAAO7uK,GAAI,CAACjZ,GAAG6B,MAAM;AACnB,IAAAiiB,IAAM9hB,EAAE8hB,GAAK9jB,GAAG6B,CAAC;AAAA,EACzB,CAAO,GACMiiB,IAEHwrH,KAAY,CAACr2H,GAAIgI,GAAMgD,MAAU;AACrC,aAASpiB,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,UAAIof,EAAKjhB,GAAG6B,CAAC;AACX,eAAOygB,EAAS,KAAKtiB,CAAC;AACjB,UAAIikB,EAAMjkB,GAAG6B,CAAC;AACnB;AAAA,IAEH;AACD,WAAOygB,EAAS;EACtB,GACU0G,IAAS,CAAC/P,GAAIgI,MACXquH,GAAUr2H,GAAIgI,GAAMmB,EAAK,GAE5BixC,KAAY,CAACp6C,GAAIgI,MAAS;AAC9B,aAASpf,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,UAAIof,EAAKjhB,GAAG6B,CAAC;AACX,eAAOygB,EAAS,KAAKzgB,CAAC;AAAA,IAEzB;AACD,WAAOygB,EAAS;EACtB,GACU8B,KAAU,CAAAnL,MAAM;AACpB,UAAM5b,IAAI,CAAA;AACV,aAASwE,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAK,EAAEvd,GAAG;AAC7C,UAAI,CAACklB,GAAQ9N,EAAGpX,CAAC,CAAC;AAChB,cAAM,IAAI,MAAM,sBAAsBA,IAAI,+BAA+BoX,CAAE;AAE7E,MAAAgK,GAAW,MAAM5lB,GAAG4b,EAAGpX,CAAC,CAAC;AAAA,IAC1B;AACD,WAAOxE;AAAA,EACb,GACUy+B,KAAS,CAAC7iB,GAAIjX,MAAMoiB,GAAQgD,GAAMnO,GAAIjX,CAAC,CAAC,GACxCsiB,KAAS,CAACrL,GAAIgI,MAAS;AAC3B,aAASpf,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAK,EAAEvd,GAAG;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,UAAIof,EAAKjhB,GAAG6B,CAAC,MAAM;AACjB,eAAO;AAAA,IAEV;AACD,WAAO;AAAA,EACb,GACU0iB,KAAU,CAAAtL,MAAM;AACpB,UAAM5b,IAAI0lB,GAAY,KAAK9J,GAAI,CAAC;AAChC,WAAA5b,EAAE,QAAO,GACFA;AAAA,EACb,GACUsnB,IAAc,CAAC1L,GAAIjX,MAAM;AAC7B,UAAM3E,IAAI,CAAA;AACV,aAASwE,IAAI,GAAGud,IAAMnG,EAAG,QAAQpX,IAAIud,GAAKvd,KAAK;AAC7C,YAAM7B,IAAIiZ,EAAGpX,CAAC;AACd,MAAAxE,EAAE,OAAO2C,CAAC,CAAC,IAAIgC,EAAEhC,GAAG6B,CAAC;AAAA,IACtB;AACD,WAAOxE;AAAA,EACb,GACUshB,IAAS,CAAC1F,GAAI4L,MAAe;AACjC,UAAMC,IAAO/B,GAAY,KAAK9J,GAAI,CAAC;AACnC,WAAA6L,EAAK,KAAKD,CAAU,GACbC;AAAA,EACb,GACUgqK,KAAQ,CAAC71K,GAAIpX,MAAMA,KAAK,KAAKA,IAAIoX,EAAG,SAASqJ,EAAS,KAAKrJ,EAAGpX,CAAC,CAAC,IAAIygB,EAAS,QAC7E0C,IAAO,CAAA/L,MAAM61K,GAAM71K,GAAI,CAAC,GACxB8O,KAAS,CAAA9O,MAAM61K,GAAM71K,GAAIA,EAAG,SAAS,CAAC,GACtCkM,KAAU,CAAC3L,GAAKxX,MAAM;AAC1B,aAASH,IAAI,GAAGA,IAAI2X,EAAI,QAAQ3X,KAAK;AACnC,YAAMxE,IAAI2E,EAAEwX,EAAI3X,CAAC,GAAGA,CAAC;AACrB,UAAIxE,EAAE;AACJ,eAAOA;AAAA,IAEV;AACD,WAAOilB,EAAS;EACtB,GAEUgD,KAAO,OAAO,MACd9K,KAAiB,OAAO,gBACxB4uK,KAAS,CAAC3jK,GAAKzjB,MAAM;AACzB,UAAM0jB,IAAQJ,GAAKG,CAAG;AACtB,aAASvX,IAAI,GAAGkR,IAAMsG,EAAM,QAAQxX,IAAIkR,GAAKlR,KAAK;AAChD,YAAMrM,IAAI6jB,EAAMxX,CAAC,GACX,IAAIuX,EAAI5jB,CAAC;AACf,MAAAG,EAAE,GAAGH,CAAC;AAAA,IACP;AAAA,EACP,GACUgtB,KAAM,CAACpJ,GAAKzjB,MACT4jB,GAASH,GAAK,CAACzlB,GAAG6B,OAAO;AAAA,IAC9B,GAAGA;AAAA,IACH,GAAGG,EAAEhC,GAAG6B,CAAC;AAAA,EACV,EAAC,GAEE+jB,KAAW,CAACH,GAAKzjB,MAAM;AAC3B,UAAM3E,IAAI,CAAA;AACV,WAAA+rL,GAAO3jK,GAAK,CAACzlB,GAAG6B,MAAM;AACpB,YAAMgkB,IAAQ7jB,EAAEhC,GAAG6B,CAAC;AACpB,MAAAxE,EAAEwoB,EAAM,CAAC,IAAIA,EAAM;AAAA,IAC3B,CAAO,GACMxoB;AAAA,EACb,GACUyoB,KAAS,OAAK,CAAC9lB,GAAG6B,MAAM;AAC5B,MAAEA,CAAC,IAAI7B;AAAA,EACb,GACU+lB,KAAiB,CAACN,GAAKxE,GAAM+E,GAAQC,MAAY;AACrD,IAAAmjK,GAAO3jK,GAAK,CAACzlB,GAAG6B,MAAM;AACpB,OAACof,EAAKjhB,GAAG6B,CAAC,IAAImkB,IAASC,GAASjmB,GAAG6B,CAAC;AAAA,IAC5C,CAAO;AAAA,EACP,GACUi7J,KAAW,CAACr3I,GAAKxE,MAAS;AAC9B,UAAM7jB,IAAI,CAAA;AACV,WAAA2oB,GAAeN,GAAKxE,GAAM6E,GAAO1oB,CAAC,GAAG8jB,EAAI,GAClC9jB;AAAA,EACb,GACUgpB,KAAa,CAACX,GAAKzjB,MAAM;AAC7B,UAAM3E,IAAI,CAAA;AACV,WAAA+rL,GAAO3jK,GAAK,CAAC7K,GAAOyL,MAAS;AAC3B,MAAAhpB,EAAE,KAAK2E,EAAE4Y,GAAOyL,CAAI,CAAC;AAAA,IAC7B,CAAO,GACMhpB;AAAA,EACb,GACUipB,KAAS,CAAAb,MACNW,GAAWX,GAAKhE,EAAQ,GAE3BstK,KAAQ,CAACtpK,GAAKe,MACX2L,GAAM1M,GAAKe,CAAG,IAAIlE,EAAS,KAAKmD,EAAIe,CAAG,CAAC,IAAIlE,EAAS,KAAI,GAE5D6P,KAAQ,CAAC1M,GAAKe,MAAQhM,GAAe,KAAKiL,GAAKe,CAAG,GAClDE,KAAoB,CAACjB,GAAKe,MAAQ2L,GAAM1M,GAAKe,CAAG,KAAKf,EAAIe,CAAG,MAAM,UAAaf,EAAIe,CAAG,MAAM,MAC5Fs8B,KAAU,OAAK;AACnB,eAAW9iD,KAAK;AACd,UAAIwa,GAAe,KAAK,GAAGxa,CAAC;AAC1B,eAAO;AAGX,WAAO;AAAA,EACb,GAEUmwB,KAAS,OAAO,SAAW,MAAc,SAAS,SAAS,cAAc,KAEzEf,KAAO,CAACgB,GAAOC,MAAU;AAC7B,QAAIvuB,IAA2BuuB,KAAyBF;AACxD,aAAStuB,IAAI,GAAGA,IAAIuuB,EAAM,UAAUtuB,MAAM,UAAaA,MAAM,MAAM,EAAED;AACnE,MAAAC,IAAIA,EAAEsuB,EAAMvuB,CAAC,CAAC;AAEhB,WAAOC;AAAA,EACb,GACUwuB,KAAY,CAAC5d,GAAG2d,MAAU;AAC9B,UAAMD,IAAQ1d,EAAE,MAAM,GAAG;AACzB,WAAO0c,GAAKgB,GAAOC,CAAK;AAAA,EAC9B,GAEUE,KAAS,CAAClK,GAAMgK,MACbC,GAAUjK,GAAMgK,CAAK,GAExBG,KAAW,CAACnK,GAAMgK,MAAU;AAChC,UAAMI,IAASF,GAAOlK,GAAMgK,CAAK;AACjC,QAA4BI,KAAW;AACrC,YAAM,IAAI,MAAMpK,IAAO,gCAAgC;AAEzD,WAAOoK;AAAA,EACb,GAEUggF,KAAiB,OAAO,gBACxB9/E,KAAkB,CAAAN,MACfG,GAAS,eAAeH,CAAK,GAEhCO,KAAgB,CAAA5wB,MAAK;AACzB,UAAMqwB,IAAQC,GAAU,6BAA6BtwB,CAAC;AACtD,WAAO8b,GAAS9b,CAAC,MAAM2wB,GAAgBN,CAAK,EAAE,UAAU,cAAcrwB,CAAC,KAAK,mBAAmB,KAAKywG,GAAezwG,CAAC,EAAE,YAAY,IAAI;AAAA,EAC5I,GAEU6wB,KAAU,GACVC,KAAW,GACXC,KAAoB,IACpBC,KAAU,GACVC,KAAO,GAEP5K,KAAO,CAAA6K,MACDA,EAAQ,IAAI,SACb,eAELnV,KAAO,CAAAmV,MAAWA,EAAQ,IAAI,UAC9BE,KAAS,CAAAh0B,MAAK,CAAA8zB,MAAWnV,GAAKmV,CAAO,MAAM9zB,GAC3CuiC,KAAY,CAAAzO,MAAWnV,GAAKmV,CAAO,MAAML,MAAWxK,GAAK6K,CAAO,MAAM,YACtEmN,KAAgB,CAAAnN,MAAWy/G,GAAUz/G,CAAO,KAAKN,GAAcM,EAAQ,GAAG,GAC1Ey/G,KAAYv/G,GAAOJ,EAAO,GAC1BwzI,KAASpzI,GAAOH,EAAI,GACpB2c,KAAaxc,GAAON,EAAQ,GAC5B+O,KAAqBzO,GAAOL,EAAiB,GAC7CY,KAAQ,CAAA7W,MAAO,CAAA3d,MAAKwzI,GAAUxzI,CAAC,KAAKkpB,GAAKlpB,CAAC,MAAM2d,GAEhD8W,KAAS,CAACC,GAAKrL,GAAK5L,MAAU;AAClC,QAAI0F,GAAS1F,CAAK,KAAK8F,GAAU9F,CAAK,KAAKmG,GAASnG,CAAK;AACvD,MAAAiX,EAAI,aAAarL,GAAK5L,IAAQ,EAAE;AAAA;AAEhC,oBAAQ,MAAM,uCAAuC4L,GAAK,aAAa5L,GAAO,eAAeiX,CAAG,GAC1F,IAAI,MAAM,gCAAgC;AAAA,EAExD,GACUkH,KAAQ,CAAC7H,GAAS1K,GAAK5L,MAAU;AACrC,IAAAgX,GAAOV,EAAQ,KAAK1K,GAAK5L,CAAK;AAAA,EACpC,GACUmX,KAAW,CAACb,GAASc,MAAU;AACnC,UAAMH,IAAMX,EAAQ;AACpB,IAAAk4J,GAAOp3J,GAAO,CAAChf,GAAG9E,MAAM;AACtB,MAAA0jB,GAAOC,GAAK3jB,GAAG8E,CAAC;AAAA,IACxB,CAAO;AAAA,EACP,GACUg8K,KAAa,CAAC99J,GAASc,MAAU;AACrC,IAAAo3J,GAAOp3J,GAAO,CAAChf,GAAG9E,MAAM;AACtB,MAAA8E,EAAE,KAAK,MAAM;AACX,QAAAqgB,EAASnC,GAAShjB,CAAC;AAAA,MACpB,GAAE,CAAA0M,MAAS;AACV,QAAAgX,GAAOV,EAAQ,KAAKhjB,GAAG0M,CAAK;AAAA,MACtC,CAAS;AAAA,IACT,CAAO;AAAA,EACP,GACUmK,KAAQ,CAACmM,GAAS1K,MAAQ;AAC9B,UAAMxT,IAAIke,EAAQ,IAAI,aAAa1K,CAAG;AACtC,WAAOxT,MAAM,OAAO,SAAYA;AAAA,EACtC,GACUkf,IAAS,CAAChB,GAAS1K,MAAQlE,EAAS,KAAKyC,GAAMmM,GAAS1K,CAAG,CAAC,GAC5D6M,IAAW,CAACnC,GAAS1K,MAAQ;AACjC,IAAA0K,EAAQ,IAAI,gBAAgB1K,CAAG;AAAA,EACrC,GACU2kC,KAAU,CAAAj6B,MAAWnN,GAAMmN,EAAQ,IAAI,YAAY,CAACpN,GAAKyO,OAC7DzO,EAAIyO,EAAK,IAAI,IAAIA,EAAK,OACfzO,IACN,CAAE,CAAA,GAEC0P,KAAa,CAACC,GAAMpD,MAAU;AAElC,UAAMqD,KADMrD,KAAS,UACL,cAAc,KAAK;AAEnC,QADAqD,EAAI,YAAYD,GACZ,CAACC,EAAI,cAAe,KAAIA,EAAI,WAAW,SAAS,GAAG;AACrD,YAAM7Q,IAAU;AAChB,oBAAQ,MAAMA,GAAS4Q,CAAI,GACrB,IAAI,MAAM5Q,CAAO;AAAA,IACxB;AACD,WAAO4X,GAAU/G,EAAI,WAAW,CAAC,CAAC;AAAA,EACxC,GACUE,KAAU,CAAC9Y,GAAKuV,MAAU;AAE9B,UAAMwD,KADMxD,KAAS,UACJ,cAAcvV,CAAG;AAClC,WAAO2f,GAAU5G,CAAI;AAAA,EAC3B,GACUC,KAAW,CAACC,GAAM1D,MAAU;AAEhC,UAAMwD,KADMxD,KAAS,UACJ,eAAe0D,CAAI;AACpC,WAAO0G,GAAU5G,CAAI;AAAA,EAC3B,GACU4G,KAAY,CAAA5G,MAAQ;AACxB,QAAIA,KAAS;AACX,YAAM,IAAI,MAAM,kCAAkC;AAEpD,WAAO,EAAE,KAAKA;EACpB,GAEUG,KAAe;AAAA,IACnB,UAAUR;AAAA,IACV,SAAAI;AAAA,IACA,UAAAE;AAAA,IACA,SAAS2G;AAAA,IACT,WANkB,CAACxG,GAAQj0B,GAAG4S,MAAM0P,EAAS,KAAK2R,EAAO,IAAI,iBAAiBj0B,GAAG4S,CAAC,CAAC,EAAE,IAAI6nB,EAAS;AAAA,EAOxG,GAEUlL,KAAO,CAAC2B,GAASoD,MAAa;AAClC,UAAMzC,IAAMX,EAAQ;AACpB,QAAIW,EAAI,aAAab;AACnB,aAAO;AACF;AACL,YAAMuD,IAAO1C;AACb,UAAI0C,EAAK,YAAY;AACnB,eAAOA,EAAK,QAAQD,CAAQ;AACvB,UAAIC,EAAK,sBAAsB;AACpC,eAAOA,EAAK,kBAAkBD,CAAQ;AACjC,UAAIC,EAAK,0BAA0B;AACxC,eAAOA,EAAK,sBAAsBD,CAAQ;AACrC,UAAIC,EAAK,uBAAuB;AACrC,eAAOA,EAAK,mBAAmBD,CAAQ;AAEvC,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAEnD;AAAA,EACP,GACUE,IAAiB,CAAA3C,MAAOA,EAAI,aAAab,MAAWa,EAAI,aAAaf,MAAYe,EAAI,aAAad,MAAqBc,EAAI,sBAAsB,GACjJo9J,IAAQ,CAAC36J,GAAUjE,MAAU;AACjC,UAAMoE,IAAOpE,MAAU,SAAY,WAAWA,EAAM;AACpD,WAAOmE,EAAeC,CAAI,IAAI,CAAA,IAAKrN,GAAMqN,EAAK,iBAAiBH,CAAQ,GAAGN,GAAa,OAAO;AAAA,EACpG,GACUU,KAAM,CAACJ,GAAUjE,MAAU;AAC/B,UAAMoE,IAAOpE,MAAU,SAAY,WAAWA,EAAM;AACpD,WAAOmE,EAAeC,CAAI,IAAInS,EAAS,KAAI,IAAKA,EAAS,KAAKmS,EAAK,cAAcH,CAAQ,CAAC,EAAE,IAAIN,GAAa,OAAO;AAAA,EAC1H,GAEU5T,KAAO,CAACuU,GAAIC,MAAOD,EAAG,QAAQC,EAAG,KACjC3J,KAAa,CAAC0J,GAAIC,MAAO;AAC7B,UAAME,IAAKH,EAAG,KACRI,IAAKH,EAAG;AACd,WAAOE,MAAOC,IAAK,KAAQD,EAAG,SAASC,CAAE;AAAA,EAC/C,GACUV,KAAO9E,IAEP2/J,KAAQ,CAAAh+J,MAAW8C,GAAa,QAAQ9C,EAAQ,IAAI,aAAa,GACjE+D,KAAkB,CAAAC,MAAO0Y,GAAW1Y,CAAG,IAAIA,IAAMg6J,GAAMh6J,CAAG,GAC1DC,KAAkB,CAAAjE,MAAW8C,GAAa,QAAQiB,GAAgB/D,CAAO,EAAE,IAAI,eAAe,GAC9FkE,KAAc,CAAAlE,MAAW8C,GAAa,QAAQiB,GAAgB/D,CAAO,EAAE,IAAI,WAAW,GACtFmE,KAAS,CAAAnE,MAAW5O,EAAS,KAAK4O,EAAQ,IAAI,UAAU,EAAE,IAAI8C,GAAa,OAAO,GAClFsB,KAAgB,CAAApE,MAAW5O,EAAS,KAAK4O,EAAQ,IAAI,aAAa,EAAE,IAAI8C,GAAa,OAAO,GAC5F8V,KAAU,CAAC5Y,GAASsE,MAAW;AACnC,UAAMC,IAAO3U,GAAW0U,CAAM,IAAIA,IAASpT;AAC3C,QAAIyP,IAAMX,EAAQ;AAClB,UAAMwE,IAAM,CAAA;AACZ,WAAO7D,EAAI,eAAe,QAAQA,EAAI,eAAe,UAAW;AAC9D,YAAM8D,IAAY9D,EAAI,YAChBnf,IAAIshB,GAAa,QAAQ2B,CAAS;AAExC,UADAD,EAAI,KAAKhjB,CAAC,GACN+iB,EAAK/iB,CAAC,MAAM;AACd;AAEA,MAAAmf,IAAM8D;AAAA,IAET;AACD,WAAOD;AAAA,EACb,GACUM,KAAc,CAAA9E,MAAW5O,EAAS,KAAK4O,EAAQ,IAAI,eAAe,EAAE,IAAI8C,GAAa,OAAO,GAC5FiC,KAAc,CAAA/E,MAAW5O,EAAS,KAAK4O,EAAQ,IAAI,WAAW,EAAE,IAAI8C,GAAa,OAAO,GACxFm7J,KAAa,CAAAj+J,MAAW9J,GAAM8J,EAAQ,IAAI,YAAY8C,GAAa,OAAO,GAC1Eo7J,KAAU,CAACl+J,GAASvV,MAAU;AAClC,UAAMhE,IAAKuZ,EAAQ,IAAI;AACvB,WAAO5O,EAAS,KAAK3K,EAAGgE,CAAK,CAAC,EAAE,IAAIqY,GAAa,OAAO;AAAA,EAC9D,GACUqC,KAAa,CAAAnF,MAAWk+J,GAAQl+J,GAAS,CAAC,GAE1CwI,KAAW,CAACC,GAAQzI,MAAY;AAEpC,IADiBmE,GAAOsE,CAAM,EACrB,KAAK,CAAA3mB,MAAK;AACjB,MAAAA,EAAE,IAAI,aAAake,EAAQ,KAAKyI,EAAO,GAAG;AAAA,IAClD,CAAO;AAAA,EACP,GACU01J,KAAU,CAAC11J,GAAQzI,MAAY;AAEnC,IADgB+E,GAAY0D,CAAM,EAC1B,KAAK,MAAM;AAEjB,MADiBtE,GAAOsE,CAAM,EACrB,KAAK,CAAA3mB,MAAK;AACjB,QAAA6mB,GAAS7mB,GAAGke,CAAO;AAAA,MAC7B,CAAS;AAAA,IACF,GAAE,CAAAle,MAAK;AACN,MAAA0mB,GAAS1mB,GAAGke,CAAO;AAAA,IAC3B,CAAO;AAAA,EACP,GACU4I,KAAU,CAACzE,GAAQnE,MAAY;AAEnC,IADqBmF,GAAWhB,CAAM,EACzB,KAAK,MAAM;AACtB,MAAAwE,GAASxE,GAAQnE,CAAO;AAAA,IACzB,GAAE,CAAAle,MAAK;AACN,MAAAqiB,EAAO,IAAI,aAAanE,EAAQ,KAAKle,EAAE,GAAG;AAAA,IAClD,CAAO;AAAA,EACP,GACU6mB,KAAW,CAACxE,GAAQnE,MAAY;AACpC,IAAAmE,EAAO,IAAI,YAAYnE,EAAQ,GAAG;AAAA,EACxC,GACUo+J,KAAW,CAACj6J,GAAQnE,GAASvV,MAAU;AAC3C,IAAAyzK,GAAQ/5J,GAAQ1Z,CAAK,EAAE,KAAK,MAAM;AAChC,MAAAke,GAASxE,GAAQnE,CAAO;AAAA,IACzB,GAAE,CAAAle,MAAK;AACN,MAAA0mB,GAAS1mB,GAAGke,CAAO;AAAA,IAC3B,CAAO;AAAA,EACP,GACU0zF,KAAO,CAAC1zF,GAAS8I,MAAY;AACjC,IAAAN,GAASxI,GAAS8I,CAAO,GACzBH,GAASG,GAAS9I,CAAO;AAAA,EAC/B,GAEU0I,KAAU,CAACD,GAAQ7D,MAAa;AACpC,IAAAgyJ,GAAOhyJ,GAAU,CAAC91B,GAAG6B,MAAM;AACzB,YAAM1E,IAAI0E,MAAM,IAAI83B,IAAS7D,EAASj0B,IAAI,CAAC;AAC3C,MAAAwtL,GAAQlyL,GAAG6C,CAAC;AAAA,IACpB,CAAO;AAAA,EACP,GACUk6B,KAAS,CAAC7E,GAAQS,MAAa;AACnC,IAAAgyJ,GAAOhyJ,GAAU,CAAA91B,MAAK;AACpB,MAAA65B,GAASxE,GAAQr1B,CAAC;AAAA,IAC1B,CAAO;AAAA,EACP,GAEUm6B,KAAQ,CAAAjJ,MAAW;AACvB,IAAAA,EAAQ,IAAI,cAAc,IAC1B42J,GAAOqH,GAAWj+J,CAAO,GAAG,CAAAkJ,MAAS;AACnC,MAAAZ,GAASY,CAAK;AAAA,IACtB,CAAO;AAAA,EACP,GACUZ,KAAW,CAAAtI,MAAW;AAC1B,UAAMW,IAAMX,EAAQ;AACpB,IAAIW,EAAI,eAAe,QACrBA,EAAI,WAAW,YAAYA,CAAG;AAAA,EAEtC,GACUyI,KAAS,CAAAN,MAAW;AACxB,UAAMO,IAAW40J,GAAWn1J,CAAO;AACnC,IAAIO,EAAS,SAAS,KACpBX,GAAQI,GAASO,CAAQ,GAE3Bf,GAASQ,CAAO;AAAA,EACtB,GAEUmyB,KAAU,CAACf,GAAUC,MAAWr3B,GAAa,QAAQo3B,EAAS,IAAI,UAAUC,CAAM,CAAC,GACnFvtB,KAAU,CAAAstB,MAAYe,GAAQf,GAAU,EAAK,GAC7CvM,KAAO,CAAAuM,MAAYe,GAAQf,GAAU,EAAI,GACzCI,KAAY,CAACJ,GAAUtwC,MAAQ;AACnC,UAAM6X,IAAKqB,GAAa,QAAQlZ,CAAG,GAC7B21B,IAAa0a,GAAQC,CAAQ;AACnC,WAAAr5B,GAASY,GAAI8d,CAAU,GAChB9d;AAAA,EACb,GACU48J,KAAS,CAACnkI,GAAUtwC,MAAQ;AAChC,UAAM6X,IAAK64B,GAAUJ,GAAUtwC,CAAG,GAC5B00K,IAAgBL,GAAWtwI,GAAKuM,CAAQ,CAAC;AAC/C,WAAAlxB,GAAOvH,GAAI68J,CAAa,GACjB78J;AAAA,EACb,GACU88J,KAAW,CAACrkI,GAAUtwC,MAAQ;AAClC,UAAM6X,IAAK64B,GAAUJ,GAAUtwC,CAAG;AAClC,IAAAu0K,GAAQjkI,GAAUz4B,CAAE;AACpB,UAAM4H,IAAW40J,GAAW/jI,CAAQ;AACpC,WAAAlxB,GAAOvH,GAAI4H,CAAQ,GACnBf,GAAS4xB,CAAQ,GACVz4B;AAAA,EACb,GAEU+8J,KAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,GACUC,KAAiB,CAAAx1F,MAAc/2E,GAAWssK,IAAkBv1F,CAAU,GACtEy1F,KAAO,CAAC58F,GAAM68F,OAAa;AAAA,IAC/B,MAAA78F;AAAA,IACA,SAAA68F;AAAA,EACN,IACUC,KAAU,CAAC3sE,GAAK4sE,OAAY;AAAA,IAChC,KAAA5sE;AAAA,IACA,QAAA4sE;AAAA,EACN,IACUC,KAAS,CAAC9+J,GAAS0xF,GAASC,OAAa;AAAA,IAC7C,SAAA3xF;AAAA,IACA,SAAA0xF;AAAA,IACA,SAAAC;AAAA,EACN,IACUotE,KAAY,CAAC/+J,GAAS0xF,GAASC,GAASqtE,OAAW;AAAA,IACvD,SAAAh/J;AAAA,IACA,SAAA0xF;AAAA,IACA,SAAAC;AAAA,IACA,OAAAqtE;AAAA,EACN,IACUC,IAAW,CAACj/J,GAAS0xF,GAASC,GAASM,GAAK4sE,GAAQK,OAAc;AAAA,IACtE,SAAAl/J;AAAA,IACA,SAAA0xF;AAAA,IACA,SAAAC;AAAA,IACA,KAAAM;AAAA,IACA,QAAA4sE;AAAA,IACA,UAAAK;AAAA,EACN,IACUC,IAAY,CAACn/J,GAASqhE,GAAO+9F,OAAa;AAAA,IAC9C,SAAAp/J;AAAA,IACA,OAAAqhE;AAAA,IACA,SAAA+9F;AAAA,EACN,IACUC,KAAe,CAACr/J,GAASqhE,GAAO+9F,GAASJ,OAAW;AAAA,IACxD,SAAAh/J;AAAA,IACA,OAAAqhE;AAAA,IACA,SAAA+9F;AAAA,IACA,OAAAJ;AAAA,EACN,IACUM,KAAa,CAACt/J,GAASg/J,GAAOE,OAAc;AAAA,IAChD,SAAAl/J;AAAA,IACA,OAAAg/J;AAAA,IACA,UAAAE;AAAA,EACN,IACUK,KAAW,CAACv/J,GAASqhE,GAAO+9F,GAASJ,OAAW;AAAA,IACpD,SAAAh/J;AAAA,IACA,OAAAqhE;AAAA,IACA,SAAA+9F;AAAA,IACA,OAAAJ;AAAA,EACN,IACUhzJ,KAAS,CAACwzJ,GAAUC,GAAUC,GAAWC,OAAe;AAAA,IAC5D,UAAAH;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,EACN,IACUC,KAAY,CAAC5/J,GAAS2xF,GAASktE,OAAY;AAAA,IAC/C,SAAA7+J;AAAA,IACA,SAAA2xF;AAAA,IACA,QAAAktE;AAAA,EACN,IACUgB,KAAW,CAAC7/J,GAAS2+J,OAAa;AAAA,IACtC,SAAA3+J;AAAA,IACA,SAAA2+J;AAAA,EACN,IAEUl5J,KAAe,CAAAzB,MAAO2K,GAAmB3K,CAAG,KAAKrU,GAAcqU,EAAI,IAAI,IAAI,GAC3E0B,KAAY9V,GAAW,QAAQ,UAAU,YAAY,KAAKA,GAAW,KAAK,UAAU,WAAW,GAC/F+V,KAAgBrV,GAASoV,EAAS,GAClCE,KAAcF,KAAY,CAAAz5B,MAAK62B,GAAa,QAAQ72B,EAAE,IAAI,aAAa,IAAI83B,IAC3EgC,KAAgB,CAAA95B,MAAK;AACzB,UAAME,IAAIy5B,GAAY35B,CAAC;AACvB,WAAOw5B,GAAat5B,CAAC,IAAIilB,EAAS,KAAKjlB,CAAC,IAAIilB,EAAS;EAC3D,GACU4U,KAAgB,CAAA/5B,MAAK62B,GAAa,QAAQ72B,EAAE,IAAI,IAAI,GACpDg6B,KAAyB,CAAAC,MAAS;AACtC,QAAIP,GAAa,KAAMhW,GAAcuW,EAAM,MAAM,GAAG;AAClD,YAAMC,IAAKrD,GAAa,QAAQoD,EAAM,MAAM;AAC5C,UAAIu5G,GAAUt5G,CAAE,KAAKC,GAAiBD,CAAE,KAClCD,EAAM,YAAYA,EAAM,cAAc;AACxC,cAAMG,IAAeH,EAAM;AAC3B,YAAIG;AACF,iBAAOvS,EAAKuS,CAAY;AAAA,MAE3B;AAAA,IAEJ;AACD,WAAOjV,EAAS,KAAK8U,EAAM,MAAM;AAAA,EACvC,GACUE,KAAmB,CAAApG,MAAWrQ,GAAcqQ,EAAQ,IAAI,UAAU,GAElEsG,KAAS,CAAAtG,MAAW;AACxB,UAAMW,IAAM2yI,GAAOtzI,CAAO,IAAIA,EAAQ,IAAI,aAAaA,EAAQ;AAC/D,QAAyBW,KAAQ,QAAQA,EAAI,kBAAkB;AAC7D,aAAO;AAET,UAAM6E,IAAM7E,EAAI;AAChB,WAAOoF,GAAcjD,GAAa,QAAQnC,CAAG,CAAC,EAAE,KAAK,MAAM6E,EAAI,KAAK,SAAS7E,CAAG,GAAGxQ,GAASmW,IAAQN,EAAa,CAAC;AAAA,EACxH,GACU85J,IAAS,MAAMC,EAAUj9J,GAAa,QAAQ,QAAQ,CAAC,GACvDi9J,IAAY,CAAAv6J,MAAO;AACvB,UAAM3jB,IAAI2jB,EAAI,IAAI;AAClB,QAAI3jB,KAAM;AACR,YAAM,IAAI,MAAM,2BAA2B;AAE7C,WAAOihB,GAAa,QAAQjhB,CAAC;AAAA,EACnC,GAEUm+K,IAAc,CAAC7gK,GAAOtQ,GAAWyV,MAAWujE,GAASjvD,GAAQzZ,GAAOmF,CAAM,GAAGzV,CAAS,GACtFgW,KAAa,CAAC1F,GAAOtQ,MAAcg5E,GAASo2F,GAAW9+J,CAAK,GAAGtQ,CAAS,GACxEyd,KAAgB,CAACnN,GAAOtQ,MAAc;AAC1C,QAAI/E,IAAS,CAAA;AACb,WAAA8sK,GAAOqH,GAAW9+J,CAAK,GAAG,CAAArwB,MAAK;AAC7B,MAAI+f,EAAU/f,CAAC,MACbgb,IAASA,EAAO,OAAO,CAAChb,CAAC,CAAC,IAE5Bgb,IAASA,EAAO,OAAOwiB,GAAcx9B,GAAG+f,CAAS,CAAC;AAAA,IAC1D,CAAO,GACM/E;AAAA,EACb,GAEUm2K,KAAc,CAAC9gK,GAAOiE,GAAUkB,MAAW07J,EAAY7gK,GAAO,CAAAlzB,MAAKoyB,GAAKpyB,GAAGm3B,CAAQ,GAAGkB,CAAM,GAC5F+E,KAAW,CAAClK,GAAOiE,MAAayB,GAAW1F,GAAO,CAAAlzB,MAAKoyB,GAAKpyB,GAAGm3B,CAAQ,CAAC,GACxEmJ,KAAc,CAACpN,GAAOiE,MAAa26J,EAAM36J,GAAUjE,CAAK;AAE9D,MAAIoH,KAAoB,CAACtgB,GAAIugB,GAAUrH,GAAO9yB,GAAGi4B,MAC3Cre,EAAGkZ,GAAO9yB,CAAC,IACN+kB,EAAS,KAAK+N,CAAK,IACjBvP,GAAW0U,CAAM,KAAKA,EAAOnF,CAAK,IACpC/N,EAAS,SAEToV,EAASrH,GAAO9yB,GAAGi4B,CAAM;AAIpC,QAAMkI,KAAa,CAACrN,GAAOtQ,GAAWyV,MAAW;AAC/C,QAAItE,IAAUb,EAAM;AACpB,UAAMoF,IAAO3U,GAAW0U,CAAM,IAAIA,IAASpT;AAC3C,WAAO8O,EAAQ,cAAY;AACzB,MAAAA,IAAUA,EAAQ;AAClB,YAAMmG,IAAKrD,GAAa,QAAQ9C,CAAO;AACvC,UAAInR,EAAUsX,CAAE;AACd,eAAO/U,EAAS,KAAK+U,CAAE;AAClB,UAAI5B,EAAK4B,CAAE;AAChB;AAAA,IAEH;AACD,WAAO/U,EAAS;EACtB,GACUgW,KAAY,CAACjI,GAAOtQ,GAAWyV,MAE5BiC,GADI,CAAC11B,GAAG81B,MAASA,EAAK91B,CAAC,GACD27B,IAAYrN,GAAOtQ,GAAWyV,CAAM,GAE7DY,KAAU,CAAC/F,GAAOtQ,MAAc;AACpC,UAAMkB,IAAO,CAAA4S,MAAQ9T,EAAUiU,GAAa,QAAQH,CAAI,CAAC;AAEzD,WADe7K,EAAOqH,EAAM,IAAI,YAAYpP,CAAI,EAClC,IAAI+S,GAAa,OAAO;AAAA,EAC5C,GACUoE,KAAe,CAAC/H,GAAOtQ,MAAc;AACzC,UAAMkY,IAAU,CAAApE,MAAQ;AACtB,eAAShyB,IAAI,GAAGA,IAAIgyB,EAAK,WAAW,QAAQhyB,KAAK;AAC/C,cAAMk2B,IAAQ/D,GAAa,QAAQH,EAAK,WAAWhyB,CAAC,CAAC;AACrD,YAAIke,EAAUgY,CAAK;AACjB,iBAAOzV,EAAS,KAAKyV,CAAK;AAE5B,cAAMG,IAAMD,EAAQpE,EAAK,WAAWhyB,CAAC,CAAC;AACtC,YAAIq2B,EAAI;AACN,iBAAOA;AAAA,MAEV;AACD,aAAO5V,EAAS;IACxB;AACM,WAAO2V,EAAQ5H,EAAM,GAAG;AAAA,EAC9B,GAEUghE,KAAa,CAAChhE,GAAOiE,GAAUkB,MAAWkI,GAAWrN,GAAO,CAAAlzB,MAAKoyB,GAAKpyB,GAAGm3B,CAAQ,GAAGkB,CAAM,GAC1FuC,IAAQ,CAAC1H,GAAOiE,MAAa8B,GAAQ/F,GAAO,CAAAlzB,MAAKoyB,GAAKpyB,GAAGm3B,CAAQ,CAAC,GAClE80B,IAAa,CAAC/4B,GAAOiE,MAAaI,GAAIJ,GAAUjE,CAAK,GACrDovE,KAAY,CAACpvE,GAAOiE,GAAUkB,MAE3BiC,GADI,CAACvG,GAASoD,MAAa/E,GAAK2B,GAASoD,CAAQ,GAC3B+8D,IAAYhhE,GAAOiE,GAAUkB,CAAM,GAG5Dre,KAAK,CAACqY,GAAKC,GAAK5K,IAAanD,OAAiB8N,EAAI,OAAO,CAAAE,MAAQ7K,EAAW6K,GAAMD,CAAG,CAAC,GACtFI,KAAM,CAAArW,MAAO;AACjB,UAAMnc,IAAI,CAAA,GACJyyB,IAAO,CAAA9vB,MAAK;AAChB,MAAA3C,EAAE,KAAK2C,CAAC;AAAA,IAChB;AACM,aAAS6B,IAAI,GAAGA,IAAI2X,EAAI,QAAQ3X;AAC9B,MAAA2X,EAAI3X,CAAC,EAAE,KAAKiuB,CAAI;AAElB,WAAOzyB;AAAA,EACb,GACU+zL,KAAW,CAAC7zL,GAAGyE,MAAyBzE,KAAM,OAAOyE,EAAEzE,CAAC,IAAI+kB,EAAS,KAAI,GACzE4N,KAAS,CAACnd,GAAGxV,MAAMwV,IAAIuP,EAAS,KAAK/kB,CAAC,IAAI+kB,EAAS,KAAI,GAEvDqI,KAAa,CAACF,GAAKG,GAAQC,MAAUD,MAAW,MAAMH,EAAI,UAAUG,EAAO,UAAUH,EAAI,OAAOI,GAAOA,IAAQD,EAAO,MAAM,MAAMA,GAClIiK,KAAW,CAACpK,GAAKG,GAAQC,IAAQ,GAAGK,MAAQ;AAChD,UAAMC,IAAMV,EAAI,QAAQG,GAAQC,CAAK;AACrC,WAAIM,MAAQ,KACHxK,GAAYuK,CAAG,IAAI,KAAOC,IAAMP,EAAO,UAAUM,IAEjD;AAAA,EAEf,GACUF,KAAa,CAACP,GAAKM,MAChBJ,GAAWF,GAAKM,GAAQ,CAAC,GAE5BK,KAAW,CAACX,GAAKY,MACdV,GAAWF,GAAKY,GAAQZ,EAAI,SAASY,EAAO,MAAM,GAGrDunC,MADQ,OAAK,CAAA7wD,MAAKA,EAAE,QAAQ,GAAG,EAAE,GACpB,YAAY,GACzB2pB,KAAa,CAAA3pB,MAAKA,EAAE,SAAS,GAC7BsvL,KAAU,CAAAz2K,MAAS;AACvB,UAAMoR,IAAM,WAAWpR,CAAK;AAC5B,WAAO,MAAMoR,CAAG,IAAI1J,EAAS,KAAI,IAAKA,EAAS,KAAK0J,CAAG;AAAA,EAC7D,GAEU2M,KAAc,CAAA9G,MAAOA,EAAI,UAAU,UAAa/Q,GAAW+Q,EAAI,MAAM,gBAAgB,GAErF+G,KAAc,CAAC/G,GAAKgH,GAAUje,MAAU;AAC5C,QAAI,CAAC0F,GAAS1F,CAAK;AACjB,oBAAQ,MAAM,sCAAsCie,GAAU,aAAaje,GAAO,eAAeiX,CAAG,GAC9F,IAAI,MAAM,iCAAiCjX,CAAK;AAExD,IAAI+d,GAAY9G,CAAG,KACjBA,EAAI,MAAM,YAAYgH,GAAUje,CAAK;AAAA,EAE7C,GACUke,KAAiB,CAACjH,GAAKgH,MAAa;AACxC,IAAIF,GAAY9G,CAAG,KACjBA,EAAI,MAAM,eAAegH,CAAQ;AAAA,EAEzC,GACU+B,KAAQ,CAAC1J,GAAS2H,GAAUje,MAAU;AAC1C,UAAMiX,IAAMX,EAAQ;AACpB,IAAA0H,GAAY/G,GAAKgH,GAAUje,CAAK;AAAA,EACtC,GACUoe,KAAS,CAAC9H,GAAS+H,MAAQ;AAC/B,UAAMpH,IAAMX,EAAQ;AACpB,IAAAk4J,GAAOnwJ,GAAK,CAACjmB,GAAG9E,MAAM;AACpB,MAAA0qB,GAAY/G,GAAK3jB,GAAG8E,CAAC;AAAA,IAC7B,CAAO;AAAA,EACP,GACUuT,KAAQ,CAAC2K,GAAS2H,MAAa;AACnC,UAAMhH,IAAMX,EAAQ,KAEd7zB,IADS,OAAO,iBAAiBw0B,CAAG,EACzB,iBAAiBgH,CAAQ;AAC1C,WAAOx7B,MAAM,MAAM,CAACm6B,GAAOtG,CAAO,IAAIiI,GAAkBtH,GAAKgH,CAAQ,IAAIx7B;AAAA,EAC/E,GACU87B,KAAoB,CAACtH,GAAKgH,MAAaF,GAAY9G,CAAG,IAAIA,EAAI,MAAM,iBAAiBgH,CAAQ,IAAI,IACjGy4J,KAAW,CAACpgK,GAAS2H,MAAa;AACtC,UAAMhH,IAAMX,EAAQ,KACdmI,IAAMF,GAAkBtH,GAAKgH,CAAQ;AAC3C,WAAOvW,EAAS,KAAK+W,CAAG,EAAE,OAAO,CAAAh8B,MAAKA,EAAE,SAAS,CAAC;AAAA,EACxD,GACUg9B,KAAW,CAACnJ,GAAS2H,MAAa;AACtC,UAAMhH,IAAMX,EAAQ;AACpB,IAAA4H,GAAejH,GAAKgH,CAAQ,GACxB1hB,GAAG+a,EAAOhB,GAAS,OAAO,EAAE,IAAI0hC,EAAI,GAAG,EAAE,KAC3Cv/B,EAASnC,GAAS,OAAO;AAAA,EAEjC,GACUqgK,KAAS,CAACC,GAAQrlK,MAAW;AACjC,UAAMslK,IAAYD,EAAO,KACnBE,IAAYvlK,EAAO;AACzB,IAAIwM,GAAY84J,CAAS,KAAK94J,GAAY+4J,CAAS,MACjDA,EAAU,MAAM,UAAUD,EAAU,MAAM;AAAA,EAElD,GAEUE,KAAe,CAAClpH,GAAMpiD,GAAM29H,IAAW,MAAM9xH,EAAOu2C,GAAMpiD,CAAI,EAAE,IAAI,CAAAzL,MAAS,SAASA,GAAO,EAAE,CAAC,EAAE,MAAMopI,CAAQ,GAChHvhC,KAAU,CAACh6C,GAAM1sD,MAAS41K,GAAalpH,GAAM1sD,GAAM,CAAC,GACpD61K,KAAa,CAAAC,MACblgK,GAAM,KAAK,EAAEkgK,CAAS,IACjBF,GAAaE,GAAW,QAAQ,CAAC,IAAI,IAErCpvE,GAAQovE,GAAW,SAAS,IAAI,GAGrCC,KAAa,CAAArpH,MAAQg6C,GAAQh6C,GAAM,SAAS,IAAI,GAChDspH,KAAc,CAAC7gK,GAAS2H,MAAa,SAAStS,GAAM2K,GAAS2H,CAAQ,GAAG,EAAE,GAC1Em5J,KAAWxwK,GAAS,EAAE,GACtBywK,KAAYzwK,GAAS,EAAE,GAEvB06H,KAAa,CAAC7rH,GAAOiE,MAClB6nH,GAAiB9rH,GAAOiE,GAAUjS,EAAM,GAE3C85H,KAAmB,CAAC9rH,GAAOiE,GAAUvU,MAClC+b,GAAOqzJ,GAAW9+J,CAAK,GAAG,CAAArwB,MAC3BuvB,GAAKvvB,GAAGs0B,CAAQ,IACXvU,EAAU/f,CAAC,IAAI,CAACA,CAAC,IAAI,CAAA,IAErBm8I,GAAiBn8I,GAAGs0B,GAAUvU,CAAS,CAEjD,GAGG0hB,KAAS,CAAC46G,GAAMnrH,GAASsE,IAASpT,OAAU;AAChD,QAAIoT,EAAOtE,CAAO;AAChB,aAAO5O,EAAS;AAElB,QAAIc,GAAWi5H,GAAMh2H,GAAK6K,CAAO,CAAC;AAChC,aAAO5O,EAAS,KAAK4O,CAAO;AAE9B,UAAMorH,IAAqB,CAAAn6G,MAAO5S,GAAK4S,GAAK,OAAO,KAAK3M,EAAO2M,CAAG;AAClE,WAAOkvD,GAAWngE,GAASmrH,EAAK,KAAK,GAAG,GAAGC,CAAkB;AAAA,EACnE,GACU7zE,KAAO,CAACv3C,GAASsE,MAAWiM,GAAO;AAAA,IACvC;AAAA,IACA;AAAA,EACN,GAAOvQ,GAASsE,CAAM,GACZ08J,KAAU,CAAAx6J,MAAYwkH,GAAWxkH,GAAU,OAAO,GAClDy6J,KAAY,CAAAz6J,MACZnI,GAAKmI,GAAU,UAAU,IACpB6C,GAAS7C,GAAU,KAAK,IAExBoE,GAAOs2J,GAAa16J,CAAQ,GAAG,CAAA26J,MAAe93J,GAAS83J,GAAa,KAAK,CAAC,GAG/E7gG,KAAQ,CAACtgE,GAASsE,MAAWiqE,GAAUvuE,GAAS,SAASsE,CAAM,GAC/D88J,KAAS,CAAA56J,MAAYwkH,GAAWxkH,GAAU,IAAI,GAC9C06J,KAAe,CAAA16J,MAAY85D,GAAM95D,CAAQ,EAAE,KAAKlW,GAAS,CAAE,CAAA,GAAG,CAAAgwE,MAASj3D,GAASi3D,GAAO,UAAU,CAAC,GAElG+gG,KAAsB,CAAC/hH,GAAO+sG,MAAen2J,GAAMopD,GAAO,CAAA2yC,MAAO;AACrE,QAAI98F,GAAK88F,CAAG,MAAM,YAAY;AAC5B,YAAM5wB,IAAQnrE,GAAM+qK,GAAUhvE,CAAG,GAAG,CAAA4sE,MAAU;AAC5C,cAAMltE,IAAU8uE,GAAa5B,GAAQ,QAAQ,CAAC;AAC9C,eAAOC,GAAOD,GAAQ,GAAGltE,CAAO;AAAA,MAC1C,CAAS;AACD,aAAOwtE,EAAUltE,GAAK5wB,GAAO,UAAU;AAAA,IAC/C,OAAa;AACL,YAAMA,IAAQnrE,GAAM8qK,GAAQ/uE,CAAG,GAAG,CAAA16C,MAAQ;AACxC,cAAMm6C,IAAU+uE,GAAalpH,GAAM,WAAW,CAAC,GACzCo6C,IAAU8uE,GAAalpH,GAAM,WAAW,CAAC;AAC/C,eAAOunH,GAAOvnH,GAAMm6C,GAASC,CAAO;AAAA,MAC9C,CAAS;AACD,aAAOwtE,EAAUltE,GAAK5wB,GAAOgrF,EAAWp6D,CAAG,CAAC;AAAA,IAC7C;AAAA,EACP,CAAK,GACKqvE,KAAmB,CAAAtpK,MAASmM,GAAOnM,CAAK,EAAE,IAAI,CAAAmM,MAAU;AAC5D,UAAM8kE,IAAa9zE,GAAKgP,CAAM;AAC9B,WAAOs6J,GAAex1F,CAAU,IAAIA,IAAa;AAAA,EACvD,CAAK,EAAE,MAAM,OAAO,GACVs4F,KAAc,CAAAjhG,MAAS;AAC3B,UAAMwB,IAAOs/F,GAAO9gG,CAAK,GAEnBhhB,IAAQ;AAAA,MACZ,GAFqB4hH,GAAa5gG,CAAK;AAAA,MAGvC,GAAGwB;AAAA,IACX;AACM,WAAOu/F,GAAoB/hH,GAAOgiH,EAAgB;AAAA,EACxD,GACUE,KAAiB,CAACliH,GAAO8/G,MAAYiC,GAAoB/hH,GAAO,MAAM8/G,CAAO,GAE7EtoK,KAAS,CAAAhmB,MAAK;AAClB,QAAIimB,IAAS,IACT5qB;AACJ,WAAO,IAAIsgB,OACJsK,MACHA,IAAS,IACT5qB,IAAI2E,EAAE,MAAM,MAAM2b,CAAI,IAEjBtgB;AAAA,EAEf,GAEU6qB,KAAa,CAAC7Q,GAAI8Q,GAASC,GAAWC,MAAe;AACzD,UAAMC,IAASjR,EAAG,MAAO,KAAI,QAAQ,KAAK+Q,CAAS,MAAM,IACnDG,IAAWlR,EAAG,MAAO,KAAI,CAACiR,GAC1BE,IAAWnR,EAAG,MAAO,KAAIA,EAAG,UAAS,GACrCoR,IAAUD,KAAYH,EAAW,kBAAkB,GACnDK,IAAWJ,KAAU,CAACC,KAAYC,KAAYH,EAAW,0BAA0B,GACnFM,KAAUJ,KAAYC,KAAY,CAACE,GACnCE,KAAaT,EAAQ,SAAQ,KAAM9Q,EAAG,MAAO,KAAI,UAAU,KAAK+Q,CAAS,MAAM,IAC/ES,KAAY,CAACF,MAAW,CAACD,KAAY,CAACE;AAC5C,WAAO;AAAA,MACL,QAAQpH,GAAS8G,CAAM;AAAA,MACvB,UAAU9G,GAAS+G,CAAQ;AAAA,MAC3B,UAAU/G,GAASkH,CAAQ;AAAA,MAC3B,SAASlH,GAASmH,EAAO;AAAA,MACzB,SAASnH,GAASiH,CAAO;AAAA,MACzB,WAAWpR,EAAG;AAAA,MACd,OAAOA,EAAG;AAAA,MACV,WAAWmK,GAASoH,EAAU;AAAA,MAC9B,WAAWpH,GAASqH,EAAS;AAAA,IACrC;AAAA,EACA,GAEUC,KAAa,CAACC,GAAShnB,MAAM;AACjC,aAASF,IAAI,GAAGA,IAAIknB,EAAQ,QAAQlnB,KAAK;AACvC,YAAM7B,IAAI+oB,EAAQlnB,CAAC;AACnB,UAAI7B,EAAE,KAAK+B,CAAC;AACV,eAAO/B;AAAA,IAEV;AAAA,EAEP,GACUw8E,KAAO,CAACzzD,GAASE,MAAU;AAC/B,UAAM5rB,IAAIyrB,GAAWC,GAASE,CAAK;AACnC,QAAI,CAAC5rB;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,MACjB;AAEM,UAAM6rB,IAAQ,CAAArnB,MACL,OAAOonB,EAAM,QAAQ5rB,GAAG,MAAMwE,CAAC,CAAC;AAEzC,WAAO+qB,EAAK1D,EAAM,CAAC,GAAGA,EAAM,CAAC,CAAC;AAAA,EACpC,GACUE,KAAW,CAACC,GAAgBJ,MAAU;AAC1C,UAAMK,IAAe,OAAOL,CAAK,EAAE,YAAW;AAC9C,WAAII,EAAe,WAAW,IACrBE,GAAS,IAEXizD,GAAKnzD,GAAgBC,CAAY;AAAA,EAC9C,GACUC,KAAY,MACTqD,EAAK,GAAG,CAAC,GAEZA,IAAO,CAACpD,GAAOC,OACZ;AAAA,IACL,OAAAD;AAAA,IACA,OAAAC;AAAA,EACR,IAEUC,KAAU;AAAA,IACd,IAAIkD;AAAA,IACJ,QAAQxD;AAAA,IACR,SAASG;AAAA,EACf,GAEUI,KAAkB,CAACC,GAAUC,MAC1B1E,GAAQ0E,EAAc,QAAQ,CAAAC,MAAW;AAC9C,UAAMC,IAAUD,EAAQ,MAAM,YAAW;AACzC,WAAOd,EAAOY,GAAU,CAAAzB,MAAW;AACjC,UAAIte;AACJ,aAAOkgB,QAAclgB,IAAKse,EAAQ,WAAW,QAAQte,MAAO,SAAS,SAASA,EAAG,YAAa;AAAA,IACxG,CAAS,EAAE,IAAI,CAAAmgB,OAAS;AAAA,MACd,SAASA,EAAK;AAAA,MACd,SAASN,GAAQ,GAAG,SAASI,EAAQ,SAAS,EAAE,GAAG,CAAC;AAAA,IACrD,EAAC;AAAA,EACV,CAAO,GAGGG,KAAW,CAACC,GAAY9B,MAAc;AAC1C,UAAMa,IAAQ,OAAOb,CAAS,EAAE,YAAW;AAC3C,WAAOY,EAAOkB,GAAY,CAAAC,MACjBA,EAAU,OAAOlB,CAAK,CAC9B;AAAA,EACP,GACUmB,KAAgB,CAACR,GAAUxB,MACxB6B,GAASL,GAAUxB,CAAS,EAAE,IAAI,CAAAD,MAAW;AAClD,UAAMkC,IAAUX,GAAQ,OAAOvB,EAAQ,gBAAgBC,CAAS;AAChE,WAAO;AAAA,MACL,SAASD,EAAQ;AAAA,MACjB,SAAAkC;AAAA,IACV;AAAA,EACA,CAAO,GAEGC,KAAW,CAACC,GAAMnC,MACf6B,GAASM,GAAMnC,CAAS,EAAE,IAAI,CAAA/Q,MAAM;AACzC,UAAMgT,IAAUX,GAAQ,OAAOrS,EAAG,gBAAgB+Q,CAAS;AAC3D,WAAO;AAAA,MACL,SAAS/Q,EAAG;AAAA,MACZ,SAAAgT;AAAA,IACV;AAAA,EACA,CAAO,GAGG4B,KAAqB,uCACrBC,KAAgB,CAAAC,MACb,CAAAC,MACEyI,GAASzI,GAAUD,CAAM,GAG9BvC,KAAW;AAAA,IACf;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB,CAAC,gCAAgC;AAAA,MACjD,QAAQ,CAAAwC,MACCyI,GAASzI,GAAU,OAAO,KAAKyI,GAASzI,GAAU,QAAQ,KAAKyI,GAASzI,GAAU,QAAQ,KAAKyI,GAASzI,GAAU,aAAa;AAAA,IAEzI;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,gBAAgB;AAAA,QACd;AAAA,QACAH;AAAA,MACD;AAAA,MACD,QAAQ,CAAAG,MACCyI,GAASzI,GAAU,QAAQ,KAAK,CAACyI,GAASzI,GAAU,aAAa;AAAA,IAE3E;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,MACD;AAAA,MACD,QAAQ,CAAAA,MACCyI,GAASzI,GAAU,MAAM,KAAKyI,GAASzI,GAAU,SAAS;AAAA,IAEpE;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB;AAAA,QACdH;AAAA,QACA;AAAA,MACD;AAAA,MACD,QAAQC,GAAc,OAAO;AAAA,IAC9B;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB,CAAC,qCAAqC;AAAA,MACtD,QAAQA,GAAc,SAAS;AAAA,IAChC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB;AAAA,QACdD;AAAA,QACA;AAAA,MACD;AAAA,MACD,QAAQ,CAAAG,OACEyI,GAASzI,GAAU,QAAQ,KAAKyI,GAASzI,GAAU,SAAS,MAAMyI,GAASzI,GAAU,aAAa;AAAA,IAE7G;AAAA,EACP,GACU7B,KAAO;AAAA,IACX;AAAA,MACE,MAAM;AAAA,MACN,QAAQ2B,GAAc,KAAK;AAAA,MAC3B,gBAAgB,CAAC,uCAAuC;AAAA,IACzD;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,CAAAE,MACCyI,GAASzI,GAAU,QAAQ,KAAKyI,GAASzI,GAAU,MAAM;AAAA,MAElE,gBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQF,GAAc,SAAS;AAAA,MAC/B,gBAAgB,CAAC,mCAAmC;AAAA,IACrD;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQA,GAAc,UAAU;AAAA,MAChC,gBAAgB,CAAC,qCAAqC;AAAA,IACvD;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQA,GAAc,OAAO;AAAA,MAC7B,gBAAgB,CAAE;AAAA,IACnB;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQA,GAAc,OAAO;AAAA,MAC7B,gBAAgB,CAAE;AAAA,IACnB;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQA,GAAc,SAAS;AAAA,MAC/B,gBAAgB,CAAE;AAAA,IACnB;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,QAAQA,GAAc,MAAM;AAAA,MAC5B,gBAAgB,CAAC,iCAAiC;AAAA,IACnD;AAAA,EACP,GACUG,KAAe;AAAA,IACnB,UAAU7K,GAASoI,EAAQ;AAAA,IAC3B,MAAMpI,GAAS+I,EAAI;AAAA,EACzB,GAEU+B,KAAO,QACPC,KAAW,YACXviB,KAAK,MACLwiB,KAAQ,SACRC,KAAU,WACVC,KAAS,UACTC,KAAY,MACTc,GAAK;AAAA,IACV,SAAS;AAAA,IACT,SAAS/D,GAAQ,QAAS;AAAA,EAClC,CAAO,GAEG+D,KAAO,CAAAzD,MAAQ;AACnB,UAAM6C,IAAU7C,EAAK,SACfK,IAAUL,EAAK,SACf8C,IAAY,CAAAzG,MAAQ,MAAMwG,MAAYxG;AAC5C,WAAO;AAAA,MACL,SAAAwG;AAAA,MACA,SAAAxC;AAAA,MACA,QAAQyC,EAAUR,EAAI;AAAA,MACtB,YAAYQ,EAAUP,EAAQ;AAAA,MAC9B,MAAMO,EAAU9iB,EAAE;AAAA,MAClB,SAAS8iB,EAAUN,EAAK;AAAA,MACxB,WAAWM,EAAUL,EAAO;AAAA,MAC5B,UAAUK,EAAUJ,EAAM;AAAA,IAClC;AAAA,EACA,GACUK,KAAU;AAAA,IACd,SAASJ;AAAA,IACT,IAAIc;AAAA,IACJ,MAAMjM,GAAS8K,EAAI;AAAA,IACnB,UAAU9K,GAAS+K,EAAQ;AAAA,IAC3B,IAAI/K,GAASxX,EAAE;AAAA,IACf,OAAOwX,GAASgL,EAAK;AAAA,IACrB,SAAShL,GAASiL,EAAO;AAAA,IACzB,QAAQjL,GAASkL,EAAM;AAAA,EAC7B,GAEUM,KAAU,WACVC,KAAM,OACNC,KAAU,WACVC,KAAQ,SACRC,KAAQ,SACRC,KAAU,WACVC,KAAU,WACVC,KAAW,YACXC,KAAU,MACPmF,GAAG;AAAA,IACR,SAAS;AAAA,IACT,SAASjJ,GAAQ,QAAS;AAAA,EAClC,CAAO,GAEGiJ,KAAK,CAAA3I,MAAQ;AACjB,UAAM6C,IAAU7C,EAAK,SACfK,IAAUL,EAAK,SACf0D,IAAO,CAAArH,MAAQ,MAAMwG,MAAYxG;AACvC,WAAO;AAAA,MACL,SAAAwG;AAAA,MACA,SAAAxC;AAAA,MACA,WAAWqD,EAAKV,EAAO;AAAA,MACvB,OAAOU,EAAKT,EAAG;AAAA,MACf,WAAWS,EAAKR,EAAO;AAAA,MACvB,SAASQ,EAAKN,EAAK;AAAA,MACnB,SAASM,EAAKP,EAAK;AAAA,MACnB,WAAWO,EAAKL,EAAO;AAAA,MACvB,WAAWK,EAAKJ,EAAO;AAAA,MACvB,YAAYI,EAAKH,EAAQ;AAAA,IACjC;AAAA,EACA,GACUI,KAAkB;AAAA,IACtB,SAAAH;AAAA,IACA,IAAAmF;AAAA,IACA,SAASnR,GAASwL,EAAO;AAAA,IACzB,KAAKxL,GAASyL,EAAG;AAAA,IACjB,SAASzL,GAAS0L,EAAO;AAAA,IACzB,OAAO1L,GAAS2L,EAAK;AAAA,IACrB,OAAO3L,GAAS4L,EAAK;AAAA,IACrB,SAAS5L,GAAS6L,EAAO;AAAA,IACzB,SAAS7L,GAAS8L,EAAO;AAAA,IACzB,UAAU9L,GAAS+L,EAAQ;AAAA,EACjC,GAcUK,KAAoB,EAAE,QAZX,CAACxF,GAAWyF,GAAkBxF,MAAe;AAC5D,UAAMuB,IAAWyC,GAAa,YACxB9B,IAAO8B,GAAa,QACpBlE,IAAU0F,EAAiB,KAAK,CAAAhE,MAAiBF,GAAgBC,GAAUC,CAAa,CAAC,EAAE,QAAQ,MAAMO,GAAcR,GAAUxB,CAAS,CAAC,EAAE,KAAK2E,GAAQ,SAASA,GAAQ,EAAE,GAC7K1V,IAAKiT,GAASC,GAAMnC,CAAS,EAAE,KAAKuF,GAAgB,SAASA,GAAgB,EAAE,GAC/EG,IAAa5F,GAAW7Q,GAAI8Q,GAASC,GAAWC,CAAU;AAChE,WAAO;AAAA,MACL,SAAAF;AAAA,MACA,IAAA9Q;AAAA,MACA,YAAAyW;AAAA,IACR;AAAA,EACA,KAGUzF,KAAa,CAAA0F,MAAS,OAAO,WAAWA,CAAK,EAAE;AACrD,MAAIuoI,KAAWtuI,GAAO,MAAM4F,GAAkB,OAAO,UAAU,WAAWtL,EAAS,KAAK,UAAU,aAAa,GAAG+F,EAAU,CAAC;AAC7H,QAAM4F,KAAW,MAAMqoI,MAEjBq8B,KAAY,CAACtsK,GAAMw1D,MAAc;AACrC,UAAM56C,IAAM,CAAC/P,GAAS/rB,MAAM;AAC1B,UAAI,CAAC4b,GAAS5b,CAAC,KAAK,CAACA,EAAE,MAAM,UAAU;AACrC,cAAM,IAAI,MAAMkhB,IAAO,0DAA0DlhB,CAAC;AAEpF,YAAM0sB,KAAMX,EAAQ;AACpB,MAAIyH,GAAY9G,EAAG,MACjBA,GAAI,MAAMxL,CAAI,IAAIlhB,IAAI;AAAA,IAEhC,GACY27B,IAAM,CAAA5P,MAAW;AACrB,YAAM7zB,IAAIw+E,EAAU3qD,CAAO;AAC3B,UAAI7zB,KAAK,KAAKA,MAAM,MAAM;AACxB,cAAM47B,KAAM1S,GAAM2K,GAAS7K,CAAI;AAC/B,eAAO,WAAW4S,EAAG,KAAK;AAAA,MAC3B;AACD,aAAO57B;AAAA,IACf,GACY49B,IAAW6F,GACXg7C,IAAY,CAAC5qD,GAAS6qD,MAAeh4D,GAAMg4D,GAAY,CAACj4D,IAAK+U,OAAa;AAC9E,YAAM8lB,KAAMp4B,GAAM2K,GAAS2H,EAAQ,GAC7Bje,KAAQ+jC,OAAQ,SAAY,IAAI,SAASA,IAAK,EAAE;AACtD,aAAO,MAAM/jC,EAAK,IAAIkJ,KAAMA,KAAMlJ;AAAA,IACnC,GAAE,CAAC;AAMJ,WAAO;AAAA,MACL,KAAAqmB;AAAA,MACA,KAAAH;AAAA,MACA,UAAA7F;AAAA,MACA,WAAA6gD;AAAA,MACA,KAVU,CAAC5qD,GAAStW,GAAOmhE,OAAe;AAC1C,cAAMC,KAAuBF,EAAU5qD,GAAS6qD,EAAU;AAE1D,eADoBnhE,IAAQohE,KAAuBphE,IAAQohE,KAAuB;AAAA,MAE1F;AAAA,IAOA;AAAA,EACA,GAEU3/D,KAAW,CAACu2K,GAAI5uC,MAAaqtC,GAAQuB,CAAE,EAAE,MAAM5uC,CAAQ,GACvDrtB,KAAU,CAACzlG,GAAS7K,GAAM29H,MAAa3nI,GAASkK,GAAM2K,GAAS7K,CAAI,GAAG29H,CAAQ,GAC9E6uC,KAAqB,CAAC3hK,GAASuuB,GAAMqzI,GAAOC,MAAU;AAC1D,UAAMC,IAAer8D,GAAQzlG,GAAS,WAAY4hK,CAAO,IAAG,CAAC,GACvDG,IAAet8D,GAAQzlG,GAAS,WAAY6hK,CAAO,IAAG,CAAC,GACvDG,IAAcv8D,GAAQzlG,GAAS,UAAW4hK,CAAO,UAAS,CAAC,GAC3DK,IAAcx8D,GAAQzlG,GAAS,UAAW6hK,CAAO,UAAS,CAAC;AACjE,WAAOtzI,IAAOuzI,IAAeC,IAAeC,IAAcC;AAAA,EAChE,GACUC,KAAqB,CAACliK,GAASmiK,MAAc;AACjD,UAAMxhK,IAAMX,EAAQ,KACdiM,IAAQtL,EAAI,sBAAuB,EAAC,SAASA,EAAI;AACvD,WAAOwhK,MAAc,eAAel2J,IAAQ01J,GAAmB3hK,GAASiM,GAAO,QAAQ,OAAO;AAAA,EACpG,GACUm2J,KAAc,CAAApiK,MAAWylG,GAAQzlG,GAAS,UAAUA,EAAQ,IAAI,YAAY,GAC5EgyF,KAAW,CAAAhyF,MAAWylG,GAAQzlG,GAAS,SAASA,EAAQ,IAAI,WAAW,GACvEqiK,KAAgB,CAAAriK,MAAWkiK,GAAmBliK,GAAS,aAAa,GAEpEsiK,KAAQb,GAAU,SAAS,CAAAzhK,MAAWA,EAAQ,IAAI,WAAW,GAC7De,KAAQ,CAAAf,MAAWsiK,GAAM,IAAItiK,CAAO,GACpCuiK,KAAa,CAAAviK,MAAWsiK,GAAM,SAAStiK,CAAO,GAC9CwiK,KAAWH,IACXI,KAAezwE,IAEf0wE,KAAW,CAACC,GAASl4K,GAAO42E,MAAU;AAC1C,UAAMuhG,IAAgBD,EAAQ,OACxBpwJ,IAASqwJ,EAAc,MAAM,GAAGn4K,CAAK,GACrCq3C,IAAQ8gI,EAAc,MAAMn4K,CAAK,GACjCo4K,IAAWtwJ,EAAO,OAAO8uD,CAAK,EAAE,OAAOv/B,CAAK;AAClD,WAAOghI,GAASH,GAASE,CAAQ;AAAA,EACvC,GACUE,KAAU,CAACJ,GAASl4K,GAAO8sD,MAASmrH,GAASC,GAASl4K,GAAO,CAAC8sD,CAAI,CAAC,GACnEyrH,KAAa,CAACL,GAASl4K,GAAO8sD,MAAS;AAC3C,UAAM8pB,IAAQshG,EAAQ;AACtB,IAAAthG,EAAM52E,CAAK,IAAI8sD;AAAA,EACrB,GACUurH,KAAW,CAACH,GAASthG,MAAUk+F,GAASoD,EAAQ,SAASthG,GAAOshG,EAAQ,SAASA,EAAQ,KAAK,GAC9FM,KAAW,CAACN,GAAS7xL,MAAM;AAC/B,UAAMuwF,IAAQshG,EAAQ,OAChBx2L,IAAI+pB,GAAMmrE,GAAOvwF,CAAC;AACxB,WAAOyuL,GAASoD,EAAQ,SAASx2L,GAAGw2L,EAAQ,SAASA,EAAQ,KAAK;AAAA,EACxE,GACUO,KAAU,CAACP,GAASl4K,MAAUk4K,EAAQ,MAAMl4K,CAAK,GACjD04K,KAAiB,CAACR,GAASl4K,MAAUy4K,GAAQP,GAASl4K,CAAK,EAAE,SAC7D24K,KAAa,CAAAT,MAAWA,EAAQ,MAAM,QACtCU,KAAqB,CAAA3E,MAAQ;AACjC,UAAM50K,IAASonI,GAAUwtC,GAAM,CAAAzsE,MAAOA,EAAI,YAAY,UAAU;AAChE,WAAO;AAAA,MACL,MAAMnoG,EAAO;AAAA,MACb,MAAMA,EAAO;AAAA,IACrB;AAAA,EACA,GACU6D,KAAQ,CAACg1K,GAASW,GAAUC,MAAc;AAC9C,UAAMV,IAAW3sK,GAAMysK,EAAQ,OAAOY,CAAS;AAC/C,WAAOhE,GAAS+D,EAASX,EAAQ,OAAO,GAAGE,GAAUF,EAAQ,SAAS,EAAI;AAAA,EAChF,GAEUa,KAAkB,4BAClBC,KAA4B,CAAAnjG,MAASt/D,EAAOs/D,GAAOkjG,EAAe,EAAE,KAAK,CAAAE,MAAgBtyK,EAAS,KAAKsyK,EAAa,MAAM,MAAM,CAAC,CAAC,EAAE,IAAI,CAAAC,MAAclwK,EAAYkwK,GAAYxyK,EAAM,CAAC,GACrLyyK,KAA2B,CAAAlF,MAAQ;AACvC,UAAMmF,IAAShxK,GAAMwwK,GAAmB3E,CAAI,EAAE,MAAM,CAAC9rK,GAAKq/F,OACxD2kE,GAAO3kE,EAAI,OAAO,CAAC16C,GAAMt9C,MAAQ;AAC/B,MAAIs9C,EAAK,aACP3kD,EAAIqH,CAAG,IAAI;AAAA,IAEvB,CAAS,GACMrH,IACN,CAAE,CAAA,GACCkxK,IAAY5uK,GAAW2uK,GAAQ,CAAC3/I,GAAM5uB,MAAQ,SAASA,GAAK,EAAE,CAAC;AACrE,WAAO7H,EAAOq2K,CAAS;AAAA,EAC7B,GAEUxuK,KAAM,CAAC28F,GAAK4sE,MACT5sE,IAAM,MAAM4sE,GAEfkF,KAAQ,CAACC,GAAW/xE,GAAK4sE,MAAWztK,EAAS,KAAK4yK,EAAU,OAAO1uK,GAAI28F,GAAK4sE,CAAM,CAAC,CAAC,GACpFoF,KAAW,CAACD,GAAW3tK,GAAM1C,MAAe;AAChD,UAAMq1D,IAAWk7G,GAAYF,GAAW,CAAAlF,MAC/BnrK,EAAW0C,GAAMyoK,EAAO,OAAO,CACvC;AACD,WAAO91G,EAAS,SAAS,IAAI53D,EAAS,KAAK43D,EAAS,CAAC,CAAC,IAAI53D,EAAS,KAAI;AAAA,EAC7E,GACU8yK,KAAc,CAACF,GAAWn1K,MAAc;AAC5C,UAAM+B,IAAMga,GAAOo5J,EAAU,KAAK,CAAA73L,MACzBA,EAAE,KACV;AACD,WAAO07F,GAASj3E,GAAK/B,CAAS;AAAA,EACpC,GACUs1K,KAAkB,CAAAC,MAAW;AACjC,UAAMC,IAAe,CAAA;AACrB,QAAI55K,IAAQ;AACZ,WAAAmsK,GAAOwN,EAAQ,OAAO,CAAAvF,MAAU;AAC9B,YAAMltE,IAAUktE,EAAO;AACvB,MAAAlB,GAAQhsE,GAAS,CAAA2yE,MAAe;AAC9B,cAAMC,IAAW95K,IAAQ65K;AACzB,QAAAD,EAAaE,CAAQ,IAAI3E,GAAUf,EAAO,SAASltE,GAAS4yE,CAAQ;AAAA,MAC9E,CAAS,GACD95K,KAASknG;AAAA,IACjB,CAAO,GACM0yE;AAAA,EACb,GACUvqI,KAAa,CAAA83H,MAAQ;AACzB,UAAM4S,IAAS,CAAA,GACTnjG,IAAQ,CAAA,GAERojG,IADW3wK,EAAK89J,CAAI,EAAE,IAAI,CAAAwS,OAAWA,GAAQ,OAAO,EAAE,KAAK9jG,EAAK,EACvC,KAAKmjG,EAAyB,EAAE,MAAM,CAAA,CAAE;AACvE,QAAIiB,IAAU,GACVC,IAAa,GACbC,IAAW;AACf,UAAM;AAAA,MACJ,MAAMC;AAAA,MACN,MAAM/iG;AAAA,IACd,IAAUovD,GAAU0gC,GAAM,CAAAwS,OAAWA,GAAQ,YAAY,UAAU;AAC7D,IAAAxN,GAAO90F,IAAM,CAAAsiG,OAAW;AACtB,YAAMU,KAAa,CAAA;AACnB,MAAAlO,GAAOwN,GAAQ,OAAO,CAAAW,OAAW;AAC/B,YAAIprK,KAAQ;AACZ,eAAO6qK,EAAOlvK,GAAIsvK,GAAUjrK,EAAK,CAAC,MAAM;AACtC,UAAAA;AAEF,cAAMulK,KAAW1pK,GAAkBivK,GAAe9qK,GAAM,SAAU,CAAA,GAC5DgC,KAAUsjK,EAAS8F,GAAQ,SAASA,GAAQ,SAASA,GAAQ,SAASH,GAAUjrK,IAAOulK,EAAQ;AACrG,iBAAS8F,KAAyB,GAAGA,KAAyBD,GAAQ,SAASC;AAC7E,mBAASC,KAAsB,GAAGA,KAAsBF,GAAQ,SAASE,MAAuB;AAC9F,kBAAMC,KAAcN,IAAWK,IACzBE,KAAiBxrK,KAAQqrK,IACzBI,KAAS9vK,GAAI4vK,IAAaC,EAAc;AAC9C,YAAAX,EAAOY,EAAM,IAAIzpK,IACjBgpK,IAAa,KAAK,IAAIA,GAAYQ,KAAiB,CAAC;AAAA,UACrD;AAEH,QAAAL,GAAW,KAAKnpK,EAAO;AAAA,MACjC,CAAS,GACD+oK,KACArjG,EAAM,KAAK89F,EAAUiF,GAAQ,SAASU,IAAYV,GAAQ,OAAO,CAAC,GAClEQ;AAAA,IACR,CAAO;AACD,UAAM,EAAC,SAAAjG,IAAS,WAAA0G,GAAS,IAAIxuK,GAAOguK,CAAY,EAAE,IAAI,CAAAT,OAAW;AAC/D,YAAMzF,KAAUwF,GAAgBC,EAAO;AAEvC,aAAO;AAAA,QACL,WAAW,CAFMvE,GAASuE,GAAQ,SAAShvK,GAAOupK,EAAO,CAAC,CAEpC;AAAA,QACtB,SAAAA;AAAA,MACV;AAAA,IACA,CAAO,EAAE,WAAW,OAAO;AAAA,MACnB,WAAW,CAAE;AAAA,MACb,SAAS,CAAE;AAAA,IACZ,EAAC;AAEF,WAAO;AAAA,MACL,MAFaD,GAAKgG,GAASC,CAAU;AAAA,MAGrC,QAAAH;AAAA,MACA,KAAKnjG;AAAA,MACL,SAAAs9F;AAAA,MACA,WAAA0G;AAAA,IACR;AAAA,EACA,GASUC,KAAY;AAAA,IAChB,WATgB,CAAAhlG,MAAS;AACzB,YAAMsxF,IAAO2P,GAAYjhG,CAAK;AAC9B,aAAOxmC,GAAW83H,CAAI;AAAA,IAC5B;AAAA,IAOM,UAAU93H;AAAA,IACV,OAAAiqI;AAAA,IACA,UAAAE;AAAA,IACA,aAAAC;AAAA,IACA,WAVgB,CAAAF,MAAap5J,GAAOo5J,EAAU,KAAK,CAAAn3L,MAAKA,EAAE,KAAK;AAAA,IAW/D,aAVkB,CAAAm3L,MAAa5uK,GAAO4uK,EAAU,OAAO;AAAA,IAWvD,YAViB,CAAAA,MAAa5vK,GAAK4vK,EAAU,OAAO,EAAE,SAAS;AAAA,IAW/D,aAVkB,CAACA,GAAWM,MAAgBlzK,EAAS,KAAK4yK,EAAU,QAAQM,CAAW,CAAC;AAAA,EAWhG,GAEU3F,KAAU,CAACqF,GAAWuB,IAAcp0K,OAAW;AACnD,UAAMutK,IAAOsF,EAAU,MACjBwB,IAAO7H,GAAQe,EAAK,SAASnuK,EAAQ,GACrCk1K,IAAU9H,GAAQe,EAAK,MAAMnuK,EAAQ;AAC3C,WAAO2F,GAAMsvK,GAAM,CAAAE,MAIVC,GAHU,MAAM/6J,GAAO66J,GAAS,CAAAt5L,OAAKm5L,GAAU,MAAMtB,GAAW73L,IAAGu5L,CAAG,EAAE,OAAO,CAAA5G,OAAUA,GAAO,WAAW4G,CAAG,EAAE,QAAO,CAAE,GAChH,CAAA5G,OAAUA,GAAO,YAAY,KAAKyG,EAAYzG,GAAO,OAAO,GACxD,MAAMwG,GAAU,MAAMtB,GAAW,GAAG0B,CAAG,CACf,CAC7C;AAAA,EACP,GACUC,KAAS,CAACC,GAAUzgJ,GAAS0gJ,MAAgB;AACjD,UAAMtiC,IAAUqiC;AAGhB,WAFqB9tK,EAAOyrI,GAASp+G,CAAO,EACV,QAAQ,MAAM/zB,EAAS,KAAKmyI,EAAQ,CAAC,CAAC,EAAE,QAAQsiC,CAAW,CAAC,EAC1E,IAAI,CAAA/G,MAAUA,EAAO,OAAO;AAAA,EACtD,GACUh9F,KAAO,CAAAkiG,MAAa;AACxB,UAAMtF,IAAOsF,EAAU,MACjByB,IAAU9H,GAAQe,EAAK,MAAMnuK,EAAQ,GACrCi1K,IAAO7H,GAAQe,EAAK,SAASnuK,EAAQ;AAC3C,WAAO2F,GAAMuvK,GAAS,CAAAxzE,MAIb0zE,GAHU,MAAM/6J,GAAO46J,GAAM,CAAAxwL,MAAKswL,GAAU,MAAMtB,GAAW/xE,GAAKj9G,CAAC,EAAE,OAAO,CAAA8pL,OAAUA,GAAO,QAAQ7sE,CAAG,EAAE,KAAK3hG,GAAS,CAAE,CAAA,GAAG,CAAAwuK,OAAU,CAACA,EAAM,CAAC,CAAC,GACtI,CAAAA,MAAUA,EAAO,YAAY,GAC1B,MAAMwG,GAAU,MAAMtB,GAAW/xE,GAAK,CAAC,CACd,CAC9C;AAAA,EACP,GAEU6zE,KAAS,CAAC/9K,GAAI0C,MAAU;AAC5B,QAAIA,IAAQ,KAAKA,KAAS1C,EAAG,SAAS;AACpC,aAAOqJ,EAAS;AAElB,UAAMuK,IAAU5T,EAAG0C,CAAK,EAAE,KAAK,MAAM;AACnC,YAAM0gE,IAAO93D,GAAQtL,EAAG,MAAM,GAAG0C,CAAK,CAAC;AACvC,aAAOwJ,GAAQk3D,GAAM,CAAC9+E,GAAGsE,MAAMtE,EAAE,IAAI,CAAAoL,OAAO;AAAA,QAC1C,OAAOA;AAAA,QACP,OAAO9G,IAAI;AAAA,MACZ,EAAC,CAAC;AAAA,IACX,GAAS,CAAAqE,MAAKoc,EAAS,KAAK;AAAA,MACpB,OAAOpc;AAAA,MACP,OAAO;AAAA,IACR,CAAA,CAAC,GACIonC,IAAOr0B,EAAG0C,IAAQ,CAAC,EAAE,KAAK,MAAM;AACpC,YAAM0gE,IAAOpjE,EAAG,MAAM0C,IAAQ,CAAC;AAC/B,aAAOwJ,GAAQk3D,GAAM,CAAC9+E,GAAGsE,MAAMtE,EAAE,IAAI,CAAAoL,OAAO;AAAA,QAC1C,OAAOA;AAAA,QACP,OAAO9G,IAAI;AAAA,MACZ,EAAC,CAAC;AAAA,IACX,GAAS,CAAAvE,MAAKglB,EAAS,KAAK;AAAA,MACpB,OAAOhlB;AAAA,MACP,OAAO;AAAA,IACR,CAAA,CAAC;AACF,WAAOuvB,EAAQ,KAAK,CAAA3mB,MAAKonC,EAAK,IAAI,CAAAhwC,MAAK;AACrC,YAAM25L,IAAS35L,EAAE,QAAQ4I,EAAE;AAC3B,aAAO,KAAK,IAAI5I,EAAE,QAAQ4I,EAAE,KAAK,IAAI+wL;AAAA,IACtC,CAAA,CAAC;AAAA,EACR,GAEUC,KAAc,CAACC,GAAO3nG,MAAU,CAAAt+D,MAAWkmK,GAAalmK,CAAO,MAAM,QAAQs+D,IAAQ2nG,GACrFC,KAAe,CAAAlmK,MAAW3K,GAAM2K,GAAS,WAAW,MAAM,QAAQ,QAAQ,OAE1E2P,KAAQ8xJ,GAAU,UAAU,CAAAzhK,MAAW;AAC3C,UAAMW,IAAMX,EAAQ;AACpB,WAAOsG,GAAOtG,CAAO,IAAIW,EAAI,sBAAqB,EAAG,SAASA,EAAI;AAAA,EACxE,CAAK,GACKiB,KAAQ,CAAA5B,MAAW2P,GAAM,IAAI3P,CAAO,GACpCmmK,KAAa,CAAAnmK,MAAW2P,GAAM,SAAS3P,CAAO,GAC9ComK,IAAahE,IAEbj2L,IAAI,CAACqyB,GAAMqM,OAER;AAAA,IACL,MAAArM;AAAA,IACA,KAAAqM;AAAA,IACA,WAJgB,CAAC/7B,GAAG4S,MAAMvV,EAAEqyB,IAAO1vB,GAAG+7B,IAAMnpB,CAAC;AAAA,EAKrD,IAEUopB,IAAgB3+B,GAEhB4+B,IAAc,CAAApK,MAAO;AACzB,UAAMqK,IAAMrK,EAAI;AAChB,WAAOmK,EAAcE,EAAI,MAAMA,EAAI,GAAG;AAAA,EAC5C,GACUC,KAAqB,CAAC5+B,GAAGwV,MACzBxV,MAAM,SACDA,IAEAwV,MAAM,SAAYA,IAAI,GAG3BqpB,KAAW,CAAAlL,MAAW;AAC1B,UAAMwF,IAAMxF,EAAQ,IAAI,eAClBmL,IAAO3F,EAAI,MACX4F,IAAM5F,EAAI,aACVjD,IAAOiD,EAAI;AACjB,QAAI2F,MAASnL,EAAQ;AACnB,aAAO8K,EAAcK,EAAK,YAAYA,EAAK,SAAS;AAEtD,UAAME,IAAYJ,GAAmBG,KAAQ,OAAyB,SAASA,EAAI,aAAa7I,EAAK,SAAS,GACxG+I,IAAaL,GAAmBG,KAAQ,OAAyB,SAASA,EAAI,aAAa7I,EAAK,UAAU,GAC1GgJ,IAAYN,GAAmB1I,EAAK,WAAW4I,EAAK,SAAS,GAC7DK,IAAaP,GAAmB1I,EAAK,YAAY4I,EAAK,UAAU;AACtE,WAAOM,GAASzL,CAAO,EAAE,UAAUsL,IAAaE,GAAYH,IAAYE,CAAS;AAAA,EACvF,GACUE,KAAW,CAAAzL,MAAW;AAC1B,UAAMW,IAAMX,EAAQ,KAEdmL,IADMxK,EAAI,cACC;AACjB,WAAIwK,MAASxK,IACJmK,EAAcK,EAAK,YAAYA,EAAK,SAAS,IAEjD7E,GAAOtG,CAAO,IAGZ+K,EAAYpK,CAAG,IAFbmK,EAAc,GAAG,CAAC;AAAA,EAGjC,GAEUu7J,KAAU,CAACp0E,GAAKvwG,OAAO;AAAA,IAC3B,KAAAuwG;AAAA,IACA,GAAAvwG;AAAA,EACN,IACU4kL,KAAU,CAACZ,GAAK52L,OAAO;AAAA,IAC3B,KAAA42L;AAAA,IACA,GAAA52L;AAAA,EACN,IACUy3L,KAAU,CAAAhvH,MACFrsC,GAASqsC,CAAI,EACd,OAAOgrH,GAAWhrH,CAAI,GAE7BivH,KAAU,CAAAjvH,MACPrsC,GAASqsC,CAAI,EAAE,MAElBkvH,KAAc,CAACh8K,GAAO8sD,MACnB+uH,GAAQ77K,GAAO+7K,GAAQjvH,CAAI,CAAC,GAE/BmvH,KAAe,CAACj8K,GAAO8sD,MACpB+uH,GAAQ77K,GAAO87K,GAAQhvH,CAAI,CAAC,GAE/BovH,KAAW,CAAApvH,MACRrsC,GAASqsC,CAAI,EAAE,KAElBqvH,KAAa,CAACn8K,GAAO8sD,MAClB8uH,GAAQ57K,GAAOk8K,GAASpvH,CAAI,CAAC,GAEhCsvH,KAAgB,CAACp8K,GAAO8sD,MACrB8uH,GAAQ57K,GAAOk8K,GAASpvH,CAAI,IAAI4uH,GAAW5uH,CAAI,CAAC,GAEnDuvH,KAAgB,CAACC,GAAcC,GAAcjxK,MAAU;AAC3D,QAAIA,EAAM,WAAW;AACnB,aAAO;AAET,UAAMkxK,IAAQ/wK,GAAMH,EAAM,MAAM,CAAC,GAAG,CAACmxK,GAAYz8K,MACxCy8K,EAAW,IAAI,CAAA3vH,MACbwvH,EAAat8K,GAAO8sD,CAAI,CAChC,CACF,GACK4vH,IAAWpxK,EAAMA,EAAM,SAAS,CAAC,EAAE,IAAI,CAAAwhD,MACpCyvH,EAAajxK,EAAM,SAAS,GAAGwhD,CAAI,CAC3C;AACD,WAAO0vH,EAAM,OAAO,CAACE,CAAQ,CAAC;AAAA,EACpC,GACUC,KAAS,CAAAC,MACN,CAACA,GAEJn7J,KAAS;AAAA,IACb,OAAO3b;AAAA,IACP,WAAW,CAAA+2K,MAAeR,GAAcF,IAAYC,IAAeS,CAAW;AAAA,IAC9E,MAAMX;AAAA,EACZ,GAWU1zG,KAAW+yG,GAVH;AAAA,IACZ,OAAOz1K;AAAA,IACP,MAAMi2K;AAAA,IACN,WAAW,CAAAc,MAAeR,GAAcL,IAAaC,IAAcY,CAAW;AAAA,EACpF,GACkB;AAAA,IACZ,OAAOF;AAAA,IACP,MAAMb;AAAA,IACN,WAAW,CAAAe,MAAeR,GAAcJ,IAAcD,IAAaa,CAAW;AAAA,EACpF,CAC6C,GACnCr7J,KAAQ;AAAA,IACZ,OAAO,CAACmsI,GAAQ93E,MAAUrN,GAASqN,CAAK,EAAE,MAAM83E,GAAQ93E,CAAK;AAAA,IAC7D,WAAW,CAACklG,GAAMllG,MAAUrN,GAASqN,CAAK,EAAE,UAAUklG,GAAMllG,CAAK;AAAA,IACjE,MAAM,CAAA/oB,MAAQ0b,GAAS1b,CAAI,EAAE,KAAKA,CAAI;AAAA,EAC5C,GAEUgwH,KAAQ;AAAA,IACZ,mBAAmB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACD;AAAA,IACD,UAAU,CAAC,GAAG;AAAA,IACd,OAAO,CAAC,EAAE;AAAA,EAChB,GACUxiI,MAAW,MAAM;AACrB,UAAMyiI,IAAgB,UAEhBC,IAAe,UADC,UAAUD,IAE1BE,IAAM,OACNtzC,IAAM,CAAAh/D,MAAS,MAAOA,CAAK,MAO3BuyG,IAAQ,WANiB;AAAA,MAC7B;AAAA,MACAH,IAAgBE,IAAMtzC,EAAIozC,CAAa,IAAIpzC,EAAIqzC,CAAY;AAAA,MAC3DC,IAAMF,IAAgBpzC,EAAIqzC,CAAY;AAAA,MACtCD,IAAgBpzC,EAAIqzC,CAAY;AAAA,IACxC,EAAQ,KAAK,GAAG,CACsC;AAChD,WAAO,IAAI,OAAO,KAAME,CAAO,QAAO;AAAA,EAC5C,MACUC,KAAS,CAACxiD,GAAMyiD,MAAa11K,GAAO01K,GAAU,CAAAj1K,MAAOT,GAAOo1K,GAAM30K,CAAG,GAAG,CAAAk1K,MAAS1iD,MAAS0iD,CAAK,CAAC,GAChGC,KAAQ,CAAC3yG,GAAOyyG,MACNz2K,EAAS,KAAK2zC,GAAQ,KAAKqwB,CAAK,CAAC,EAClC,KAAK,CAAAr/D,MAAS;AACzB,UAAMrM,IAAQ,OAAOqM,EAAM,CAAC,CAAC,GACvBiyK,IAAUjyK,EAAM,CAAC;AACvB,WAAI6xK,GAAOI,GAASH,CAAQ,IACnBz2K,EAAS,KAAK;AAAA,MACnB,OAAA1H;AAAA,MACA,MAAMs+K;AAAA,IAClB,CAAW,IAEM52K,EAAS;EAE1B,CAAO,GAGG62K,KAA4B,kBAC5BC,KAAuB,sBACvBC,KAAU1nK,GAAM,KAAK,GACrB2nK,KAAiB,CAACn3J,GAAKo3J,GAAaC,MAAgB;AACxD,UAAMC,IAAiBnkK,GAAc6M,CAAG,EAAE,WAAW,MAAM8uJ,EAAU/B,GAAM/sJ,CAAG,CAAC,CAAC;AAChF,WAAOo3J,EAAYp3J,CAAG,IAAIq3J,EAAYC,CAAc,IAAI;AAAA,EAC9D,GACUC,KAAgB,CAACjxH,GAAM6gG,MAAW;AACtC,IAAA1uI,GAAM6tC,GAAM,SAAS6gG,IAAS,IAAI;AAAA,EACxC,GACUqwB,KAAqB,CAAClxH,GAAM6gG,MAAW;AAC3C,IAAA1uI,GAAM6tC,GAAM,SAAS6gG,IAAS,GAAG;AAAA,EACvC,GACUswB,KAAY,CAACnxH,GAAM6gG,MAAW;AAClC,IAAA1uI,GAAM6tC,GAAM,UAAU6gG,IAAS,IAAI;AAAA,EACzC,GACUuwB,KAAiB,CAAApxH,MAAQ6uH,EAAW7uH,CAAI,IAAI,MAC5CqxH,KAAU,CAACrxH,GAAMq+E,GAAQizC,GAAQC,MAAW;AAChD,UAAMC,IAAUzoG,GAAM/oB,CAAI,EAAE,IAAI,CAAA+oB,MAAS;AACvC,YAAM0oG,IAAQH,EAAOvoG,CAAK;AAC1B,aAAO,KAAK,MAAMs1D,IAAS,MAAMozC,CAAK;AAAA,IAC9C,CAAO,EAAE,MAAMpzC,CAAM;AACf,WAAAkzC,EAAOvxH,GAAMwxH,CAAO,GACbA;AAAA,EACb,GACUE,KAAqB,CAACv/K,GAAO6tD,GAAMsxH,GAAQC,MAAW;AAC1D,UAAMlzC,IAAS,WAAWlsI,CAAK;AAC/B,WAAOwQ,GAASxQ,GAAO,GAAG,KAAKyL,GAAKoiD,CAAI,MAAM,UAAUqxH,GAAQrxH,GAAMq+E,GAAQizC,GAAQC,CAAM,IAAIlzC;AAAA,EACtG,GACUszC,KAAiB,CAAA3xH,MAAQ;AAC7B,UAAM7tD,IAAQi/K,GAAepxH,CAAI;AACjC,WAAK7tD,IAGEu/K,GAAmBv/K,GAAO6tD,GAAM31C,IAAO8mK,EAAS,IAF9C9mK,GAAM21C,CAAI;AAAA,EAGzB,GACUvvC,KAAQ,CAACuvC,GAAM1sD,GAAM/Z,MAAM;AAC/B,UAAMgR,IAAIhR,EAAEymE,CAAI,GACVyU,IAAOulC,GAAQh6C,GAAM1sD,CAAI;AAC/B,WAAO/I,IAAIkqE;AAAA,EACjB,GACUxkD,KAAW,CAACxH,GAAS42D,MAClBwpG,GAASpgK,GAAS42D,CAAI,EAAE,QAAQ,MAC9B51D,EAAOhB,GAAS42D,CAAI,EAAE,IAAI,CAAAnpC,MAAOA,IAAM,IAAI,CACnD,GAEG07I,KAAgB,CAAAnpK,MAAWwH,GAASxH,GAAS,OAAO,GACpDopK,KAAe,CAAAppK,MAAWwH,GAASxH,GAAS,QAAQ,GACpDqpK,KAAqB,CAAA9xH,MAAQ6wH,GAAe7wH,GAAMx2C,IAAOyhK,EAAQ,GACjE8G,KAAkB,CAAA/xH,MAAQ4wH,GAAQ5wH,CAAI,IAAIx2C,GAAMw2C,CAAI,IAAIkrH,GAAalrH,CAAI,GACzEgyH,KAAY,CAAAhyH,MACTvvC,GAAMuvC,GAAM,WAAW2xH,EAAc,GAExCM,KAAkB,CAAAjyH,MACR4xH,GAAc5xH,CAAI,EACnB,KAAK,CAAA1qE,MAAKk7L,GAAMl7L,GAAG;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAA,CAAC,GAEE48L,KAAkB,CAAClyH,GAAM6gG,GAAQhzB,MAAS;AAC9C,IAAA17G,GAAM6tC,GAAM,SAAS6gG,IAAShzB,CAAI;AAAA,EACxC,GACUskD,KAAqB,CAAAppG,MAASv/D,GAAMu/D,CAAK,IAAI,MAC7CqpG,KAAuB,CAAArpG,MAAS8nG,GAAe9nG,GAAOv/D,IAAOyhK,EAAQ,IAAI,KACzEoH,KAAoB,CAAAtpG,MAAS6oG,GAAc7oG,CAAK,EAAE,OAAO,CAAA/xC,MAAQ05I,GAA0B,KAAK15I,CAAI,CAAC,GACrGs7I,KAAkB,CAAAvpG,MAAS6oG,GAAc7oG,CAAK,EAAE,OAAO,CAAA/xC,MAAQ25I,GAAqB,KAAK35I,CAAI,CAAC,GAC9Fu7I,KAAiB,CAAAxpG,MAAS6oG,GAAc7oG,CAAK,EAAE,OAAM,GACrDypG,KAA2Bz5K,GAAS23K,EAAyB,GAE7D+B,KAAUvpK,GAAM,KAAK,GACrBwpK,KAAU,CAAA1yH,MACP4xH,GAAc5xH,CAAI,EAAE,WAAW,MAAM+xH,GAAgB/xH,CAAI,IAAI,IAAI,GAEpE2yH,KAAU,CAAA3yH,MACP6xH,GAAa7xH,CAAI,EAAE,WAAW,MAAMgyH,GAAUhyH,CAAI,IAAI,IAAI,GAE7D4yH,KAAW,CAAAnG,MAAa9tK,GAAMovK,GAAU,YAAYtB,CAAS,GAAG,CAAAnF,MAAUztK,EAAS,KAAKytK,EAAO,OAAO,CAAC,GACvGuL,KAAgB,CAAA7yH,MAAQ;AAC5B,UAAMtgD,IAAU8F,GAAU,EAAC,SACrBstK,IAAoBpzK,EAAQ,WAAY,KAAIA,EAAQ,UAAS;AACnE,WAAO+yK,GAAQzyH,CAAI,IAAI8yH,IAAoB;AAAA,EACjD,GACUC,KAAe,CAACC,GAAS9/K,GAAO+/K,GAASjgK,GAAQs+J,GAAQ/1C,MAAay3C,EAAQ,OAAOhgK,CAAM,EAAE,KAAK,MAAMuoH,EAASgzC,GAAO0E,GAAS//K,CAAK,CAAC,GAAG,CAAA8sD,MAAQsxH,EAAOtxH,CAAI,CAAC,GAC9JkzH,KAAe,CAACzG,GAAW1jG,GAAO0xB,GAAU8gC,MAAa;AAC7D,UAAM43C,IAAc/L,GAAQqF,CAAS,GAC/B/C,IAAYqE,GAAU,WAAWtB,CAAS,IAAImG,GAASnG,CAAS,IAAI0G,GACpEF,IAAU,CAACp5K,EAAS,KAAK6a,GAAM,KAAKq0D,CAAK,CAAC,CAAC,EAAE,OAAOpqE,GAAM+V,GAAM,UAAUy+J,GAAapqG,CAAK,GAAG,CAAAztD,MAAOA,EAAI,IAAI,CAAArxB,OAAKA,GAAE,CAAC,CAAC,CAAC,GACxHmpL,IAAY95K,GAAI6vK,EAAU;AAChC,WAAOxqK,GAAM+qK,GAAW,CAACiG,GAAYlyL,OAC5Bs1L,GAAapD,GAAYlyL,IAAGw1L,GAASG,GAAW,CAAA9L,OAAU;AAC/D,UAAIuL,GAAcvL,EAAM;AACtB,eAAO7sE,EAAS6sE,EAAM;AACjB;AACL,cAAMtnH,KAAO2oH,GAASwK,EAAY11L,EAAC,GAAGub,EAAQ;AAC9C,eAAO+5K,GAAa/yH,IAAMviE,IAAGw1L,GAASG,GAAW,CAAApzH,OAAQu7E,EAAS1hI,EAAS,KAAK2P,GAAMw2C,EAAI,CAAC,CAAC,GAAGu7E,CAAQ;AAAA,MACxG;AAAA,IACF,GAAEA,CAAQ,CACZ;AAAA,EACP,GACU83C,KAAa,CAAAC,MACVA,EAAQ,IAAI,CAAAxpL,MACVA,IAAI,IACZ,EAAE,MAAM,EAAE,GAEPypL,KAAe,CAAC9G,GAAW1jG,MACxBmqG,GAAazG,GAAW1jG,GAAO2pG,IAASW,EAAU,GAErDG,KAAsB,CAAC/G,GAAW1jG,GAAO0qG,MACtCP,GAAazG,GAAW1jG,GAAO+oG,IAAoB,CAAAwB,MACjDA,EAAQ,KAAK,MACXG,EAAU,gBAChB,CAAAC,MACMA,IAAYD,EAAU,WAAU,IAAK,GAC7C,CACF,GAEGE,KAAiB,CAAClH,GAAW1jG,GAAO0qG,MACjCP,GAAazG,GAAW1jG,GAAOgpG,IAAiB,CAAAuB,MAC9CA,EAAQ,WAAWG,EAAU,YAAY,CACjD,GAEGG,KAAgB,CAACnH,GAAW1jG,GAAO3lC,GAAW4uI,GAAWz2C,MAAa;AAC1E,UAAMsuC,IAASt/F,GAAKkiG,CAAS,GACvBwG,IAAU,CAACp5K,EAAS,KAAKupC,EAAU,KAAK2lC,CAAK,CAAC,CAAC,EAAE,OAAOpqE,GAAMykC,EAAU,UAAUymI,GAAQ9gG,CAAK,GAAG,CAAAztD,MAAOA,EAAI,IAAI,CAAArxB,MAAKA,EAAE,CAAC,CAAC,CAAC;AACjI,WAAO0U,GAAMkrK,GAAQ,CAAC8F,GAAYlyL,MACzBs1L,GAAapD,GAAYlyL,GAAGw1L,GAAS35K,GAAI+vK,EAAU,GAAG2I,GAAWz2C,CAAQ,CACjF;AAAA,EACP,GACUs4C,KAAkB,CAACpH,GAAW1jG,GAAO3lC,MAClCwwI,GAAcnH,GAAW1jG,GAAO3lC,GAAW4uI,IAAW,CAAAsB,MACpDA,EAAQ,WAAW9J,EAAS,CACpC,GAEGsK,KAAgB,CAACrH,GAAW1jG,GAAO3lC,MAChCwwI,GAAcnH,GAAW1jG,GAAO3lC,GAAWuvI,IAASU,EAAU,GAGjEU,KAAc,CAAChrG,GAAOuoG,MAAW,MACjCviK,GAAOg6D,CAAK,IACPuoG,EAAOvoG,CAAK,IAEZ,WAAW8/F,GAAS9/F,GAAO,OAAO,EAAE,MAAM,GAAG,CAAC,GAGnDirG,KAAW,CAAAjrG,MAAS;AACxB,UAAM0xB,IAAWs5E,GAAYhrG,GAAOv/D,EAAK,GACnCyqK,IAAOl7K,GAAS,CAAC;AAEvB,WAAO;AAAA,MACL,OAAO0hG;AAAA,MACP,YAAYA;AAAA,MACZ,WAJgB,CAACgyE,GAAWgH,MAAcE,GAAelH,GAAW1jG,GAAO0qG,CAAS;AAAA,MAKpF,cAAcQ;AAAA,MACd,mBAAmBl7K,GAAS,CAAC,CAAC,CAAC;AAAA,MAC/B,cAAck7K;AAAA,MACd,iBAAiBx7K;AAAA,MACjB,kBAAkBA;AAAA,MAClB,YAAY;AAAA,MACZ,OAAO;AAAA,IACf;AAAA,EACA,GACUy7K,KAAiB,CAAAnrG,MAAS;AAC9B,UAAMorG,IAAgBJ,GAAYhrG,GAAO,CAAAj9D,MAAQ,WAAWsmK,GAAqBtmK,CAAI,CAAC,CAAC,GACjF2uF,IAAWs5E,GAAYhrG,GAAOv/D,EAAK;AAWzC,WAAO;AAAA,MACL,OAAO2qK;AAAA,MACP,YAAY15E;AAAA,MACZ,WAJgB,CAACgyE,GAAWgH,OAAcD,GAAoB/G,GAAW1jG,GAAO0qG,EAAS;AAAA,MAKzF,cAdmB,CAAAzzG,MAASA,IAAQy6B,EAAQ,IAAK;AAAA,MAejD,mBAdwB,CAACnlH,GAAG8+L,OAAW,CAAC,MAAM9+L,CAAC;AAAA,MAe/C,cAdmB,MAAMi0L,GAAU,IAAG9uE,EAAQ,IAAK;AAAA,MAenD,iBAAiBy2E;AAAA,MACjB,kBAfuB,CAAAlxG,MAAS;AAChC,cAAMq0G,KAAeF,KACfG,KAASt0G,IAAQ,MAAMq0G,IACvBE,KAAWF,KAAeC;AAChC,QAAApD,GAAmBnoG,GAAOwrG,EAAQ;AAAA,MAC1C;AAAA,MAWQ,YAAY;AAAA,MACZ,OAAO;AAAA,IACf;AAAA,EACA,GACUC,KAAY,CAAAzrG,MAAS;AACzB,UAAM0xB,IAAWs5E,GAAYhrG,GAAOv/D,EAAK;AAWzC,WAAO;AAAA,MACL,OAAOixF;AAAA,MACP,YAAYA;AAAA,MACZ,WAJgB,CAACgyE,GAAWgH,MAAcE,GAAelH,GAAW1jG,GAAO0qG,CAAS;AAAA,MAKpF,cAdmBz6K;AAAA,MAenB,mBAdwB,CAAC1jB,GAAG0qF,MAErB,CADS,KAAK,IAAIupG,GAAQ,GAAIj0L,IAAI0qF,CAAK,IAC5B1qF,CAAC;AAAA,MAanB,cAAci0L;AAAA,MACd,iBAAiB0H;AAAA,MACjB,kBAbuB,CAAAjxG,MAAS;AAChC,cAAMu0G,IAAW95E,EAAU,IAAGz6B;AAC9B,QAAAixG,GAAcloG,GAAOwrG,CAAQ;AAAA,MACrC;AAAA,MAWQ,YAAY;AAAA,MACZ,OAAO;AAAA,IACf;AAAA,EACA,GACUE,KAAa,CAAChsK,GAASiM,MACN89J,GAAwB,EAAG,KAAK99J,CAAK,MACrC,OACZw/J,GAAezrK,CAAO,IAEtB+rK,GAAU/rK,CAAO,GAOtBisK,KAAY;AAAA,IAChB,cALmB,CAAA3rG,MACL6oG,GAAc7oG,CAAK,EACpB,KAAK,MAAMirG,GAASjrG,CAAK,GAAG,CAAAzzF,MAAKm/L,GAAW1rG,GAAOzzF,CAAC,CAAC;AAAA,IAIlE,WAAAk/L;AAAA,IACA,gBAAAN;AAAA,IACA,UAAAF;AAAA,EACN,GAEUW,KAAc,CAACC,GAAQC,GAAQC,GAAQC,GAAQC,GAAUn1H,OAAmB;AAAA,IAChF,QAAA+0H;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAn1H;AAAA,EACN,IACUo1H,KAAoB,CAACC,GAAOC,MAAe;AAC/C,UAAMC,IAAeF,EAAM,KAAK;AAEhC,QAAIN,IADcM,EAAM,KAAK,MAEzBL,IAASO,GACTN,IAAS,GACTC,IAAS;AACb,UAAMC,IAAW,CAAA,GACXn1H,KAAgB,CAAA;AACtB,WAAA8gH,GAAOuU,EAAM,QAAQ,CAAA3N,OAAU;AAE7B,UADAyN,EAAS,KAAKzN,EAAM,GAChB4N,EAAW5N,EAAM,GAAG;AACtB,QAAA1nH,GAAc,KAAK0nH,EAAM;AACzB,cAAMU,KAAWV,GAAO,KAClB8N,KAASpN,KAAWV,GAAO,UAAU,GACrCW,KAAWX,GAAO,QAClB+N,KAASpN,KAAWX,GAAO,UAAU;AAC3C,QAAIU,KAAW2M,IACbA,IAAS3M,KACAoN,KAASP,MAClBA,IAASO,KAEPnN,KAAW2M,IACbA,IAAS3M,KACAoN,KAASP,MAClBA,IAASO;AAAA,MAEZ;AAAA,IACT,CAAO,GACMX,GAAYC,GAAQC,GAAQC,GAAQC,GAAQC,GAAUn1H,EAAa;AAAA,EAChF,GACU01H,IAAW,CAAClb,GAAMmb,GAAcC,MAAa;AACjD,UAAM/6E,IAAM2/D,EAAKob,CAAQ,EAAE,SACrBx7E,IAAK1uF,GAAa,QAAQ,IAAI;AACpC,IAAA6F,GAAS6oF,GAAI1uF,GAAa,QAAQ,IAAI,CAAC,IAC7BiqK,IAAepkK,KAAWC,IAClCqpF,GAAKT,CAAE;AAAA,EACf,GACUy7E,IAAa,CAACrb,GAAM6a,GAAOS,GAAOR,MAAe;AACrD,UAAM5qG,IAAO+F,GAAS+pF,GAAM,CAAA3/D,MAAOA,EAAI,YAAY,UAAU,GACvD06E,IAAeF,EAAM,KAAK,SAC1BU,IAAYV,EAAM,KAAK;AAC7B,aAAS97L,IAAI,GAAGA,IAAIw8L,GAAWx8L,KAAK;AAClC,UAAIo8L,IAAe;AACnB,eAASngM,KAAI,GAAGA,KAAI+/L,GAAc//L;AAChC,QAAM+D,IAAIu8L,EAAM,UAAUv8L,IAAIu8L,EAAM,UAAUtgM,KAAIsgM,EAAM,UAAUtgM,KAAIsgM,EAAM,WACzD5H,GAAU,MAAMmH,GAAO97L,GAAG/D,EAAC,EAAE,OAAO8/L,CAAU,EAAE,OAAM,IAErEI,EAAShrG,GAAMirG,GAAcp8L,CAAC,IAE9Bo8L,IAAe;AAAA,IAItB;AAAA,EACP,GACU3vB,IAAQ,CAACgwB,GAASF,GAAOT,GAAOY,MAAe;AACnD,IAAAnV,GAAOuU,EAAM,SAAS,CAAA/G,MAAO;AAC3B,OAAIA,EAAI,SAASwH,EAAM,UAAUxH,EAAI,SAASwH,EAAM,WAClD5kK,GAASo9J,EAAI,OAAO;AAAA,IAE9B,CAAO;AACD,UAAM4H,IAAYzlG,GAASmjD,GAAWoiD,GAAS,IAAI,GAAG,CAAAn7E,MAAOA,EAAI,IAAI,sBAAsB,CAAC;AAC5F,IAAA2kE,GAAO0W,GAAWhlK,EAAQ,IACtB4kK,EAAM,WAAWA,EAAM,UAAUA,EAAM,WAAWA,EAAM,WAC1DtW,GAAO5rC,GAAWoiD,GAAS,OAAO,GAAG,CAAA71H,MAAQ;AAC3C,MAAAp1C,EAASo1C,GAAM,SAAS,GACxBp1C,EAASo1C,GAAM,SAAS;AAAA,IAClC,CAAS,GAEHp1C,EAASirK,GAAS5J,EAAe,GACjCrhK,EAASirK,GAAS,yBAAyB,GACzBnB,GAAU,aAAamB,CAAO,EACtC,iBAAiBC,CAAU;AAAA,EAC3C,GACUE,IAAqB,CAACjtG,GAAO0jG,GAAWgH,GAAWkC,MAAU;AACjE,QAAIA,EAAM,WAAW,KAAKlJ,EAAU,KAAK,YAAYkJ,EAAM,SAAS;AAClE,aAAO;AAET,UAAMM,IAAYtC,GAAelH,GAAW1jG,GAAO0qG,CAAS,GACtDyC,IAAe56K,GAAM26K,GAAW,CAAC56K,IAAKqZ,OAAUrZ,KAAMqZ,IAAO,CAAC,GAG9DsrD,IAFoB1kE,GAAM26K,EAAU,MAAMN,EAAM,QAAQA,EAAM,SAAS,CAAC,GAAG,CAACt6K,IAAKqZ,OAAUrZ,KAAMqZ,IAAO,CAAC,IAC1EwhK,IAAezC,EAAU,WAAU,IAC/CA,EAAU,WAAU;AAC7C,WAAOA,EAAU,aAAazzG,CAAK;AAAA,EACzC,GACUm2G,KAAY,CAACptG,GAAOqtG,MAAqB;AAC7C,UAAMjB,IAAa,CAAA5N,OAAUzgK,GAAKygK,GAAO,SAAS6O,CAAgB,GAC5DP,IAAUz/I,GAAK2yC,CAAK,GACpBsxF,IAAO2P,GAAY6L,CAAO,GAC1BpC,IAAYiB,GAAU,aAAa3rG,CAAK,GACxCstG,IAAetI,GAAU,SAAS1T,CAAI,GACtCic,IAAerB,GAAkBoB,GAAclB,CAAU,GACzDtpK,IAAW,YAAYuqK,IAAmB,cAAmBA,IAAmB,KAChFG,KAAkB7iD,GAAiBmiD,GAAS,SAAS,CAAA71H,OAAQl5C,GAAKk5C,IAAMn0C,CAAQ,CAAC;AACvF,IAAAwzJ,GAAOkX,IAAiBxlK,EAAQ,GAChC2kK,EAAWrb,GAAMgc,GAAcC,GAAcnB,CAAU;AACvD,UAAMD,KAAQnH,GAAU,UAAUhlG,CAAK,GACjC+sG,KAAaE,EAAmBjtG,GAAOmsG,IAAOzB,GAAW6C,CAAY;AAC3E,WAAAzwB,EAAMgwB,GAASS,GAAcD,GAAcP,EAAU,GAC9CD;AAAA,EACb,GAEU79J,KAAO,KAuBPm7C,MArBY,CAACzkE,GAAIkP,MAAS;AAC9B,UAAMya,IAAM,CAAA5P,MAAW;AACrB,UAAI,CAAC/Z,EAAG+Z,CAAO;AACb,cAAM,IAAI,MAAM,kBAAkB7K,IAAO,iBAAiBA,IAAO,OAAO;AAE1E,aAAO0a,EAAU7P,CAAO,EAAE,MAAM,EAAE;AAAA,IAC1C,GACY6P,IAAY,CAAA7P,MAAW/Z,EAAG+Z,CAAO,IAAI5O,EAAS,KAAK4O,EAAQ,IAAI,SAAS,IAAI5O,EAAS,KAAI;AAO/F,WAAO;AAAA,MACL,KAAAwe;AAAA,MACA,WAAAC;AAAA,MACA,KATU,CAAC7P,GAAStW,MAAU;AAC9B,YAAI,CAACzD,EAAG+Z,CAAO;AACb,gBAAM,IAAI,MAAM,sBAAsB7K,IAAO,iBAAiBA,IAAO,OAAO;AAE9E,QAAA6K,EAAQ,IAAI,YAAYtW;AAAA,MAChC;AAAA,IAKA;AAAA,EACA,GAE0B4pJ,IAAQ,MAAM,GAC9B7pI,KAAQ,CAAAzJ,MAAW0qD,GAAI,IAAI1qD,CAAO,GAClC6P,KAAY,CAAA7P,MAAW0qD,GAAI,UAAU1qD,CAAO,GAC5C+P,KAAM,CAAC/P,GAAStW,MAAUghE,GAAI,IAAI1qD,GAAStW,CAAK,GAEhD6oE,KAAS,CAAAvyD,MAAW7K,GAAK6K,CAAO,MAAM,QAAQ,IAAI6P,GAAU7P,CAAO,EAAE,KAAK,MAAMi+J,GAAWj+J,CAAO,EAAE,QAAQ,CAAAle,MAAKA,EAAE,MAAM,GACzH0wE,KAA+B,CAAArsD,MAAM0J,GAAU1J,CAAE,EAAE,OAAO,CAAAtD,MAAQA,EAAK,KAAI,EAAG,WAAW,KAAKA,EAAK,QAAQ0M,EAAI,IAAI,EAAE,EAAE,UACvH6rI,KAAyB,CAAA/3I,MAAQ8J,GAAc9J,CAAI,KAAKxP,GAAMwP,GAAM,iBAAiB,MAAM,SAC3FqvD,KAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACN,GACUC,KAAmB,CAAAtvD,MACGmvD,GAA6BnvD,CAAI,KAC/BnR,GAAWwgE,IAA4Bv9D,GAAKkO,CAAI,CAAC,KAAK+3I,GAAuB/3I,CAAI,GAGzGuvD,KAAQ,CAAA5yD,MAAWkH,GAAalH,GAAS2yD,EAAgB,GACzDx7B,KAAS,CAAAn3B,MAAW6yD,GAAc7yD,GAAS2yD,EAAgB,GAC3DE,KAAgB,CAAC1zD,GAAOtQ,MAAc;AAC1C,UAAMkY,IAAU,CAAA/G,MAAW;AACzB,YAAMqJ,IAAW40J,GAAWj+J,CAAO;AACnC,eAASrvB,IAAI04B,EAAS,SAAS,GAAG14B,KAAK,GAAGA,KAAK;AAC7C,cAAMk2B,IAAQwC,EAAS14B,CAAC;AACxB,YAAIke,EAAUgY,CAAK;AACjB,iBAAOzV,EAAS,KAAKyV,CAAK;AAE5B,cAAMG,IAAMD,EAAQF,CAAK;AACzB,YAAIG,EAAI;AACN,iBAAOA;AAAA,MAEV;AACD,aAAO5V,EAAS;IACxB;AACM,WAAO2V,EAAQ5H,CAAK;AAAA,EAC1B,GAEU4uK,KAAyB;AAAA,IAC7B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACD;AAAA,EACP,GACUC,KAAa,CAAAxoK,MAAO,MAAM;AAC9B,UAAMgsF,IAAK1uF,GAAa,QAAQ,MAAM0C,EAAI,GAAG;AAC7C,WAAAmD,GAAS6oF,GAAI1uF,GAAa,QAAQ,MAAM0C,EAAI,GAAG,CAAC,GACzCgsF;AAAA,EACb,GACUy8E,KAAY,CAAAzoK,MAAO,MAChB1C,GAAa,QAAQ,OAAO0C,EAAI,GAAG,GAEtC0oK,KAAiB,CAAA1oK,MAAO,MACrB1C,GAAa,QAAQ,YAAY0C,EAAI,GAAG,GAE3C2oK,KAAc,CAAA3oK,MAAO,MAClB1C,GAAa,QAAQ,MAAM0C,EAAI,GAAG,GAErC4oK,KAAY,CAAC72H,GAAM3tD,GAAKkX,MAAU;AACtC,UAAMssK,IAAU/O,GAAO9mH,GAAM3tD,CAAG;AAChC,WAAAsuK,GAAOp3J,GAAO,CAAChf,GAAG,MAAM;AACtB,MAAIA,MAAM,OACRqgB,EAASirK,GAAS,CAAC,IAEnBvlK,GAAMulK,GAAS,GAAGtrL,CAAC;AAAA,IAE7B,CAAO,GACMsrL;AAAA,EACb,GACUiB,KAAe,CAAA92H,MACZA,GAEH+2H,KAAe,CAACC,GAASC,GAASnpI,MACtButB,GAAM27G,CAAO,EACd,IAAI,CAAAE,MAAa;AAC9B,UAAMC,IAAiBrpI,EAAQ,KAAK,GAAG,GACjCzsB,IAAUqnJ,GAAYwO,GAAWC,GAAgB,CAAA1uK,MAC9C9Q,GAAK8Q,GAASuuK,CAAO,CAC7B;AACD,WAAO57K,GAAMimB,GAAS,CAACgzC,GAAMznD,MAAW;AACtC,YAAMwqK,KAAe/hK,GAAQzI,CAAM;AACnC,aAAAwE,GAASijD,GAAM+iH,EAAY,GACpBA;AAAA,IACR,GAAEH,CAAO;AAAA,EAClB,CAAO,EAAE,MAAMA,CAAO,GAEZI,KAA6B,CAAC10I,GAAUvsC,MAAU;AACtD,IAAAuqK,GAAO6V,IAAwB,CAACc,GAAiB9nG,MAAkB/lE,EAAOk5B,GAAU6sC,CAAa,EAAE,OAAO,CAAA+nG,MAAa58K,GAAW28K,GAAiBC,CAAS,CAAC,EAAE,KAAK,CAAAA,MAAajnK,GAAMla,GAAOo5E,GAAe+nG,CAAS,CAAC,CAAC;AAAA,EAC9N,GACUC,KAAiB,CAACx0I,GAAQ/0B,GAAKwpK,MAAmB;AACtD,UAAMC,IAAW,CAAC9yJ,GAAMxuB,MAAU;AAChC,MAAA0yK,GAAOlkJ,EAAK,SAASxuB,CAAK,GAC1Bwb,GAASxb,GAAO,QAAQ,GACpBwuB,EAAK,YAAY,KACnBhT,GAASxb,GAAO,OAAO;AAAA,IAEjC,GACY6gL,IAAU,CAAAryJ,MAAQ;AACtB,YAAMq1E,IAAK1uF,GAAa,QAAQ3N,GAAKgnB,EAAK,OAAO,GAAG3W,EAAI,GAAG,GACrD6/B,IAAU2pI,EAAe,MAAM;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACV,CAAS,GACKlxH,KAAWzY,EAAQ,SAAS,IAAIipI,GAAanyJ,EAAK,SAASq1E,GAAInsD,CAAO,IAAImsD;AAChF,aAAA7oF,GAASm1C,IAAUh7C,GAAa,QAAQ,IAAI,CAAC,GAC7CmsK,EAAS9yJ,GAAMq1E,CAAE,GACjBo9E,GAA2BzyJ,EAAK,SAASq1E,CAAE,GAC3Cj3D,EAAOpe,EAAK,SAASq1E,CAAE,GAChBA;AAAA,IACf;AAOM,WAAO;AAAA,MACL,KAPa,CAAAr1E,MAAQ;AACrB,cAAMupJ,IAAM5iK,GAAa,QAAQ3N,GAAKgnB,EAAK,OAAO,GAAG3W,EAAI,GAAG;AAC5D,eAAAypK,EAAS9yJ,GAAMupJ,CAAG,GAClBnrI,EAAOpe,EAAK,SAASupJ,CAAG,GACjBA;AAAA,MACf;AAAA,MAGQ,UAAUwI,GAAe1oK,CAAG;AAAA,MAC5B,KAAK2oK,GAAY3oK,CAAG;AAAA,MACpB,MAAMgpK;AAAA,MACN,SAASJ;AAAA,MACT,QAAQH,GAAUzoK,CAAG;AAAA,MACrB,KAAKwoK,GAAWxoK,CAAG;AAAA,IAC3B;AAAA,EACA,GACU0pK,KAAU,CAAA1pK,OACP;AAAA,IACL,KAAKyoK,GAAUzoK,CAAG;AAAA,IAClB,UAAU0oK,GAAe1oK,CAAG;AAAA,IAC5B,KAAK2oK,GAAY3oK,CAAG;AAAA,IACpB,MAAMwoK,GAAWxoK,CAAG;AAAA,IACpB,SAAS6oK;AAAA,IACT,QAAQJ,GAAUzoK,CAAG;AAAA,IACrB,KAAKwoK,GAAWxoK,CAAG;AAAA,EAC3B,IAGU8D,KAAW,CAAC/G,GAAMpD,MAAU;AAEhC,UAAMqD,KADMrD,KAAS,UACL,cAAc,KAAK;AACnC,WAAAqD,EAAI,YAAYD,GACT07J,GAAWn7J,GAAa,QAAQN,CAAG,CAAC;AAAA,EACjD,GACUuwF,KAAU,CAAAvpF,MAAStT,GAAMsT,GAAO1G,GAAa,OAAO,GAEpDsf,KAAS,CAAAjtB,MAAQ,CAAA4c,MAAUA,EAAO,QAAQ,IAAI5c,CAAI,GAClDg6K,KAAe,QACfC,KAAsB,CAAAr9J,MAAU;AACpC,QAAIp5B;AACJ,UAAMgoB,IAAMoR,EAAO,KACbiG,KAAer/B,IAAKgoB,EAAI,UAAUoR,EAAO,UAAU,SAAU,GAAEpR,EAAI,OAAO,OAAO,QAAQhoB,MAAO,SAASA,IAAKo5B,EAAO;AAC3H,WAAOywJ,GAAS1/J,GAAa,QAAQkV,CAAW,CAAC,IAAI;AAAA,EAC3D,GACUq3J,KAA8B,CAACt9J,GAAQu9J,MACvCC,GAAwBx9J,CAAM,KAAK,CAACy9J,GAAmBz9J,CAAM,IACxDu9J,IACEG,GAAoB19J,CAAM,IAC5B;AAAA,IACL,GAAGu9J;AAAA,IACH,OAAOF,GAAoBr9J,CAAM;AAAA,EAC3C,IAEe;AAAA,IACL,GAAGu9J;AAAA,IACH,OAAOH;AAAA,EACjB,GAGUO,KAAkC,CAAC39J,GAAQ49J,MAC3CJ,GAAwBx9J,CAAM,KAAKy9J,GAAmBz9J,CAAM,IACvD49J,IACEF,GAAoB19J,CAAM,IAC5B;AAAA,IACL,GAAG49J;AAAA,IACH,OAAOP,GAAoBr9J,CAAM;AAAA,EAC3C,IAEe;AAAA,IACL,GAAG49J;AAAA,IACH,OAAOR;AAAA,EACjB,GAGUr/D,KAAW,CAAA/9F,MAAU;AACzB,UAAM80B,IAAiB90B,EAAO,QAAQ;AACtC,IAAA80B,EAAe,wBAAwB,EAAE,WAAW,WAAY,CAAA,GAChEA,EAAe,uBAAuB;AAAA,MACpC,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,EAAe,qBAAqB;AAAA,MAClC,WAAW,CAAAn9C,MAAS;AAClB,cAAMg9C,IAAQx0C,GAAW;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,GAAExI,CAAK;AACR,eAAOg9C,IAAQ;AAAA,UACb,OAAAh9C;AAAA,UACA,OAAAg9C;AAAA,QACZ,IAAc;AAAA,UACF,OAAO;AAAA,UACP,SAAS;AAAA,QACrB;AAAA,MACS;AAAA,MACD,SAAS;AAAA,IACjB,CAAO,GACDG,EAAe,qBAAqB;AAAA,MAClC,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,EAAe,4BAA4B;AAAA,MACzC,WAAW;AAAA,MACX,SAAS,EAAE,QAAQ,IAAK;AAAA,IAChC,CAAO,GACDA,EAAe,wBAAwB;AAAA,MACrC,WAAW;AAAA,MACX,SAAS,EAAE,mBAAmB,WAAY;AAAA,IAClD,CAAO,GACDA,EAAe,yBAAyB;AAAA,MACtC,WAAW,CAAAn9C,MAAS;AAClB,cAAMg9C,IAAQx0C,GAAW;AAAA,UACvB;AAAA,UACA;AAAA,QACD,GAAExI,CAAK;AACR,eAAOg9C,IAAQ;AAAA,UACb,OAAAh9C;AAAA,UACA,OAAAg9C;AAAA,QACZ,IAAc;AAAA,UACF,OAAO;AAAA,UACP,SAAS;AAAA,QACrB;AAAA,MACS;AAAA,MACD,SAAS;AAAA,IACjB,CAAO,GACDG,EAAe,qBAAqB;AAAA,MAClC,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,EAAe,sBAAsB;AAAA,MACnC,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,EAAe,gCAAgC;AAAA,MAC7C,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO;AAAA,EACP,GACU+oI,KAAwB,CAAA79J,MACrB3gB,EAAS,KAAK2gB,EAAO,QAAQ,IAAI,sBAAsB,CAAC,GAE3D89J,KAAyB,CAAA99J,MAAU;AACvC,UAAM+9J,IAAiB/9J,EAAO,QAAQ,IAAI,iBAAiB;AAC3D,WAAO7f,GAAW49K,EAAe,MAAM,GAAG,GAAG,OAAO;AAAA,EAC1D,GACUC,KAAqB3tJ,GAAO,mBAAmB,GAC/C4tJ,KAAkC5tJ,GAAO,uBAAuB,GAChE6tJ,KAAgC,CAAAl+J,MAAUi+J,GAAgCj+J,CAAM,MAAM,iBACtFm+J,KAA8B,CAAAn+J,MAAUi+J,GAAgCj+J,CAAM,MAAM,eACpFo+J,KAAqB/tJ,GAAO,mBAAmB,GAC/CguJ,KAA2B,CAAAr+J,MAAUo+J,GAAmBp+J,CAAM,MAAM,YACpE09J,KAAsB,CAAA19J,MAAUo+J,GAAmBp+J,CAAM,MAAM,SAC/Dw9J,KAA0B,CAAAx9J,MAAUo+J,GAAmBp+J,CAAM,MAAM,cACnEs+J,KAAqBjuJ,GAAO,mBAAmB,GAC/CotJ,KAAqBptJ,GAAO,oBAAoB,GAChDkuJ,KAA4BluJ,GAAO,8BAA8B,GACjEmuJ,KAA4B,CAAAx+J,MAAU;AAC1C,UAAMppB,IAAUopB,EAAO,SACjB49J,IAAoBhnL,EAAQ,IAAI,0BAA0B;AAChE,WAAOA,EAAQ,MAAM,0BAA0B,IAAIgnL,IAAoBD,GAAgC39J,GAAQ49J,CAAiB;AAAA,EACtI,GACUa,KAAwB,CAAAz+J,MAAU;AACtC,UAAMppB,IAAUopB,EAAO,SACjBu9J,IAAgB3mL,EAAQ,IAAI,sBAAsB;AACxD,WAAOA,EAAQ,MAAM,sBAAsB,IAAI2mL,IAAgBD,GAA4Bt9J,GAAQu9J,CAAa;AAAA,EACtH,GACUmB,KAAsBruJ,GAAO,qBAAqB,GAElDotD,KAAU,CAAAv0E,MAAUszE,GAAUtzE,GAAQ,mBAAmB,GACzD84G,KAAe,CAAC/zG,GAASsH,IAAiB,OAC1ChB,GAAOtG,CAAO,IACTA,EAAQ,IAAI,oBAEZwvE,GAAQxvE,CAAO,EAAE,KAAK1P,GAASgX,CAAc,GAAG,CAAAC,MAAYW,GAAOX,CAAQ,MAAM,MAAM,GAG5FW,KAAS,CAAAlI,MAAWA,EAAQ,IAAI,iBAEhC0wK,KAAU,CAAA3+J,MAAUjP,GAAa,QAAQiP,EAAO,QAAO,CAAE,GACzD4+J,KAAY,CAAA5+J,MAAU,CAAA/R,MAAW9Q,GAAK8Q,GAAS0wK,GAAQ3+J,CAAM,CAAC,GAC9D6+J,KAAkB,CAAAtwG,MAAS;AAC/B,IAAAn+D,EAASm+D,GAAO,gBAAgB;AAChC,UAAMuwG,IAAuB,CAAA7wK,MAAWmC,EAASnC,GAAS,gBAAgB;AAC1E,IAAA42J,GAAOoK,GAAQ1gG,CAAK,GAAGuwG,CAAoB,GAC3Cja,GAAOqK,GAAU3gG,CAAK,GAAGuwG,CAAoB,GAC7Cja,GAAOwK,GAAO9gG,CAAK,GAAGuwG,CAAoB;AAAA,EAChD,GACUC,KAAoB,CAAA/+J,MAAUjP,GAAa,QAAQiP,EAAO,UAAU,SAAQ,CAAE,GAC9Eg/J,KAAgB,CAAA9/J,MAAOA,EAAI,sBAAqB,EAAG,OACnD+/J,KAAiB,CAAA//J,MAAOA,EAAI,sBAAqB,EAAG,QACpDggK,KAAc,CAACl/J,GAAQd,MAAQ;AACnC,UAAM9I,IAAM4J,EAAO,IAAI,SAASd,GAAK,OAAO,KAAKc,EAAO,IAAI,UAAUd,GAAK,OAAO;AAClF,WAAO7f,EAAS,KAAK+W,CAAG,EAAE,OAAO3N,EAAU;AAAA,EACjD,GACU02K,KAAiB,CAAAxnL,MAAS,mBAAmB,KAAKA,CAAK,GACvDynL,KAAU,CAAAznL,MAAS,oBAAoB,KAAKA,CAAK,GACjD0nL,KAAwB,CAAA75H,MAAQnwC,GAAUmwC,GAAM92C,GAAM,OAAO,CAAC,EAAE,OAAOszG,EAAY,GAEnFs9D,KAAc,CAACrlK,GAAQ8yJ,MAAW;AACtC,UAAMwS,IAAWxS,EAAO,QAClByS,IAAYzS,EAAO,SAASA,EAAO,UAAU,GAC7C0S,IAAU1S,EAAO,KACjB2S,IAAa3S,EAAO,MAAMA,EAAO,UAAU;AACjD,WAAOwS,KAAYtlK,EAAO,aAAaulK,KAAavlK,EAAO,YAAawlK,KAAWxlK,EAAO,aAAaylK,KAAczlK,EAAO;AAAA,EAClI,GACU0lK,KAAW,CAAC1lK,GAAQ8yJ,MACjBA,EAAO,UAAU9yJ,EAAO,YAAY8yJ,EAAO,SAASA,EAAO,UAAU,KAAK9yJ,EAAO,aAAa8yJ,EAAO,OAAO9yJ,EAAO,YAAY8yJ,EAAO,MAAMA,EAAO,UAAU,KAAK9yJ,EAAO,WAE5K2lK,KAAgB,CAAC3N,GAAWh4J,MAAW;AAC3C,QAAI4lK,IAAS;AACb,UAAMC,IAAiBphL,GAAMihL,IAAU1lK,CAAM;AAC7C,aAASr7B,IAAIq7B,EAAO,UAAUr7B,KAAKq7B,EAAO,WAAWr7B;AACnD,eAAS/D,IAAIo/B,EAAO,UAAUp/B,KAAKo/B,EAAO,WAAWp/B;AACnD,QAAAglM,IAASA,KAAUtM,GAAU,MAAMtB,GAAWrzL,GAAG/D,CAAC,EAAE,OAAOilM,CAAc;AAG7E,WAAOD,IAASxgL,EAAS,KAAK4a,CAAM,IAAI5a,EAAS;EACvD,GAEU+a,KAAY,CAAC2lK,GAASC,MACnB/lK,GAAO,KAAK,IAAI8lK,EAAQ,KAAKC,EAAQ,GAAG,GAAG,KAAK,IAAID,EAAQ,QAAQC,EAAQ,MAAM,GAAG,KAAK,IAAID,EAAQ,MAAMA,EAAQ,UAAU,GAAGC,EAAQ,MAAMA,EAAQ,UAAU,CAAC,GAAG,KAAK,IAAID,EAAQ,SAASA,EAAQ,UAAU,GAAGC,EAAQ,SAASA,EAAQ,UAAU,CAAC,CAAC,GAE5PC,KAAY,CAAChO,GAAWhiG,GAAWiwG,MAAe;AACtD,UAAMC,IAAc5M,GAAU,SAAStB,GAAWhiG,GAAW9yE,EAAI,GAC3DijL,IAAe7M,GAAU,SAAStB,GAAWiO,GAAY/iL,EAAI;AACnE,WAAOgjL,EAAY,KAAK,CAAAxzI,MACfyzI,EAAa,IAAI,CAAAC,MACfjmK,GAAUuyB,GAAI0zI,CAAE,CACxB,CACF;AAAA,EACP,GACUC,KAAW,CAACrO,GAAWhiG,GAAWiwG,MAC/BD,GAAUhO,GAAWhiG,GAAWiwG,CAAU,EAAE,KAAK,CAAAjmK,MAC/C2lK,GAAc3N,GAAWh4J,CAAM,CACvC,GAGGsmK,KAAW,CAACtO,GAAWzsH,GAAM06C,GAAK4sE,MAC/ByG,GAAU,SAAStB,GAAWzsH,GAAMroD,EAAI,EAAE,KAAK,CAAA4vK,MAAU;AAC9D,UAAMU,IAAWvtE,IAAM,IAAI6sE,EAAO,MAAMA,EAAO,UAAU,IAAIA,EAAO,KAC9DW,IAAWZ,IAAS,IAAIC,EAAO,SAASA,EAAO,UAAU,IAAIA,EAAO;AAE1E,WADawG,GAAU,MAAMtB,GAAWxE,IAAWvtE,GAAKwtE,IAAWZ,CAAM,EAC7D,IAAI,CAAAx9K,MACPA,EAAE,OACV;AAAA,EACT,CAAO,GAEGkxL,KAAe,CAACvO,GAAWrqK,GAAO0sD,MAC/B2rH,GAAUhO,GAAWrqK,GAAO0sD,CAAM,EAAE,IAAI,CAAAr6C,MAAU;AACvD,UAAM+uG,IAASuqD,GAAU,YAAYtB,GAAWvzK,GAAM4gL,IAAarlK,CAAM,CAAC;AAC1E,WAAO9V,GAAM6kH,GAAQ,CAAA+jD,MACZA,EAAO,OACf;AAAA,EACT,CAAO,GAEG0T,KAAa,CAACxO,GAAWyO,MAAc;AAC3C,UAAMC,IAAgB,CAACC,GAAIC,MAClB74K,GAAW64K,GAAID,CAAE;AAE1B,WAAOrN,GAAU,SAAStB,GAAWyO,GAAWC,CAAa,EAAE,IAAI,CAAA5T,MAC1DA,EAAO,OACf;AAAA,EACP,GAEU+T,KAAS,CAACt7H,GAAMu7H,GAAUC,MACvBzyG,GAAM/oB,CAAI,EAAE,KAAK,CAAA+oB,MAAS;AAC/B,UAAM0jG,IAAYgP,GAAa1yG,CAAK;AACpC,WAAOgyG,GAAStO,GAAWzsH,GAAMu7H,GAAUC,CAAW;AAAA,EAC9D,CAAO,GAEGE,KAAa,CAAC3yG,GAAO1N,GAAOhH,MAAS;AACzC,UAAMo4G,IAAYgP,GAAa1yG,CAAK;AACpC,WAAOiyG,GAAavO,GAAWpxG,GAAOhH,CAAI;AAAA,EAChD,GACUsnH,KAAmB,CAAC5yG,GAAO1N,GAAOugH,GAAYvnH,GAAMwnH,MAAc;AACtE,UAAMpP,IAAYgP,GAAa1yG,CAAK,GAC9B+yG,IAAenkL,GAAKoxE,GAAO6yG,CAAU,IAAI/hL,EAAS,KAAKwhE,CAAK,IAAI4/G,GAAWxO,GAAWpxG,CAAK,GAC3F0gH,IAAcpkL,GAAKoxE,GAAO8yG,CAAS,IAAIhiL,EAAS,KAAKw6D,CAAI,IAAI4mH,GAAWxO,GAAWp4G,CAAI;AAC7F,WAAOynH,EAAa,KAAK,CAAArxG,MAAasxG,EAAY,KAAK,CAAA9+E,OAAY+9E,GAAavO,GAAWhiG,GAAWwyB,EAAQ,CAAC,CAAC;AAAA,EACtH,GACU++E,KAAS,CAACjzG,GAAO1N,GAAOhH,MAAS;AACrC,UAAMo4G,IAAYgP,GAAa1yG,CAAK;AACpC,WAAO+xG,GAASrO,GAAWpxG,GAAOhH,CAAI;AAAA,EAC5C,GACUonH,KAAe1N,GAAU;AAE/B,MAAIkO,KAAgB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,GAEQC,KAAc,MAAM;AACtB,UAAM9lL,IAAQ,CAAAqS,OACL8C,GAAa,QAAQ9C,GAAQ,IAAI,UAAU,EAAK,CAAC,GAEpDyjF,IAAW,CAAAzjF,OAAW+D,GAAgB/D,EAAO,EAAE,KAC/Cy6B,IAAa,CAAAz6B,OACZy/G,GAAUz/G,EAAO,IAGlB7K,GAAK6K,EAAO,MAAM,SACb,KAEF9N,GAAWshL,IAAer+K,GAAK6K,EAAO,CAAC,IALrC,IAOL0zK,IAAa,CAAA1zK,OACZy/G,GAAUz/G,EAAO,IAGf9N,GAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACV,GAAWiD,GAAK6K,EAAO,CAAC,IAPP,IASL2zK,IAAgB,CAAA3zK,OAAWy/G,GAAUz/G,EAAO,KAAKnM,GAAMmM,IAAS,iBAAiB,MAAM,SACvF4zK,IAAkB,CAAC5zK,IAAS5U,OACzB4U,GAAQ,IAAI,wBAAwB5U,GAAM,GAAG,GAEhDyoL,IAAmB,CAACvT,IAAQwT,OAAgB;AAChD,YAAM/tL,KAAKk0C,GAAQqmI,EAAM;AACzB,MAAAz/J,GAASizK,IAAa/tL,EAAE;AAAA,IAChC,GACY6nG,IAAY,CAAA5tF,OAAW;AAC3B,YAAMpW,KAAMuL,GAAK6K,EAAO;AACxB,aAAO9N,GAAW;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAEtI,EAAG;AAAA,IACd,GACYmqL,IAAc,CAAA/zK,OAAWy/G,GAAUz/G,EAAO,IAAIgB,EAAOhB,IAAS,MAAM,IAAI5O,EAAS,KAAI;AAC3F,WAAO;AAAA,MACL,IAAId,GAAS;AAAA,QACX,UAAU6vE;AAAA,QACV,SAASoO;AAAA,QACT,WAAW/hE;AAAA,QACX,KAAKoM;AAAA,MACf,CAAS;AAAA,MACD,MAAMtoB,GAAS;AAAA,QACb,UAAUic;AAAA,QACV,WAAWD;AAAA,MACrB,CAAS;AAAA,MACD,QAAQhc,GAAS;AAAA,QACf,KAAK+E;AAAA,QACL,QAAQ+qK;AAAA,QACR,KAAK12J;AAAA,QACL,QAAQP;AAAA,MAClB,CAAS;AAAA,MACD,OAAO7Y,GAAS;AAAA,QACd,KAAKuD;AAAA,QACL,KAAKgU;AAAA,QACL,QAAQ1F;AAAA,QACR,QAAQ0xK;AAAA,MAClB,CAAS;AAAA,MACD,QAAQvjL,GAAS;AAAA,QACf,QAAQkY;AAAA,QACR,OAAO21J;AAAA,QACP,UAAUz1J;AAAA,QACV,QAAQC;AAAA,QACR,WAAWK;AAAA,QACX,SAASJ;AAAA,QACT,MAAM8qF;AAAA,MAChB,CAAS;AAAA,MACD,QAAQpjG,GAAS;AAAA,QACf,QAAQ8Y;AAAA,QACR,QAAQd;AAAA,MAClB,CAAS;AAAA,MACD,QAAQhY,GAAS;AAAA,QACf,IAAIwS,GAAa;AAAA,QACjB,OAAAnV;AAAA,QACA,MAAMmV,GAAa;AAAA,MAC7B,CAAS;AAAA,MACD,OAAOxS,GAAS;AAAA,QACd,iBAAAsjL;AAAA,QACA,aAAa9uK;AAAA,QACb,aAAaC;AAAA,MACvB,CAAS;AAAA,MACD,UAAUzU,GAAS;AAAA,QACjB,UAAU2tK;AAAA,QACV,MAAM9oK;AAAA,QACN,QAAQgP;AAAA,QACR,UAAAs/E;AAAA,QACA,QAAQ6vD;AAAA,QACR,WAAW7kI;AAAA,QACX,WAAWgxG;AAAA,QACX,WAAA7xB;AAAA,QACA,aAAAmmF;AAAA,QACA,SAAStqK;AAAA,QACT,SAASsG;AAAA,QACT,YAAA0qB;AAAA,QACA,YAAAi5I;AAAA,QACA,eAAAC;AAAA,MACV,CAAS;AAAA,MACD,IAAIzkL;AAAA,MACJ,IAAIiU;AAAA,IACZ;AAAA,EACA;AAEI,QAAMvS,KAAM,CAACojL,GAAUC,GAAMrvK,GAAU,MAAM;AAC3C,UAAM9Q,IAAO8Q,EAAS,CAAC,GACjBsvK,IAAOtvK,EAAS,MAAM,CAAC;AAC7B,WAAO,EAAEovK,GAAUC,GAAMngL,GAAMogL,CAAI;AAAA,EACzC,GACUC,KAAS,CAACH,GAAUC,GAAMrvK,MACvBA,EAAS,SAAS,IAAIhU,GAAIojL,GAAUC,GAAMrvK,GAAUwvK,EAAS,IAAIhjL,EAAS,KAAI,GAEjFgjL,KAAY,CAACJ,GAAUC,GAAMngL,GAAMogL,MAAS;AAChD,UAAMv6K,IAAQs6K,EAAKD,GAAUlgL,CAAI;AACjC,WAAOnB,GAAMuhL,GAAM,CAACryL,GAAGxV,MAAM;AAC3B,YAAMsvB,IAAUs4K,EAAKD,GAAU3nM,CAAC;AAChC,aAAOgoM,GAAcL,GAAUnyL,GAAG8Z,CAAO;AAAA,IAC1C,GAAEhC,CAAK;AAAA,EACd,GACU06K,KAAgB,CAACL,GAAUr6K,GAAOK,MAC/BL,EAAM,KAAK,CAAA9oB,MACTmpB,EAAI,OAAOvJ,GAAMujL,EAAS,IAAInjM,CAAC,CAAC,CACxC,GAGG6kB,KAAK,CAACs+K,GAAU39K,MACb5F,GAAMujL,EAAS,IAAI39K,CAAI,GAE1Bi+K,KAAc,CAACN,GAAUr6K,GAAOK,GAAKsK,IAASpT,OAAU;AAC5D,UAAMqjL,IAAM,CAAC56K,CAAK,EAAE,OAAOq6K,EAAS,KAAK,IAAIr6K,CAAK,CAAC,GAC7C66K,IAAM,CAACx6K,CAAG,EAAE,OAAOg6K,EAAS,KAAK,IAAIh6K,CAAG,CAAC,GACzCy6K,IAAQ,CAAAv2K,OACEikC,GAAUjkC,IAAMoG,CAAM,EACvB,KAAK,MACTpG,IACN,CAAAw2K,OACMx2K,GAAK,MAAM,GAAGw2K,KAAM,CAAC,CAC7B,GAEGC,IAAUF,EAAMF,CAAG,GACnBK,IAAUH,EAAMD,CAAG,GACnBK,KAAS/8K,EAAO68K,GAAS,CAAA7lM,OACtBqjB,GAAOyiL,GAASl/K,GAAGs+K,GAAUllM,EAAC,CAAC,CACvC;AACD,WAAO;AAAA,MACL,WAAW6lM;AAAA,MACX,YAAYC;AAAA,MACZ,QAAAC;AAAA,IACR;AAAA,EACA,GAEUC,KAAcX,IACdY,KAAcT,IAEdU,KAAavB,MACbwB,KAAY,CAAChB,GAAMrvK,MAChBkwK,GAAYE,IAAY,CAACE,GAAWl1K,MAClCi0K,EAAKj0K,CAAO,GAClB4E,CAAQ,GAEP8rG,KAAY,CAAC/2G,GAAO0sD,GAAQ/hD,MACzBywK,GAAYC,IAAYr7K,GAAO0sD,GAAQ/hD,CAAM,GAGhD6wK,KAAc,CAAAnrK,MACXm2D,GAAWn2D,GAAW,OAAO,GAEhC2tB,KAAW,CAACh+B,GAAO0sD,GAAQ/hD,MAAW;AAC1C,UAAMqsK,IAAY,CAAAyE,MACT,CAAAp1K,MACEsE,MAAW,UAAaA,EAAOtE,CAAO,KAAK9Q,GAAK8Q,GAASo1K,CAAS;AAG7E,WAAIlmL,GAAKyK,GAAO0sD,CAAM,IACbj1D,EAAS,KAAK;AAAA,MACnB,OAAOA,EAAS,KAAK,CAACuI,CAAK,CAAC;AAAA,MAC5B,OAAAA;AAAA,MACA,QAAA0sD;AAAA,IACV,CAAS,IAEM8uH,GAAYx7K,CAAK,EAAE,KAAK,CAAA+mE,MACtBy0G,GAAY9uH,CAAM,EAAE,KAAK,CAAAgvH,MAAe;AAC7C,UAAInmL,GAAKwxE,GAAY20G,CAAW;AAC9B,eAAOjkL,EAAS,KAAK;AAAA,UACnB,OAAO6hL,GAAWvyG,GAAY/mE,GAAO0sD,CAAM;AAAA,UAC3C,OAAA1sD;AAAA,UACA,QAAA0sD;AAAA,QAChB,CAAe;AACI,UAAItsD,GAAW2mE,GAAY20G,CAAW,GAAG;AAC9C,cAAMC,IAAgBrV,GAAY55G,GAAQ,SAASsqH,EAAUjwG,CAAU,CAAC,GAClEuxG,IAAaqD,EAAc,SAAS,IAAIA,EAAcA,EAAc,SAAS,CAAC,IAAIjvH;AACxF,eAAOj1D,EAAS,KAAK;AAAA,UACnB,OAAO8hL,GAAiBxyG,GAAY/mE,GAAO+mE,GAAYra,GAAQgvH,CAAW;AAAA,UAC1E,OAAA17K;AAAA,UACA,QAAQs4K;AAAA,QACxB,CAAe;AAAA,MACF,WAAUl4K,GAAWs7K,GAAa30G,CAAU,GAAG;AAC9C,cAAM40G,IAAgBrV,GAAYtmK,GAAO,SAASg3K,EAAU0E,CAAW,CAAC,GAClErzG,IAAYszG,EAAc,SAAS,IAAIA,EAAcA,EAAc,SAAS,CAAC,IAAI37K;AACvF,eAAOvI,EAAS,KAAK;AAAA,UACnB,OAAO8hL,GAAiBmC,GAAa17K,GAAO+mE,GAAYra,GAAQgvH,CAAW;AAAA,UAC3E,OAAA17K;AAAA,UACA,QAAQqoE;AAAA,QACxB,CAAe;AAAA,MACf;AACc,eAAO0uC,GAAU/2G,GAAO0sD,CAAM,EAAE,OAAO,KAAK,CAAAkvH,MACnChnG,GAAUgnG,GAAK,SAASjxK,CAAM,EAAE,KAAK,CAAAkxK,MAAY;AACtD,gBAAMC,IAAsBxV,GAAY55G,GAAQ,SAASsqH,EAAU6E,CAAQ,CAAC,GACtEvD,KAAawD,EAAoB,SAAS,IAAIA,EAAoBA,EAAoB,SAAS,CAAC,IAAIpvH,GACpGqvH,KAAqBzV,GAAYtmK,GAAO,SAASg3K,EAAU6E,CAAQ,CAAC,GACpExzG,KAAY0zG,GAAmB,SAAS,IAAIA,GAAmBA,GAAmB,SAAS,CAAC,IAAI/7K;AACtG,iBAAOvI,EAAS,KAAK;AAAA,YACnB,OAAO8hL,GAAiBsC,GAAU77K,GAAO+mE,GAAYra,GAAQgvH,CAAW;AAAA,YACxE,OAAOrzG;AAAA,YACP,QAAQiwG;AAAA,UAC5B,CAAmB;AAAA,QACnB,CAAiB,CACF;AAAA,IAEf,CAAW,CACF;AAAA,EAET,GACU0D,KAAa,CAAC3rK,GAAW5G,MAAa;AAC1C,UAAMwyK,IAAOrpK,GAAYvC,GAAW5G,CAAQ;AAC5C,WAAOwyK,EAAK,SAAS,IAAIxkL,EAAS,KAAKwkL,CAAI,IAAIxkL,EAAS;EAC9D,GACUykL,KAAU,CAACC,GAAOC,MACfj+K,EAAOg+K,GAAO,CAAA9qK,MACZ3M,GAAK2M,GAAK+qK,CAAoB,CACtC,GAEGC,KAAW,CAAChsK,GAAWisK,GAAuBF,MAC3C79I,EAAWluB,GAAWisK,CAAqB,EAAE,KAAK,CAAArjH,MAChD16B,EAAWluB,GAAW+rK,CAAoB,EAAE,KAAK,CAAAnqH,MAC/CqpH,GAAUE,IAAa;AAAA,IAC5BviH;AAAA,IACAhH;AAAA,EACZ,CAAW,EAAE,IAAI,CAAA0U,OACE;AAAA,IACL,OAAA1N;AAAA,IACA,MAAAhH;AAAA,IACA,OAAA0U;AAAA,EACd,EACW,CACF,CACF,GAEG41G,KAAW,CAAC7vH,GAAQ4vH,MACjB91G,GAAW9Z,GAAQ,OAAO,EAAE,KAAK,CAAAia,MAC/BpoC,EAAWooC,GAAO21G,CAAqB,EAAE,KAAK,CAAAt8K,MAC5Cg+B,GAASh+B,GAAO0sD,CAAM,EAAE,KAAK,CAAA8vH,MAC3BA,EAAW,MAAM,IAAI,CAAAL,OACnB;AAAA,IACL,OAAAA;AAAA,IACA,OAAOK,EAAW;AAAA,IAClB,QAAQA,EAAW;AAAA,EACnC,EACa,CACF,CACF,CACF,GAEGC,KAAiB,CAACN,GAAOhD,GAAUC,GAAakD,GAAuBF,MACpEF,GAAQC,GAAOC,CAAoB,EAAE,KAAK,CAAAnqH,MACxCinH,GAAOjnH,GAAMknH,GAAUC,CAAW,EAAE,KAAK,CAAA1sH,MACvC6vH,GAAS7vH,GAAQ4vH,CAAqB,CAC9C,CACF,GAGGI,KAAW,CAACrsK,GAAW5G,MACpBuyK,GAAW3rK,GAAW5G,CAAQ,GAEjCkzK,KAAc,CAACtsK,GAAWisK,GAAuBF,MAC9CC,GAAShsK,GAAWisK,GAAuBF,CAAoB,EAAE,KAAK,CAAAQ,MAAS;AACpF,UAAMjyK,IAAS,CAAAkC,MACNtX,GAAK8a,GAAWxD,CAAQ,GAE3BgwK,IAAkB,2BAClBC,IAAgBt2G,GAAWo2G,EAAM,OAAOC,GAAiBlyK,CAAM,GAC/DoyK,IAAev2G,GAAWo2G,EAAM,MAAMC,GAAiBlyK,CAAM;AACnE,WAAOmyK,EAAc,KAAK,CAAAE,MACjBD,EAAa,KAAK,CAAAE,OAChB1nL,GAAKynL,GAAIC,EAAE,IAAIrD,GAAOgD,EAAM,OAAOA,EAAM,OAAOA,EAAM,IAAI,IAAInlL,EAAS,KAAI,CACnF,CACF;AAAA,EACT,CAAO,GAGG4wC,KAAYzxC,IACZsmL,KAAa,CAAAz/H,MAAiB;AAClC,UAAM0/H,IAAU,CAACzzK,GAAMxY,MAASmW,EAAOqC,GAAMxY,CAAI,EAAE,OAAO,CAAAmhE,MAAQ,SAASA,GAAM,EAAE,IAAI,CAAC,GAClF+qH,IAAkB,CAAA1zK,MAAQyzK,EAAQzzK,GAAM,SAAS,KAAKyzK,EAAQzzK,GAAM,SAAS;AACnF,WAAO+zC,EAAc,SAAS,KAAKhkD,GAAOgkD,GAAe2/H,CAAe,IAAI3lL,EAAS,KAAKgmD,CAAa,IAAIhmD,EAAS,KAAI;AAAA,EAC9H,GACU4lL,KAAW,CAAC12G,GAAOlpB,GAAe6/H,MAClC7/H,EAAc,UAAU,IACnBhmD,EAAS,SAETklL,GAAYh2G,GAAO22G,EAAS,uBAAuBA,EAAS,oBAAoB,EAAE,IAAI,CAAAjrK,OAAW;AAAA,IACtG,QAAAA;AAAA,IACA,OAAOorC;AAAA,EACR,EAAC,GAIA8/H,KAAc,qBACdC,KAAsB,QAAQD,KAAc,UAAUA,KAAc,KACpEE,KAAuB,MAAMF,KAAc,KAC3CG,KAAmB,2BACnBC,KAA2B,QAAQD,KAAmB,UAAUA,KAAmB,KACnFE,KAAkB,0BAClBC,KAA0B,QAAQD,KAAkB,UAAUA,KAAkB,KAChFE,KAAoBL,IACpBH,KAAW;AAAA,IACf,UAAUC;AAAA,IACV,kBAAkBC;AAAA,IAClB,eAAeE;AAAA,IACf,uBAAuBC;AAAA,IACvB,cAAcC;AAAA,IACd,sBAAsBC;AAAA,EAC5B,GAEUE,KAAU,CAACtgI,GAAekpB,GAAO/oB,OAAU;AAAA,IAC/C,SAASA;AAAA,IACT,UAAUy/H,GAAS12G,GAAOlpB,GAAe6/H,EAAQ;AAAA,IACjD,YAAYJ,GAAWz/H,CAAa;AAAA,IACpC,WAAWpV,GAAUoV,CAAa;AAAA,EACxC,IACUugI,KAAQ,CAAC33K,GAAS43K,GAAWC,OAAgB;AAAA,IACjD,SAAA73K;AAAA,IACA,WAAA43K;AAAA,IACA,YAAAC;AAAA,EACN,IACUC,KAAY,CAAC1gI,GAAe2gI,GAAOH,GAAWC,OAAgB;AAAA,IAClE,WAAW71I,GAAUoV,CAAa;AAAA,IAClC,WAAAwgI;AAAA,IACA,YAAAC;AAAA,EACN,IAEUG,KAA2B,CAAAh4K,MAAWsgE,GAAMtgE,CAAO,EAAE,KAAK,CAAAsgE,MAAS+1G,GAAS/1G,GAAO22G,GAAS,qBAAqB,CAAC,EAAE,KAAK3mL,GAAS0P,CAAO,GAAG,CAAAqhE,MAASA,EAAM,CAAC,CAAC,GAC7J42G,KAA2B,CAAA70K,MAAY,CAAC80K,GAAU5zK,MAAW;AACjE,UAAM6zK,IAAWhjL,GAAK+iL,CAAQ,GACxB3gI,IAAO4gI,MAAa,SAASA,MAAa,aAAaH,GAAyBE,CAAQ,IAAIA;AAClG,WAAO3pG,GAAUh3B,GAAMn0C,GAAUkB,CAAM;AAAA,EAC7C,GACU8zK,KAA4BH,GAAyB,eAAe,GACpEI,KAAmBJ,GAAyB,OAAO,GACnDK,KAAwB,CAAAvmK,MAAUghF,GAAQhhF,EAAO,MAAM,MAAM,iBAAgB,CAAE,GAC/EwmK,KAA4B,CAAAxmK,MAAU81D,GAASywG,GAAsBvmK,CAAM,GAAG,CAAAwlC,MAAQl5C,GAAKk5C,GAAM0/H,GAAS,gBAAgB,CAAC,GAE3HuB,KAAkB,CAAAn3G,MACff,GAAMe,EAAM,CAAC,CAAC,EAAE,IAAI,CAAAf,MAAS;AAClC,UAAM8sG,IAAUM,GAAUptG,GAAOm3G,EAAiB;AAClD,WAAA7G,GAAgBxD,CAAO,GAChB,CAACA,CAAO;AAAA,EACvB,CAAO,GAEGqL,KAAoB,CAAC1mK,GAAQnN,MAAa1O,GAAM0O,GAAU,CAAAqM,MAAOc,EAAO,UAAU,WAAW,UAAUd,EAAI,KAAK,CAAE,CAAA,CAAC,EAAE,KAAK,EAAE,GAC5HikF,KAAiB,CAAAtwF,MAAY1O,GAAM0O,GAAU,CAAA5E,MAAWA,EAAQ,IAAI,SAAS,EAAE,KAAK,EAAE,GACtFmyG,KAAiB,CAACpgG,GAAQ2mK,MAAY;AAC1C,IAAA3mK,EAAO,GAAG,oBAAoB,CAAA9lC,MAAK;AACjC,YAAM0sM,IAAmB,CAAAt3G,MAAS;AAChC,QAAAp1F,EAAE,eAAc,GAChBusM,GAAgBn3G,CAAK,EAAE,KAAK,CAAAz8D,MAAY;AACtC,UAAA34B,EAAE,UAAUA,EAAE,WAAW,SAASipH,GAAetwF,CAAQ,IAAI6zK,GAAkB1mK,GAAQnN,CAAQ;AAAA,QAC3G,CAAW;AAAA,MACX;AACQ,UAAI34B,EAAE,cAAc,IAAM;AACxB,cAAMo1F,IAAQk3G,GAA0BxmK,CAAM;AAC9C,QAAIsvD,EAAM,UAAU,KAClBs3G,EAAiBt3G,CAAK;AAAA,MAEzB;AAAA,IACT,CAAO,GACDtvD,EAAO,GAAG,oBAAoB,CAAA9lC,MAAK;AACjC,UAAIA,EAAE,cAAc,MAAQA,EAAE,UAAU,IAAM;AAC5C,cAAMmrE,IAAgBkhI,GAAsBvmK,CAAM;AAClD,QAAAje,EAAKsjD,CAAa,EAAE,KAAK,CAAAG,MAAQ;AAC/B,UAAA+oB,GAAM/oB,CAAI,EAAE,KAAK,CAAA+oB,MAAS;AACxB,kBAAM17D,IAAWijE,GAASv+D,GAASr9B,EAAE,OAAO,GAAG,CAAA09B,MACtCxU,GAAKwU,CAAO,MAAM,MAC1B,GACKmK,IAAUrT,GAAM,OAAO;AAC7B,gBAAI6vK,GAA0Bv+J,CAAM,KAAKnN,EAAS,WAAW,KAAKkP,EAAQlP,EAAS,CAAC,CAAC,GAAG;AACtF,cAAA34B,EAAE,eAAc;AAChB,oBAAMu5B,IAAM1C,GAAa,QAAQiP,EAAO,OAAQ,CAAA,GAC1C8lK,KAAa3I,GAAQ1pK,CAAG,GACxBw+C,KAAU2zH,GAAMpgI,GAAM3yC,EAAS,CAAC,GAAGizK,EAAU;AACnD,cAAAa,EAAQ,WAAWp4G,GAAOtc,EAAO,EAAE,KAAK,MAAM;AAC5C,gBAAAjyC,EAAO,MAAK;AAAA,cAC9B,CAAiB;AAAA,YACF;AAAA,UACf,CAAa;AAAA,QACb,CAAW;AAAA,MACF;AAAA,IACT,CAAO;AAAA,EACP,GAEU8vB,KAAQ,CAAC7hC,GAASzX,OAAY;AAAA,IAClC,SAAAyX;AAAA,IACA,QAAAzX;AAAA,EACN,IAEUqwL,KAAS,CAAC5E,GAAUh0K,GAAS26B,MAC7Bq5I,EAAS,SAAQ,EAAG,OAAOh0K,CAAO,KAAKg0K,EAAS,SAAQ,EAAG,QAAQh0K,CAAO,EAAE,KAAI,EAAG,WAAW,KAAKg0K,EAAS,SAAU,EAAC,UAAUh0K,CAAO,IACnI26B,EAAU36B,CAAO,EAAE,KAAK,CAAAqD,MACtBu1K,GAAO5E,GAAU3wK,GAAMs3B,CAAS,EAAE,QAAQ,MACxCvpC,EAAS,KAAKiS,CAAI,CAC1B,CACF,IAEMjS,EAAS,QAGdynL,KAAQ,CAAC7E,GAAUh0K,MACnBg0K,EAAS,SAAQ,EAAG,OAAOh0K,CAAO,IAC7Bg0K,EAAS,SAAU,EAAC,QAAQh0K,CAAO,EAAE,SAE7Bg0K,EAAS,SAAU,EAAC,SAASh0K,CAAO,EACrC,QAEZ84K,KAAgB,CAAC9E,GAAUh0K,MAAY;AAC3C,UAAM/G,IAAY2/K,GAAO5E,GAAUh0K,GAASg0K,EAAS,MAAK,EAAG,WAAW,EAAE,MAAMh0K,CAAO;AACvF,QAAIg0K,EAAS,SAAQ,EAAG,OAAO/6K,CAAS;AACtC,aAAO4oC,GAAM5oC,GAAW4/K,GAAM7E,GAAU/6K,CAAS,CAAC;AAEpD,UAAMoQ,IAAW2qK,EAAS,SAAU,EAAC,SAAS/6K,CAAS;AACvD,WAAOoQ,EAAS,SAAS,IAAIyvK,GAAc9E,GAAU3qK,EAASA,EAAS,SAAS,CAAC,CAAC,IAAIw4B,GAAM5oC,GAAW4/K,GAAM7E,GAAU/6K,CAAS,CAAC;AAAA,EACvI,GAEU8/K,KAAgBD,IAEhBE,KAAavF,MACb1zG,KAAc,CAAA//D,MACX+4K,GAAcC,IAAYh5K,CAAO,GAGpCi5K,KAAQ,CAACC,GAAM9tL,MAAU;AAC7B,IAAKs1K,GAAWwY,CAAI,KACJ1P,GAAgB0P,CAAI,EAC5B,KAAK,CAAArsM,MAAK;AACd,YAAMi/L,IAAWj/L,EAAE,QAAQ;AAC3B,MAAA48L,GAAgByP,GAAMpN,GAAUj/L,EAAE,IAAI,GACtC48L,GAAgBr+K,GAAO0gL,GAAUj/L,EAAE,IAAI;AAAA,IACjD,CAAS;AAAA,EAET,GAEU2+L,KAAO,CAAAz1K,MAASG,GAAMH,GAAOzF,GAAS,CAAC,CAAC,GACxC6oL,KAAW,CAACC,GAAOx2G,GAAYC,GAAUnnD,GAAS5qC,MAAMA,EAAEsoM,EAAM,MAAM,GAAGx2G,CAAU,CAAC,EAAE,OAAOlnD,CAAO,EAAE,OAAO5qC,EAAEsoM,EAAM,MAAMv2G,CAAQ,CAAC,CAAC,GACrIw2G,KAAmB,CAAAxqL,MAAa,CAACuqL,GAAO3uL,GAAO8sE,GAAO+hH,MAAgB;AAC1E,QAAKzqL,EAAU0oE,CAAK,GAEb;AACL,YAAMwxG,IAAU,KAAK,IAAIuQ,GAAaF,EAAM3uL,CAAK,IAAI,KAAK,IAAI8sE,CAAK,CAAC,GAC9D6+B,IAAO,KAAK,IAAI2yE,IAAUqQ,EAAM3uL,CAAK,CAAC;AAC5C,aAAO8sE,KAAS,IAAI6+B,IAAO,CAACA;AAAA,IAC7B;AALC,aAAO7+B;AAAA,EAMf,GACUgiH,KAAqBF,GAAiB,CAAA9hH,MAASA,IAAQ,CAAC,GACxDiiH,KAAaH,GAAiBloL,EAAM,GACpCsoL,KAAc,MAAM;AACxB,UAAMC,IAAkB,CAACN,GAAO3uL,GAAO2xB,IAAMm7C,IAAO+hH,OAAgB;AAClE,YAAMK,KAAeJ,GAAmBH,GAAO3uL,GAAO8sE,IAAO+hH,EAAW;AACxE,aAAOH,GAASC,GAAO3uL,GAAO2xB,KAAO,GAAG;AAAA,QACtCu9J;AAAA,QACA;AAAA,MACD,GAAEnO,EAAI;AAAA,IACf,GACYoO,IAAqB,CAACR,GAAO3uL,GAAO8sE,IAAO+hH,OAAgB;AAC/D,YAAMl2H,MAAS,MAAMmU,MAAS,KACxBsiH,KAAU,KAAK,IAAIP,KAAcF,EAAM3uL,CAAK,IAAI8sE,MAASnU,EAAK;AACpE,aAAOltD,GAAMkjL,GAAO,CAAC7qJ,IAAMt0B,QACTA,OAAQxP,IAAQovL,KAAUtrJ,KAAO60B,MAChC70B,EAClB;AAAA,IACT,GACYurJ,IAAqB,CAACV,GAAO3uL,GAAO2xB,IAAMm7C,IAAO+hH,IAAaS,OAC9DA,KACKH,EAAmBR,GAAO3uL,GAAO8sE,IAAO+hH,EAAW,IAEnDI,EAAgBN,GAAO3uL,GAAO2xB,IAAMm7C,IAAO+hH,EAAW;AA6BjE,WAAO;AAAA,MACL,aA1BkB,CAACU,GAASziH,MAAUyiH,EAAQziH,CAAK;AAAA,MA2BnD,iBAAiBgiH;AAAA,MACjB,oBAAAO;AAAA,MACA,kBA9BuB,CAACV,GAAOa,GAAOxvL,IAAO2xB,IAAMm7C,IAAO+hH,IAAaS,OAAeD,EAAmBV,GAAO3uL,IAAO2xB,IAAMm7C,IAAO+hH,IAAaS,EAAU;AAAA,MA+B3J,qBA7B0B,CAACX,GAAOa,GAAOxvL,IAAO8sE,IAAO+hH,IAAaS,OAAe;AACnF,YAAIA;AACF,iBAAOH,EAAmBR,GAAO3uL,IAAO8sE,IAAO+hH,EAAW;AACrD;AACL,gBAAMK,KAAeJ,GAAmBH,GAAO3uL,IAAO8sE,IAAO+hH,EAAW;AACxE,iBAAO9N,GAAK4N,EAAM,MAAM,GAAG3uL,EAAK,CAAC,EAAE,OAAO,CAACkvL,EAAY,CAAC;AAAA,QACzD;AAAA,MACT;AAAA,MAuBQ,yBAtB8B,CAACP,GAAOc,GAAYC,IAAYJ,OAAe;AAC7E,YAAIA,IAAY;AAEd,gBAAM32H,MADa82H,IAAaC,MACLD,GACrBE,KAAWlkL,GAAMkjL,GAAO,CAAA7qJ,OAAQA,KAAO60B,EAAK;AAClD,iBAAO;AAAA,YACL,OAAOA,KAAQ,MAAM;AAAA,YACrB,UAAAg3H;AAAA,UACZ;AAAA,QACA;AACU,iBAAO;AAAA,YACL,OAAOD;AAAA,YACP,UAAUf;AAAA,UACtB;AAAA,MAEA;AAAA,IAQA;AAAA,EACA,GACUiB,KAAgB,MAAM;AAC1B,UAAMP,IAAqB,CAACV,GAAO3uL,GAAO2xB,GAAMm7C,IAAO+hH,OAAgB;AACrE,YAAMr/K,KAAMs9D,MAAS,IAAIn7C,IAAO3xB,GAC1BkvL,KAAeH,GAAWJ,GAAOn/K,IAAKs9D,IAAO+hH,EAAW;AAC9D,aAAOH,GAASC,GAAO3uL,GAAO2xB,IAAO,GAAG;AAAA,QACtCu9J;AAAA,QACA,CAACA;AAAA,MACF,GAAEnO,EAAI;AAAA,IACf;AA+BM,WAAO;AAAA,MACL,aA9BkB,CAACwO,GAASziH,GAAO+iH,MAAiB;AACpD,QAAIA,KACFN,EAAQziH,CAAK;AAAA,MAEvB;AAAA,MA2BQ,iBAlBsB,CAAC6hH,GAAO3uL,GAAO8sE,GAAO+hH,IAAagB,OAAiB;AAC1E,YAAIA,IAAc;AAChB,cAAI/iH,KAAS;AACX,mBAAOA;AACF;AACL,kBAAMgjH,KAAW1nL,GAAMumL,GAAO,CAAC/sM,IAAGwV,OAAMxV,KAAIwV,KAAIy3L,IAAa,CAAC;AAC9D,mBAAO,KAAK,IAAI,CAACiB,IAAUhjH,CAAK;AAAA,UACjC;AAAA,QACX;AACU,iBAAOgiH,GAAmBH,GAAO3uL,GAAO8sE,GAAO+hH,EAAW;AAAA,MAEpE;AAAA,MAQQ,oBAAAQ;AAAA,MACA,kBAlCuB,CAACV,GAAOa,GAAOxvL,GAAO2xB,IAAMm7C,IAAO+hH,OAAgBQ,EAAmBV,GAAO3uL,GAAO2xB,IAAMm7C,IAAO+hH,EAAW;AAAA,MAmCnI,qBA7B0B,CAACF,GAAOa,GAAOn/E,GAAQvjC,IAAOijH,IAAcT,OAAe;AACrF,YAAIA;AACF,iBAAOvO,GAAK4N,CAAK;AACZ;AACL,gBAAMhjF,KAAO7+B,KAAQ6hH,EAAM;AAC3B,iBAAOljL,GAAMkjL,GAAO9oL,GAAS8lG,EAAI,CAAC;AAAA,QACnC;AAAA,MACT;AAAA,MAuBQ,yBAV8B,CAACgjF,GAAOqB,GAAaC,GAAaC,QAAiB;AAAA,QACjF,OAAO;AAAA,QACP,UAAUvB;AAAA,MAClB;AAAA,IAQA;AAAA,EACA,GAEUwB,KAAc,CAAAt6G,MACAglG,GAAU,UAAUhlG,CAAK,EAC1B,MAGbu6G,KAAep6K,GAAM,IAAI,GACzBq6K,KAAgB,CAAAz5G,MAASjuE,GAAOiuE,GAAO,CAAA9pB,MAAQsjI,GAAatjI,EAAK,OAAO,CAAC,GACzEwjI,KAAmB,CAACC,GAAaF,MACjCE,KAAeF,IACV,iBACEE,IACF,YAEA,SAGLC,KAAa,CAAAhpF,MAAO;AACxB,UAAM+oF,IAAc/oF,EAAI,YAAY,SAC9B6oF,IAAgB70L,GAAGi1L,GAAmBjpF,EAAI,KAAK,GAAG,IAAI;AAC5D,WAAIA,EAAI,YAAY,UACX,EAAE,MAAM,aACN+oF,KAAeF,IACjB;AAAA,MACL,MAAM;AAAA,MACN,SAASC,GAAiBC,GAAaF,CAAa;AAAA,IAC9D,IAEe,EAAE,MAAM;EAEvB,GACUI,KAAqB,CAAA75G,MAAS;AAClC,UAAM85G,IAActzG,GAASxG,GAAO,CAAA9pB,MAAQsjI,GAAatjI,EAAK,OAAO,CAAC;AACtE,WAAI4jI,EAAY,WAAW,IAClB/pL,EAAS,KAAK,IAAI,IAChB+pL,EAAY,WAAW95G,EAAM,SAC/BjwE,EAAS,KAAK,IAAI,IAElBA,EAAS;EAExB,GACUgqL,KAAoB,CAAAt5G,MAAQ;AAChC,UAAMu5G,IAAWnlL,GAAM4rE,GAAM,CAAAmwB,MAAOgpF,GAAWhpF,CAAG,EAAE,IAAI,GAClDqpF,IAAYppL,GAAWmpL,GAAU,QAAQ,GACzCE,IAAYrpL,GAAWmpL,GAAU,QAAQ;AAC/C,QAAI,CAACC,KAAa,CAACC;AACjB,aAAOnqL,EAAS,KAAK,MAAM;AACtB;AACL,YAAMoqL,IAAUtpL,GAAWmpL,GAAU,MAAM;AAC3C,aAAIC,KAAa,CAACE,KAAW,CAACD,IACrBnqL,EAAS,KAAK,QAAQ,IACpB,CAACkqL,KAAa,CAACE,KAAWD,IAC5BnqL,EAAS,KAAK,QAAQ,IAEtBA,EAAS;IAEnB;AAAA,EACP,GACUqqL,KAAyB,CAAAzX,MAAa/vK,GAAQ+vK,EAAU,KAAK,CAAA/xE,MAAO;AACxE,UAAMypF,IAAUT,GAAWhpF,CAAG;AAC9B,WAAOypF,EAAQ,SAAS,WAAWtqL,EAAS,KAAKsqL,EAAQ,OAAO,IAAItqL,EAAS;EACnF,CAAK,GAEKuqL,KAAgB,CAACpkI,GAAM5jD,GAAYioL,MAAiBtc,GAAWsc,EAAarkI,EAAK,SAAS5jD,CAAU,GAAG,IAAM4jD,EAAK,QAAQ,GAC1HskI,KAAe,CAAC5pF,GAAKmtE,MAAYntE,EAAI,YAAYmtE,IAAUG,GAASttE,EAAI,SAASA,EAAI,OAAOmtE,GAASntE,EAAI,KAAK,IAAIA,GAClHmtE,KAAU,OAAO;AAAA,IACrB,cAAAyc;AAAA,IACA,eAAe,CAACtkI,GAAM5jD,GAAYioL,MAAiB;AACjD,YAAMpN,IAAUoN,EAAarkI,EAAK,SAAS5jD,CAAU,GAC/CmoL,IAAY3mL,GAAKq5K,CAAO,MAAM,OAAOjQ,GAASiQ,GAAS,IAAI,IAAIA;AACrE,aAAOlP,GAAWwc,GAAWvkI,EAAK,OAAOA,EAAK,QAAQ;AAAA,IACvD;AAAA,EACP,IACUwkI,KAAe,OAAO;AAAA,IAC1B,cAAAF;AAAA,IACA,eAAAF;AAAA,EACN,IACUt6G,KAAQ,OAAO;AAAA,IACnB,cAAc,CAAC4wB,GAAKmtE,MAEXyc,GAAa5pF,GADDmtE,MAAY,UAAU,UAAUA,CAChB;AAAA,IAErC,eAAAuc;AAAA,EACN,IAiBUK,KAAe;AAAA,IACnB,qBAb0B,CAAC17G,GAAOwyD,MAAa;AAC/C,YAAMkxC,IAAYsB,GAAU,UAAUhlG,CAAK;AAE3C,cADam7G,GAAuBzX,CAAS,EAAE,MAAMlxC,CAAQ,GACjD;AAAA,QACZ,KAAK;AACH,iBAAOssC,GAAO;AAAA,QAChB,KAAK;AACH,iBAAO2c,GAAY;AAAA,QACrB,KAAK;AACH,iBAAO16G,GAAK;AAAA,MACb;AAAA,IACP;AAAA,IAGM,SAAA+9F;AAAA,IACA,cAAA2c;AAAA,IACA,OAAA16G;AAAA,IACA,UArBe,OAAO;AAAA,MACtB,cAAc9wE;AAAA,MACd,eAAAorL;AAAA,IACN;AAAA,EAmBA,GAEUM,KAAW,CAACj8K,GAAS2H,GAAUje,GAAO8yG,MAAW;AACrD,IAAI9yG,MAAU8yG,IACZr6F,EAASnC,GAAS2H,CAAQ,IAE1BE,GAAM7H,GAAS2H,GAAUje,CAAK;AAAA,EAEtC,GACU46I,KAAW,CAAChkE,GAAOl9D,GAAUpD,MAAY;AAC7C,IAAAnJ,GAAOwS,GAASi3D,GAAOl9D,CAAQ,CAAC,EAAE,KAAK,MAAMwF,GAAQ03D,GAAOtgE,CAAO,GAAG,CAAA6G,MAASs3J,GAAQt3J,GAAO7G,CAAO,CAAC;AAAA,EAC5G,GACUk8K,KAAkB,CAAC57G,GAAO67G,MAAgB;AAC9C,UAAM/c,IAAUv4J,EAAMy5D,GAAO67G,CAAW,EAAE,WAAW,MAAM;AACzD,YAAMC,IAAat5K,GAAa,QAAQq5K,GAAane,GAAM19F,CAAK,EAAE,GAAG;AACrE,aAAI67G,MAAgB,UAClB73C,GAAShkE,GAAO,oBAAoB87G,CAAU,IACrCD,MAAgB,aACzB73C,GAAShkE,GAAO,WAAW87G,CAAU,IAErCzzK,GAAS23D,GAAO87G,CAAU,GAErBA;AAAA,IACf,CAAO;AACD,WAAAnzK,GAAMm2J,CAAO,GACNA;AAAA,EACb,GACUid,KAAW,CAAC/7G,GAAOo+F,MAAS;AAChC,UAAMlsE,IAAU,CAAA,GACVqwE,IAAW,CAAA,GACXyZ,IAAW,CAAAC,OAAermL,GAAMqmL,IAAa,CAAAtqF,OAAO;AACxD,MAAIA,GAAI,SACNO,EAAQ,KAAKP,GAAI,OAAO;AAE1B,YAAMtkH,KAAKskH,GAAI;AACf,aAAAhpF,GAAMt7B,EAAE,GACRipL,GAAO3kE,GAAI,OAAO,CAAA16C,OAAQ;AACxB,QAAIA,GAAK,SACPsrH,EAAS,KAAKtrH,GAAK,OAAO,GAE5B0kI,GAAS1kI,GAAK,SAAS,WAAWA,GAAK,SAAS,CAAC,GACjD0kI,GAAS1kI,GAAK,SAAS,WAAWA,GAAK,SAAS,CAAC,GACjD5uC,GAASh7B,IAAI4pE,GAAK,OAAO;AAAA,MACnC,CAAS,GACM5pE;AAAA,IACf,CAAO,GACK6uM,IAAe,CAAAD,OAAe3xK,GAAO2xK,IAAa,CAAAE,OAAYvmL,GAAMumL,GAAS,OAAO,CAAA/W,QACxFuW,GAASvW,GAAI,SAAS,QAAQA,GAAI,SAAS,CAAC,GACrCA,GAAI,QACZ,CAAC,GACIgX,IAAgB,CAACH,IAAaJ,OAAgB;AAClD,YAAM/c,KAAU8c,GAAgB57G,GAAO67G,EAAW,GAE5CQ,MADOR,OAAgB,aAAaK,IAAeF,GAC/BC,EAAW;AACrC,MAAAvzK,GAAOo2J,IAASud,EAAY;AAAA,IACpC,GACYC,IAAgB,CAAAT,OAAe;AACnC,MAAAt1K,EAAMy5D,GAAO67G,EAAW,EAAE,KAAK7zK,EAAQ;AAAA,IAC/C,GACYu0K,IAAwB,CAACN,IAAaJ,OAAgB;AAC1D,MAAII,GAAY,SAAS,IACvBG,EAAcH,IAAaJ,EAAW,IAEtCS,EAAcT,EAAW;AAAA,IAEnC,GACYW,KAAc,CAAA,GACdC,KAAc,CAAA,GACdC,KAAc,CAAA,GACdC,KAAsB,CAAA;AAC5B,WAAArmB,GAAO8H,GAAM,CAAAzsE,OAAO;AAClB,cAAQA,GAAI,SAAO;AAAA,QACnB,KAAK;AACH,UAAA6qF,GAAY,KAAK7qF,EAAG;AACpB;AAAA,QACF,KAAK;AACH,UAAA8qF,GAAY,KAAK9qF,EAAG;AACpB;AAAA,QACF,KAAK;AACH,UAAA+qF,GAAY,KAAK/qF,EAAG;AACpB;AAAA,QACF,KAAK;AACH,UAAAgrF,GAAoB,KAAKhrF,EAAG;AAC5B;AAAA,MACD;AAAA,IACT,CAAO,GACD4qF,EAAsBI,IAAqB,UAAU,GACrDJ,EAAsBC,IAAa,OAAO,GAC1CD,EAAsBE,IAAa,OAAO,GAC1CF,EAAsBG,IAAa,OAAO,GACnC;AAAA,MACL,SAAAxqF;AAAA,MACA,UAAAqwE;AAAA,IACR;AAAA,EACA,GACUjvK,KAAO,CAAA8qK,MAAQxoK,GAAMwoK,GAAM,CAAAzsE,MAAO;AACtC,UAAMtkH,IAAKi/B,GAAQqlF,EAAI,OAAO;AAC9B,WAAA2kE,GAAO3kE,EAAI,OAAO,CAAA16C,MAAQ;AACxB,YAAM2lI,IAAavvJ,GAAK4pB,EAAK,OAAO;AACpC,MAAA0kI,GAASiB,GAAY,WAAW3lI,EAAK,SAAS,CAAC,GAC/C0kI,GAASiB,GAAY,WAAW3lI,EAAK,SAAS,CAAC,GAC/C5uC,GAASh7B,GAAIuvM,CAAU;AAAA,IAC/B,CAAO,GACMvvM;AAAA,EACb,CAAK,GAEKwvM,KAAY,CAACze,GAAMj0K,MAChByL,GAAMwoK,GAAM,CAAAzsE,MACVixE,GAAQjxE,GAAKxnG,CAAK,CAC1B,GAEG2yL,KAAS,CAAC1e,GAAMj0K,MACbi0K,EAAKj0K,CAAK,GAEb4yL,KAAW,CAACt1L,GAAIu1L,MAAS;AAC7B,QAAIv1L,EAAG,WAAW;AAChB,aAAO;AAET,UAAM6qE,IAAQ7qE,EAAG,CAAC;AAIlB,WAHco6C,GAAUp6C,GAAI,CAAAjZ,MACnB,CAACwuM,EAAK1qH,EAAM,SAAS9jF,EAAE,OAAO,CACtC,EACY,MAAMiZ,EAAG,MAAM;AAAA,EAClC,GACUw1L,KAAU,CAAC7e,GAAMzsE,GAAK4sE,GAAQlrK,MAAe;AACjD,UAAMgvK,IAAUya,GAAO1e,GAAMzsE,CAAG,GAC1BurF,IAAW7a,EAAQ,YAAY,YAC/BhxE,IAAU0rF,GAAS1a,EAAQ,MAAM,MAAM9D,CAAM,GAAGlrK,CAAU,GAC1D+9F,IAAU8rF,IAAW,IAAIH,GAASF,GAAUze,EAAK,MAAMzsE,CAAG,GAAG4sE,CAAM,GAAGlrK,CAAU;AACtF,WAAO;AAAA,MACL,SAAAg+F;AAAA,MACA,SAAAD;AAAA,IACR;AAAA,EACA,GAEU+rF,KAAY,CAAC/e,GAAM/qK,MAAe;AACtC,UAAM+pL,IAAOxnL,GAAMwoK,GAAM,CAAAzsE,MAAO/7F,GAAM+7F,EAAI,OAAO/gG,EAAK,CAAC,GACjDysL,IAAa,CAAC3Q,GAAU1I,GAAa5yE,GAASC,MAAY;AAC9D,eAASM,IAAM+6E,GAAU/6E,IAAM+6E,IAAWt7E,GAASO;AACjD,iBAAS4sE,KAASyF,GAAazF,KAASyF,IAAc3yE,GAASktE;AAC7D,UAAA6e,EAAKzrF,CAAG,EAAE4sE,EAAM,IAAI;AAAA,IAGhC;AACM,WAAO3oK,GAAMwoK,GAAM,CAACzsE,GAAK+6E,MAAa;AACpC,YAAMvsG,IAAU71D,GAAOqnF,EAAI,OAAO,CAAC16C,GAAM+sH,MAAgB;AACvD,YAAIoZ,EAAK1Q,CAAQ,EAAE1I,CAAW,MAAM,IAAO;AACzC,gBAAMx6K,KAASyzL,GAAQ7e,GAAMsO,GAAU1I,GAAa3wK,CAAU;AAC9D,iBAAAgqL,EAAW3Q,GAAU1I,GAAax6K,GAAO,SAASA,GAAO,OAAO,GACzD,CAACi1K,GAAUxnH,EAAK,SAASztD,GAAO,SAASA,GAAO,SAASytD,EAAK,KAAK,CAAC;AAAA,QACvF;AACY,iBAAO;MAEnB,CAAS;AACD,aAAO8nH,GAAaptE,EAAI,SAASxxB,GAASwxB,EAAI,SAASA,EAAI,KAAK;AAAA,IACxE,CAAO;AAAA,EACP,GACU2rF,KAAS,CAAC5Z,GAAW6T,GAAY7Y,MAAU;AAC/C,UAAMN,IAAO,CAAA;AACb,IAAA9H,GAAOoN,EAAU,WAAW,CAAAnE,MAAY;AACtC,YAAMge,IAAe,CAAA;AACrB,eAASvZ,IAAc,GAAGA,IAAcN,EAAU,KAAK,SAASM,KAAe;AAC7E,cAAMtkK,IAAUslK,GAAU,YAAYtB,GAAWM,CAAW,EAAE,IAAI,CAAAzF,MAAUS,GAAWT,EAAO,SAASG,GAAO,EAAK,CAAC,EAAE,WAAW,MAAMM,GAAWuY,EAAW,UAAU,IAAM,EAAK,CAAC;AACnL,QAAAgG,EAAa,KAAK79K,CAAO;AAAA,MAC1B;AACD,MAAA0+J,EAAK,KAAKa,GAASM,EAAS,SAASge,GAAc,YAAY7e,CAAK,CAAC;AAAA,IAC7E,CAAO;AACD,aAASgO,IAAW,GAAGA,IAAWhJ,EAAU,KAAK,MAAMgJ,KAAY;AACjE,YAAM8Q,IAAW,CAAA;AACjB,eAASxZ,IAAc,GAAGA,IAAcN,EAAU,KAAK,SAASM,KAAe;AAC7E,cAAMtkK,KAAUslK,GAAU,MAAMtB,GAAWgJ,GAAU1I,CAAW,EAAE,IAAI,CAAAjuK,OAAQipK,GAAWjpK,GAAK,SAAS2oK,GAAO3oK,GAAK,QAAQ,CAAC,EAAE,WAAW,MAAMipK,GAAWuY,EAAW,IAAK,GAAE,IAAM,EAAK,CAAC;AACxL,QAAAiG,EAAS,KAAK99K,EAAO;AAAA,MACtB;AACD,YAAM+9K,IAAY/Z,EAAU,IAAIgJ,CAAQ,GAClC/6E,IAAMstE,GAASwe,EAAU,SAASD,GAAUC,EAAU,SAAS/e,CAAK;AAC1E,MAAAN,EAAK,KAAKzsE,CAAG;AAAA,IACd;AACD,WAAOysE;AAAA,EACb,GAEUsf,KAAgB,CAACha,GAAW6T,MAAe+F,GAAO5Z,GAAW6T,GAAY,EAAK,GAC9EoG,KAAe,CAAAvf,MAAQ+e,GAAU/e,GAAMxvK,EAAI,GAC3CgvL,KAAkB,CAACla,GAAWhkK,MAAY/L,GAAQ+vK,EAAU,KAAK,CAAA73L,MAAK2rB,EAAO3rB,EAAE,OAAO,CAAAF,MAAKijB,GAAK8Q,GAAS/zB,EAAE,OAAO,CAAC,CAAC,GACpHkyM,KAAe,CAACna,GAAW/oK,GAAQpM,MAAc;AACrD,UAAM4xE,IAAUvqE,GAAM+E,EAAO,WAAW,CAAAmjL,MAC/B7mI,GAAK6mI,CAAM,EAAE,KAAK,CAAAC,MAAMH,GAAgBla,GAAWqa,CAAE,CAAC,EAAE,OAAOxvL,CAAS,CAChF,GACKwyE,IAAQ1iE,GAAI8hE,CAAO;AACzB,WAAOzhE,GAAOqiE,EAAM,SAAS,GAAGA,CAAK;AAAA,EAC3C,GACU7zC,KAAM,CAACxN,GAAW6zG,GAASyqD,GAAYC,GAAYC,MAAgB,CAACl+G,GAAOrlE,GAAQ48K,GAAY4G,MAAe;AAClH,UAAMza,KAAYsB,GAAU,UAAUhlG,CAAK,GACrCo+G,KAAettL,EAAS,KAAKqtL,KAAe,OAAgC,SAASA,EAAW,OAAO,EAAE,WAAWzC,GAAa,QAAQ;AAa/I,WAZenoD,EAAQmwC,IAAW/oK,CAAM,EAAE,IAAI,CAAAnC,OAAQ;AACpD,YAAM4wJ,KAAQs0B,GAAcha,IAAW6T,CAAU,GAC3C/tL,KAASk2B,EAAU0pI,IAAO5wJ,IAAM5J,IAAMsvL,EAAY3G,CAAU,GAAG6G,EAAY,GAC3Eja,KAAgBb,GAAyB95K,GAAO,IAAI,GACpD40K,KAAOuf,GAAan0L,GAAO,IAAI;AACrC,aAAO;AAAA,QACL,MAAAgP;AAAA,QACA,MAAA4lK;AAAA,QACA,QAAQ50K,GAAO;AAAA,QACf,eAAA26K;AAAA,MACV;AAAA,IACA,CAAO,EACa,KAAK,CAAAruK,OAAO;AACxB,YAAMuoL,KAActC,GAAS/7G,GAAOlqE,GAAI,IAAI,GACtCwoL,KAAcxtL,EAAS,KAAKqtL,KAAe,OAAgC,SAASA,EAAW,MAAM,EAAE,WAAW,MAAMxS,GAAU,aAAa3rG,CAAK,CAAC,GACrJu+G,KAAWztL,EAAS,KAAKqtL,KAAe,OAAgC,SAASA,EAAW,MAAM,EAAE,WAAWpE,EAAa;AAClI,aAAAiE,EAAWh+G,GAAOlqE,GAAI,MAAMA,GAAI,MAAM;AAAA,QACpC,QAAQwoL;AAAA,QACR,QAAQC;AAAA,QACR,SAASH;AAAA,MACnB,CAAS,GACDH,EAAWj+G,CAAK,GAChBn+D,EAASm+D,GAAOkjG,EAAe,GAC3BptK,GAAI,cAAc,SAAS,KAC7ByR,GAAMy4D,GAAOkjG,IAAiBptK,GAAI,cAAc,KAAK,GAAG,CAAC,GAEpDhF,EAAS,KAAK;AAAA,QACnB,QAAQgF,GAAI;AAAA,QACZ,SAASuoL,GAAY;AAAA,QACrB,UAAUA,GAAY;AAAA,MAChC,CAAS;AAAA,IACT,CAAO;AAAA,EACP,GACUG,KAAU,CAAC9a,GAAW/oK,MAAWs8C,GAAKt8C,EAAO,OAAO,EAAE,KAAK,CAAAs8C,MAAQ2mI,GAAgBla,GAAWzsH,CAAI,EAAE,IAAI,CAAAkpB,OAC9F;AAAA,IACZ,GAAGA;AAAA,IACH,YAAYxlE,EAAO;AAAA,IACnB,WAAWA,EAAO;AAAA,EAC1B,EAEK,CAAC,GACI8jL,KAAkB,CAAC/a,GAAW/oK,MAAWkjL,GAAana,GAAW/oK,GAAQ9J,EAAM,EAAE,IAAI,CAAAkwE,OAAU;AAAA,IACnG,OAAAA;AAAA,IACA,YAAYpmE,EAAO;AAAA,IACnB,WAAWA,EAAO;AAAA,EACnB,EAAC,GACI+jL,KAAa,CAACC,GAAYhkL,MAAWA,EAAO,UAC5CikL,KAAe,CAACD,GAAYhkL,MAAWA,EAAO,YAC9CkkL,KAAU,CAACnb,GAAW/oK,MAAWkjL,GAAana,GAAW/oK,GAAQ9J,EAAM,GACvEiuL,KAAkB,CAACpb,GAAW/oK,MAAWkjL,GAAana,GAAW/oK,GAAQ,CAAA6jK,MAAU,CAACA,EAAO,QAAQ,GACnGugB,KAAsB,CAACrb,GAAWzsH,MAAS2mI,GAAgBla,GAAWzsH,CAAI,EAAE,OAAO,CAAAunH,MAAU,CAACA,EAAO,QAAQ,GAC7GwgB,KAAc,CAACtb,GAAW3iG,MAAUjuE,GAAOiuE,GAAO,CAAA9pB,MAAQ8nI,GAAoBrb,GAAWzsH,CAAI,CAAC,GAC9FgoI,KAAqB,CAACvb,GAAW/oK,MAAW+jL,GAAWhb,GAAW/oK,CAAM,EAAE,OAAO,CAAAukL,MAAaF,GAAYtb,GAAWwb,EAAU,KAAK,CAAC,GACrIC,KAAuB,CAACzb,GAAW/oK,MAAWikL,GAAalb,GAAW/oK,CAAM,EAAE,OAAO,CAAAomE,MAASi+G,GAAYtb,GAAW3iG,CAAK,CAAC,GAE3Hq+G,KAAU,CAAChhB,GAAM1yJ,GAAQrY,GAAYioL,MAAiB;AAC1D,UAAM95G,IAAOuhG,GAAmB3E,CAAI,EAAE;AACtC,QAAI58F,EAAK,WAAW;AAClB,aAAO48F;AAET,aAAS/tL,IAAIq7B,EAAO,UAAUr7B,KAAKq7B,EAAO,WAAWr7B;AACnD,eAAS/D,IAAIo/B,EAAO,UAAUp/B,KAAKo/B,EAAO,WAAWp/B,KAAK;AACxD,cAAMqlH,IAAMnwB,EAAKnxF,CAAC,GACZuuL,IAAWgE,GAAQjxE,GAAKrlH,CAAC,EAAE;AACjC,QAAAo2L,GAAW/wE,GAAKrlH,GAAG0yL,GAAWsc,EAAY,GAAI,IAAO1c,CAAQ,CAAC;AAAA,MAC/D;AAEH,WAAOR;AAAA,EACb,GACUihB,KAAU,CAACjhB,GAAMzjK,GAAQtH,GAAYioL,MAAiB;AAC1D,UAAM95G,IAAOuhG,GAAmB3E,CAAI,EAAE;AACtC,QAAI9rG,IAAQ;AACZ,aAASjiF,IAAI,GAAGA,IAAImxF,EAAK,QAAQnxF;AAC/B,eAAS/D,IAAI,GAAGA,IAAIw2L,GAAWthG,EAAK,CAAC,CAAC,GAAGl1F,KAAK;AAC5C,cAAMqlH,IAAMnwB,EAAKnxF,CAAC,GACZivM,KAAc1c,GAAQjxE,GAAKrlH,CAAC,GAC5BizM,KAAiBD,GAAY,SAC7BE,KAAcnsL,EAAWksL,IAAgB5kL,CAAM;AACrD,QAAI6kL,MAAe,CAACltH,IAClBowG,GAAW/wE,GAAKrlH,GAAG0yL,GAAWsc,EAAc,GAAE,IAAMgE,GAAY,QAAQ,CAAC,IAChEE,OACTltH,IAAQ;AAAA,MAEX;AAEH,WAAO8rG;AAAA,EACb,GACUqhB,KAAc,CAAC9tF,GAAKt+F,MACjBd,GAAMo/F,GAAK,CAAC9mC,GAAM5T,MAChBplD,GAAOg5D,GAAM,CAAAy0H,MACXjsL,EAAWisL,EAAY,SAASroI,EAAK,OAAO,CACpD,IAAI4T,IAAOA,EAAK,OAAO,CAAC5T,CAAI,CAAC,GAC7B,CAAE,CAAA,GAEDyoI,KAAY,CAACthB,GAAMj0K,GAAOkJ,GAAYioL,OACtCnxL,IAAQ,KAAKA,IAAQi0K,EAAK,CAAC,EAAE,MAAM,UACrC9H,GAAO8H,GAAM,CAAAzsE,MAAO;AAClB,UAAMguF,IAAWhuF,EAAI,MAAMxnG,IAAQ,CAAC;AACpC,QAAIlC,IAAS;AACb,UAAM23L,IAAatE;AACnB,WAAO3pF,EAAI,MAAM,SAASxnG,IAAQlC,KAAUoL,EAAWssL,EAAS,SAAShuF,EAAI,MAAMxnG,IAAQlC,CAAM,EAAE,OAAO;AACxG,MAAAy6K,GAAW/wE,GAAKxnG,IAAQlC,GAAQ+2K,GAAW4gB,GAAY,IAAMjuF,EAAI,MAAMxnG,IAAQlC,CAAM,EAAE,QAAQ,CAAC,GAChGA;AAAA,EAEZ,CAAS,GAEIm2K,IAEHyhB,KAAY,CAACzhB,GAAMj0K,GAAOkJ,GAAYioL,MAAiB;AAC3D,UAAM95G,IAAOuhG,GAAmB3E,CAAI,EAAE;AACtC,QAAIj0K,IAAQ,KAAKA,IAAQq3E,EAAK,QAAQ;AACpC,YAAMs+G,IAAet+G,EAAKr3E,IAAQ,CAAC,EAAE,OAC/B42E,IAAQ0+G,GAAYK,GAAczsL,CAAU;AAClD,MAAAijK,GAAOv1F,GAAO,CAAA9pB,MAAQ;AACpB,YAAI9lD,IAAcL,EAAS;AAC3B,iBAASzgB,KAAI8Z,GAAO9Z,KAAImxF,EAAK,QAAQnxF;AACnC,mBAAS/D,KAAI,GAAGA,KAAIw2L,GAAWthG,EAAK,CAAC,CAAC,GAAGl1F,MAAK;AAC5C,kBAAMqlH,KAAMnwB,EAAKnxF,EAAC,GACZgrB,KAAUunK,GAAQjxE,IAAKrlH,EAAC;AAE9B,YADoB+mB,EAAWgI,GAAQ,SAAS47C,EAAK,OAAO,MAEtD9lD,EAAY,aACdA,IAAcL,EAAS,KAAKwqL,EAAc,CAAA,IAE5CnqL,EAAY,KAAK,CAAA4uL,OAAO;AACtB,cAAArd,GAAW/wE,IAAKrlH,IAAG0yL,GAAW+gB,IAAK,IAAM1kL,GAAQ,QAAQ,CAAC;AAAA,YAC5E,CAAiB;AAAA,UAEJ;AAAA,MAEb,CAAS;AAAA,IACF;AACD,WAAO+iK;AAAA,EACb,GAEUt7H,KAAU,CAAA15C,MAAS;AACvB,UAAM25C,IAAc,CAAAhwD,MAAMA,EAAGqW,CAAK,GAC5B45C,IAAchzC,GAAS5G,CAAK,GAC5B65C,IAAe,MAAMC,GACrBA,IAAS;AAAA,MACb,KAAK;AAAA,MACL,OAAO95C;AAAA,MACP,MAAM,CAAC+5C,GAAUC,MAAYA,EAAQh6C,CAAK;AAAA,MAC1C,SAASyH;AAAA,MACT,SAASD;AAAA,MACT,KAAK,CAAAK,MAAUoyC,GAAO,MAAMpyC,EAAO7H,CAAK,CAAC;AAAA,MACzC,UAAU65C;AAAA,MACV,MAAMF;AAAA,MACN,QAAQA;AAAA,MACR,QAAQA;AAAA,MACR,OAAOC;AAAA,MACP,IAAIC;AAAA,MACJ,YAAYD;AAAA,MACZ,SAASC;AAAA,MACT,UAAUD;AAAA,MACV,MAAM,CAAAjwD,MAAM;AACV,QAAAA,EAAGqW,CAAK;AAAA,MACT;AAAA,MACD,YAAY,MAAM0H,EAAS,KAAK1H,CAAK;AAAA,IAC7C;AACM,WAAO85C;AAAA,EACb,GACUnQ,KAAQ,CAAAA,MAAS;AACrB,UAAMkQ,IAAe,MAAMC,GACrBA,IAAS;AAAA,MACb,KAAK;AAAA,MACL,OAAOnQ;AAAA,MACP,MAAM,CAACuQ,GAASC,MAAaD,EAAQvQ,CAAK;AAAA,MAC1C,SAASniC;AAAA,MACT,SAASC;AAAA,MACT,KAAKoyC;AAAA,MACL,UAAU,CAAAhyC,MAAUoyC,GAAO,MAAMpyC,EAAO8hC,CAAK,CAAC;AAAA,MAC9C,MAAMkQ;AAAA,MACN,QAAQryC;AAAA,MACR,QAAQC;AAAA,MACR,OAAOZ;AAAA,MACP,IAAIA;AAAA,MACJ,YAAYqvF;AAAA,MACZ,SAASA;AAAA,MACT,UAAU9uF,GAAI,OAAOuiC,CAAK,CAAC;AAAA,MAC3B,MAAMrjC;AAAA,MACN,YAAYoB,EAAS;AAAA,IAC7B;AACM,WAAOoyC;AAAA,EACb,GAEUG,KAAS;AAAA,IACb,OAAOP;AAAA,IACP,OAAA/P;AAAA,IACA,YAJiB,CAACyQ,GAAUC,MAAQD,EAAS,KAAK,MAAMzQ,GAAM0Q,CAAG,GAAGX,EAAO;AAAA,EAKjF,GAEUk9I,KAAU,CAACC,GAAcC,GAAOC,MAAU;AAC9C,QAAIF,EAAa,OAAOC,EAAM,UAAUD,EAAa,SAASnd,GAAWod,EAAM,CAAC,CAAC;AAC/E,aAAO78I,GAAO,MAAM,qDAAqD48I,EAAa,MAAM,eAAeA,EAAa,MAAM;AAEhI,UAAMG,IAAeF,EAAM,MAAMD,EAAa,GAAG,GAC3CI,IAAeD,EAAa,CAAC,EAAE,MAAM,MAAMH,EAAa,MAAM,GAC9DK,IAAcxd,GAAWqd,EAAM,CAAC,CAAC,GACjCI,IAAcJ,EAAM;AAC1B,WAAO98I,GAAO,MAAM;AAAA,MAClB,UAAU+8I,EAAa,SAASG;AAAA,MAChC,UAAUF,EAAa,SAASC;AAAA,IACxC,CAAO;AAAA,EACP,GACUE,KAAe,CAACN,GAAOC,MAAU;AACrC,UAAMM,IAAa3d,GAAWod,EAAM,CAAC,CAAC,GAChCQ,IAAa5d,GAAWqd,EAAM,CAAC,CAAC;AACtC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAUM,IAAaC;AAAA,IAC/B;AAAA,EACA,GACUC,KAAgB,CAACT,GAAOC,MAAU;AACtC,UAAMS,IAAaV,EAAM,QACnBW,IAAaV,EAAM;AACzB,WAAO;AAAA,MACL,UAAUS,IAAaC;AAAA,MACvB,UAAU;AAAA,IAClB;AAAA,EACA,GACUC,KAAmB,CAAChpC,GAAQnmD,GAAK4lF,GAAY3Y,MAAa;AAC9D,UAAMmiB,IAAYpvF,EAAI,YAAY,aAAa4lF,EAAW,MAAMA,EAAW;AAC3E,WAAOla,GAAQvlB,GAAQ,CAAAn+I,MAAOqlK,GAAW+hB,KAAa,IAAMniB,EAASjlK,CAAG,CAAC,CAAC;AAAA,EAChF,GACUqnL,KAAU,CAAC5iB,GAAMtmB,GAAQy/B,GAAYpT,MAAkB;AAC3D,UAAM8c,IAAa7iB,EAAKA,EAAK,SAAS,CAAC;AACvC,WAAOA,EAAK,OAAOf,GAAQvlB,GAAQ,MAAM;AACvC,YAAMipC,IAAYE,EAAW,YAAY,aAAa1J,EAAW,WAAWA,EAAW,KACjF5lF,IAAMtkG,GAAM4zL,GAAYF,GAAW9wL,EAAQ,GAC3CqU,IAAWw8K,GAAiBnvF,EAAI,MAAM,QAAQA,GAAK4lF,GAAY,CAAA59K,MAAOgH,GAAMwjK,GAAexqK,EAAI,SAAQ,CAAE,CAAC;AAChH,aAAO6oK,GAAS7wE,GAAKrtF,CAAQ;AAAA,IAC9B,CAAA,CAAC;AAAA,EACR,GACU48K,KAAU,CAAC9iB,GAAMtmB,GAAQy/B,GAAYj1G,MAAe1sE,GAAMwoK,GAAM,CAAAzsE,MAAO;AAC3E,UAAMwvF,IAAcL,GAAiBhpC,GAAQnmD,GAAK4lF,GAAY3mL,EAAK;AACnE,WAAOwxK,GAASzwE,GAAKrvB,GAAY6+G,CAAW;AAAA,EAClD,CAAK,GACKC,KAAgB,CAAChjB,GAAMmZ,GAAYpT,MAAkBvuK,GAAMwoK,GAAM,CAAAzsE,MAC9Dp/F,GAAM4xK,GAAe,CAAC7xK,GAAK+uL,MAAW;AAC3C,UAAMC,IAAWR,GAAiB,GAAGnvF,GAAK4lF,GAAY1mL,EAAM,EAAE,CAAC;AAC/D,WAAO4xK,GAAQnwK,GAAK+uL,GAAQC,CAAQ;AAAA,EACrC,GAAE3vF,CAAG,CACP,GACK4vF,KAAS,CAACrB,GAAOjpH,GAAOsgH,MAAe;AAC3C,UAAMiK,IAAWvqH,EAAM,WAAW,IAAIiqH,KAAUjxL,IAC1CwxL,IAAWxqH,EAAM,WAAW,IAAI+pH,KAAU/wL,IAC1Ck0K,IAAgBb,GAAyB4c,CAAK,GAC9CwB,IAAY5e,GAAWod,EAAM,CAAC,CAAC,GAC/ByB,IAAkB9vL,GAAOsyK,GAAe,CAAAZ,OAAUA,OAAWme,IAAY,CAAC,GAC1EE,IAAeJ,EAAStB,GAAO,KAAK,IAAIjpH,EAAM,QAAQ,GAAGsgH,GAAYoK,IAAkBD,IAAY,IAAIA,CAAS,GAChHG,KAAmBve,GAAyBse,CAAY;AAC9D,WAAOH,EAASG,GAAc,KAAK,IAAI3qH,EAAM,QAAQ,GAAGsgH,GAAYpkL,EAAY0uL,IAAkBhxL,EAAM,CAAC;AAAA,EAC/G,GAEUixL,KAAa,CAAC1jB,GAAMzsE,GAAKyzE,GAAK/xK,MAAe;AACjD,UAAMsF,IAAYiqK,GAAQxE,EAAKzsE,CAAG,GAAGyzE,CAAG,GAClC2c,IAAW5xL,GAAMkD,GAAYsF,EAAU,OAAO,GAC9C6rK,IAAapG,EAAKzsE,CAAG;AAC3B,WAAOysE,EAAK,SAAS,KAAK0E,GAAW0B,CAAU,IAAI,MAAMY,IAAM,KAAK2c,EAASlf,GAAe2B,GAAYY,IAAM,CAAC,CAAC,KAAKA,IAAMZ,EAAW,MAAM,SAAS,KAAKud,EAASlf,GAAe2B,GAAYY,IAAM,CAAC,CAAC,KAAKzzE,IAAM,KAAKowF,EAASlf,GAAezE,EAAKzsE,IAAM,CAAC,GAAGyzE,CAAG,CAAC,KAAKzzE,IAAMysE,EAAK,SAAS,KAAK2jB,EAASlf,GAAezE,EAAKzsE,IAAM,CAAC,GAAGyzE,CAAG,CAAC;AAAA,EAChV,GACU4c,KAAc,CAAC/B,GAAcC,GAAO+B,GAAWlB,GAAW1tL,GAAY8wK,MAAkB;AAC5F,UAAMjF,IAAW+gB,EAAa,KACxB9gB,IAAW8gB,EAAa,QACxBiC,IAAcD,EAAU,QACxBE,KAAarf,GAAWmf,EAAU,CAAC,CAAC,GACpC3V,KAASpN,IAAWgjB,GACpB3V,KAASpN,IAAWgjB,KAAahe,EAAc,QAC/Cie,KAAkBjvL,EAAYgxK,GAAetzK,EAAM;AACzD,aAAShlB,KAAIqzL,GAAUrzL,KAAIygM,IAAQzgM,MAAK;AACtC,UAAIw2M,KAAa;AACjB,eAAS3tM,KAAIyqL,GAAUzqL,KAAI63L,IAAQ73L,MAAK;AACtC,YAAI0tM,GAAgB1tM,EAAC,GAAG;AACtB,UAAA2tM;AACA;AAAA,QACD;AACD,QAAIP,GAAW5B,GAAOr0M,IAAG6I,IAAG2e,CAAU,KACpCgsL,GAAQa,GAAOrd,GAAeqd,EAAMr0M,EAAC,GAAG6I,EAAC,GAAG2e,GAAY0tL,EAAU,IAAI;AAExE,cAAMuB,KAAgB5tM,KAAIyqL,IAAWkjB,IAC/BnU,KAAUtL,GAAQqf,EAAUp2M,KAAIqzL,CAAQ,GAAGojB,EAAa,GACxDC,KAAarU,GAAQ,SACrB/8K,KAAc4vL,EAAU,QAAQwB,EAAU;AAChD,QAAA7f,GAAWwd,EAAMr0M,EAAC,GAAG6I,IAAGsqL,GAAW7tK,IAAa,IAAM+8K,GAAQ,QAAQ,CAAC;AAAA,MACxE;AAAA,IACF;AACD,WAAOgS;AAAA,EACb,GACUsC,KAAuB,CAACC,GAAqBrkB,GAAM+F,MAAkB;AACzE,UAAMue,IAAgB5f,GAAW1E,EAAK,CAAC,CAAC,GAClCukB,IAAqB5f,GAAmB3E,CAAI,EAAE,KAAK,SAASqkB,EAAoB,KAChFG,IAAuBvlB,GAAQqlB,IAAgBD,EAAoB,QAAQ,CAAAjoL,MAAOA,IAAMioL,EAAoB,MAAM,GAClHI,IAAkBrrL,EAAOorL,GAAsB,CAAApoL,MAAO1H,GAAOqxK,GAAe,CAAAiB,MAAOA,MAAQ5qK,CAAG,CAAC,EAAE,MAAMkoL,IAAgB,CAAC;AAC9H,WAAO;AAAA,MACL,KAAKC;AAAA,MACL,QAAQE;AAAA,IAChB;AAAA,EACA,GACUC,KAA+B,CAAC7C,GAAcz+G,GAAM2iG,MAAkB58F,GAAS48F,GAAe,CAAAkd,MAAUA,KAAUpB,EAAa,UAAUoB,KAAUve,GAAWthG,EAAK,CAAC,CAAC,IAAIy+G,EAAa,MAAM,GAC5LziF,KAAU,CAACyiF,GAAcC,GAAOC,GAAOY,GAAW1tL,MAAe;AACrE,UAAM8wK,IAAgBb,GAAyB4c,CAAK,GAC9C6C,IAAoBP,GAAqBvC,GAAcC,GAAO/b,CAAa,GAC3E8d,IAAYlf,GAAmBod,CAAK,EAAE,MACtC6C,IAA4BF,GAA6BC,GAAmBd,GAAW9d,CAAa;AAE1G,WADe6b,GAAQ+C,GAAmB7C,GAAO+B,CAAS,EAC5C,IAAI,CAAAnsF,OAAQ;AACxB,YAAM7+B,KAAQ;AAAA,QACZ,GAAG6+B;AAAA,QACH,UAAUA,GAAK,WAAWktF,EAA0B;AAAA,MAC9D,GACcC,KAAa1B,GAAOrB,GAAOjpH,IAAO8pH,CAAS,GAC3Cc,KAAmBve,GAAyB2f,EAAU,GACtDC,KAA+BJ,GAA6BC,GAAmBd,GAAWJ,EAAgB;AAChH,aAAOG,GAAYe,GAAmBE,IAAYhB,GAAWlB,GAAW1tL,GAAY6vL,EAA4B;AAAA,IACxH,CAAO;AAAA,EACP,GACUC,KAAa,CAACh5L,GAAO+1L,GAAOC,GAAOY,GAAW1tL,MAAe;AACjE,IAAAqsL,GAAUQ,GAAO/1L,GAAOkJ,GAAY0tL,EAAU,IAAI;AAClD,UAAM9pH,IAAQ0pH,GAAcR,GAAOD,CAAK,GAClCkD,IAAgB7B,GAAOpB,GAAOlpH,GAAO8pH,CAAS,GAC9CsC,IAAc1C,GAAcT,GAAOkD,CAAa,GAChDE,IAAgB/B,GAAOrB,GAAOmD,GAAatC,CAAS;AAC1D,WAAOnrL,GAAM0tL,GAAe,CAACjhB,IAAShyL,OAC7B+xL,GAASC,IAASl4K,GAAOi5L,EAAc/yM,EAAC,EAAE,KAAK,CACvD;AAAA,EACP,GACUkzM,KAAa,CAACp5L,GAAO+1L,GAAOC,GAAOY,GAAW1tL,MAAe;AACjE,IAAAwsL,GAAUK,GAAO/1L,GAAOkJ,GAAY0tL,EAAU,IAAI;AAClD,UAAMxd,IAASD,GAAyB4c,CAAK,GACvCpqF,IAAO0qF,GAAaN,GAAOC,CAAK,GAChClpH,IAAQ;AAAA,MACZ,GAAG6+B;AAAA,MACH,UAAUA,EAAK,WAAWytE,EAAO;AAAA,IACzC,GACY+f,IAAgB/B,GAAOrB,GAAOjpH,GAAO8pH,CAAS,GAC9C;AAAA,MACJ,MAAMyC;AAAA,MACN,MAAMC;AAAA,IACd,IAAU1gB,GAAmBugB,CAAa,GAC9BI,KAAYpgB,GAAyBggB,CAAa,GAClDK,KAAanD,GAAaL,GAAOD,CAAK,GACtCmD,KAAc;AAAA,MAClB,GAAGM;AAAA,MACH,UAAUA,GAAW,WAAWD,GAAU;AAAA,IAClD,GACYE,KAAcxC,GAAcjB,GAAOY,GAAW2C,EAAS,GACvDN,KAAgB7B,GAAOqC,IAAaP,IAAatC,CAAS;AAChE,WAAO;AAAA,MACL,GAAGyC;AAAA,MACH,GAAGC,GAAQ,MAAM,GAAGt5L,CAAK;AAAA,MACzB,GAAGi5L;AAAA,MACH,GAAGK,GAAQ,MAAMt5L,GAAOs5L,GAAQ,MAAM;AAAA,IAC9C;AAAA,EACA,GAEUzgB,KAAW,CAACrxE,GAAKsxE,GAAW5vK,GAAYioL,MAAiBjuL,GAAMskG,GAAK,CAAA5uF,MAAQu4K,EAAav4K,GAAM1P,CAAU,GAAG4vK,CAAS,GACrH4gB,KAAc,CAACzlB,GAAMj0K,GAAO25L,GAASzwL,GAAYioL,MAAiB;AACtE,UAAM,EAAC,MAAA95G,GAAM,MAAA0jG,EAAI,IAAInC,GAAmB3E,CAAI,GACtCnsJ,IAASuvD,EAAK,MAAM,GAAGr3E,CAAK,GAC5Bq3C,IAAQggC,EAAK,MAAMr3E,CAAK,GACxB45L,KAAS/gB,GAASxhG,EAAKsiH,CAAO,GAAG,CAAC9xF,IAAIt9G,OACvByV,IAAQ,KAAKA,IAAQq3E,EAAK,UAAUnuE,EAAWwvK,GAAerhG,EAAKr3E,IAAQ,CAAC,GAAGzV,EAAC,GAAGmuL,GAAerhG,EAAKr3E,CAAK,GAAGzV,EAAC,CAAC,IAC3GkuL,GAAQphG,EAAKr3E,CAAK,GAAGzV,EAAC,IAAIsqL,GAAWsc,EAAatpF,GAAG,SAAS3+F,CAAU,GAAG,IAAM2+F,GAAG,QAAQ,GAEpH3+F,GAAYioL,CAAY;AAC3B,WAAO;AAAA,MACL,GAAGpW;AAAA,MACH,GAAGjzJ;AAAA,MACH8xK;AAAA,MACA,GAAGviJ;AAAA,IACX;AAAA,EACA,GACUwiJ,KAAgB,CAACryF,GAAK4sE,GAAQO,GAASmlB,GAAYH,GAASzwL,GAAYioL,MAAiB;AAC7F,QAAIxc,MAAY,cAAc,CAACmlB,GAAY;AACzC,YAAMhtI,IAAO2rH,GAAQjxE,GAAKmyF,CAAO;AACjC,aAAO9kB,GAAWsc,EAAarkI,EAAK,SAAS5jD,CAAU,GAAG,IAAM,EAAK;AAAA,IAC7E;AACQ,aAAOuvK,GAAQjxE,GAAK4sE,CAAM;AAAA,EAElC,GACU2lB,KAAiB,CAAC9lB,GAAMj0K,GAAO25L,GAASzwL,GAAYioL,MAAiB1lL,GAAMwoK,GAAM,CAAAzsE,MAAO;AAC5F,UAAMsyF,IAAa95L,IAAQ,KAAKA,IAAQ24K,GAAWnxE,CAAG,KAAKt+F,EAAWwvK,GAAelxE,GAAKxnG,IAAQ,CAAC,GAAG04K,GAAelxE,GAAKxnG,CAAK,CAAC,GAC1H41L,IAAMiE,GAAcryF,GAAKxnG,GAAOwnG,EAAI,SAASsyF,GAAYH,GAASzwL,GAAYioL,CAAY;AAChG,WAAO7Y,GAAQ9wE,GAAKxnG,GAAO41L,CAAG;AAAA,EACpC,CAAK,GACKoE,KAAkB,CAAC/lB,GAAMC,MAAY/zJ,GAAO8zJ,GAAM,CAAAzsE,MAAO;AAC7D,UAAM2wE,IAAgB3wE,EAAI,OACpB5wB,IAAQ1uE,GAAMgsK,GAAS,CAAC/rK,GAAKisK,MAAWA,KAAU,KAAKA,IAASjsK,EAAI,SAASA,EAAI,MAAM,GAAGisK,CAAM,EAAE,OAAOjsK,EAAI,MAAMisK,IAAS,CAAC,CAAC,IAAIjsK,GAAKgwK,CAAa;AAC1J,WAAOvhG,EAAM,SAAS,IAAI,CAACk+F,GAASttE,EAAI,SAAS5wB,GAAO4wB,EAAI,SAASA,EAAI,KAAK,CAAC,IAAI,CAAA;AAAA,EACzF,CAAK,GACKyyF,KAAe,CAAChmB,GAAM/kK,GAAO0sD,MAAW;AAC5C,UAAM,EAAC,MAAAyb,GAAM,MAAA0jG,EAAI,IAAInC,GAAmB3E,CAAI;AAC5C,WAAO;AAAA,MACL,GAAG8G;AAAA,MACH,GAAG1jG,EAAK,MAAM,GAAGnoE,CAAK;AAAA,MACtB,GAAGmoE,EAAK,MAAMzb,IAAS,CAAC;AAAA,IAChC;AAAA,EACA,GAEUs+H,KAAgB,CAACjmB,GAAMsO,GAAUzI,GAAU5wK,MAAewvK,GAAezE,EAAKsO,CAAQ,GAAGzI,CAAQ,MAAM,UAAcyI,IAAW,KAAKr5K,EAAWwvK,GAAezE,EAAKsO,IAAW,CAAC,GAAGzI,CAAQ,GAAGpB,GAAezE,EAAKsO,CAAQ,GAAGzI,CAAQ,CAAC,GACtOqgB,KAAmB,CAAC3yF,GAAKxnG,GAAOkJ,MAAelJ,IAAQ,KAAKkJ,EAAWwvK,GAAelxE,GAAKxnG,IAAQ,CAAC,GAAG04K,GAAelxE,GAAKxnG,CAAK,CAAC,GACjIo6L,KAAmB,CAACnmB,GAAMsO,GAAUzI,GAAU5wK,MAAegxL,GAAcjmB,GAAMsO,GAAUzI,GAAU5wK,CAAU,KAAKixL,GAAiBlmB,EAAKsO,CAAQ,GAAGzI,GAAU5wK,CAAU,GACzKmxL,KAAuB,CAACC,GAAWC,MACX5xL,GAAO4xL,GAAez0L,EAAQ,KAAKuqL,GAAciK,EAAU,KAAK,IAC/D5zL,KAAS,CAAComD,GAAM0tI,GAAW1gB,MAE/C,EADMpvK,GAAKoiD,EAAK,OAAO,MACZ,QAAQytI,EAAczgB,CAAQ,IAG9C2gB,KAAyB,CAACC,GAAcC,MAChBhyL,GAAOgyL,GAAY70L,EAAQ,KAAKuqL,GAAcqK,CAAY,IACzDh0L,KAAS,CAAComD,GAAMy1H,GAAUqY,MAE9C,EADMlwL,GAAKoiD,EAAK,OAAO,MACZ,QAAQ6tI,EAAWpY,CAAQ,IAG3CsY,KAAiB,CAACC,GAAYhuI,GAAMy+F,GAAUwvC,MAAe;AACjE,UAAM1O,IAAU,CAAA33K,MAASA,MAAU,QAAQyhK,GAAWrpH,CAAI,IAAImpH,GAAWnpH,CAAI,GACvEkuI,IAAW,CAAAtmL,MAAS23K,EAAQ33K,CAAK,IAAI,GAAIA,CAAK,UAAWA;AAC/D,WAAIomL,IACK1K,GAAatjI,CAAI,IAAIkuI,EAASzvC,CAAQ,IAAI,OACxCwvC,KAAc3K,GAAatjI,CAAI,IAEjCkuI,EADezvC,MAAa,QAAQ,QAAQ,KACtB,IAEtB;AAAA,EAEf,GACU0vC,KAAoB,CAACH,GAAYP,MAAkB,CAACztI,GAAMy1H,GAAU1I,MAAgBlzK,EAAS,KAAKk0L,GAAeC,GAAYhuI,EAAK,SAAS,OAAOytI,EAAc1gB,CAAW,CAAC,CAAC,GAC7KqhB,KAAuB,CAACJ,GAAYH,MAAe,CAAC7tI,GAAMy1H,MAAa57K,EAAS,KAAKk0L,GAAeC,GAAYhuI,EAAK,SAAS,OAAO6tI,EAAWpY,CAAQ,CAAC,CAAC,GAC1J37I,KAAU,CAACkmB,GAAM5jD,GAAYusL,MAAe5gB,GAAW4gB,EAAW3oI,EAAK,SAAS5jD,CAAU,GAAG,IAAM4jD,EAAK,QAAQ,GAChHquI,KAAY,CAAClnB,GAAM16G,GAASrwD,GAAYusL,GAAY2F,GAAUC,GAAUC,MAAkB;AAC9F,UAAMr8D,IAAW,CAAAnyE,MACRplD,GAAO6xD,GAAS,CAAA/oD,OACdtH,EAAW4jD,EAAK,SAASt8C,GAAO,OAAO,CAC/C;AAEH,WAAO/E,GAAMwoK,GAAM,CAACzsE,GAAK+6E,OAChB/J,GAAShxE,GAAK,CAAC16C,IAAMgtH,OAAa;AACvC,UAAI76C,EAASnyE,EAAI,GAAG;AAClB,cAAMi3H,KAAUuX,EAAcxuI,IAAMy1H,IAAUzI,EAAQ,IAAIshB,EAAStuI,IAAM5jD,GAAYusL,CAAU,IAAI3oI;AACnG,eAAAuuI,EAAStX,IAASxB,IAAUzI,EAAQ,EAAE,KAAK,CAAAplK,OAAS;AAClD,UAAA2+J,GAAW0Q,GAAQ,SAAS,EAAE,OAAOp9K,EAAS,KAAK+N,EAAK,EAAC,CAAE;AAAA,QACzE,CAAa,GACMqvK;AAAA,MACnB;AACY,eAAOj3H;AAAA,IAEnB,CAAS,CACF;AAAA,EACP,GACUyuI,KAAiB,CAAClkH,GAAMwiG,GAAa3wK,MAAeiX,GAAOk3D,GAAM,CAACmwB,GAAKthH,MACpEk0M,GAAiB/iH,GAAMnxF,GAAG2zL,GAAa3wK,CAAU,IAAI,CAAE,IAAG,CAACuvK,GAAQjxE,GAAKqyE,CAAW,CAAC,CAC5F,GACK2hB,KAAc,CAACnkH,GAAMkrG,GAAUr5K,MAAe;AAClD,UAAMoxL,IAAYjjH,EAAKkrG,CAAQ;AAC/B,WAAOpiK,GAAOm6K,EAAU,OAAO,CAAC1uL,GAAM1lB,MAC7Bk0M,GAAiB/iH,GAAMkrG,GAAUr8L,GAAGgjB,CAAU,IAAI,CAAA,IAAK,CAAC0C,CAAI,CACpE;AAAA,EACP,GACU6vL,KAAiB,CAACxnB,GAAMynB,GAASZ,GAAY5xL,GAAYioL,MAAiB;AAC9E,UAAM95G,IAAOuhG,GAAmB3E,CAAI,EAAE,MAChC16G,IAAUp5C,GAAOu7K,GAAS,CAAA17L,OAASu7L,GAAelkH,GAAMr3E,IAAOkJ,CAAU,CAAC,GAC1EyxL,IAAalvL,GAAM4rE,GAAM,CAAAmwB,OAAO6oF,GAAc7oF,GAAI,KAAK,CAAC,GACxDm0F,IAAoBlB,GAAuBlhI,GAASohI,CAAU,GAC9DiB,KAAiBV,GAAqBJ,GAAYH,CAAU;AAClE,WAAOQ,GAAUlnB,GAAM16G,GAASrwD,GAAYioL,GAAcvqJ,IAASg1J,IAAgBD,CAAiB;AAAA,EAC1G,GACUE,KAAc,CAAC5nB,GAAMynB,GAAS/mB,GAASmmB,GAAY5xL,GAAYioL,GAAc8C,MAAiB;AAClG,UAAM,EAAC,MAAAlZ,GAAM,MAAA1jG,EAAI,IAAIuhG,GAAmB3E,CAAI,GACtCqmB,KAAYjjH,EAAKqkH,EAAQ,CAAC,CAAC,GAC3BniI,KAAUp5C,GAAOu7K,GAAS,CAAA17L,OAASw7L,GAAYnkH,GAAMr3E,IAAOkJ,CAAU,CAAC,GACvEqxL,KAAgB9uL,GAAM6uL,GAAU,OAAO,CAAChN,IAAOttL,OAAUqwL,GAAckL,GAAelkH,GAAMr3E,IAAOkJ,CAAU,CAAC,CAAC,GAC/G6+F,KAAU,CAAC,GAAG1wB,CAAI;AACxB,IAAA80F,GAAOuvB,GAAS,CAAA17L,OAAS;AACvB,MAAA+nG,GAAQ/nG,EAAK,IAAIi0L,EAAa,aAAa58G,EAAKr3E,EAAK,GAAG20K,CAAO;AAAA,IACvE,CAAO;AACD,UAAMmnB,KAAU;AAAA,MACd,GAAG/gB;AAAA,MACH,GAAGhzE;AAAA,IACX,GACY4zF,KAAoBtB,GAAqBC,IAAWC,EAAa,GACjEqB,KAAiBX,GAAkBH,GAAYP,EAAa;AAClE,WAAOY,GAAUW,IAASviI,IAASrwD,GAAYioL,GAAc8C,EAAa,eAAe2H,IAAgBD,EAAiB;AAAA,EAChI,GACUI,KAAe,CAAC9nB,GAAMj+F,GAAS9sE,GAAYioL,MAAiB;AAChE,UAAM95G,IAAOuhG,GAAmB3E,CAAI,EAAE,MAChC+nB,IAAcvwL,GAAMuqE,GAAS,CAAAq+F,MAAUoE,GAAQphG,EAAKg9F,EAAO,GAAG,GAAGA,EAAO,MAAM,CAAC;AACrF,WAAO8mB,GAAUlnB,GAAM+nB,GAAa9yL,GAAYioL,GAAcvqJ,IAASjgC,EAAS,MAAMD,EAAM;AAAA,EAClG,GAiEU6yC,KAAM,EAAE,UA/DG,CAAAC,MAAS;AACxB,QAAI,CAACpuC,GAAQouC,CAAK;AAChB,YAAM,IAAI,MAAM,wBAAwB;AAE1C,QAAIA,EAAM,WAAW;AACnB,YAAM,IAAI,MAAM,iCAAiC;AAEnD,UAAMC,IAAe,CAAA,GACfC,IAAM,CAAA;AACZ,WAAAyyH,GAAO3yH,GAAO,CAACG,GAAOzpC,MAAU;AAC9B,YAAM0pC,IAASjwC,GAAKgwC,CAAK;AACzB,UAAIC,EAAO,WAAW;AACpB,cAAM,IAAI,MAAM,gCAAgC;AAElD,YAAM/uC,IAAM+uC,EAAO,CAAC,GACd36C,IAAQ06C,EAAM9uC,CAAG;AACvB,UAAI6uC,EAAI7uC,CAAG,MAAM;AACf,cAAM,IAAI,MAAM,4BAA4BA,CAAG;AAC1C,UAAIA,MAAQ;AACjB,cAAM,IAAI,MAAM,uCAAuC;AAClD,UAAI,CAACO,GAAQnM,CAAK;AACvB,cAAM,IAAI,MAAM,iCAAiC;AAEnD,MAAAw6C,EAAa,KAAK5uC,CAAG,GACrB6uC,EAAI7uC,CAAG,IAAI,IAAI7I,MAAS;AACtB,cAAM63C,KAAY73C,EAAK;AACvB,YAAI63C,OAAc56C,EAAM;AACtB,gBAAM,IAAI,MAAM,uCAAuC4L,IAAM,gBAAgB5L,EAAM,SAAS,OAAOA,IAAQ,YAAY46C,EAAS;AAelI,eAAO;AAAA,UACL,MAAM,IAAIC,OAAa;AACrB,gBAAIA,GAAS,WAAWN,EAAM;AAC5B,oBAAM,IAAI,MAAM,iDAAiDA,EAAM,SAAS,WAAWM,GAAS,MAAM;AAG5G,mBADeA,GAAS5pC,CAAK,EACf,MAAM,MAAMlO,CAAI;AAAA,UAC/B;AAAA,UACD,OArBY,CAAA+3C,OAAY;AACxB,kBAAMC,KAAarwC,GAAKowC,EAAQ;AAChC,gBAAIN,EAAa,WAAWO,GAAW;AACrC,oBAAM,IAAI,MAAM,mDAAmDP,EAAa,KAAK,GAAG,IAAI;AAAA,YAAeO,GAAW,KAAK,GAAG,CAAC;AAKjI,gBAAI,CAHYrxC,GAAO8wC,GAAc,CAAAQ,OAC5BxyC,GAAWuyC,IAAYC,EAAM,CACrC;AAEC,oBAAM,IAAI,MAAM,kEAAkED,GAAW,KAAK,IAAI,IAAI;AAAA,cAAiBP,EAAa,KAAK,IAAI,CAAC;AAEpJ,mBAAOM,GAASlvC,CAAG,EAAE,MAAM,MAAM7I,CAAI;AAAA,UACjD;AAAA,UAUY,KAAK,CAAAk4C,OAAS;AACZ,oBAAQ,IAAIA,IAAO;AAAA,cACjB,cAAAT;AAAA,cACA,aAAa5uC;AAAA,cACb,QAAQ7I;AAAA,YACxB,CAAe;AAAA,UACF;AAAA,QACb;AAAA,MACA;AAAA,IACA,CAAO,GACM03C;AAAA,EACb,KA0BUuiJ,KAAgB,EAAE,GAvBV1iJ,GAAI,SAAS;AAAA,IACzB,EAAE,MAAM,CAAA,EAAI;AAAA,IACZ,EAAE,MAAM,CAAC,OAAO,EAAG;AAAA,IACnB;AAAA,MACE,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD;AAAA,MACE,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD;AAAA,MACE,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,EACP,CAAK,KAGK2iJ,KAAa,CAACvxH,GAAO3qE,MACrB2qE,EAAM,WAAW,IACZsxH,GAAc,SAEnBtxH,EAAM,WAAW,IACZsxH,GAAc,KAAK,CAAC,IAEzBj8L,MAAU,IACLi8L,GAAc,KAAK,GAAG,CAAC,IAE5Bj8L,MAAU2qE,EAAM,SAAS,IACpBsxH,GAAc,MAAMj8L,IAAQ,GAAGA,CAAK,IAEzCA,IAAQ,KAAKA,IAAQ2qE,EAAM,SAAS,IAC/BsxH,GAAc,OAAOj8L,IAAQ,GAAGA,GAAOA,IAAQ,CAAC,IAElDi8L,GAAc,QAEjBE,KAAY,CAACxxH,GAAOypG,GAAQwI,GAAM2D,GAAW6b,MAAW;AAC5D,UAAM/8L,IAASsrE,EAAM,MAAM,CAAC,GACtBhmC,IAAUu3J,GAAWvxH,GAAOypG,CAAM,GAClCxtK,IAASf,GAAS4F,GAAMpM,GAAQwG,GAAS,CAAC,CAAC,CAAC,GAC5Cw2L,IAAS,CAAAr8L,OAASugL,EAAU,kBAAkBlhL,EAAOW,EAAK,GAAG48K,CAAI,GACjE0f,KAAS,CAACt8L,IAAO2xB,OAASyqK,EAAO,mBAAmB/8L,GAAQW,IAAO2xB,IAAMirJ,GAAM2D,EAAU,aAAY,GAAIA,EAAU,UAAU,GAC7Hgc,KAAW,CAAC7qK,IAAM1xB,IAAO2xB,OAASyqK,EAAO,iBAAiB/8L,GAAQqyB,IAAM1xB,IAAO2xB,IAAMirJ,GAAM2D,EAAU,gBAAgBA,EAAU,UAAU,GACzIic,KAAU,CAAC9qK,IAAM1xB,OAAUo8L,EAAO,oBAAoB/8L,GAAQqyB,IAAM1xB,IAAO48K,GAAM2D,EAAU,aAAY,GAAIA,EAAU,UAAU;AACrI,WAAO57I,EAAQ,KAAK/9B,GAAQy1L,GAAQC,IAAQC,IAAUC,EAAO;AAAA,EACnE,GAEUje,KAAQ,CAACrvK,GAAOK,GAAKktL,MAAa;AACtC,QAAI/6M,IAAI;AACR,aAASwE,IAAIgpB,GAAOhpB,IAAIqpB,GAAKrpB;AAC3B,MAAAxE,KAAK+6M,EAASv2M,CAAC,MAAM,SAAYu2M,EAASv2M,CAAC,IAAI;AAEjD,WAAOxE;AAAA,EACb,GACUg7M,KAA2B,CAACnjB,GAAWojB,MAAW;AACtD,UAAMx2L,IAAM00K,GAAU,UAAUtB,CAAS;AACzC,WAAO9tK,GAAMtF,GAAK,CAAA2mD,MAAQ;AACxB,YAAMtrC,IAAQ+8J,GAAMzxH,EAAK,QAAQA,EAAK,SAASA,EAAK,SAAS6vI,CAAM;AACnE,aAAO;AAAA,QACL,SAAS7vI,EAAK;AAAA,QACd,OAAAtrC;AAAA,QACA,SAASsrC,EAAK;AAAA,MACxB;AAAA,IACA,CAAO;AAAA,EACP,GACU8vI,KAA6B,CAACrjB,GAAWojB,MAAW;AACxD,UAAME,IAAShiB,GAAU,YAAYtB,CAAS;AAC9C,WAAO9tK,GAAMoxL,GAAQ,CAACzoB,GAAQp0K,OAAW;AAAA,MACvC,SAASo0K,EAAO;AAAA,MAChB,OAAOuoB,EAAO38L,CAAK;AAAA,MACnB,SAASo0K,EAAO;AAAA,IACjB,EAAC;AAAA,EACR,GACU0oB,KAA4B,CAACvjB,GAAWwjB,MAAY;AACxD,UAAM52L,IAAM00K,GAAU,UAAUtB,CAAS;AACzC,WAAO9tK,GAAMtF,GAAK,CAAA2mD,MAAQ;AACxB,YAAMrrC,IAAS88J,GAAMzxH,EAAK,KAAKA,EAAK,MAAMA,EAAK,SAASiwI,CAAO;AAC/D,aAAO;AAAA,QACL,SAASjwI,EAAK;AAAA,QACd,QAAArrC;AAAA,QACA,SAASqrC,EAAK;AAAA,MACxB;AAAA,IACA,CAAO;AAAA,EACP,GACUkwI,KAAiB,CAACzjB,GAAWwjB,MAC1BtxL,GAAM8tK,EAAU,KAAK,CAAC/xE,GAAKthH,OACzB;AAAA,IACL,SAASshH,EAAI;AAAA,IACb,QAAQu1F,EAAQ72M,CAAC;AAAA,EAC3B,EACO,GAGG+2M,KAAQ,CAAA3e,MAAWp2K,GAAMo2K,GAAS,CAAClnL,GAAGxV,MAAMwV,IAAIxV,GAAG,CAAC,GACpDs7M,KAAc,CAAC3jB,GAAWojB,MAC1B9hB,GAAU,WAAWtB,CAAS,IACzBqjB,GAA2BrjB,GAAWojB,CAAM,IAE5CD,GAAyBnjB,GAAWojB,CAAM,GAG/CQ,KAAsB,CAAC5jB,GAAWojB,GAAQpc,MAAc;AAC5D,UAAMoP,IAAWuN,GAAY3jB,GAAWojB,CAAM;AAC9C,IAAAxwB,GAAOwjB,GAAU,CAAA7iI,MAAQ;AACvB,MAAAyzH,EAAU,gBAAgBzzH,EAAK,SAASA,EAAK,KAAK;AAAA,IAC1D,CAAO;AAAA,EACP,GACUswI,KAAc,CAACvnH,GAAO/I,GAAO9sE,GAAOo0L,GAAU7T,MAAc;AAChE,UAAMhH,IAAYsB,GAAU,UAAUhlG,CAAK,GACrC+mG,IAAO2D,EAAU,aAAazzG,CAAK,GACnC6vH,IAASpc,EAAU,UAAUhH,GAAWgH,CAAS,GACjDsP,IAAe7vL,MAAUu5K,EAAU,KAAK,UAAU,GAClD8jB,KAAcjJ,EAAS,gBAAgBuI,GAAQ38L,GAAO48K,GAAM2D,EAAU,gBAAgBsP,CAAY,GAClGyN,KAASnB,GAAUQ,GAAQ38L,GAAOq9L,IAAa9c,GAAW6T,CAAQ,GAClEmJ,KAAY9xL,GAAM6xL,IAAQ,CAACE,IAAIt3M,OAAMs3M,KAAKb,EAAOz2M,EAAC,CAAC;AACzD,IAAAi3M,GAAoB5jB,GAAWgkB,IAAWhd,CAAS,GACnD6T,EAAS,YAAY7T,EAAU,kBAAkB8c,IAAaxN,CAAY;AAAA,EAChF,GACU4N,KAAe,CAAC5nH,GAAO/I,GAAO9sE,GAAOkwC,MAAc;AACvD,UAAMqpI,IAAYsB,GAAU,UAAUhlG,CAAK,GACrCknH,IAAUpc,GAAgBpH,GAAW1jG,GAAO3lC,CAAS,GACrDwtJ,IAAajyL,GAAMsxL,GAAS,CAACY,IAAIz3M,OAAM8Z,MAAU9Z,KAAI,KAAK,IAAI4mF,IAAQ6wH,IAAIrnB,GAAW,CAAA,IAAIqnB,EAAE,GAC3FC,IAAed,GAA0BvjB,GAAWmkB,CAAU,GAC9DG,IAAcb,GAAezjB,GAAWmkB,CAAU;AACxD,IAAAvxB,GAAO0xB,GAAa,CAAAr2F,OAAO;AACzB,MAAAy2E,GAAUz2E,GAAI,SAASA,GAAI,MAAM;AAAA,IACzC,CAAO,GACD2kE,GAAOyxB,GAAc,CAAA9wI,OAAQ;AAC3B,MAAAmxH,GAAUnxH,GAAK,SAASA,GAAK,MAAM;AAAA,IAC3C,CAAO;AACD,UAAMyxH,KAAQ0e,GAAMS,CAAU;AAC9B,IAAAzf,GAAUpoG,GAAO0oG,EAAK;AAAA,EAC5B,GACUuf,KAAgC,CAACC,GAAQ52B,GAAMnxF,GAASuqG,GAAWyd,MAAoB;AAC3F,UAAMzkB,IAAYsB,GAAU,SAAS1T,CAAI,GACnCwnB,IAAQpO,EAAU,UAAUhH,GAAWgH,CAAS,GAChD0d,IAAkB1d,EAAU,cAC5B,EAAC,UAAAoP,GAAU,OAAA7iH,GAAK,IAAIkxH,EAAgB,wBAAwBrP,GAAOsP,GAAiBjoH,EAAQ,YAAYuqG,EAAU,UAAU;AAClI,IAAA4c,GAAoB5jB,GAAWoW,GAAUpP,CAAS,GAClDA,EAAU,iBAAiBzzG,EAAK;AAAA,EACtC,GACUoxH,KAAgB,CAACH,GAAQ52B,GAAMg3B,GAAO5d,MAAc;AACxD,UAAMhH,IAAYsB,GAAU,SAAS1T,CAAI,GACnCw1B,IAASpc,EAAU,UAAUhH,GAAWgH,CAAS;AACvD,IAAA4c,GAAoB5jB,GAAWojB,GAAQpc,CAAS;AAAA,EACtD,GAEU6d,KAAgB,CAAApoH,MAKb5tE,GAAM4tE,GAJO,CAACtV,GAAM2zG,MACJ3sK,GAAOg5D,GAAM,CAAA29H,MAAiBA,EAAc,WAAWhqB,EAAO,MAAM,IACnE3zG,IAAOA,EAAK,OAAO,CAAC2zG,CAAM,CAAC,GAEhB,CAAA,CAAE,EAAE,KAAK,CAACgT,GAASC,MAAYD,EAAQ,SAASC,EAAQ,MAAM,GAG7FgX,KAAQtoL,GAAM,KAAK,GACnBuoL,KAAavoL,GAAM,UAAU,GAC7BwoL,KAAU,CAAAjpL,MAAW7K,GAAK6K,CAAO,MAAM,QAAQgpL,GAAWhpL,CAAO,GACjEkpL,KAAgB,CAAAlpL,MAAW;AAC/B,UAAM2xF,IAAU8uE,GAAazgK,GAAS,WAAW,CAAC,GAC5C0xF,IAAU+uE,GAAazgK,GAAS,WAAW,CAAC;AAClD,WAAO;AAAA,MACL,SAAAA;AAAA,MACA,SAAA2xF;AAAA,MACA,SAAAD;AAAA,IACR;AAAA,EACA,GACUy3F,KAAe,CAACtR,GAAYuR,IAASF,OAAkB;AAC3D,UAAMG,IAAS,CAAA//J,MAAQy/J,GAAMz/J,EAAK,OAAO,IAAIuuJ,EAAW,IAAIvuJ,CAAI,IAAIuuJ,EAAW,KAAKvuJ,CAAI,GAClFggK,IAAQ,CAAAhgK,MAAQ0/J,GAAW1/J,EAAK,OAAO,IAAIuuJ,EAAW,SAASvuJ,CAAI,IAAIuuJ,EAAW,IAAIvuJ,CAAI,GAC1F9J,IAAM,CAAAxf,MAAW;AACrB,UAAIipL,GAAQjpL,CAAO;AACjB,eAAOspL,EAAM,EAAE,SAAAtpL,EAAO,CAAE;AACnB;AACL,cAAMu3C,IAAOv3C,GACPvO,KAAc43L,EAAOD,EAAO7xI,CAAI,CAAC;AACvC,eAAAgyI,IAASn4L,EAAS,KAAK;AAAA,UACrB,MAAMmmD;AAAA,UACN,aAAA9lD;AAAA,QACZ,CAAW,GACMA;AAAA,MACR;AAAA,IACT;AACM,QAAI83L,IAASn4L,EAAS;AAQtB,WAAO,EAAE,WAPS,CAAC4O,GAASrM,MACnB41L,EAAO,KAAK,MACV/pK,EAAIxf,CAAO,GACjB,CAAAxe,OACMmS,EAAWqM,GAASxe,GAAE,IAAI,IAAIA,GAAE,cAAcg+B,EAAIxf,CAAO,CACjE,EAEe;AAAA,EACxB,GACUwpL,KAAc,CAAA5/L,MACX,CAAAiuL,MAAc;AACnB,UAAMjmB,IAAO,CAAA,GACPtmG,IAAO,CAACtrD,GAASrM,MACdmE,EAAO85J,GAAM,CAAA9iL,MACX6kB,EAAW7kB,EAAE,MAAMkxB,CAAO,CAClC,GAEGypL,IAAU,CAAAzpL,MAAW;AACzB,YAAMc,IAAQlX,MAAQ,OAAO,EAAE,OAAO,KAAM,IAAG,IACzC2tD,IAAOsgI,EAAW,QAAQ73K,GAASpW,GAAKkX,CAAK;AACnD,aAAA8wJ,EAAK,KAAK;AAAA,QACR,MAAM5xJ;AAAA,QACN,KAAKu3C;AAAA,MACjB,CAAW,GACMA;AAAA,IACjB;AAaQ,WAAO,EAAE,eAZa,CAACv3C,GAASrM,MAAe;AAC7C,UAAIs1L,GAAQjpL,CAAO,KAAK+oL,GAAM/oL,CAAO;AACnC,eAAOA;AACF;AACL,cAAMu3C,IAAOv3C;AACb,eAAOsrD,EAAK/T,GAAM5jD,CAAU,EAAE,KAAK,MAC1B81L,EAAQlyI,CAAI,GAClB,CAAA/1D,OACMmS,EAAWqM,GAASxe,GAAE,IAAI,IAAIA,GAAE,MAAMioM,EAAQlyI,CAAI,CAC1D;AAAA,MACF;AAAA,IACX,EAC8B;AAAA,EAC9B,GAEUmyI,KAAoB,CAAAnyI,MAAQv2C,EAAOu2C,GAAM,OAAO,EAAE,IAAI,CAAAu3H,MAAaA,EAAU,OAAO,GAAG,CAAC,CAAC,GA2CzF6a,KAAa;AAAA,IACjB,cAAAR;AAAA,IACA,WAAWK;AAAA,IACX,SA7Cc,CAAA3R,OAqCP;AAAA,MACL,SArCc,CAAAtgI,MAAQ;AACtB,cAAMp4C,IAAQuqL,GAAkBnyI,CAAI;AACpC,eAAAp4C,EAAM,KAAK,CAAA2vK,MAAajnK,GAAM0vC,GAAM,SAASu3H,CAAS,CAAC,GAChD,MAAM;AACX,gBAAM3mK,IAAM0vK,EAAW,KAAK;AAAA,YAC1B,SAAStgI;AAAA,YACT,SAAS;AAAA,YACT,SAAS;AAAA,UACrB,CAAW;AACD,iBAAApuC,GAAShB,GAAK,OAAO,GACrBgB,GAASouC,GAAM,OAAO,GACtBp4C,EAAM,KAAK,CAAA2vK,MAAajnK,GAAMM,GAAK,SAAS2mK,CAAS,CAAC,GAC/C3mK;AAAA,QACjB;AAAA,MACA;AAAA,MAwBQ,OAvBY,CAAAk5D,MAAS;AACrB,cAAMuoH,IAAmB,MAAM;AAC7B,gBAAMC,IAAmBlrL,GAAIzI,GAAMmrE,GAAOqoH,EAAiB,CAAC;AAC5D,cAAIG,EAAiB,WAAW;AAC9B,mBAAOz4L,EAAS;AACX;AACL,kBAAM04L,IAAYD,EAAiB,CAAC,GAC9BrzK,IAAS;AAAA,cACb;AAAA,cACA;AAAA,YACd;AAIY,mBAHgBrkB,GAAO03L,GAAkB,CAAA/a,OAChCA,OAAcgb,KAAa53L,GAAWskB,GAAQs4J,EAAS,CAC/D,IACgB19K,EAAS,KAAI,IAAKA,EAAS,KAAK04L,CAAS;AAAA,UAC3D;AAAA,QACX;AACQ,eAAA3gL,GAASk4D,EAAM,CAAC,GAAG,OAAO,GAC1BuoH,EAAgB,EAAG,KAAK,MAAMznL,EAASk/D,EAAM,CAAC,GAAG,OAAO,GAAG,CAAAytG,MAAajnK,GAAMw5D,EAAM,CAAC,GAAG,SAASytG,IAAY,OAAO,CAAC,GAC9Gx+K,GAAS+wE,EAAM,CAAC,CAAC;AAAA,MAChC;AAAA,IAIA;AAAA,EAMA,GAEU0oH,KAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,GACUC,KAAW,CAAChW,GAAU39K,MAAS;AACnC,UAAM8xF,IAAU6rF,EAAS,SAAU,EAAC,KAAK39K,CAAI;AAC7C,WAAOnE,GAAW;AAAA,MAChB;AAAA,MACA;AAAA,IACD,GAAEi2F,CAAO;AAAA,EAChB,GACUzvB,KAAY,CAACs7G,GAAU39K,MAAS;AACpC,UAAM8xF,IAAU6rF,EAAS,SAAU,EAAC,KAAK39K,CAAI;AAC7C,WAAOnE,GAAW63L,IAAW5hG,CAAO;AAAA,EAC1C,GACU8hG,KAAe,CAACjW,GAAU39K,MACvBnE,GAAW;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAAE8hL,EAAS,SAAQ,EAAG,KAAK39K,CAAI,CAAC,GAG7B6zL,KAAazW,MACb37J,KAAU,CAAA9X,MACP04D,GAAUwxH,IAAYlqL,CAAO,GAEhC2Q,KAAS,CAAA3Q,MACNgqL,GAASE,IAAYlqL,CAAO,GAE/B0zK,KAAa,CAAA1zK,MACViqL,GAAaC,IAAYlqL,CAAO,GAGnCmsE,KAAQ,CAAA9K,MAAS;AACrB,UAAM+/B,IAAO3gG,GAAM,IAAI,GACjB0pL,IAAa,CAAA9gL,MACVjW,GAAOiW,GAAU,CAAAr0B,OACfosH,EAAKpsH,EAAC,KAAKs+J,GAAOt+J,EAAC,KAAKy0B,GAAMz0B,EAAC,EAAE,OAAO,WAAW,CAC3D,GAEGsqJ,IAAa,CAAAn5H,MACVhR,GAAKgR,CAAE,MAAM,QAAQqG,GAAWrG,GAAIwK,EAAM,EAAE,UAE/Cy5K,IAAiB,CAAAjkL,MACdpB,GAAYoB,CAAE,EAAE,IAAI,CAAAkkL,OACrBvyK,GAAQuyK,EAAY,IACf,KAEL3W,GAAW2W,EAAY,IAClBl1L,GAAKk1L,EAAY,MAAM,QAEzB,EACR,EAAE,MAAM,EAAK,GAEVC,IAAW,CAAA/yI,MACRpgB,GAAOogB,CAAI,EAAE,KAAK,CAAAg6H,OAAa;AACpC,YAAMgZ,KAAsBH,EAAe7Y,EAAS;AACpD,aAAOptK,GAAOotK,EAAS,EAAE,IAAI,CAAAptK,OACpBomL,OAAwB,MAAQjrD,EAAWn7H,EAAM,KAAKi9F,EAAKmwE,EAAS,KAAKz5J,GAAQ3T,EAAM,KAAK,CAACjV,GAAKqoD,GAAMpzC,EAAM,IAAI,CAAA,IAAK,CAACrB,GAAa,QAAQ,IAAI,CAAC,CAC1J;AAAA,IACX,CAAS,EAAE,MAAM,CAAA,CAAE,GASPsgJ,KAPc,MAAM;AACxB,YAAMz5I,IAAUiB,GAAOy2D,GAAO,CAAA9pB,OAAQ;AACpC,cAAMluC,KAAW40J,GAAW1mH,EAAI;AAChC,eAAO4yI,EAAW9gL,EAAQ,IAAI,CAAE,IAAGA,GAAS,OAAOihL,EAAS/yI,EAAI,CAAC;AAAA,MAC3E,CAAS;AACD,aAAO5tC,EAAQ,WAAW,IAAI,CAAC7G,GAAa,QAAQ,IAAI,CAAC,IAAI6G;AAAA,IACrE;AAEM,IAAAV,GAAMo4D,EAAM,CAAC,CAAC,GACdr4D,GAAOq4D,EAAM,CAAC,GAAG+hF,CAAQ;AAAA,EAC/B,GAEUjjD,KAAa,CAAA98F,MAAQ0wG,GAAa1wG,GAAM,EAAI,GAC5CoxK,KAAQ,CAAAn0G,MAAS;AAErB,IADc0gG,GAAQ1gG,CAAK,EACjB,WAAW,KACnBh4D,GAASg4D,CAAK;AAAA,EAEtB,GACUkqH,KAAU,CAAC9rB,GAAM+rB,OAAY;AAAA,IACjC,MAAA/rB;AAAA,IACA,QAAA+rB;AAAA,EACN,IACUC,KAA6B,CAAA5oH,MAAQ7tE,GAAQ6tE,GAAM,CAAAmwB,MAAOh+F,GAAQg+F,EAAI,OAAO,CAAA16C,MAAQ;AACzF,UAAMl0C,IAAOk0C,EAAK;AAClB,WAAOv4C,GAAOmhG,GAAW98F,CAAI,GAAGA,CAAI;AAAA,EACrC,CAAA,CAAC,GACIsnL,KAAkB,CAACjsB,GAAMzsE,GAAK4sE,MAAW;AAC7C,QAAIlmL,GAAIw2C;AACR,UAAM2yC,IAAOuhG,GAAmB3E,CAAI,EAAE;AACtC,WAAOttK,EAAS,MAAM+9B,KAAMx2C,IAAKmpF,EAAKmwB,CAAG,OAAO,QAAQt5G,MAAO,SAAS,SAASA,EAAG,MAAMkmL,CAAM,OAAO,QAAQ1vI,MAAO,SAAS,SAASA,EAAG,OAAO,EAAE,OAAOgxE,EAAU,EAAE,QAAQ,MAAMuqF,GAA2B5oH,CAAI,CAAC;AAAA,EAC3N,GACUkyD,KAAS,CAAC0qC,GAAMzsE,GAAK4sE,MAAW;AACpC,UAAM+rB,IAAgBD,GAAgBjsB,GAAMzsE,GAAK4sE,CAAM;AACvD,WAAO2rB,GAAQ9rB,GAAMksB,CAAa;AAAA,EACxC,GACUC,KAAa,CAAApqH,MAKV5tE,GAAM4tE,GAJU,CAACtV,GAAM2zG,MACV3sK,GAAOg5D,GAAM,CAAA29H,MAAiBA,EAAc,QAAQhqB,EAAO,GAAG,IAC7D3zG,IAAOA,EAAK,OAAO,CAAC2zG,CAAM,CAAC,GAEV,CAAA,CAAE,EAAE,KAAK,CAACgT,GAASC,MAAYD,EAAQ,MAAMC,EAAQ,GAAG,GAE1F+Y,KAAqB,CAACpsB,GAAMj+F,GAAS9sE,GAAY6qL,MAAgB;AACrE,UAAMuM,IAActqH,EAAQ,CAAC,EAAE,KACzBqB,IAAO+oH,GAAWpqH,CAAO,GACzB8lH,IAAU5zL,GAAMmvE,GAAM,CAAClvE,GAAKq/F,OAEzB;AAAA,MACL,MAFWkyF,GAAYvxL,EAAI,MAAMm4L,GAAa94F,EAAI,MAAMr/F,EAAI,OAAOe,GAAY6qL,EAAY,SAAS;AAAA,MAGpG,OAAO5rL,EAAI,QAAQ;AAAA,IAC7B,IACS;AAAA,MACD,MAAA8rK;AAAA,MACA,OAAO;AAAA,IACR,CAAA,EAAE;AACH,WAAO1qC,GAAOuyD,GAASwE,GAAatqH,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC3D,GACUuqH,KAAoB,CAACtsB,GAAMj+F,GAAS9sE,GAAY6qL,MAAgB;AACpE,UAAM18G,IAAO+oH,GAAWpqH,CAAO,GACzBxlE,IAAS6mE,EAAKA,EAAK,SAAS,CAAC,GAC7BipH,IAAc9vL,EAAO,MAAMA,EAAO,SAClCsrL,IAAU5zL,GAAMmvE,GAAM,CAACmpH,GAAMh5F,OAC1BkyF,GAAY8G,GAAMF,GAAa94F,GAAI,KAAKt+F,GAAY6qL,EAAY,SAAS,GAC/E9f,CAAI;AACP,WAAO1qC,GAAOuyD,GAASwE,GAAatqH,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC3D,GACUyqH,KAAwB,CAACxsB,GAAMysB,GAAex3L,GAAY6qL,MAAgB;AAC9E,UAAM/9G,IAAU0qH,EAAc,SACxBxsB,IAAUkqB,GAAcpoH,CAAO,GAC/BsqH,IAAcpsB,EAAQ,CAAC,EAAE,QACzB4nB,IAAU5zL,GAAMgsK,GAAS,CAAC/rK,GAAK8yK,QAE5B;AAAA,MACL,MAFW8e,GAAe5xL,EAAI,MAAMm4L,GAAarlB,GAAI,SAAS9yK,EAAI,OAAOe,GAAY6qL,EAAY,SAAS;AAAA,MAG1G,OAAO5rL,EAAI,QAAQ;AAAA,IAC7B,IACS;AAAA,MACD,MAAA8rK;AAAA,MACA,OAAO;AAAA,IACR,CAAA,EAAE;AACH,WAAO1qC,GAAOuyD,GAAS9lH,EAAQ,CAAC,EAAE,KAAKsqH,CAAW;AAAA,EACxD,GACUK,KAAuB,CAAC1sB,GAAMysB,GAAex3L,GAAY6qL,MAAgB;AAC7E,UAAM/9G,IAAU0qH,EAAc,SACxBlwL,IAASwlE,EAAQA,EAAQ,SAAS,CAAC,GACnCsqH,IAAc9vL,EAAO,SAASA,EAAO,SACrC0jK,IAAUkqB,GAAcpoH,CAAO,GAC/B8lH,IAAU5zL,GAAMgsK,GAAS,CAACssB,IAAMvlB,OAC7B8e,GAAeyG,IAAMF,GAAarlB,GAAI,QAAQ/xK,GAAY6qL,EAAY,SAAS,GACrF9f,CAAI;AACP,WAAO1qC,GAAOuyD,GAAS9lH,EAAQ,CAAC,EAAE,KAAKsqH,CAAW;AAAA,EACxD,GACUM,KAAsB,CAACC,GAAa7qH,GAAS9sE,GAAY6qL,MAAgB;AAC7E,UAAM7f,IAAUkqB,GAAcpoH,CAAO,GAC/B8qH,IAAgBr1L,GAAMyoK,GAAS,CAAAG,MAAUA,EAAO,MAAM,GACtDynB,IAAUL,GAAeoF,GAAaC,GAAe,IAAM53L,GAAY6qL,EAAY,aAAa;AACtG,WAAOxqD,GAAOuyD,GAAS9lH,EAAQ,CAAC,EAAE,KAAKA,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC9D,GACU+qH,KAAoB,CAACF,GAAa7qH,GAAS9sE,GAAY6qL,MAAgB;AAC3E,UAAM+H,IAAUC,GAAa8E,GAAa7qH,GAAS9sE,GAAY6qL,EAAY,aAAa;AACxF,WAAOxqD,GAAOuyD,GAAS9lH,EAAQ,CAAC,EAAE,KAAKA,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC9D,GACUgrH,KAAwB,CAACH,GAAa7qH,GAAS9sE,GAAY6qL,MAAgB;AAC/E,UAAM7f,IAAUkqB,GAAcpoH,CAAO,GAC/B8qH,IAAgBr1L,GAAMyoK,GAAS,CAAAG,MAAUA,EAAO,MAAM,GACtDynB,IAAUL,GAAeoF,GAAaC,GAAe,IAAO53L,GAAY6qL,EAAY,aAAa;AACvG,WAAOxqD,GAAOuyD,GAAS9lH,EAAQ,CAAC,EAAE,KAAKA,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC9D,GACUirH,KAAsB,CAACJ,GAAa7qH,GAAS9sE,GAAY6qL,MAAgB;AAC7E,UAAM+H,IAAUC,GAAa8E,GAAa7qH,GAAS9sE,GAAY6qL,EAAY,aAAa;AACxF,WAAOxqD,GAAOuyD,GAAS9lH,EAAQ,CAAC,EAAE,KAAKA,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC9D,GACUkrH,KAAkB,CAACvsB,GAASmmB,MAAe,CAAC+F,GAAa7qH,GAAS9sE,GAAY6qL,GAAaE,MAAiB;AAChH,UAAM58G,IAAO+oH,GAAWpqH,CAAO,GACzBmrH,IAAa11L,GAAM4rE,GAAM,CAAAg9F,OAAUA,GAAO,GAAG,GAC7CynB,KAAUD,GAAYgF,GAAaM,GAAYxsB,GAASmmB,GAAY5xL,GAAY6qL,EAAY,eAAeE,CAAY;AAC7H,WAAO1qD,GAAOuyD,IAAS9lH,EAAQ,CAAC,EAAE,KAAKA,EAAQ,CAAC,EAAE,MAAM;AAAA,EAC9D,GACUorH,KAAmBF,GAAgB,SAAS,EAAI,GAChDG,KAAiBH,GAAgB,SAAS,EAAK,GAC/CI,KAAmBJ,GAAgB,SAAS,EAAK,GACjDK,KAAiB,CAACttB,GAAMysB,GAAec,GAAaC,MAAiB;AACzE,UAAMvtB,IAAUkqB,GAAcsC,EAAc,OAAO,GAC7C5E,IAAU9B,GAAgB/lB,GAAMxoK,GAAMyoK,GAAS,CAAAE,MAAUA,EAAO,MAAM,CAAC,GACvEstB,IAAc5F,EAAQ,SAAS,IAAIA,EAAQ,CAAC,EAAE,MAAM,SAAS,IAAI;AACvE,WAAOvyD,GAAOuyD,GAAS5nB,EAAQ,CAAC,EAAE,KAAK,KAAK,IAAIA,EAAQ,CAAC,EAAE,QAAQwtB,CAAW,CAAC;AAAA,EACrF,GACUC,KAAc,CAAC1tB,GAAMj+F,GAASwrH,GAAaC,MAAiB;AAChE,UAAMpqH,IAAO+oH,GAAWpqH,CAAO,GACzB8lH,IAAU7B,GAAahmB,GAAM58F,EAAK,CAAC,EAAE,KAAKA,EAAKA,EAAK,SAAS,CAAC,EAAE,GAAG,GACnEuqH,IAAc9F,EAAQ,SAAS,IAAIA,EAAQ,SAAS,IAAI;AAC9D,WAAOvyD,GAAOuyD,GAAS,KAAK,IAAI9lH,EAAQ,CAAC,EAAE,KAAK4rH,CAAW,GAAG5rH,EAAQ,CAAC,EAAE,MAAM;AAAA,EACrF,GACU6rH,KAAe,CAAC5tB,GAAMsY,GAAUrjL,GAAY6qL,MAAgB;AAChE,UAAMn9G,IAAQ21G,EAAS;AACvB,IAAA7qG,GAAM9K,CAAK;AACX,UAAMklH,IAAU7G,GAAQhhB,GAAMsY,EAAS,QAAQrjL,GAAY6qL,EAAY,MAAMn9G,CAAK,CAAC;AACnF,WAAOmpH,GAAQjE,GAASn1L,EAAS,KAAKiwE,EAAM,CAAC,CAAC,CAAC;AAAA,EACrD,GACUkrH,KAAiB,CAAC7tB,GAAMmY,GAAYljL,GAAY6qL,MAAgB;AAEpE,UAAM+H,IAAU5zL,GAAMkkL,GADJ,CAACh1L,GAAG01D,MAASooI,GAAQ99L,GAAG01D,GAAM5jD,GAAY6qL,EAAY,QAAQjnI,CAAI,CAAC,GACxCmnH,CAAI;AACjD,WAAO8rB,GAAQjE,GAASn1L,EAAS,KAAKylL,EAAW,CAAC,CAAC,CAAC;AAAA,EAC1D,GACU2V,KAAe,CAAC9tB,GAAM+tB,GAAc94L,GAAYu4L,MAAiB;AAKrE,UAAMzL,KAJU,CAACngH,GAAOu3G,OAAe;AACrC,YAAM6U,KAAKpnB,GAAU,UAAUhlG,CAAK;AACpC,aAAOs9G,GAAO8O,IAAI7U,IAAY,EAAI;AAAA,IAC1C,GAC4B4U,EAAa,WAAWA,EAAa,UAAU,GAC/DlM,IAAe3hB,GAAQ6tB,EAAa,KAAKA,EAAa,MAAM;AAElE,WADmB3uF,GAAQyiF,GAAc7hB,GAAM+hB,GAAOgM,EAAa,YAAY94L,CAAU,EACvE,KAAK,MAAM62L,GAAQ9rB,GAAMttK,EAAS,KAAKq7L,EAAa,OAAO,CAAC,GAAG,CAAAlG,MACxEvyD,GAAOuyD,GAASkG,EAAa,KAAKA,EAAa,MAAM,CAC7D;AAAA,EACP,GACUE,KAAc,CAAC7qH,GAAM+1G,GAAYzoJ,MAAY;AACjD,UAAMq9J,IAAejrB,GAAe1/F,GAAM1yC,EAAQ,OAAO,GACnDs9J,IAAKpnB,GAAU,SAASmnB,CAAY;AAC1C,WAAO7O,GAAO8O,GAAI7U,GAAY,EAAI;AAAA,EACxC,GACU+U,KAAoB,CAACluB,GAAM+tB,GAAc94L,GAAYu4L,MAAiB;AAC1E,UAAMpqH,IAAOuhG,GAAmB3E,CAAI,EAAE,MAChCj0K,IAAQgiM,EAAa,MAAM,CAAC,EAAE,QAC9Br9J,IAAU0yC,EAAK2qH,EAAa,MAAM,CAAC,EAAE,GAAG,GACxChM,IAAQkM,GAAYF,EAAa,WAAWA,EAAa,YAAYr9J,CAAO,GAC5Ey9J,IAAapJ,GAAWh5L,GAAOi0K,GAAM+hB,GAAOgM,EAAa,YAAY94L,CAAU;AACrF,WAAOqgI,GAAO64D,GAAYJ,EAAa,MAAM,CAAC,EAAE,KAAKA,EAAa,MAAM,CAAC,EAAE,MAAM;AAAA,EACvF,GACUK,KAAmB,CAACpuB,GAAM+tB,GAAc94L,GAAYu4L,MAAiB;AACzE,UAAMpqH,IAAOuhG,GAAmB3E,CAAI,EAAE,MAChCj0K,IAAQgiM,EAAa,MAAMA,EAAa,MAAM,SAAS,CAAC,EAAE,SAASA,EAAa,MAAMA,EAAa,MAAM,SAAS,CAAC,EAAE,SACrHr9J,IAAU0yC,EAAK2qH,EAAa,MAAM,CAAC,EAAE,GAAG,GACxChM,IAAQkM,GAAYF,EAAa,WAAWA,EAAa,YAAYr9J,CAAO,GAC5Ey9J,IAAapJ,GAAWh5L,GAAOi0K,GAAM+hB,GAAOgM,EAAa,YAAY94L,CAAU;AACrF,WAAOqgI,GAAO64D,GAAYJ,EAAa,MAAM,CAAC,EAAE,KAAKA,EAAa,MAAM,CAAC,EAAE,MAAM;AAAA,EACvF,GACUM,KAAoB,CAACruB,GAAM+tB,GAAc94L,GAAYu4L,MAAiB;AAC1E,UAAMpqH,IAAOuhG,GAAmB3E,CAAI,EAAE,MAChCj0K,IAAQgiM,EAAa,MAAM,CAAC,EAAE,KAC9Br9J,IAAU0yC,EAAKr3E,CAAK,GACpBg2L,IAAQkM,GAAYF,EAAa,WAAWA,EAAa,YAAYr9J,CAAO,GAC5Ey9J,IAAahJ,GAAWp5L,GAAOi0K,GAAM+hB,GAAOgM,EAAa,YAAY94L,CAAU;AACrF,WAAOqgI,GAAO64D,GAAYJ,EAAa,MAAM,CAAC,EAAE,KAAKA,EAAa,MAAM,CAAC,EAAE,MAAM;AAAA,EACvF,GACUO,KAAmB,CAACtuB,GAAM+tB,GAAc94L,GAAYu4L,MAAiB;AACzE,UAAMpqH,IAAOuhG,GAAmB3E,CAAI,EAAE,MAChCj0K,IAAQgiM,EAAa,MAAMA,EAAa,MAAM,SAAS,CAAC,EAAE,MAAMA,EAAa,MAAMA,EAAa,MAAM,SAAS,CAAC,EAAE,SAClHr9J,IAAU0yC,EAAK2qH,EAAa,MAAM,CAAC,EAAE,GAAG,GACxChM,IAAQkM,GAAYF,EAAa,WAAWA,EAAa,YAAYr9J,CAAO,GAC5Ey9J,IAAahJ,GAAWp5L,GAAOi0K,GAAM+hB,GAAOgM,EAAa,YAAY94L,CAAU;AACrF,WAAOqgI,GAAO64D,GAAYJ,EAAa,MAAM,CAAC,EAAE,KAAKA,EAAa,MAAM,CAAC,EAAE,MAAM;AAAA,EACvF,GACUQ,KAAmB,CAAC3sH,GAAOrlE,MAAW;AAC1C,UAAMwxK,IAAQnH,GAAU,UAAUhlG,CAAK;AAEvC,WADgB6+G,GAAQ1S,GAAOxxK,CAAM,EACtB,KAAK,CAAAm8C,MAAiB;AACnC,YAAM81I,IAAmB91I,EAAcA,EAAc,SAAS,CAAC,GACzD+1I,IAAc/1I,EAAc,CAAC,EAAE,QAC/Bg2I,IAAcF,EAAiB,SAASA,EAAiB,SACzDG,IAAsBn6L,GAAQgD,GAAMu2K,EAAM,KAAK,CAAAx6E,OAAOpqB,GAASoqB,GAAI,OAAO,CAAA16C,OAAQA,GAAK,UAAU41I,KAAe51I,GAAK,SAAS61I,CAAW,CAAC,CAAC;AACjJ,aAAOlS,GAAmBmS,CAAmB;AAAA,IACrD,CAAO,EAAE,MAAM,EAAE;AAAA,EACjB,GACUC,KAAiB,CAAChtH,GAAOrlE,MAAW;AACxC,UAAMwxK,IAAQnH,GAAU,UAAUhlG,CAAK;AAEvC,WADgB6+G,GAAQ1S,GAAOxxK,CAAM,EACtB,KAAKigL,EAAkB,EAAE,MAAM,EAAE;AAAA,EACtD,GACUqS,KAAgB,CAACjtH,GAAOrlE,MAAW;AACvC,UAAMwxK,IAAQnH,GAAU,UAAUhlG,CAAK;AAEvC,WADgB6+G,GAAQ1S,GAAOxxK,CAAM,EACtB,KAAK,CAAAm8C,MAAiB;AACnC,YAAM81I,IAAmB91I,EAAcA,EAAc,SAAS,CAAC,GACzDo2I,IAAcp2I,EAAc,CAAC,EAAE,KAC/Bq2I,IAAcP,EAAiB,MAAMA,EAAiB,SACtDQ,IAAejhB,EAAM,IAAI,MAAM+gB,GAAaC,CAAW;AAC7D,aAAOrS,GAAkBsS,CAAY;AAAA,IAC7C,CAAO,EAAE,MAAM,EAAE;AAAA,EACjB,GACU7G,KAAS,CAACvmH,GAAOsxF,GAAMnxF,GAASg+G,MAAekK,GAAcroH,GAAOsxF,GAAMnxF,GAASg+G,EAAW,MAAM,GACpGkP,KAA8B,CAACrtH,GAAOsxF,GAAMnxF,GAASg+G,MAAe8J,GAA8BjoH,GAAOsxF,GAAMnxF,GAASg+G,EAAW,QAAQA,EAAW,MAAM,GAC5JmP,KAAsB,CAAC3O,GAAYx+G,MAAYtuE,GAAOsuE,GAAS,CAAAq+F,MAAUA,EAAO,WAAW,KAAKA,EAAO,QAAQ,GAC/G+uB,KAAqB,CAAC7pB,GAAWvjG,MAAYtuE,GAAOsuE,GAAS,CAAAq+F,MAAUA,EAAO,SAASA,EAAO,WAAWkF,EAAU,KAAK,WAAWlF,EAAO,QAAQ,GAClJgvB,KAAkB,CAAC9pB,GAAWvjG,MAAY;AAC9C,UAAMwgG,IAAYtC,GAAQqF,CAAS,GAC7B+pB,IAAalF,GAAcpoH,CAAO;AACxC,WAAO5tE,GAAMk7L,GAAY,CAACn7L,GAAKksK,MAAW;AAExC,YAAMkvB,IADS/sB,EAAUnC,EAAO,MAAM,EACd,IAAIyD,EAAU,EAAE,MAAM,CAAC;AAC/C,aAAO3vK,IAAMo7L;AAAA,IACd,GAAE,CAAC;AAAA,EACV,GACUC,KAAyB,CAAA17K,MAAU,CAACyxJ,GAAW/oK,MAAWkkL,GAAQnb,GAAW/oK,CAAM,EAAE,OAAO,CAAAwlE,MAEzF,EADaluD,IAASq7K,KAAsBC,IAC/B7pB,GAAWvjG,CAAO,CACvC,EAAE,IAAI,CAAAA,OAAY;AAAA,IACjB,SAAAA;AAAA,IACA,YAAYqtH,GAAgB9pB,GAAWvjG,CAAO;AAAA,EAC/C,EAAC,GACIytH,KAAwB,CAAClqB,GAAW/oK,MAAWmkL,GAAgBpb,GAAW/oK,CAAM,EAAE,IAAI,CAAAwlE,OAAY;AAAA,IACtG,SAAAA;AAAA,IACA,YAAY,CAACqtH,GAAgB9pB,GAAWvjG,CAAO;AAAA,EAChD,EAAC,GACI0tH,KAAwB,CAAA57K,MAAU,CAACyxJ,GAAW/oK,MAAW8jL,GAAgB/a,GAAW/oK,CAAM,EAAE,OAAO,CAAAwlE,MAEhG,EADaluD,IAASq7K,KAAsBC,IAC/B7pB,GAAWvjG,EAAQ,KAAK,CAC7C,GACK2tH,KAAsBzE,GAAW,UAAU,IAAI,GAC/C0E,KAAoB1E,GAAW,UAAU,IAAI,GAC7C2E,KAAmB9gK,GAAIs9J,IAAoB3L,IAASnvL,IAAMA,IAAM25L,GAAW,YAAY,GACvF4E,KAAkB/gK,GAAIw9J,IAAmB7L,IAASnvL,IAAMA,IAAM25L,GAAW,YAAY,GACrF6E,KAAsBhhK,GAAI09J,IAAuB+C,GAAuB,EAAI,GAAGN,IAA6B39L,IAAM25L,GAAW,YAAY,GACzI8E,KAAqBjhK,GAAI49J,IAAsB6C,GAAuB,EAAK,GAAGN,IAA6B39L,IAAM25L,GAAW,YAAY,GACxI+E,KAAelhK,GAAIw+J,IAAgBkC,IAAuBP,IAA6BlZ,IAAOkV,GAAW,YAAY,GACrHgF,KAAYnhK,GAAI4+J,IAAajN,IAASnvL,IAAMykL,IAAOkV,GAAW,YAAY,GAC1EiF,KAAoBphK,GAAI69J,IAAqBjM,IAAiBpvL,IAAMA,IAAMo+L,EAAmB,GAC7FS,KAAsBrhK,GAAIi+J,IAAuBrM,IAAiBpvL,IAAMA,IAAMq+L,EAAiB,GAC/FS,KAAiBthK,GAAIq+J,IAAkBzM,IAAiBpvL,IAAMA,IAAMo+L,EAAmB,GACvFW,KAAevhK,GAAIs+J,IAAgB1M,IAAiBpvL,IAAMA,IAAMq+L,EAAiB,GACjFW,KAAiBxhK,GAAIu+J,IAAkB3M,IAAiBpvL,IAAMA,IAAMq+L,EAAiB,GACrFY,KAAkBzhK,GAAIg+J,IAAmBpM,IAAiBpvL,IAAMA,IAAMo+L,EAAmB,GACzFc,KAAoB1hK,GAAIk+J,IAAqBtM,IAAiBpvL,IAAMA,IAAMq+L,EAAiB,GAC3Fc,KAAa3hK,GAAI8+J,IAAc/M,IAAoBsH,IAAQ72L,IAAM25L,GAAW,OAAO,GACnFyF,KAAe5hK,GAAI++J,IAAgB9M,IAAsBoH,IAAQ72L,IAAM25L,GAAW,OAAO,GACzF0F,KAAa7hK,GAAIg/J,IAAc1N,IAAS+H,IAAQ72L,IAAM25L,GAAW,YAAY,GAC7E2F,KAAkB9hK,GAAIo/J,IAAmBuB,GAAsB,EAAI,GAAGn+L,IAAMA,IAAM25L,GAAW,YAAY,GACzG4F,KAAiB/hK,GAAIs/J,IAAkBqB,GAAsB,EAAK,GAAGn+L,IAAMA,IAAM25L,GAAW,YAAY,GACxG6F,KAAkBhiK,GAAIu/J,IAAmBhO,IAAiB/uL,IAAMA,IAAM25L,GAAW,YAAY,GAC7F8F,KAAiBjiK,GAAIw/J,IAAkBjO,IAAiB/uL,IAAMA,IAAM25L,GAAW,YAAY,GAC3F+F,KAAiBzC,IACjB0C,KAAerC,IACfsC,KAAcrC,IAEdsC,KAAa,CAAC99K,GAAQkgF,MAAQlgF,EAAO,SAAS,UAAU,EAAE,MAAMkgF,EAAG,CAAE,GACrE69F,KAAc,CAAC/9K,GAAQwlC,MAASxlC,EAAO,SAAS,WAAW,EAAE,MAAMwlC,EAAI,CAAE,GACzEw4I,KAAoB,CAACh+K,GAAQuuD,GAAOh3C,MAAS;AACjD,IAAAvX,EAAO,SAAS,iBAAiB;AAAA,MAC/B,GAAGuX;AAAA,MACH,OAAAg3C;AAAA,IACR,CAAO;AAAA,EACP,GACU0vH,KAA2B,CAACj+K,GAAQsvD,GAAO1nE,GAAO0sD,GAAQ4pI,MAAe;AAC7E,IAAAl+K,EAAO,SAAS,wBAAwB;AAAA,MACtC,OAAAsvD;AAAA,MACA,OAAA1nE;AAAA,MACA,QAAA0sD;AAAA,MACA,YAAA4pI;AAAA,IACR,CAAO;AAAA,EACP,GACUC,KAA0B,CAAAn+K,MAAU;AACxC,IAAAA,EAAO,SAAS,qBAAqB;AAAA,EAC3C,GACUyuC,KAAwB,CAACzuC,GAAQ9W,GAAQgR,GAAOC,GAAQu0C,MAAW;AACvE,IAAA1uC,EAAO,SAAS,qBAAqB;AAAA,MACnC,QAAA9W;AAAA,MACA,OAAAgR;AAAA,MACA,QAAAC;AAAA,MACA,QAAAu0C;AAAA,IACR,CAAO;AAAA,EACP,GACUC,KAAoB,CAAC3uC,GAAQ9W,GAAQgR,GAAOC,GAAQu0C,MAAW;AACnE,IAAA1uC,EAAO,SAAS,iBAAiB;AAAA,MAC/B,QAAA9W;AAAA,MACA,OAAAgR;AAAA,MACA,QAAAC;AAAA,MACA,QAAAu0C;AAAA,IACR,CAAO;AAAA,EACP,GACU0vI,KAAgB;AAAA,IACpB,WAAW;AAAA,IACX,OAAO;AAAA,EACb,GACUC,KAAoB;AAAA,IACxB,WAAW;AAAA,IACX,OAAO;AAAA,EACb,GACUC,KAA4B;AAAA,IAChC,WAAW;AAAA,IACX,OAAO;AAAA,EACb,GAEU3kL,KAAQ,CAACqG,GAAQuuD,MACjB8vG,GAAyBr+J,CAAM,IAC1Bk6J,GAAU,eAAe3rG,CAAK,IAC5BmvG,GAAoB19J,CAAM,IAC5Bk6J,GAAU,UAAU3rG,CAAK,IAEzB2rG,GAAU,aAAa3rG,CAAK,GAIjCgwH,KAAe,CAACv+K,GAAQw+K,GAAeC,MAAyB;AACpE,UAAMC,IAAc,CAAA1+K,OAAU5c,GAAKu7K,GAAQ3+J,EAAM,CAAC,MAAM,SAClD2+K,IAAe,CAAApwH,OAAS,CAACmwH,EAAY1+K,CAAM,KAAK6oK,GAAYt6G,EAAK,EAAE,OAAO,GAC1EqwH,IAAkB,CAAArwH,OAAS,CAACmwH,EAAY1+K,CAAM,KAAK6oK,GAAYt6G,EAAK,EAAE,UAAU,GAChFguG,IAAesB,GAAsB79J,CAAM,GAC3C6+K,IAAgB1gB,GAA4Bn+J,CAAM,IAAI/hB,KAAOipL,IAC7D4X,IAAsB,CAAAvwH,OAAS;AACnC,cAAQyvG,GAAmBh+J,CAAM,GAAC;AAAA,QAClC,KAAK;AACH,iBAAOiqK,GAAa;QACtB,KAAK;AACH,iBAAOA,GAAa;QACtB,KAAK;AACH,iBAAOA,GAAa;QACtB;AACE,iBAAOA,GAAa,oBAAoB17G,IAAO,SAAS;AAAA,MACzD;AAAA,IACT,GACYwwH,KAAyB,CAACxwH,IAAOx2E,OAAWA,GAAO,OAAO,KAAK,MAAM;AACzE,YAAMu3E,KAAQ2/F,GAAQ1gG,EAAK;AAC3B,aAAOxsE,EAAKutE,EAAK,EAAE,OAAO/6D,EAAM,EAAE,IAAI,CAAAiuF,OAAa;AACjD,QAAAi8F,EAAqB,mBAAmBlwH,GAAM,GAAG;AACjD,cAAMn4E,KAAM4pB,EAAO,IAAI,UAAS;AAChC,eAAA5pB,GAAI,WAAWosG,GAAU,GAAG,GAC5BxiF,EAAO,UAAU,OAAO5pB,EAAG,GAC3B0f,GAAM0sF,IAAW,qBAAqB,GAAG,GAClCpsG;AAAA,MACjB,CAAS;AAAA,IACF,GAAE,CAAAovD,OAAQ;AACT,YAAMw5I,KAAMhxH,GAAYxoB,EAAI,GACtBpvD,KAAM4pB,EAAO,IAAI,UAAS;AAChC,aAAA5pB,GAAI,SAAS4oM,GAAI,QAAQ,KAAKA,GAAI,MAAM,GACxC5oM,GAAI,OAAO4oM,GAAI,QAAQ,KAAKA,GAAI,MAAM,GACtCh/K,EAAO,UAAU,OAAO5pB,EAAG,GAC3BqoM,EAAqB,mBAAmBlwH,GAAM,GAAG,GAC1ClvE,EAAS,KAAKjJ,EAAG;AAAA,IAChC,CAAO,GACKuiI,KAAU,CAAC1qG,IAAWgxK,IAAOz2J,IAAQ+uG,OAAW,CAAChpE,IAAOrlE,IAAQg2L,KAAW,OAAU;AACzF,MAAArgB,GAAgBtwG,EAAK;AACrB,YAAM96D,KAAM1C,GAAa,QAAQiP,EAAO,OAAQ,CAAA,GAC1C8lK,KAAa9I,GAAex0I,IAAQ/0B,IAAK8oK,CAAY,GACrDmQ,KAAa;AAAA,QACjB,QAAQ/yK,GAAMqG,GAAQuuD,EAAK;AAAA,QAC3B,QAAQ4vG,GAA4Bn+J,CAAM,IAAI0nK,GAAW,IAAKY,GAAe;AAAA,QAC7E,SAASwW,EAAoBvwH,EAAK;AAAA,MAC5C;AACQ,aAAO0wH,GAAM1wH,EAAK,IAAItgD,GAAUsgD,IAAOrlE,IAAQ48K,IAAY4G,EAAU,EAAE,KAAK,CAAA30L,OAAU;AACpF,QAAAymM,EAAc,QAAQjwH,GAAM,GAAG,GAC/Bs2F,GAAO9sK,GAAO,SAAS,CAAAmoG,OAAO;AAC5B,UAAA49F,GAAW99K,GAAQkgF,GAAI,GAAG;AAAA,QACtC,CAAW,GACD2kE,GAAO9sK,GAAO,UAAU,CAAAytD,OAAQ;AAC9B,UAAAu4I,GAAY/9K,GAAQwlC,GAAK,GAAG;AAAA,QACxC,CAAW;AACD,cAAMhkC,KAAQu9K,GAAuBxwH,IAAOx2E,EAAM;AAClD,eAAIwc,GAAOg6D,EAAK,MACdswG,GAAgBtwG,EAAK,GAChB2wH,MACHlB,GAAkBh+K,GAAQuuD,GAAM,KAAKgpE,EAAM,IAGxC/1H,GAAM,IAAI,CAAAprB,QAAQ;AAAA,UACvB,KAAAA;AAAA,UACA,QAAAmhJ;AAAA,QACD,EAAC;AAAA,MACZ,CAAS,IAAIl4I,EAAS;IACtB,GACY8/L,KAAYxmE,GAAQikE,IAAW+B,GAAc1gM,IAAMogM,EAAiB,GACpEe,KAAezmE,GAAQgkE,IAAciC,GAAiB3gM,IAAMogM,EAAiB,GAC7EgB,KAAqB1mE,GAAQ4jE,IAAkBn9L,IAAQnB,IAAMogM,EAAiB,GAC9EiB,KAAoB3mE,GAAQ6jE,IAAiBp9L,IAAQnB,IAAMogM,EAAiB,GAC5EkB,KAAwB5mE,GAAQ8jE,IAAqBr9L,IAAQy/L,GAAeR,EAAiB,GAC7FmB,KAAuB7mE,GAAQ+jE,IAAoBt9L,IAAQy/L,GAAeR,EAAiB,GAC3FoB,KAAe9mE,GAAQykE,IAAYh+L,IAAQnB,IAAMogM,EAAiB,GAClEqB,KAAiB/mE,GAAQ0kE,IAAcj+L,IAAQnB,IAAMogM,EAAiB,GACtEsB,KAAoBhnE,GAAQ4kE,IAAiBn+L,IAAQnB,IAAMogM,EAAiB,GAC5EuB,KAAmBjnE,GAAQ6kE,IAAgBp+L,IAAQnB,IAAMogM,EAAiB,GAC1EwB,KAAoBlnE,GAAQ8kE,IAAiBr+L,IAAQnB,IAAMogM,EAAiB,GAC5EyB,KAAmBnnE,GAAQ+kE,IAAgBt+L,IAAQnB,IAAMogM,EAAiB,GAC1E0B,KAAepnE,GAAQ2kE,IAAYl+L,IAAQnB,IAAMqgM,EAAyB,GAC1E0B,KAAoBrnE,GAAQukE,IAAiB99L,IAAQnB,IAAMogM,EAAiB,GAC5E4B,KAAsBtnE,GAAQwkE,IAAmB/9L,IAAQnB,IAAMogM,EAAiB,GAChF6B,KAAsBvnE,GAAQkkE,IAAmBz9L,IAAQnB,IAAMogM,EAAiB,GAChF8B,KAAwBxnE,GAAQmkE,IAAqB19L,IAAQnB,IAAMogM,EAAiB,GACpF+B,KAAmBznE,GAAQokE,IAAgB39L,IAAQnB,IAAMogM,EAAiB,GAC1EgC,KAAiB1nE,GAAQqkE,IAAc59L,IAAQnB,IAAMogM,EAAiB,GACtEiC,KAAmB3nE,GAAQskE,IAAgB79L,IAAQnB,IAAMogM,EAAiB;AAIhF,WAAO;AAAA,MACL,WAAAc;AAAA,MACA,cAAAC;AAAA,MACA,kBAAkBC;AAAA,MAClB,iBAAiBC;AAAA,MACjB,qBAAqBC;AAAA,MACrB,oBAAoBC;AAAA,MACpB,YAAYC;AAAA,MACZ,cAAcC;AAAA,MACd,iBAAiBC;AAAA,MACjB,gBAAgBC;AAAA,MAChB,iBAAiBC;AAAA,MACjB,gBAAgBC;AAAA,MAChB,YAAYC;AAAA,MACZ,iBAAiBC;AAAA,MACjB,mBAAmBC;AAAA,MACnB,mBAAmBC;AAAA,MACnB,qBAAqBC;AAAA,MACrB,gBAAgBC;AAAA,MAChB,cAAcC;AAAA,MACd,gBAAgBC;AAAA,MAChB,iBAtBsBzC;AAAA,MAuBtB,kBAzBuBD;AAAA,MA0BvB,iBAzBsBD;AAAA,IA0B9B;AAAA,EACA,GAEU4C,KAAgB,CAACtyL,GAAS2H,GAAUje,MAAU;AAClD,UAAM6oM,IAAiB9xB,GAAazgK,GAAS2H,GAAU,CAAC;AACxD,IAAIje,MAAU,KAAK6oM,KAAkB,IACnCpwL,EAASnC,GAAS2H,CAAQ,IAE1BE,GAAM7H,GAAS2H,GAAU,KAAK,IAAIje,GAAO6oM,CAAc,CAAC;AAAA,EAEhE,GACUC,KAAe,CAACrF,GAAaC,MAAgB,CAAA71I,MAAQ;AACzD,UAAMs1H,IAASt1H,EAAK,SAASA,EAAK,UAAU,GACtCkoH,IAAWloH,EAAK;AACtB,WAAOs1H,KAAUsgB,KAAe1tB,IAAW2tB;AAAA,EACjD,GACUqF,KAAmB,CAAChmB,GAAO0gB,GAAaC,MAAgB;AAC5D,QAAI9nB,GAAU,WAAWmH,CAAK,GAAG;AAC/B,YAAMimB,IAAa7qH,GAASy9F,GAAU,YAAYmH,CAAK,GAAG+lB,GAAarF,GAAaC,CAAW,CAAC,GAC1FuF,IAAaz8L,GAAMw8L,GAAY,CAAA19M,MAAK;AACxC,cAAM49M,IAAYjlK,GAAK34C,EAAE,OAAO;AAChC,eAAAs9M,GAAcM,GAAW,QAAQxF,IAAcD,CAAW,GACnDyF;AAAA,MACjB,CAAS,GACKC,IAAe/vL,GAAa,QAAQ,UAAU;AACpD,aAAAkG,GAAO6pL,GAAcF,CAAU,GACxB,CAACE,CAAY;AAAA,IAC5B;AACQ,aAAO;EAEf,GACUC,KAAe,CAACrmB,GAAO0gB,GAAaC,MAAgBl3L,GAAMu2K,EAAM,KAAK,CAAAx6E,MAAO;AAChF,UAAM8gG,IAAclrH,GAASoqB,EAAI,OAAOugG,GAAarF,GAAaC,CAAW,CAAC,GACxE4F,IAAc98L,GAAM68L,GAAa,CAAAx7I,MAAQ;AAC7C,YAAM2lI,IAAavvJ,GAAK4pB,EAAK,OAAO;AACpC,aAAA+6I,GAAcpV,GAAY,WAAWkQ,IAAcD,CAAW,GACvDjQ;AAAA,IACf,CAAO,GACK+V,IAASnwL,GAAa,QAAQ,IAAI;AACxC,WAAAkG,GAAOiqL,GAAQD,CAAW,GACnBC;AAAA,EACb,CAAK,GACKC,KAAW,CAAC5yH,GAAOrlE,MAAW;AAClC,UAAMwxK,IAAQnH,GAAU,UAAUhlG,CAAK;AAEvC,WADgB8+G,GAAgB3S,GAAOxxK,CAAM,EAC9B,IAAI,CAAAm8C,MAAiB;AAClC,YAAM81I,IAAmB91I,EAAcA,EAAc,SAAS,CAAC,GACzD+1I,IAAc/1I,EAAc,CAAC,EAAE,QAC/Bg2I,IAAcF,EAAiB,SAASA,EAAiB,SACzDiG,IAAgBV,GAAiBhmB,GAAO0gB,GAAaC,CAAW,GAChEgG,KAAWN,GAAarmB,GAAO0gB,GAAaC,CAAW;AAC7D,aAAO;AAAA,QACL,GAAG+F;AAAA,QACH,GAAGC;AAAA,MACb;AAAA,IACA,CAAO;AAAA,EACP,GAEUC,KAAW,CAAC/yH,GAAOrlE,GAAQ48K,MAAe;AAC9C,UAAM7T,IAAYsB,GAAU,UAAUhlG,CAAK;AAE3C,WADgB6+G,GAAQnb,GAAW/oK,CAAM,EAC1B,KAAK,CAAAm8C,MAAiB;AACnC,YAAMsnH,IAAOkf,GAAO5Z,GAAW6T,GAAY,EAAK,GAE1Cyb,IADOjwB,GAAmB3E,CAAI,EAAE,KACd,MAAMtnH,EAAc,CAAC,EAAE,KAAKA,EAAcA,EAAc,SAAS,CAAC,EAAE,MAAMA,EAAcA,EAAc,SAAS,CAAC,EAAE,OAAO,GAC3Im8I,KAAe3oL,GAAO0oL,GAAY,CAAArhG,OAAO;AAC7C,cAAM4wE,KAAWh7F,GAASoqB,GAAI,OAAO,CAAA16C,OAAQ,CAACA,GAAK,QAAQ;AAC3D,eAAOsrH,GAAS,SAAS,IAAI,CAAC;AAAA,UAC1B,GAAG5wE;AAAA,UACH,OAAO4wE;AAAA,QACR,CAAA,IAAI,CAAA;AAAA,MACjB,CAAS,GACK2wB,KAAgBvV,GAAasV,EAAY;AAC/C,aAAOv0L,GAAOw0L,GAAc,SAAS,GAAGA,EAAa;AAAA,IACtD,CAAA,EAAE,IAAI,CAAAA,MAAiB5/L,GAAK4/L,CAAa,CAAC;AAAA,EACjD,GAEUC,KAAQzvJ,GAAI,SAAS;AAAA,IACzB,EAAE,SAAS,CAAC,KAAK,EAAG;AAAA,IACpB,EAAE,QAAQ,CAAC,OAAO,EAAG;AAAA,IACrB,EAAE,SAAS,CAAC,OAAO,EAAG;AAAA,EAC5B,CAAK,GACK0vJ,KAAc,CAACv5L,GAAQtP,GAAMnB,MAAU;AAC3C,UAAMiqM,IAAYjqM,EAAM,UAAU,GAAGA,EAAM,SAASyQ,EAAO,MAAM,GAC3Di+I,IAAS,WAAWu7C,CAAS;AACnC,WAAOA,MAAcv7C,EAAO,aAAavtJ,EAAKutJ,CAAM,IAAIq7C,GAAM,QAAQ/pM,CAAK;AAAA,EACjF,GAUUkqM,KAAO;AAAA,IACX,GAAGH;AAAA,IACH,MAXW,CAAA/pM,MACPwQ,GAASxQ,GAAO,GAAG,IACdgqM,GAAY,KAAKD,GAAM,SAAS/pM,CAAK,IAE1CwQ,GAASxQ,GAAO,IAAI,IACfgqM,GAAY,MAAMD,GAAM,QAAQ/pM,CAAK,IAEvC+pM,GAAM,QAAQ/pM,CAAK;AAAA,EAKhC,GAEUmqM,KAAwB,CAACzM,GAAQlN,MAC9BhkL,GAAMkxL,GAAQ,CAAAv6M,MACH+mN,GAAK,KAAK/mN,CAAC,EACZ,KAAK,MACXA,GACN,CAAA60L,MACaA,IAAKwY,IAAa,MACjB,KACd,CAAA4Z,MACMA,IAAK,GACb,CACF,GAEGC,KAAmB,CAAC3M,GAAQlN,GAAY8Z,MAAkB;AAC9D,UAAMC,IAAQD,IAAgB9Z;AAC9B,WAAOhkL,GAAMkxL,GAAQ,CAAAv6M,MACH+mN,GAAK,KAAK/mN,CAAC,EACZ,KAAK,MACXA,GACN,CAAA60L,MACMA,IAAKuyB,IAAQ,MACnB,CAAAH,MACMA,IAAK,MAAME,IAAgB,IACnC,CACF;AAAA,EACP,GACUE,KAAoB,CAACC,GAAcx1B,MAAY;AACnD,UAAM7tL,IAAIqjN,EAAa,KAAK,MAAM7jM,GAAS,EAAE,GAAG,CAAA8jM,MAAU;AACxD,YAAMt5L,IAAMs5L,IAASz1B;AACrB,aAAOruK,GAASwK,IAAM,IAAI;AAAA,IAClC,GAAS,MAAM;AACP,YAAMA,IAAM,MAAM6jK;AAClB,aAAOruK,GAASwK,IAAM,GAAG;AAAA,IACjC,CAAO;AACD,WAAO6iK,GAAQgB,GAAS7tL,CAAC;AAAA,EAC/B,GACUujN,KAAqB,CAACF,GAAc/M,GAAQlN,MACzCia,EAAa,KAAK,MAChB/M,GACN,CAAA1lB,MACMqyB,GAAiB3M,GAAQlN,GAAYxY,CAAE,GAC7C,CAAA4yB,MACMT,GAAsBzM,GAAQlN,CAAU,CAChD,GAEGqa,KAAiB,CAACnN,GAAQlN,GAAYpO,MAAa;AACvD,UAAM0oB,IAAUZ,GAAK,KAAK9nB,CAAQ,GAC5B2oB,IAASrhM,GAAOg0L,GAAQ,CAAAv2M,MACrBA,MAAM,KACd,IAAIqjN,GAAkBM,GAASpN,EAAO,MAAM,IAAIiN,GAAmBG,GAASpN,GAAQlN,CAAU;AAC/F,WAAO7wG,GAAUorH,CAAM;AAAA,EAC7B,GACUv9F,KAAM,CAAC9hG,GAAQ09H,MACf19H,EAAO,WAAW,IACb09H,IAEFngI,GAAMyC,GAAQ,CAAC+1D,GAAMrpE,MACnB8xM,GAAK,KAAK9xM,CAAC,EAAE,KAAKwO,GAAS,CAAC,GAAGC,IAAUA,EAAQ,IAAI46D,GAC3D,CAAC,GAEAupI,KAAY,CAAC55L,GAAKsqH,MAAS;AAC/B,UAAMuvE,IAAU,KAAK,MAAM75L,CAAG;AAC9B,WAAO;AAAA,MACL,OAAO65L,IAAUvvE;AAAA,MACjB,WAAWtqH,IAAM65L;AAAA,IACzB;AAAA,EACA,GACU9yL,KAAQ,CAACnY,GAAO0uJ,MACbw7C,GAAK,KAAKlqM,CAAK,EAAE,KAAK4G,GAAS5G,CAAK,GAAG,CAAAg4K,MACrCA,IAAKtpB,IAAS,MACpB,CAAA07C,MACMA,IAAK17C,IAAS,GACtB,GAEG/uE,KAAY,CAAAj0E,MAAU;AAC1B,QAAIA,EAAO,WAAW;AACpB,aAAOA;AAET,UAAMw/L,IAAOjiM,GAAMyC,GAAQ,CAAC+1D,GAAMzhE,MAAU;AAC1C,YAAMoP,IAAO86L,GAAK,KAAKlqM,CAAK,EAAE,KAAK,OAAO;AAAA,QACxC,OAAAA;AAAA,QACA,WAAW;AAAA,MACrB,IAAY,CAAAoR,MAAO45L,GAAU55L,GAAK,IAAI,GAAG,CAAAA,OAAQ;AAAA,QACvC,OAAOA,IAAM;AAAA,QACb,WAAW;AAAA,MACZ,EAAC;AACF,aAAO;AAAA,QACL,QAAQ,CAAChC,EAAK,KAAK,EAAE,OAAOqyD,EAAK,MAAM;AAAA,QACvC,WAAWA,EAAK,YAAYryD,EAAK;AAAA,MAC3C;AAAA,IACA,GAAS;AAAA,MACD,QAAQ,CAAE;AAAA,MACV,WAAW;AAAA,IACnB,CAAO,GACK3sB,IAAIyoN,EAAK;AACf,WAAOzoN,EAAE,MAAM,GAAGA,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC01B,GAAM11B,EAAEA,EAAE,SAAS,CAAC,GAAG,KAAK,MAAMyoN,EAAK,SAAS,CAAC,CAAC,CAAC;AAAA,EACjG,GACUpmI,KAAWolI,GAAK,MAEhBiB,KAAkB,CAAC7M,GAAW3mH,GAAO+jD,MAAS;AAClD,IAAAwxC,GAAOv1F,GAAO,CAAA9pB,MAAQ;AACpB,YAAM6vI,IAASY,EAAU,MAAMzwI,EAAK,QAAQA,EAAK,UAAUA,EAAK,MAAM,GAChE1qE,IAAIqqH,GAAIkwF,GAAQtmB,GAAU,CAAA;AAChC,MAAAp3J,GAAM6tC,EAAK,SAAS,SAAS1qE,IAAIu4I,CAAI;AAAA,IAC7C,CAAO;AAAA,EACP,GACU0vE,KAAwB,CAAC9M,GAAWrpB,GAASv5C,MAAS;AAC1D,IAAAwxC,GAAO+H,GAAS,CAACE,GAAQp0K,MAAU;AACjC,YAAMwhB,IAAQirF,GAAI,CAAC8wF,EAAUv9L,CAAK,CAAC,GAAGq2K,GAAQ,CAAE;AAChD,MAAAp3J,GAAMm1J,EAAO,SAAS,SAAS5yJ,IAAQm5G,CAAI;AAAA,IACnD,CAAO;AAAA,EACP,GACU2vE,KAAkB,CAAC5M,GAAYrmH,GAAMT,GAAO+jD,MAAS;AACzD,IAAAwxC,GAAOv1F,GAAO,CAAA9pB,MAAQ;AACpB,YAAMiwI,IAAUW,EAAW,MAAM5wI,EAAK,KAAKA,EAAK,UAAUA,EAAK,GAAG,GAC5DtjE,IAAIijH,GAAIswF,GAASzmB,GAAW,CAAA;AAClC,MAAAr3J,GAAM6tC,EAAK,SAAS,UAAUtjE,IAAImxI,CAAI;AAAA,IAC9C,CAAO,GACDwxC,GAAO90F,GAAM,CAACmwB,GAAKthH,MAAM;AACvB,MAAA+4B,GAAMuoF,EAAI,SAAS,UAAUk2F,EAAWx3M,CAAC,CAAC;AAAA,IAClD,CAAO;AAAA,EACP,GACUqkN,KAAU,CAAAjsB,MACPv6G,GAASu6G,CAAO,EAAE,KAAKz4K,GAAS,IAAI,GAAGA,GAAS,IAAI,GAAGA,GAAS,GAAG,CAAC,GAEvE2kM,KAAe,CAAC30H,GAAO40H,GAAUC,MAAc;AACnD,UAAMnxB,IAAYsB,GAAU,UAAUhlG,CAAK,GACrCwB,IAAOkiG,EAAU,KACjB3iG,IAAQikG,GAAU,UAAUtB,CAAS,GACrCrF,IAAU2G,GAAU,YAAYtB,CAAS;AAC/C,IAAAkxB,EAAS,KAAK,CAAAppB,MAAY;AACxB,YAAMspB,IAAYJ,GAAQlpB,CAAQ,GAC5BoO,KAAan5K,GAAMu/D,CAAK,GACxB+0H,KAAYvqB,GAAa9G,GAAW1jG,CAAK,GACzCg1H,KAAWf,GAAec,IAAWnb,IAAYpO,CAAQ;AAC/D,MAAIxG,GAAU,WAAWtB,CAAS,IAChC8wB,GAAsBQ,IAAU32B,GAASy2B,CAAS,IAElDP,GAAgBS,IAAUj0H,GAAO+zH,CAAS,GAE5C1rL,GAAM42D,GAAO,SAASwrG,CAAQ;AAAA,IACtC,CAAO,GACDqpB,EAAU,KAAK,CAAAI,MAAa;AAC1B,YAAMC,IAAQR,GAAQO,CAAS,GACzBE,KAAc7zL,GAAM0+D,CAAK,GACzBo1H,KAAarqB,GAAcrH,GAAW1jG,GAAOp0D,EAAM,GACnDypL,KAAYpB,GAAemB,IAAYD,IAAaF,CAAS;AACnE,MAAAR,GAAgBY,IAAW7zH,GAAMT,GAAOm0H,CAAK,GAC7C9rL,GAAM42D,GAAO,UAAUi1H,CAAS;AAAA,IACxC,CAAO;AAAA,EACP,GACUK,KAAkBhsB,IAClBisB,KAAgBhsB,IAChBisB,KAAehsB,IAEfisB,KAA0B,CAAA/1L,MAAW;AACzC,IAAAmC,EAASnC,GAAS,OAAO;AAAA,EAC/B,GACUg2L,KAAuB,CAAA11H,MAAS;AACpC,UAAMwrG,IAAWnC,GAAqBrpG,CAAK;AAC3C,IAAA20H,GAAa30H,GAAOlvE,EAAS,KAAK06K,CAAQ,GAAG16K,EAAS,KAAI,CAAE,GAC5D2kM,GAAwBz1H,CAAK;AAAA,EACnC,GACU21H,KAAqB,CAAA31H,MAAS;AAClC,UAAMwrG,IAAWpC,GAAmBppG,CAAK;AACzC,IAAA20H,GAAa30H,GAAOlvE,EAAS,KAAK06K,CAAQ,GAAG16K,EAAS,KAAI,CAAE,GAC5D2kM,GAAwBz1H,CAAK;AAAA,EACnC,GACU41H,KAAoB,CAAA51H,MAAS;AACjC,IAAAn3D,GAASm3D,GAAO,OAAO;AACvB,UAAMq+F,IAAUsC,GAAU3gG,CAAK,GACzB61H,IAAcx3B,EAAQ,SAAS,IAAIA,IAAUqC,GAAQ1gG,CAAK;AAChE,IAAAs2F,GAAOu/B,GAAa,CAAA5+I,MAAQ;AAC1B,MAAApuC,GAASouC,GAAM,OAAO,GACtBw+I,GAAwBx+I,CAAI;AAAA,IACpC,CAAO,GACDw+I,GAAwBz1H,CAAK;AAAA,EACnC,GAEU81H,KAAuB;AAAA,IAC3B,QAAQ;AAAA,MACN,mBAAmB;AAAA,MACnB,OAAS;AAAA,IACV;AAAA,IACD,YAAY,EAAE,QAAQ,IAAK;AAAA,IAC3B,WAAW;AAAA,EACjB,GACUC,KAAkB,MAAMvzL,GAAa,QAAQ,IAAI,GACjDwzL,KAAY,MAAMxzL,GAAa,QAAQ,IAAI,GAC3CyzL,KAAc,MAAMzzL,GAAa,QAAQ,KAAK,GAC9C0zL,KAAY,CAAC73B,GAASymB,GAAYJ,GAAehY,MAAa;AAClE,UAAMr/L,IAAKm1B,GAAa,QAAQ,IAAI;AACpC,aAASl2B,IAAI,GAAGA,IAAI+xL,GAAS/xL,KAAK;AAChC,YAAM4kH,IAAKw7E,IAAWoY,KAAcx4M,IAAIo4M,IAAgBqR,GAAe,IAAKC;AAC5E,MAAI1pN,IAAIo4M,KACNn9K,GAAM2pF,GAAI,SAAS,KAAK,GAEtBw7E,IAAWoY,KACbv9K,GAAM2pF,GAAI,SAAS,KAAK,GAE1B7oF,GAAS6oF,GAAI1uF,GAAa,QAAQ,IAAI,CAAC,GACvC6F,GAASh7B,GAAI6jH,CAAE;AAAA,IAChB;AACD,WAAO7jH;AAAA,EACb,GACU8oN,KAAiB,CAAA93B,MAAW;AAChC,UAAMwC,IAAcr+J,GAAa,QAAQ,UAAU;AACnD,WAAA66J,GAAQgB,GAAS,MAAMh2J,GAASw4J,GAAao1B,GAAa,CAAA,CAAC,GACpDp1B;AAAA,EACb,GACUu1B,KAAa,CAAC50H,GAAM68F,GAASymB,GAAYJ,MAAkBrnB,GAAQ77F,GAAM,CAAA31F,MAAKqqN,GAAU73B,GAASymB,GAAYJ,GAAe74M,CAAC,CAAC,GAC9H09K,KAAS,CAAC/nF,GAAM68F,GAASymB,GAAYJ,GAAe2R,GAAYC,IAAaR,OAAyB;AAC1G,UAAM91H,IAAQx9D,GAAa,QAAQ,OAAO,GACpC+zL,IAAsBF,MAAe;AAC3C,IAAA7uL,GAAOw4D,GAAOs2H,EAAW,MAAM,GAC/B/1L,GAASy/D,GAAOs2H,EAAW,UAAU,GACjCA,EAAW,aACbjuL,GAAS23D,GAAOm2H,GAAe93B,CAAO,CAAC;AAEzC,UAAMm4B,IAAmB,KAAK,IAAIh1H,GAAMsjH,CAAU;AAClD,QAAIyR,KAAuBzR,IAAa,GAAG;AACzC,YAAM2R,KAAQj0L,GAAa,QAAQ,OAAO;AAC1C,MAAA6F,GAAS23D,GAAOy2H,EAAK;AAErB,YAAMC,KAAYN,GAAWtR,GAAYzmB,GADjBg4B,MAAe,iBAAiBG,IAAmB,GACR9R,CAAa;AAChF,MAAAh8K,GAAO+tL,IAAOC,EAAS;AAAA,IACxB;AACD,UAAMC,KAAQn0L,GAAa,QAAQ,OAAO;AAC1C,IAAA6F,GAAS23D,GAAO22H,EAAK;AACrB,UAAMC,KAAUL,IAAsB/0H,IAAOg1H,IAAmBh1H,GAE1Dq1H,KAAYT,GAAWQ,IAASv4B,GADhBk4B,IAAsB,IAAIzR,GACcJ,CAAa;AAC3E,WAAAh8K,GAAOiuL,IAAOE,EAAS,GAChB72H;AAAA,EACb,GAEUx0D,KAAQ,CAAA9L,MAAWA,EAAQ,IAAI,WAC/B+J,KAAW,CAAA/J,MAAW;AAC1B,UAAMgK,IAAYlH,GAAa,QAAQ,KAAK,GACtCnV,IAAQmV,GAAa,QAAQ9C,EAAQ,IAAI,UAAU,EAAI,CAAC;AAC9D,WAAA2I,GAASqB,GAAWrc,CAAK,GAClBme,GAAM9B,CAAS;AAAA,EAC5B,GAEUotL,KAAmB,CAACrlL,GAAQwlC,MAAS;AACzC,IAAAxlC,EAAO,UAAU,OAAOwlC,EAAK,KAAK,EAAI,GACtCxlC,EAAO,UAAU,SAAS,EAAI;AAAA,EACpC,GACUslL,KAAyB,CAACtlL,GAAQihF,MAAa;AACnD,IAAA96D,EAAW86D,GAAU,OAAO,EAAE,KAAKviG,GAAM2mM,IAAkBrlL,CAAM,CAAC;AAAA,EACxE,GACUulL,KAAa,CAACvlL,GAAQuuD,MAAU;AACpC,IAAAs2F,GAAOrqJ,GAAY+zD,GAAO,IAAI,GAAG,CAAA2xB,MAAO;AACtC,MAAA49F,GAAW99K,GAAQkgF,EAAI,GAAG,GAC1B2kE,GAAOrqJ,GAAY0lF,GAAK,OAAO,GAAG,CAAA16C,MAAQ;AACxC,QAAAu4I,GAAY/9K,GAAQwlC,EAAK,GAAG;AAAA,MACtC,CAAS;AAAA,IACT,CAAO;AAAA,EACP,GACUggJ,KAAe,CAAAtrL,MAAS7c,GAAS6c,CAAK,KAAKA,EAAM,QAAQ,GAAG,MAAM,IAClE+lJ,KAAS,CAACjgJ,GAAQ4sJ,GAAS78F,GAAM01H,GAAYpS,MAAe;AAChE,UAAM9V,IAAgBkB,GAAsBz+J,CAAM,GAC5CppB,IAAU;AAAA,MACd,QAAQ2mL;AAAA,MACR,YAAYiB,GAA0Bx+J,CAAM;AAAA,MAC5C,WAAW0+J,GAAoB1+J,CAAM;AAAA,IAC7C;AACM,WAAAA,EAAO,YAAY,OAAO,MAAM;AAC9B,YAAMuuD,IAAQupF,GAAO/nF,GAAM68F,GAASymB,GAAYoS,GAAYznB,GAAmBh+J,CAAM,GAAGppB,CAAO;AAC/F,MAAAkf,GAAMy4D,GAAO,eAAe,OAAO;AACnC,YAAM/9D,IAAOwH,GAASu2D,CAAK;AAC3B,MAAAvuD,EAAO,cAAcxP,CAAI,GACzBwP,EAAO,UAAS;AAAA,IACxB,CAAO,GACMmmB,EAAWw4I,GAAQ3+J,CAAM,GAAG,4BAA4B,EAAE,IAAI,CAAAuuD,OAC/DmvG,GAAoB19J,CAAM,IAC5BkkL,GAAmB31H,CAAK,IACfivG,GAAwBx9J,CAAM,IACvCmkL,GAAkB51H,CAAK,KACd8vG,GAAyBr+J,CAAM,KAAKwlL,GAAajoB,EAAc,KAAK,MAC7E0mB,GAAqB11H,CAAK,GAE5BswG,GAAgBtwG,CAAK,GACrBn+D,EAASm+D,GAAO,aAAa,GAC7Bg3H,GAAWvlL,GAAQuuD,CAAK,GACxB+2H,GAAuBtlL,GAAQuuD,CAAK,GAC7BA,EAAM,IACd,EAAE,UAAS;AAAA,EAClB,GACUm3H,KAAc,CAAC1lL,GAAQ+vD,GAAM68F,GAASh2K,IAAU,OAAO;AAC3D,UAAM+uM,IAAa,CAAAjqK,MAAO59B,GAAS49B,CAAG,KAAKA,IAAM;AACjD,QAAIiqK,EAAW51H,CAAI,KAAK41H,EAAW/4B,CAAO,GAAG;AAC3C,YAAMg5B,IAAahvM,EAAQ,cAAc,GACnCivM,IAAgBjvM,EAAQ,iBAAiB;AAC/C,aAAOqpK,GAAOjgJ,GAAQ4sJ,GAAS78F,GAAM81H,GAAeD,CAAU;AAAA,IACtE;AACQ,qBAAQ,MAAM,6FAA6F,GACpG;AAAA,EAEf;AAEI,MAAIE,KAAS,QAAQ,KAAK,MAAM,QAAQ,uBAAuB;AAE/D,QAAMC,KAAgB,wBAChBC,KAAeD,KAAgB,QAC/BE,KAAkBF,KAAgB,WAClCG,KAAU,CAAAx6L,MAAS;AACvB,UAAMy6L,IAAoBL,GAAO,kBAAkBp6L,CAAK;AACxD,IAAAo6L,GAAO,MAAM,CAACK,CAAiB,CAAC;AAAA,EACtC,GACUtnD,KAAU,CAAA/lJ,MAAQ;AACtB,QAAIlS;AACJ,UAAM8kB,KAAS9kB,IAAKk/M,GAAO,KAAI,OAAQ,QAAQl/M,MAAO,SAASA,IAAK,CAAA;AACpE,WAAOsb,GAAQwJ,GAAO,CAAApH,MAAQjF,EAAS,KAAKiF,EAAK,QAAQxL,CAAI,CAAC,CAAC;AAAA,EACrE,GACUstM,KAAY,CAAAttM,MAAQ;AACxB,IAAI+lJ,GAAQ/lJ,CAAI,EAAE,YAChBgtM,GAAO,MAAK;AAAA,EAEpB,GACUO,KAAU,CAAAC,MAAW;AACzB,IAAAA,EAAQ,KAAKC,IAAW,CAAAx2H,MAAQm2H,GAAQ,EAAE,CAACF,EAAY,GAAGj2H,EAAM,CAAA,CAAC;AAAA,EACvE,GACUy2H,KAAU,MAAM3nD,GAAQmnD,EAAY,GACpCO,KAAY,MAAMH,GAAUJ,EAAY,GACxCS,KAAa,CAAAC,MAAc;AAC/B,IAAAA,EAAW,KAAKC,IAAc,CAAA/5B,MAAWs5B,GAAQ,EAAE,CAACD,EAAe,GAAGr5B,EAAS,CAAA,CAAC;AAAA,EACtF,GACUg6B,KAAa,MAAM/nD,GAAQonD,EAAe,GAC1CU,KAAe,MAAMP,GAAUH,EAAe,GAE9CY,KAAiC,CAAA7mL,MAAUqmK,GAA0BtH,GAAkB/+J,CAAM,GAAG4+J,GAAU5+J,CAAM,CAAC,EAAE,OAAOq/J,EAAqB,GAC/IynB,KAAwB,CAAA9mL,MAAUsmK,GAAiBvH,GAAkB/+J,CAAM,GAAG4+J,GAAU5+J,CAAM,CAAC,EAAE,OAAOq/J,EAAqB,GAC7H9e,KAAmB,CAACvgJ,GAAQ2mK,MAAY;AAC5C,UAAMp0K,IAASqsK,GAAU5+J,CAAM,GACzB+mL,IAAa,MAAMF,GAA+B7mL,CAAM,EAAE,KAAK,CAAAgnL,OAAiB;AACpF,MAAAz4H,GAAMy4H,IAAez0L,CAAM,EAAE,OAAOzT,GAAIyT,CAAM,CAAC,EAAE,KAAK,CAAAg8D,OAAS;AAC7D,cAAMmqH,KAAS3nL,GAAa,SAAS,EAAE;AAGvC,YAFAq7J,GAAQ79F,IAAOmqH,EAAM,GACrBniL,GAASg4D,EAAK,GACVvuD,EAAO,IAAI,QAAQA,EAAO,QAAS,CAAA;AACrC,UAAAA,EAAO,WAAW,EAAE,GACpBA,EAAO,UAAU;aACZ;AACL,gBAAM5pB,KAAM4pB,EAAO,IAAI,UAAS;AAChC,UAAA5pB,GAAI,SAASsiM,GAAO,KAAK,CAAC,GAC1BtiM,GAAI,OAAOsiM,GAAO,KAAK,CAAC,GACxB14K,EAAO,UAAU,OAAO5pB,EAAG,GAC3B4pB,EAAO,YAAW;AAAA,QACnB;AAAA,MACX,CAAS;AAAA,IACT,CAAO,GACKinL,IAAgB,CAAAC,OAAUL,GAA+B7mL,CAAM,EAAE,KAAK,CAAAgnL,OAAiB;AAE3F,MADuBxpB,GAAwBx9J,CAAM,KAAK09J,GAAoB19J,CAAM,KAAKq+J,GAAyBr+J,CAAM,KAEtHuuD,GAAMy4H,IAAez0L,CAAM,EAAE,KAAK,CAAAg8D,OAAS;AACzC,QAAI24H,OAAW,cAAc,CAACrD,GAAgBt1H,EAAK,IACjD01H,GAAqB11H,EAAK,IACjB24H,OAAW,WAAW,CAACpD,GAAcv1H,EAAK,IACnD21H,GAAmB31H,EAAK,IACf24H,OAAW,gBAAgB,CAACnD,GAAax1H,EAAK,KACvD41H,GAAkB51H,EAAK,GAEzBswG,GAAgBtwG,EAAK,GACrByvH,GAAkBh+K,GAAQuuD,GAAM,KAAK8vH,EAAiB;AAAA,MAClE,CAAW;AAAA,IAEX,CAAO,GACK8I,IAAmB,CAAA3hJ,OAAQ+oB,GAAM/oB,IAAMjzC,CAAM,GAC7C60L,IAA2B,CAAAvgJ,OAAUigJ,GAAsB9mL,CAAM,EAAE,KAAK,CAAAwlC,OAAQ2hJ,EAAiB3hJ,EAAI,EAAE,IAAI,CAAA+oB,OAAS1nB,GAAO0nB,IAAO/oB,EAAI,CAAC,CAAC,GACxI6hJ,IAAmB,CAAC3/D,IAAK33H,OAAU;AACvC,MAAAq3L,EAAyB,CAAA74H,OAAS;AAChC,QAAAvuD,EAAO,UAAU,OAAO,cAAc,EAAE,OAAOjQ,GAAO,GAAEw+D,GAAM,GAAG,GACjEyvH,GAAkBh+K,GAAQuuD,GAAM,KAAK6vH,EAAa;AAAA,MAC5D,CAAS;AAAA,IACT,GACYkJ,IAAuB,CAAC5/D,IAAK33H,OAAU;AAC3C,MAAAq3L,EAAyB,CAAA74H,OAAS;AAChC,cAAMlpB,KAAgBkhI,GAAsBvmK,CAAM,GAE5CunL,KADelmM,GAAOgkD,IAAe,CAAAG,OAAQxlC,EAAO,UAAU,MAAM,kBAAkB,EAAE,OAAOjQ,GAAK,GAAIy1C,GAAK,GAAG,CAAC,IAChFxlC,EAAO,UAAU,SAASA,EAAO,UAAU;AAClF,QAAA6kJ,GAAOx/G,IAAe,CAAAG,OAAQ+hJ,GAAgB,kBAAkB,EAAE,OAAOx3L,GAAO,GAAEy1C,GAAK,GAAG,CAAC,GAC3Fw4I,GAAkBh+K,GAAQuuD,GAAM,KAAK6vH,EAAa;AAAA,MAC5D,CAAS;AAAA,IACT,GACYoJ,KAAgB,MAAM;AAC1B,MAAAX,GAA+B7mL,CAAM,EAAE,KAAK,CAAAgnL,OAAiB;AAC3D,QAAAz4H,GAAMy4H,IAAez0L,CAAM,EAAE,KAAK,CAAAg8D,OAAS;AACzC,UAAAz5D,EAAMy5D,IAAO,SAAS,EAAE,KAAK,MAAM;AACjC,kBAAMnnD,KAAUrW,GAAa,QAAQ,SAAS;AAC9C,YAAA6F,GAASwQ,IAASrW,GAAa,SAAS,SAAS,CAAC,GAClDs7J,GAAS99F,IAAOnnD,IAAS,CAAC,GAC1BpH,EAAO,UAAU,kBAAkBoH,GAAQ,KAAK,CAAC;AAAA,UAClD,GAAE,CAAAA,OAAW;AACZ,YAAI1Y,GAAM,SAAS,EAAEs4L,EAAa,KAChCv1L,GAAI,MAAM88D,EAAK,EAAE,KAAK,CAAAkxB,OAAMz/E,EAAO,UAAU,kBAAkBy/E,GAAG,KAAK,CAAC,CAAC,GAE3ElpF,GAAS6Q,EAAO;AAAA,UAC9B,CAAa,GACD42K,GAAkBh+K,GAAQuuD,GAAM,KAAK8vH,EAAiB;AAAA,QAClE,CAAW;AAAA,MACX,CAAS;AAAA,IACT,GACYoJ,KAAc,CAAAC,OAAS;AAC3B,MAAA1nL,EAAO,MAAK;AAAA,IACpB,GACY2nL,KAAiB,CAAChvE,IAASumE,KAAW,OAAUkI,EAAyB,CAAC74H,IAAO0B,OAAc;AACnG,YAAMhe,KAAU0zH,GAAQY,GAAsBvmK,CAAM,GAAGuuD,IAAO0B,EAAS;AACvE,MAAA0oD,GAAQpqD,IAAOtc,IAASitI,EAAQ,EAAE,KAAKuI,EAAW;AAAA,IAC1D,CAAO,GACKG,KAAmB,MAAMR,EAAyB,CAAC74H,IAAO0B,OAAc;AAC5E,YAAMhe,KAAU0zH,GAAQY,GAAsBvmK,CAAM,GAAGuuD,IAAO0B,EAAS,GACjE61G,KAAa9I,GAAe/+K,IAAM8S,GAAa,QAAQiP,EAAO,QAAQ,GAAG3gB,EAAS,KAAM,CAAA;AAC9F,aAAOiiM,GAAS/yH,IAAOtc,IAAS6zH,EAAU;AAAA,IAClD,CAAO,GACK+hB,KAAmB,MAAMT,EAAyB,CAAC74H,IAAO0B,OAAc;AAC5E,YAAMhe,KAAU0zH,GAAQY,GAAsBvmK,CAAM,GAAGuuD,IAAO0B,EAAS;AACvE,aAAOkxH,GAAS5yH,IAAOtc,EAAO;AAAA,IACtC,CAAO,GACK61I,KAAmB,CAACnvE,IAAS6tE,OAAYA,GAAS,EAAC,KAAK,CAAAz2H,OAAQ;AACpE,YAAMg4H,KAAa5jM,GAAM4rE,IAAM,CAAAmwB,OAAOtkE,GAAKskE,EAAG,CAAC;AAC/C,MAAAknG,EAAyB,CAAC74H,IAAO0B,OAAc;AAC7C,cAAM61G,KAAa3I,GAAQpsK,GAAa,QAAQiP,EAAO,OAAQ,CAAA,CAAC,GAC1DiyC,KAAU8zH,GAAUQ,GAAsBvmK,CAAM,GAAGiwD,IAAW83H,IAAYjiB,EAAU;AAC1F,QAAAntD,GAAQpqD,IAAOtc,EAAO,EAAE,KAAKw1I,EAAW;AAAA,MAClD,CAAS;AAAA,IACT,CAAO,GACKO,KAAY,CAAA31D,OAAa,CAAC3K,IAAKhtI,OAASoxK,GAAMpxK,IAAM,MAAM,EAAE,KAAK,CAAA5B,OAAQ;AAC7E,MAAA6uM,GAAet1D,GAAUv5I,EAAI,GAAG4B,GAAK,SAAS;AAAA,IACtD,CAAO;AACD,IAAAyrK,GAAO;AAAA,MACL,oBAAoB,MAAMwhC,GAAehhB,EAAQ,YAAY;AAAA,MAC7D,oBAAoB,MAAMghB,GAAehhB,EAAQ,UAAU;AAAA,MAC3D,yBAAyB,MAAMghB,GAAehhB,EAAQ,gBAAgB;AAAA,MACtE,wBAAwB,MAAMghB,GAAehhB,EAAQ,eAAe;AAAA,MACpE,yBAAyB,MAAMghB,GAAehhB,EAAQ,mBAAmB;AAAA,MACzE,wBAAwB,MAAMghB,GAAehhB,EAAQ,kBAAkB;AAAA,MACvE,mBAAmB,MAAMghB,GAAehhB,EAAQ,YAAY;AAAA,MAC5D,mBAAmB,MAAMghB,GAAehhB,EAAQ,SAAS;AAAA,MACzD,gBAAgB,MAAMkhB,KAAmB,KAAK,CAAA53J,OAAa;AACzD,QAAAw2J,GAAWx2J,EAAS,GACpB03J,GAAehhB,EAAQ,YAAY;AAAA,MAC7C,CAAS;AAAA,MACD,gBAAgB,MAAMihB,KAAmB,KAAK,CAAA33J,OAAa;AACzD,QAAAo2J,GAAQp2J,EAAS,GACjB03J,GAAehhB,EAAQ,SAAS;AAAA,MAC1C,CAAS;AAAA,MACD,iBAAiB,MAAMkhB,KAAmB,KAAK,CAAA53J,OAAaw2J,GAAWx2J,EAAS,CAAC;AAAA,MACjF,iBAAiB,MAAM23J,KAAmB,KAAK,CAAA33J,OAAao2J,GAAQp2J,EAAS,CAAC;AAAA,MAC9E,wBAAwB,MAAM63J,GAAiBnhB,EAAQ,iBAAiBigB,EAAU;AAAA,MAClF,uBAAuB,MAAMkB,GAAiBnhB,EAAQ,gBAAgBigB,EAAU;AAAA,MAChF,wBAAwB,MAAMkB,GAAiBnhB,EAAQ,iBAAiB6f,EAAO;AAAA,MAC/E,uBAAuB,MAAMsB,GAAiBnhB,EAAQ,gBAAgB6f,EAAO;AAAA,MAC7E,gBAAgBO;AAAA,MAChB,yBAAyBO;AAAA,MACzB,qBAAqBD;AAAA,MACrB,uBAAuBG;AAAA,MACvB,oBAAoB,CAAC9/D,IAAKw/D,OAAWD,EAAcC,EAAM;AAAA,MACzD,kBAAkBc,GAAU,CAAAlvM,OAAQA,OAAS,OAAO6tL,EAAQ,kBAAkBA,EAAQ,iBAAiB;AAAA,MACvG,iBAAiBqhB,GAAU,CAAAlvM,OAAQA,OAAS,OAAO6tL,EAAQ,oBAAoBA,EAAQ,mBAAmB;AAAA,MAC1G,iBAAiBqhB,GAAU,CAAAlvM,OAAQ;AACjC,gBAAQA,IAAI;AAAA,UACZ,KAAK;AACH,mBAAO6tL,EAAQ;AAAA,UACjB,KAAK;AACH,mBAAOA,EAAQ;AAAA,UACjB;AACE,mBAAOA,EAAQ;AAAA,QAChB;AAAA,MACX,CAAS;AAAA,IACT,GAAS,CAAC9sL,IAAMuJ,OAAS4c,EAAO,WAAW5c,IAAMvJ,EAAI,CAAC,GAChDmmB,EAAO,WAAW,kBAAkB,CAAC0nH,IAAKhtI,OAAS;AACjD,MAAAgrM,GAAY1lL,GAAQtlB,GAAK,MAAMA,GAAK,SAASA,GAAK,OAAO;AAAA,IACjE,CAAO,GACDslB,EAAO,WAAW,0BAA0B,CAAC0nH,IAAKhtI,OAAS;AACzD,YAAMutM,KAAgB,CAAA5/I,OAAS,cAAcA,GAAM,YAAW,EAAG,QAAQ,KAAK,EAAE;AAChF,UAAI,CAACxvD,GAAS6B,EAAI;AAChB;AAEF,YAAM40E,KAAQwG,GAASywG,GAAsBvmK,CAAM,GAAGq/J,EAAqB;AAC3E,UAAI/vG,GAAM,WAAW;AACnB;AAEF,YAAM44H,KAAYruD,GAASn/I,IAAM,CAAC/C,IAAO0wD,OAAUroC,EAAO,UAAU,IAAIioL,GAAc5/I,EAAK,CAAC,KAAKhrD,GAAS1F,EAAK,CAAC;AAChH,MAAIkoC,GAAQqoK,EAAS,MAGrB/hC,GAAO+hC,IAAW,CAACvwM,IAAO0wD,OAAU;AAClC,cAAMK,KAAau/I,GAAc5/I,EAAK;AACtC,QAAAw8G,GAAOv1F,IAAO,CAAA9pB,OAAQ;AACpB,UAAI7tD,OAAU,KACZqoB,EAAO,UAAU,OAAO0oC,IAAY,EAAE,OAAO,KAAI,GAAIlD,GAAK,KAAK,EAAI,IAEnExlC,EAAO,UAAU,MAAM0oC,IAAY,EAAE,OAAA/wD,MAAS6tD,GAAK,GAAG;AAAA,QAEpE,CAAW;AAAA,MACX,CAAS,GACD2hJ,EAAiB73H,GAAM,CAAC,CAAC,EAAE,KAAK,CAAAf,OAASyvH,GAAkBh+K,GAAQuuD,GAAM,KAAK6vH,EAAa,CAAC;AAAA,IACpG,CAAO;AAAA,EACP,GAEU+J,KAAwB,CAACnoL,GAAQ2mK,MAAY;AACjD,UAAMp0K,IAASqsK,GAAU5+J,CAAM,GACzBooL,IAAoB,CAAAvhJ,MAAUy/H,GAAiBvH,GAAkB/+J,CAAM,CAAC,EAAE,KAAK,CAAAwlC,MAAQ+oB,GAAM/oB,GAAMjzC,CAAM,EAAE,IAAI,CAAAg8D,MAAS;AAC5H,YAAMtc,IAAU0zH,GAAQY,GAAsBvmK,CAAM,GAAGuuD,GAAO/oB,CAAI;AAClE,aAAOqB,EAAO0nB,GAAOtc,CAAO;AAAA,IACpC,CAAO,CAAC,EAAE,MAAM,EAAE;AACZ,IAAAk0G,GAAO;AAAA,MACL,iBAAiB,MAAMiiC,EAAkBzhB,EAAQ,eAAe;AAAA,MAChE,kBAAkB,MAAMyhB,EAAkBzhB,EAAQ,gBAAgB;AAAA,MAClE,iBAAiB,MAAMyhB,EAAkBzhB,EAAQ,eAAe;AAAA,IACxE,GAAS,CAAC9sL,GAAMuJ,MAAS4c,EAAO,qBAAqB5c,GAAMvJ,CAAI,CAAC;AAAA,EAChE,GAEUwuM,KAAQp2J,GAAI,SAAS;AAAA,IACzB,EAAE,QAAQ,CAAC,SAAS,EAAG;AAAA,IACvB;AAAA,MACE,IAAI;AAAA,QACF;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD,EAAE,OAAO,CAAC,SAAS,EAAG;AAAA,EAC5B,CAAK,GACKq2J,KAAS,CAAC5jK,GAAS2wB,GAAUC,GAAMC,MAAY7wB,EAAQ,KAAK2wB,GAAUC,GAAMC,CAAO,GACnFQ,KAAa,CAAAhC,MAAQA,EAAK,KAAKv1D,IAAUA,IAAUA,EAAQ,GAC3DghD,KAAW6oJ,GAAM,QACjBjnN,KAAKinN,GAAM,IACXrxL,KAAUqxL,GAAM,OAChB1yI,KAAO;AAAA,IACX,QAAQnW;AAAA,IACR,IAAAp+D;AAAA,IACA,OAAO41B;AAAA,IACP,MAAMsxL;AAAA,IACN,UAAUvyI;AAAA,EAChB,GAMUwyI,KAAW,EAAE,QAJF,CAACt4J,GAAW73B,OAAU;AAAA,IACrC,WAAA63B;AAAA,IACA,MAAA73B;AAAA,EACN,MAGUosG,KAAa,CAACnrG,GAAKpL,MAAY;AACnC,UAAM7X,IAAMijB,EAAI,SAAS,YAAW;AACpC,WAAAjjB,EAAI,WAAW6X,EAAQ,GAAG,GACnB7X;AAAA,EACb,GACUoyM,KAAqB,CAACnvL,GAAKpL,MAAY;AAC3C,UAAM7X,IAAMijB,EAAI,SAAS,YAAW;AACpC,WAAAovL,GAAwBryM,GAAK6X,CAAO,GAC7B7X;AAAA,EACb,GACUqyM,KAA0B,CAACryM,GAAK6X,MAAY7X,EAAI,mBAAmB6X,EAAQ,GAAG,GAC9E6lD,KAAW,CAAC19D,GAAK29D,MAAS;AAC9B,IAAAA,EAAK,KAAK,CAAA75E,MAAK;AACb,MAAAkc,EAAI,eAAelc,EAAE,GAAG;AAAA,IAChC,GAAS,CAACA,GAAG2E,MAAM;AACX,MAAAuX,EAAI,SAASlc,EAAE,KAAK2E,CAAC;AAAA,IACtB,GAAE,CAAA3E,MAAK;AACN,MAAAkc,EAAI,cAAclc,EAAE,GAAG;AAAA,IAC/B,CAAO;AAAA,EACP,GACU85E,KAAY,CAAC59D,GAAK29D,MAAS;AAC/B,IAAAA,EAAK,KAAK,CAAA75E,MAAK;AACb,MAAAkc,EAAI,aAAalc,EAAE,GAAG;AAAA,IAC9B,GAAS,CAACA,GAAG2E,MAAM;AACX,MAAAuX,EAAI,OAAOlc,EAAE,KAAK2E,CAAC;AAAA,IACpB,GAAE,CAAA3E,MAAK;AACN,MAAAkc,EAAI,YAAYlc,EAAE,GAAG;AAAA,IAC7B,CAAO;AAAA,EACP,GACU+5E,KAAmB,CAAC56C,GAAK66C,GAAWC,MAAe;AACvD,UAAM3yC,IAAQnI,EAAI,SAAS,YAAW;AACtC,WAAAy6C,GAAStyC,GAAO0yC,CAAS,GACzBF,GAAUxyC,GAAO2yC,CAAU,GACpB3yC;AAAA,EACb,GACU4yC,KAAgB,CAAC/6C,GAAKzR,GAAOysD,GAASC,GAAQC,MAAY;AAC9D,UAAMn+D,IAAMijB,EAAI,SAAS,YAAW;AACpC,WAAAjjB,EAAI,SAASwR,EAAM,KAAKysD,CAAO,GAC/Bj+D,EAAI,OAAOk+D,EAAO,KAAKC,CAAO,GACvBn+D;AAAA,EACb,GACUsyM,KAAS,CAAAv/J,OAAS;AAAA,IACtB,MAAMA,EAAK;AAAA,IACX,KAAKA,EAAK;AAAA,IACV,OAAOA,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,IACb,OAAOA,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACnB,IACUw/J,KAAiB,CAAAvyM,MAAO;AAC5B,UAAM8zC,IAAQ9zC,EAAI,kBACZ+yC,IAAOe,EAAM,SAAS,IAAIA,EAAM,CAAC,IAAI9zC,EAAI;AAC/C,WAAO+yC,EAAK,QAAQ,KAAKA,EAAK,SAAS,IAAI9pC,EAAS,KAAK8pC,CAAI,EAAE,IAAIu/J,EAAM,IAAIrpM,EAAS;EAC5F,GAEUm1D,KAAQviB,GAAI,SAAS;AAAA,IACzB;AAAA,MACE,KAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD;AAAA,MACE,KAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,EACP,CAAK,GACKwiB,KAAY,CAACp7C,GAAKvgB,GAAM0oB,MAAU1oB,EAAKiY,GAAa,QAAQyQ,EAAM,cAAc,GAAGA,EAAM,aAAazQ,GAAa,QAAQyQ,EAAM,YAAY,GAAGA,EAAM,SAAS,GAC/JkzC,KAAY,CAACr7C,GAAK42B,MAAcA,EAAU,MAAM;AAAA,IACpD,UAAU,CAAA75C,OACD;AAAA,MACL,KAAKmI,GAASnI,CAAG;AAAA,MACjB,KAAKiJ,EAAS;AAAA,IACxB;AAAA,IAEM,UAAU,CAAC60D,GAAWC,OACb;AAAA,MACL,KAAKpvD,GAAO,MAAMkvD,GAAiB56C,GAAK66C,GAAWC,CAAU,CAAC;AAAA,MAC9D,KAAKpvD,GAAO,MAAM1F,EAAS,KAAK40D,GAAiB56C,GAAK86C,GAAYD,CAAS,CAAC,CAAC;AAAA,IACvF;AAAA,IAEM,OAAO,CAACtsD,GAAOysD,GAASC,GAAQC,OACvB;AAAA,MACL,KAAKxvD,GAAO,MAAMqvD,GAAc/6C,GAAKzR,GAAOysD,GAASC,GAAQC,CAAO,CAAC;AAAA,MACrE,KAAKxvD,GAAO,MAAM1F,EAAS,KAAK+0D,GAAc/6C,GAAKi7C,GAAQC,GAAS3sD,GAAOysD,CAAO,CAAC,CAAC;AAAA,IAC9F;AAAA,EAEA,CAAK,GACKM,KAAa,CAACt7C,GAAK0rC,MAAW;AAClC,UAAM3uD,IAAM2uD,EAAO;AACnB,WAAI3uD,EAAI,YACW2uD,EAAO,MAAM,OAAO,CAAA6P,MAAOA,EAAI,cAAc,EAAK,EACnD,IAAI,CAAAA,MAAOJ,GAAM,IAAIzjD,GAAa,QAAQ6jD,EAAI,YAAY,GAAGA,EAAI,WAAW7jD,GAAa,QAAQ6jD,EAAI,cAAc,GAAGA,EAAI,WAAW,CAAC,EAAE,WAAW,MAAMH,GAAUp7C,GAAKm7C,GAAM,KAAKp+D,CAAG,CAAC,IAEhMq+D,GAAUp7C,GAAKm7C,GAAM,KAAKp+D,CAAG;AAAA,EAE5C,GACUy+D,KAAW,CAACx7C,GAAK42B,MAAc;AACnC,UAAM8U,IAAS2P,GAAUr7C,GAAK42B,CAAS;AACvC,WAAO0kB,GAAWt7C,GAAK0rC,CAAM;AAAA,EACnC,GACU6jJ,KAAa,CAACvvL,GAAK42B,MACL4kB,GAASx7C,GAAK42B,CAAS,EACxB,MAAM;AAAA,IACrB,KAAK,CAACroC,GAAOysD,GAASC,GAAQC,MAAY;AACxC,YAAMn+D,IAAMijB,EAAI,SAAS,YAAW;AACpC,aAAAjjB,EAAI,SAASwR,EAAM,KAAKysD,CAAO,GAC/Bj+D,EAAI,OAAOk+D,EAAO,KAAKC,CAAO,GACvBn+D;AAAA,IACR;AAAA,IACD,KAAK,CAACwR,GAAOysD,GAASC,GAAQC,MAAY;AACxC,YAAMn+D,IAAMijB,EAAI,SAAS,YAAW;AACpC,aAAAjjB,EAAI,SAASk+D,EAAO,KAAKC,CAAO,GAChCn+D,EAAI,OAAOwR,EAAM,KAAKysD,CAAO,GACtBj+D;AAAA,IACR;AAAA,EACT,CAAO;AAEH,EAAAo+D,GAAM,KACNA,GAAM;AAQN,QAAMM,KAAW,EAAE,QANF,CAACltD,GAAOysD,GAASC,GAAQC,OAAa;AAAA,IACrD,OAAA3sD;AAAA,IACA,SAAAysD;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,EACN,MASUs0I,KAAQ,EAAE,QANC,CAACjhM,GAAOysD,GAASC,GAAQC,OACjC;AAAA,IACL,OAAOoB,GAAK,GAAG/tD,GAAOysD,CAAO;AAAA,IAC7B,QAAQsB,GAAK,GAAGrB,GAAQC,CAAO;AAAA,EACvC,MAIUu0I,KAAiB,CAACzvL,GAAK42B,MAAc;AACzC,UAAM75C,IAAMwyM,GAAWvvL,GAAK42B,CAAS;AACrC,WAAO6kB,GAAS,OAAO/jD,GAAa,QAAQ3a,EAAI,cAAc,GAAGA,EAAI,aAAa2a,GAAa,QAAQ3a,EAAI,YAAY,GAAGA,EAAI,SAAS;AAAA,EAC7I,GACU2yM,KAAYF,GAAM,QAElBG,KAAO,CAAC/wL,GAAW1F,GAAQ3K,GAAOysD,GAASC,GAAQC,GAAS00I,MAC1D9rM,GAAKyK,GAAO0sD,CAAM,KAAKD,MAAYE,IAOhCl1D,EAAS,SANTm9E,GAAU50E,GAAO,SAAS2K,CAAM,EAAE,KAAK,CAAAzzB,MACrC09F,GAAUloB,GAAQ,SAAS/hD,CAAM,EAAE,KAAK,CAAAxzB,MACtCy6I,GAAOvhH,GAAW1F,GAAQzzB,GAAGC,GAAGkqN,CAAW,CACnD,CACF,GAKCzvE,KAAS,CAACvhH,GAAW1F,GAAQ3K,GAAO0sD,GAAQ20I,MAC3C9rM,GAAKyK,GAAO0sD,CAAM,IAWdj1D,EAAS,SAVTumC,GAASh+B,GAAO0sD,GAAQ/hD,CAAM,EAAE,KAAK,CAAA22L,MAAW;AACrD,UAAMnlB,IAAQmlB,EAAQ,MAAM,MAAM,CAAE,CAAA;AACpC,WAAInlB,EAAM,SAAS,KACjBklB,EAAYhxL,GAAW8rK,GAAOmlB,EAAQ,OAAOA,EAAQ,MAAM,GACpD7pM,EAAS,KAAKkpM,GAAS,OAAOlpM,EAAS,KAAK0pM,GAAUnhM,GAAO,GAAGA,GAAO44D,GAAO54D,CAAK,CAAC,CAAC,GAAG,EAAI,CAAC,KAE7FvI,EAAS;EAE5B,CAAS,GAKC0nI,KAAS,CAACh3D,GAAM68F,GAAS30J,GAAWkxL,GAAU/hK,MAAgB;AAClE,UAAM6iG,IAAkB,CAAAm/D,OACtBhiK,EAAY,kBAAkBnvB,CAAS,GACvCmvB,EAAY,YAAYnvB,GAAWmxL,EAAQ,OAAOA,EAAQ,OAAOA,EAAQ,MAAM,GACxEA,EAAQ;AAEjB,WAAO/kB,GAAe8kB,GAAUp5H,GAAM68F,GAASxlI,EAAY,uBAAuBA,EAAY,oBAAoB,EAAE,IAAI6iG,CAAe;AAAA,EAC7I,GAEU90D,KAAW,CAAC7wE,GAAMwrB,OAAU;AAAA,IAChC,MAAAxrB;AAAA,IACA,MAAAwrB;AAAA,EACN,IACUu5K,KAAY,CAACpnB,GAAU39K,GAAMglM,GAAYC,IAAaC,OACnDvnB,EAAS,WAAW,OAAO39K,CAAI,EAAE,IAAI,CAAA7U,MACnC0lF,GAAS1lF,GAAG85M,CAAU,CAC9B,GAEGC,KAAW,CAACvnB,GAAU39K,GAAMskC,GAAW2gK,IAAaE,OACjD7gK,EAAU,QAAQq5I,GAAU39K,CAAI,EAAE,IAAI,CAAA7U,MACpC0lF,GAAS1lF,GAAG85M,CAAU,CAC9B,GAEGE,KAAU,CAACxnB,GAAU39K,GAAMskC,GAAW2gK,IAAaE,OAAY;AACnE,UAAMnyL,IAAW2qK,EAAS,SAAU,EAAC,SAAS39K,CAAI;AAElD,WADeskC,EAAU,MAAMtxB,CAAQ,EACzB,IAAI,CAAAl9B,MACT+6F,GAAS/6F,GAAGmvN,CAAU,CAC9B;AAAA,EACP,GACUG,KAAa;AAAA,IACjB;AAAA,MACE,SAASL;AAAA,MACT,MAAMG;AAAA,MACN,UAAUnqM,EAAS,KAAM;AAAA,IAC1B;AAAA,IACD;AAAA,MACE,SAASmqM;AAAA,MACT,MAAMC;AAAA,MACN,UAAUpqM,EAAS,KAAKgqM,EAAS;AAAA,IAClC;AAAA,IACD;AAAA,MACE,SAASI;AAAA,MACT,MAAMA;AAAA,MACN,UAAUpqM,EAAS,KAAKmqM,EAAQ;AAAA,IACjC;AAAA,EACP,GACUn5M,KAAK,CAAC4xL,GAAU39K,GAAMwrB,GAAM8Y,GAAW+gK,IAAQD,OACnC3jM,EAAO4jM,GAAO,CAAAC,MACrBA,EAAK,YAAY95K,CACzB,EACc,KAAK,CAAAlD,MACXA,EAAK,QAAQq1J,GAAU39K,GAAMskC,GAAWhc,EAAK,IAAI,EAAE,QAAQ,MACzDA,EAAK,SAAS,KAAK,CAAAzuB,MACjB9N,GAAG4xL,GAAU39K,GAAMnG,GAAIyqC,CAAS,CACxC,CACF,CACF,GA2BGihK,KAAU;AAAA,IACd,MAzBa,OAON;AAAA,MACL,SAPc,CAAC5nB,GAAU39K,MAClB29K,EAAS,MAAK,EAAG,YAAY39K,CAAI;AAAA,MAOxC,OALY,CAAAgT,MACLA,EAAS,SAAS,IAAIjY,EAAS,KAAKiY,EAASA,EAAS,SAAS,CAAC,CAAC,IAAIjY,EAAS,KAAI;AAAA,IAKjG;AAAA,IAgBM,OAdc,OAOP;AAAA,MACL,SAPc,CAAC4iL,GAAU39K,MAClB29K,EAAS,MAAK,EAAG,YAAY39K,CAAI;AAAA,MAOxC,OALY,CAAAgT,MACLA,EAAS,SAAS,IAAIjY,EAAS,KAAKiY,EAAS,CAAC,CAAC,IAAIjY,EAAS,KAAI;AAAA,IAK/E;AAAA,EAKA,GAEUyqM,KAAO,CAAC7nB,GAAU39K,GAAMxH,GAAWgzB,GAAM8Y,GAAWr2B,MAC3CliB,GAAG4xL,GAAU39K,GAAMwrB,GAAM8Y,CAAS,EACnC,KAAK,CAAAvuD,MACXk4B,EAAOl4B,EAAE,IAAI,IACRglB,EAAS,SAETvC,EAAUziB,EAAE,IAAI,IAAIglB,EAAS,KAAKhlB,EAAE,IAAI,IAAIyvN,GAAK7nB,GAAU5nM,EAAE,MAAMyiB,GAAWziB,EAAE,MAAMuuD,GAAWr2B,CAAM,CAEjH,GAEG9F,KAAO,CAACw1K,GAAU39K,GAAMxH,GAAWyV,MAChCu3L,GAAK7nB,GAAU39K,GAAMxH,GAAW0sM,IAAUK,GAAQ,QAAQt3L,CAAM,GAEnEqjB,KAAQ,CAACqsJ,GAAU39K,GAAMxH,GAAWyV,MACjCu3L,GAAK7nB,GAAU39K,GAAMxH,GAAW0sM,IAAUK,GAAQ,SAASt3L,CAAM,GAGpEw3L,KAAS,CAAA9nB,MAAY,CAAAh0K,MAAWg0K,EAAS,WAAW,SAASh0K,CAAO,EAAE,WAAW,GACjFwnD,KAAW,CAACwsH,GAAU39K,GAAMiO,MACzBy3L,GAAW/nB,GAAU39K,GAAMylM,GAAO9nB,CAAQ,GAAG1vK,CAAM,GAEtDktC,KAAU,CAACwiI,GAAU39K,GAAMiO,MACxB03L,GAAYhoB,GAAU39K,GAAMylM,GAAO9nB,CAAQ,GAAG1vK,CAAM,GAEvDy3L,KAAav9L,IACbw9L,KAAcr0K,IAEdqsJ,KAAWP,MACXlhK,KAAS,CAACvS,GAASsE,MAChBkjD,GAASwsH,IAAUh0K,GAASsE,CAAM,GAErCmjD,KAAU,CAACznD,GAASsE,MACjBktC,GAAQwiI,IAAUh0K,GAASsE,CAAM,GAEpC23L,KAAW,CAACj8L,GAASnR,GAAWyV,MAC7By3L,GAAW/nB,IAAUh0K,GAASnR,GAAWyV,CAAM,GAElD43L,KAAY,CAACl8L,GAASnR,GAAWyV,MAC9B03L,GAAYhoB,IAAUh0K,GAASnR,GAAWyV,CAAM,GAGnDkC,KAAW,CAACrH,GAAOtQ,GAAWyV,MAAWkI,GAAWrN,GAAOtQ,GAAWyV,CAAM,EAAE,OAAM,GAEpF4iD,KAAQljB,GAAI,SAAS;AAAA,IACzB,EAAE,MAAM,CAAC,SAAS,EAAG;AAAA,IACrB,EAAE,SAAS,CAAA,EAAI;AAAA,IACf,EAAE,UAAU,CAAC,MAAM,EAAG;AAAA,IACtB,EAAE,YAAY,CAAC,MAAM,EAAG;AAAA,EAC9B,CAAK,GACKuwG,KAAgB,CAACwjB,GAAQxlJ,GAAQuvB,MAAU;AAC/C,UAAMq6J,IAAepkC,EAAO,QAAQxlJ,CAAM,GACpC6pL,IAAcrkC,EAAO,QAAQj2H,CAAK;AACxC,WAAOs6J,EAAY,QAAQD,EAAa,QAAQC,EAAY,OAAOD,EAAa;AAAA,EACtF,GACUE,KAAQ,CAAAh5L,MACLkrE,GAAUlrE,GAAM,IAAI,GAuBvBi5L,KAAc;AAAA,IAClB,GAAGp1I;AAAA,IACH,QAvBa,CAAC6wG,GAAQxlJ,GAAQgqL,GAAcz6J,GAAO06J,GAAa5hL,GAAStW,MAClEiqE,GAAUzsC,GAAO,SAASx9B,CAAM,EAAE,KAAK,CAAAm4L,MACrCluH,GAAUh8D,GAAQ,SAASjO,CAAM,EAAE,IAAI,CAAAo4L,MACvCxtM,GAAKutM,GAAWC,CAAU,IAUtBxtM,GAAK4yC,GAAO26J,CAAS,KAAKlqI,GAAOkqI,CAAS,MAAMD,IAAc5hL,EAAQ8hL,CAAU,IAAIx1I,GAAM,KAAK,cAAc,IAT7G+tH,GAAUonB,IAAO;AAAA,MACtBI;AAAA,MACAC;AAAA,IACd,CAAa,EAAE,KAAK,MACCnoD,GAAcwjB,GAAQ2kC,GAAYD,CAAS,IAAIv1I,GAAM,QAAS,IAAGtsC,EAAQ8hL,CAAU,GACzF,CAAAC,OACM/hL,EAAQ8hL,CAAU,CAC1B,CAIJ,CACF,EAAE,MAAMx1I,GAAM,KAAK,SAAS,CAAC;AAAA,IAQ9B,MANW,CAACzwB,GAASplC,GAAQurM,GAAWC,GAAYC,MAC7CrmK,EAAQ,KAAKplC,GAAQurM,GAAWC,GAAYC,CAAY;AAAA,EAMrE,GAEUC,KAAW,CAAC54L,GAAQkF,GAAUrJ,GAASvV,OAAW;AAAA,IACtD,QAAA0Z;AAAA,IACA,UAAAkF;AAAA,IACA,SAAArJ;AAAA,IACA,OAAAvV;AAAA,EACN,IACUuyM,KAAgB,CAAAh9L,MAAWmE,GAAOnE,CAAO,EAAE,KAAK,CAAAmE,MAAU;AAC9D,UAAMkF,IAAW40J,GAAW95J,CAAM;AAClC,WAAO5N,GAAQ8S,GAAUrJ,CAAO,EAAE,IAAI,CAAAvV,MAASsyM,GAAS54L,GAAQkF,GAAUrJ,GAASvV,CAAK,CAAC;AAAA,EAC/F,CAAK,GACK8L,KAAU,CAACqO,GAAU5E,MAAYmiC,GAAUv9B,GAAUnU,GAAMvB,IAAM8Q,CAAO,CAAC,GAEzEohG,KAAO3gG,GAAM,IAAI,GACjBw8L,KAAW,CAACC,GAAMC,GAAQ74L,MACvB64L,EAAOD,GAAM54L,CAAM,EAAE,KAAK,CAAArJ,MACxBq4I,GAAOr4I,CAAM,KAAKwO,GAAMxO,CAAM,EAAE,KAAI,EAAG,WAAW,IAAIgiM,GAAShiM,GAAQkiM,GAAQ74L,CAAM,IAAIlT,EAAS,KAAK6J,CAAM,CACrH,GAEGmiM,KAAW,CAAC94L,GAAQtE,GAAS26B,MAC1BA,EAAU,SAAS36B,CAAO,EAAE,QAAQ,MAClCi9L,GAASj9L,GAAS26B,EAAU,QAAQr2B,CAAM,CAClD,EAAE,IAAIq2B,EAAU,QAAQ,GAErB0+B,KAAS,CAACr5D,GAASzX,MAChB21K,GAAQl+J,GAASzX,CAAM,EAAE,OAAO64G,EAAI,EAAE,QAAQ,MAC5C88D,GAAQl+J,GAASzX,IAAS,CAAC,EAAE,OAAO64G,EAAI,CAChD,GAEGi8F,KAAe,CAAC/4L,GAAQtE,GAASzX,GAAQoyC,MACtC0+B,GAAOr5D,GAASzX,CAAM,EAAE,KAAK,CAAArZ,MAC3ByrD,EAAU,SAASzrD,CAAE,EAAE,KAAK,MAC1B+tN,GAAS/tN,GAAIyrD,EAAU,QAAQr2B,CAAM,EAAE,IAAIq2B,EAAU,QAAQ,GACnE,CAAA2iK,MACMN,GAAcM,CAAQ,EAAE,IAAI,CAAAxkM,MAC1B4uD,GAAK,GAAG5uD,EAAK,QAAQA,EAAK,KAAK,CACvC,CACF,CACF,GAEGykM,KAAQ,CAACj5L,GAAQtE,GAASzX,GAAQoyC,OACvBymE,GAAKphG,CAAO,IAAIo9L,GAAS94L,GAAQtE,GAAS26B,CAAS,IAAI0iK,GAAa/4L,GAAQtE,GAASzX,GAAQoyC,CAAS,GACvG,IAAI,CAAA6iK,OACT;AAAA,IACL,OAAOA;AAAA,IACP,QAAQA;AAAA,EAClB,EACO,GAEG1iK,KAAU,CAAA2iK,MACPnB,GAAY,KAAKmB,GAAU,CAAAC,MACzBtsM,EAAS,QACf,MACMA,EAAS,QACf,CAAAmmD,MACMnmD,EAAS,KAAKywC,GAAM0V,GAAM,CAAC,CAAC,GAClC,CAAAA,MACMnmD,EAAS,KAAKywC,GAAM0V,GAAMgb,GAAOhb,CAAI,CAAC,CAAC,CAC/C,GAGG0yE,KAAW,CAAC56E,GAAO+oG,OAChB;AAAA,IACL,MAAM/oG,EAAM;AAAA,IACZ,KAAKA,EAAM,MAAM+oG;AAAA,IACjB,OAAO/oG,EAAM;AAAA,IACb,QAAQA,EAAM,SAAS+oG;AAAA,EAC/B,IAEUruB,KAAS,CAAC16E,GAAO+oG,OACd;AAAA,IACL,MAAM/oG,EAAM;AAAA,IACZ,KAAKA,EAAM,MAAM+oG;AAAA,IACjB,OAAO/oG,EAAM;AAAA,IACb,QAAQA,EAAM,SAAS+oG;AAAA,EAC/B,IAEUulD,KAAY,CAACtuJ,GAAOuuJ,GAAQC,OACzB;AAAA,IACL,MAAMxuJ,EAAM,OAAOuuJ;AAAA,IACnB,KAAKvuJ,EAAM,MAAMwuJ;AAAA,IACjB,OAAOxuJ,EAAM,QAAQuuJ;AAAA,IACrB,QAAQvuJ,EAAM,SAASwuJ;AAAA,EAC/B,IAEUC,KAAS,CAAAzuJ,MACNA,EAAM,KAET0uJ,KAAY,CAAA1uJ,MACTA,EAAM,QAGT2uJ,KAAgB,CAACjmC,GAAQ/3J,GAASzX,MAClCA,KAAU,KAAKA,IAASgqE,GAAOvyD,CAAO,IACjC+3J,EAAO,cAAc/3J,GAASzX,GAAQyX,GAASzX,IAAS,CAAC,IACvDA,IAAS,IACXwvK,EAAO,cAAc/3J,GAASzX,IAAS,GAAGyX,GAASzX,CAAM,IAE3D6I,EAAS,QAEZ6sM,KAAU,CAAA/iK,OAAS;AAAA,IACvB,MAAMA,EAAK;AAAA,IACX,KAAKA,EAAK;AAAA,IACV,OAAOA,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EACnB,IACUgjK,KAAa,CAACnmC,GAAQ/3J,MACnB5O,EAAS,KAAK2mK,EAAO,QAAQ/3J,CAAO,CAAC,GAExCm+L,KAAW,CAACpmC,GAAQ/3J,GAASzX,MAC7Bk3H,GAAUz/G,CAAO,IACZk+L,GAAWnmC,GAAQ/3J,CAAO,EAAE,IAAIi+L,EAAO,IACrC3qD,GAAOtzI,CAAO,IAChBg+L,GAAcjmC,GAAQ/3J,GAASzX,CAAM,EAAE,IAAI01M,EAAO,IAElD7sM,EAAS,QAGdgtM,KAAe,CAACrmC,GAAQ/3J,MACxBy/G,GAAUz/G,CAAO,IACZk+L,GAAWnmC,GAAQ/3J,CAAO,EAAE,IAAIi+L,EAAO,IACrC3qD,GAAOtzI,CAAO,IAChB+3J,EAAO,cAAc/3J,GAAS,GAAGA,GAASuyD,GAAOvyD,CAAO,CAAC,EAAE,IAAIi+L,EAAO,IAEtE7sM,EAAS,QAIditM,KAAY,GACZC,KAAc,KACd32I,KAAQ3jB,GAAI,SAAS;AAAA,IACzB,EAAE,MAAM,CAAA,EAAI;AAAA,IACZ,EAAE,OAAO,CAAC,OAAO,EAAG;AAAA,EAC1B,CAAK,GACKu6J,KAAY,CAAClvJ,GAAOrkC,MACjBqkC,EAAM,OAAOrkC,EAAI,QAAQ,KAAK,IAAIA,EAAI,QAAQqkC,EAAM,IAAI,IAAI,KAAKA,EAAM,OAAOrkC,EAAI,OAErFwzL,KAAiB,CAACzmC,GAAQ/3J,GAASqvC,MAChCjoC,GAAUpH,GAAS8X,EAAO,EAAE,KAAK5mB,IAAO,CAAAqmD,MACtC6mJ,GAAarmC,GAAQxgH,CAAI,EAAE,OAAO,CAAAvsC,MAChCuzL,GAAUlvJ,GAAOrkC,CAAG,CAC5B,CACF,GAEGyzL,KAAa,CAAC1mC,GAAQ/3J,GAAS0+L,GAAUxkK,GAAUmV,MAAU;AACjE,UAAMsvJ,IAAa10E,GAAS56E,GAAOgvJ,EAAS;AAC5C,WAAI,KAAK,IAAIK,EAAS,SAASxkK,EAAS,MAAM,IAAI,KAEvCwkK,EAAS,MAAMrvJ,EAAM,SADvBsY,GAAM,MAAMg3I,CAAU,IAGpBD,EAAS,QAAQrvJ,EAAM,SACzBsY,GAAM,MAAMsiE,GAAS56E,GAAO,CAAC,CAAC,IAE9BmvJ,GAAezmC,GAAQ/3J,GAASqvC,CAAK,IAAIsY,GAAM,MAAMg2I,GAAUgB,GAAYN,IAAW,CAAC,CAAC,IAAI12I,GAAM,KAAI;AAAA,EAErH,GAaUi3I,KAAa;AAAA,IACjB,OAAOd;AAAA,IACP,UAde,CAAC/lC,GAAQ/3J,GAAS0+L,GAAUxkK,GAAUmV,MAAU;AAC/D,YAAMwvJ,IAAc90E,GAAO16E,GAAOgvJ,EAAS;AAC3C,aAAI,KAAK,IAAIK,EAAS,MAAMxkK,EAAS,GAAG,IAAI,KAEjCwkK,EAAS,SAASrvJ,EAAM,MAD1BsY,GAAM,MAAMk3I,CAAW,IAGrBH,EAAS,WAAWrvJ,EAAM,MAC5BsY,GAAM,MAAMoiE,GAAO16E,GAAO,CAAC,CAAC,IAE5BmvJ,GAAezmC,GAAQ/3J,GAASqvC,CAAK,IAAIsY,GAAM,MAAMg2I,GAAUkB,GAAaR,IAAW,CAAC,CAAC,IAAI12I,GAAM,KAAI;AAAA,IAEtH;AAAA,IAIM,MAAMoiE;AAAA,IACN,QAAQx3G;AAAA,EACd,GACUusL,KAAe;AAAA,IACnB,OAAOf;AAAA,IACP,UAAUU;AAAA,IACV,MAAMx0E;AAAA,IACN,QAAQxiE;AAAA,EACd,GACUs3I,KAAY,CAAChnC,GAAQjpL,GAAG4S,MACrBq2K,EAAO,iBAAiBjpL,GAAG4S,CAAC,EAAE,OAAO,CAAAuvB,MACnC9b,GAAK8b,CAAG,MAAM,OACtB,EAAE,OAAM,GAEL+tL,KAAiB,CAACjnC,GAAQje,GAAU5/G,GAAUmV,GAAO4vJ,MAClDC,GAAUnnC,GAAQje,GAAU5/G,GAAU4/G,EAAS,KAAKzqG,GAAOgvJ,EAAS,GAAGY,CAAU,GAEpFC,KAAY,CAACnnC,GAAQje,GAAU5/G,GAAUmV,GAAO4vJ,MAChDA,MAAe,IACV7tM,EAAS,KAAKi+C,CAAK,IAExB0vJ,GAAUhnC,GAAQ1oH,EAAM,MAAMyqG,EAAS,MAAMzqG,CAAK,CAAC,IAC9C2vJ,GAAejnC,GAAQje,GAAU5/G,GAAUmV,GAAO4vJ,IAAa,CAAC,IAElElnC,EAAO,eAAe1oH,EAAM,MAAMyqG,EAAS,MAAMzqG,CAAK,CAAC,EAAE,KAAK,CAAA8vJ,MAC5DA,EAAM,MAAM,KAAK/tM,EAAS,MAAM,CAAA4O,MAC9Bo+L,GAAarmC,GAAQ/3J,CAAO,EAAE,KAAK,CAAA0+L,MACjC5kD,EAAS,SAASie,GAAQ/3J,GAAS0+L,GAAUxkK,GAAUmV,CAAK,EAAE,KAAKj+C,EAAS,MAAM,CAAAguM,MAChFF,GAAUnnC,GAAQje,GAAU5/G,GAAUklK,GAAUH,IAAa,CAAC,CACtE,CACF,EAAE,QAAQ,MACF7tM,EAAS,KAAKi+C,CAAK,CAC3B,GACAj+C,EAAS,IAAI,CACjB,GAEGiuM,KAAc,CAACvlD,GAAUwlD,GAAUvnC,MACnCje,EAAS,MAAMwlD,CAAQ,IAAIvnC,EAAO,eAAc,IAC3C3mK,EAAS,KAAK0oJ,EAAS,MAAMwlD,CAAQ,IAAIvnC,EAAO,eAAc,CAAE,IAC9Dje,EAAS,MAAMwlD,CAAQ,IAAI,IAC7BluM,EAAS,KAAK,CAAC0oJ,EAAS,MAAMwlD,CAAQ,CAAC,IAEvCluM,EAAS,QAGdmuM,KAAQ,CAACzlD,GAAUie,GAAQ1oH,MAAU;AACzC,UAAMmwJ,IAAQ1lD,EAAS,KAAKzqG,GAAOgvJ,EAAS,GACtCiB,IAAWJ,GAAUnnC,GAAQje,GAAUzqG,GAAOmwJ,GAAOlB,EAAW,EAAE,MAAMkB,CAAK;AACnF,WAAOH,GAAYvlD,GAAUwlD,GAAUvnC,CAAM,EAAE,KAAK,MAC3CA,EAAO,eAAeunC,EAAS,MAAMxlD,EAAS,MAAMwlD,CAAQ,CAAC,GACnE,CAAA/nI,OACDwgG,EAAO,SAAS,GAAGxgG,CAAK,GACjBwgG,EAAO,eAAeunC,EAAS,MAAMxlD,EAAS,MAAMwlD,CAAQ,IAAI/nI,CAAK,EAC7E;AAAA,EACP,GACUkoI,KAAU;AAAA,IACd,OAAOhvM,GAAM8uM,IAAOX,EAAU;AAAA,IAC9B,SAASnuM,GAAM8uM,IAAOT,EAAY;AAAA,IAClC,aAAaxuM,GAAS+tM,EAAS;AAAA,EACrC,GAEUqB,KAAc,IACdC,KAAW,CAAC5nC,GAAQzzJ,GAAQq2B,MACzBo9H,EAAO,eAAe,KAAK,CAAA//G,MACzBulJ,GAAMj5L,GAAQ0zC,EAAI,QAAQA,EAAI,SAASrd,CAAS,EAAE,KAAK,MACrDvpC,EAAS,KAAKywC,GAAMmW,EAAI,QAAQA,EAAI,OAAO,CAAC,GAClD,CAAA4nJ,MAAe;AAChB,UAAMrsL,IAAQwkJ,EAAO,UAAU6nC,CAAW,GACpCnC,IAAWnB,GAAY,OAAOvkC,GAAQ//G,EAAI,QAAQA,EAAI,SAASzkC,EAAM,QAAQA,EAAM,SAASonB,EAAU,SAASr2B,CAAM;AAC3H,WAAOw2B,GAAQ2iK,CAAQ;AAAA,EACjC,CAAS,CACF,GAEG7I,KAAO,CAAC78B,GAAQzzJ,GAAQtE,GAASzX,GAAQoyC,GAAWskK,MACpDA,MAAe,IACV7tM,EAAS,SAEXyuM,GAAU9nC,GAAQzzJ,GAAQtE,GAASzX,GAAQoyC,CAAS,EAAE,KAAK,CAAAmlK,MAAS;AACzE,UAAMvsL,IAAQwkJ,EAAO,UAAU+nC,CAAK,GAC9BrC,IAAWnB,GAAY,OAAOvkC,GAAQ/3J,GAASzX,GAAQgrB,EAAM,QAAQA,EAAM,SAASonB,EAAU,SAASr2B,CAAM;AACnH,WAAOg4L,GAAY,KAAKmB,GAAU,MACzBrsM,EAAS,QACf,MACMA,EAAS,KAAK0uM,CAAK,GACzB,CAAAvoJ,OACGroD,GAAK8Q,GAASu3C,EAAI,KAAKhvD,MAAW,IAC7Bw3M,GAAShoC,GAAQ/3J,GAASzX,GAAQwhI,IAAQpvF,CAAS,IAEnDi6J,GAAK78B,GAAQzzJ,GAAQizC,IAAM,GAAG5c,GAAWskK,IAAa,CAAC,GAE/D,CAAA1nJ,OACGroD,GAAK8Q,GAASu3C,EAAI,KAAKhvD,MAAWgqE,GAAOhb,EAAI,IACxCwoJ,GAAShoC,GAAQ/3J,GAASzX,GAAQ0hI,IAAUtvF,CAAS,IAErDi6J,GAAK78B,GAAQzzJ,GAAQizC,IAAMgb,GAAOhb,EAAI,GAAG5c,GAAWskK,IAAa,CAAC,CAE5E;AAAA,EACT,CAAO,GAEGc,KAAW,CAAChoC,GAAQ/3J,GAASzX,GAAQoxJ,GAAMh/G,MACxCwjK,GAASpmC,GAAQ/3J,GAASzX,CAAM,EAAE,KAAK,CAAAyiB,MACrCg1L,GAAMjoC,GAAQp9H,GAAWg/G,EAAK3uI,GAAKy0L,GAAQ,YAAa,CAAA,CAAC,CACjE,GAEGO,KAAQ,CAACjoC,GAAQp9H,GAAW3vB,MAAQ;AACxC,UAAM/T,IAAU8F,GAAU,EAAC;AAC3B,WAAI9F,EAAQ,gBAAgBA,EAAQ,cAAcA,EAAQ,cACjD0jC,EAAU,MAAMo9H,GAAQ/sJ,CAAG,IAE3B5Z,EAAS;EAExB,GACUyuM,KAAY,CAAC9nC,GAAQzzJ,GAAQtE,GAASzX,GAAQoyC,MAC3CwjK,GAASpmC,GAAQ/3J,GAASzX,CAAM,EAAE,KAAK,CAAAyiB,MACrCg1L,GAAMjoC,GAAQp9H,GAAW3vB,CAAG,CACpC,GAEGV,KAAW,CAACytJ,GAAQzzJ,GAAQq2B,MACzBglK,GAAS5nC,GAAQzzJ,GAAQq2B,CAAS,EAAE,KAAK,CAAAo1F,MACvC6kE,GAAK78B,GAAQzzJ,GAAQyrH,EAAK,SAASA,EAAK,QAAQp1F,GAAW+kK,EAAW,EAAE,IAAI3nC,EAAO,SAAS,CACpG,GAGGkoC,KAAc,CAAC58L,GAAMi9D,MAClB95D,GAASnD,GAAM,CAAAp3B,MACbk4B,GAAOl4B,CAAC,EAAE,OAAO,CAAAuV,MACf0N,GAAK1N,GAAG8+E,CAAK,CACrB,CACF,GAEG4/H,KAAW,CAACnoC,GAAQzzJ,GAAQq2B,GAAW3G,GAASw9H,MAC7CjjF,GAAUv6C,GAAS,SAAS1vB,CAAM,EAAE,KAAK,CAAA3K,MACvC40E,GAAU50E,GAAO,SAAS2K,CAAM,EAAE,KAAK,CAAAg8D,MACvC2/H,GAAYzuC,GAAQlxF,CAAK,IAGvBh2D,GAASytJ,GAAQzzJ,GAAQq2B,CAAS,EAAE,KAAK,CAAApnB,MACvCg7D,GAAUh7D,EAAM,QAAQ,SAASjP,CAAM,EAAE,IAAI,CAAA+hD,OAC3C;AAAA,IACL,OAAA1sD;AAAA,IACA,QAAA0sD;AAAA,IACA,OAAA9yC;AAAA,EAChB,EACa,CACF,IAVQniB,EAAS,MAWnB,CACF,GAEG6iD,KAAW,CAAC8jH,GAAQzzJ,GAAQq2B,GAAW3G,GAASw9H,GAAQ2uC,MACrDA,EAASnsK,GAAS1vB,CAAM,EAAE,QAAQ,MAChC47L,GAASnoC,GAAQzzJ,GAAQq2B,GAAW3G,GAASw9H,CAAM,EAAE,IAAI,CAAA14J,MAAQ;AACtE,UAAMya,IAAQza,EAAK;AACnB,WAAOwhM,GAAS,OAAOlpM,EAAS,KAAK0pM,GAAUvnL,EAAM,OAAOA,EAAM,SAASA,EAAM,QAAQA,EAAM,OAAO,CAAC,GAAG,EAAI;AAAA,EACxH,CAAS,CACF,GAEG6sL,KAAe,CAACpsK,GAAS1vB,MACtBiqE,GAAUv6C,GAAS,MAAM1vB,CAAM,EAAE,KAAK,CAAAk7J,MACpCjxF,GAAUixF,GAAU,SAASl7J,CAAM,EAAE,KAAK,CAAAg8D,MAAS;AACxD,UAAMwB,IAAOv1D,GAAY+zD,GAAO,IAAI;AACpC,WAAIpxE,GAAKswK,GAAU19F,EAAK,CAAC,CAAC,IACjBm6H,GAAS37H,GAAO,CAAAtgE,MACdm3B,GAAOn3B,CAAO,EAAE,UACtBsE,CAAM,EAAE,IAAI,CAAAsnD,MAAQ;AACrB,YAAMy0I,IAAa9tI,GAAO3G,CAAI;AAC9B,aAAO0uI,GAAS,OAAOlpM,EAAS,KAAK0pM,GAAUlvI,GAAMy0I,GAAYz0I,GAAMy0I,CAAU,CAAC,GAAG,EAAI;AAAA,IACvG,CAAa,IAEMjvM,EAAS;EAE5B,CAAS,CACF,GAEGkvM,KAAgB,CAACtsK,GAAS1vB,MACvBiqE,GAAUv6C,GAAS,MAAM1vB,CAAM,EAAE,KAAK,CAAAk7J,MACpCjxF,GAAUixF,GAAU,SAASl7J,CAAM,EAAE,KAAK,CAAAg8D,MAAS;AACxD,UAAMwB,IAAOv1D,GAAY+zD,GAAO,IAAI;AACpC,WAAIpxE,GAAKswK,GAAU19F,EAAKA,EAAK,SAAS,CAAC,CAAC,IAC/Bo6H,GAAU57H,GAAO,CAAAtgE,MACf4yD,GAAM5yD,CAAO,EAAE,UACrBsE,CAAM,EAAE,IAAI,CAAAsuD,MACN0nI,GAAS,OAAOlpM,EAAS,KAAK0pM,GAAUloI,GAAO,GAAGA,GAAO,CAAC,CAAC,GAAG,EAAI,CAC1E,IAEMxhE,EAAS;EAE5B,CAAS,CACF,GAEG89B,KAAS,CAAC6oI,GAAQ/tJ,GAAW1F,GAAQq2B,GAAW3G,GAASw9H,GAAQwpC,MAC9DkF,GAASnoC,GAAQzzJ,GAAQq2B,GAAW3G,GAASw9H,CAAM,EAAE,KAAK,CAAA14J,MACxDyyH,GAAOvhH,GAAW1F,GAAQxL,EAAK,OAAOA,EAAK,QAAQkiM,CAAW,CACtE,GAGGjnK,KAAO,CAAAC,MAAW;AACtB,QAAItqC,IAAQsqC;AAOZ,WAAO;AAAA,MACL,KAPU,MACHtqC;AAAA,MAOP,KALU,CAAA5H,MAAK;AACf,QAAA4H,IAAQ5H;AAAA,MAChB;AAAA,IAIA;AAAA,EACA,GAEUy0C,KAAY,CAAAC,MAAY;AAC5B,UAAMC,IAAU1C,GAAK3iC,EAAS,KAAM,CAAA,GAC9BslC,IAAS,MAAMD,EAAQ,IAAG,EAAG,KAAKD,CAAQ;AAWhD,WAAO;AAAA,MACL,OAXY,MAAM;AAClB,QAAAE,KACAD,EAAQ,IAAIrlC,EAAS,KAAM,CAAA;AAAA,MACnC;AAAA,MASQ,OARY,MAAMqlC,EAAQ,IAAK,EAAC,OAAM;AAAA,MAStC,KARU,MAAMA,EAAQ;MASxB,KARU,CAAA5lD,MAAK;AACf,QAAA6lD,KACAD,EAAQ,IAAIrlC,EAAS,KAAKvgB,CAAC,CAAC;AAAA,MACpC;AAAA,IAMA;AAAA,EACA,GACU6Y,KAAQ,MAAM;AAClB,UAAM+sC,IAAUF,GAAUvmC,EAAI;AAE9B,WAAO;AAAA,MACL,GAAGymC;AAAA,MACH,IAHS,CAAA3lD,MAAK2lD,EAAQ,IAAG,EAAG,KAAK3lD,CAAC;AAAA,IAI1C;AAAA,EACA,GAEUyvN,KAAW,CAACtlM,GAAQqJ,MAAWiqE,GAAUtzE,GAAQ,SAASqJ,CAAM,GAChEk8L,KAAsB,CAAAjpJ,MAAQnzC,GAAcmzC,CAAI,EAAE,OAAOw8D,EAAY,GACrE0sF,KAAiB,CAAC1oC,GAAQ/tJ,GAAW1F,GAAQ60B,MAAgB;AACjE,UAAMsxJ,IAAS/gM,MACTg3M,IAAajW,EAAO,OACpB1uD,IAAiB,CAAA71H,OAAS;AAC9B,MAAAukL,EAAO,GAAG,CAAA9wL,OAAS;AACjB,QAAAw/B,EAAY,kBAAkBnvB,CAAS,GACvCu2L,GAASr6L,GAAM,QAAQ5B,CAAM,EAAE,KAAK,CAAA+hD,OAAU;AAC5C,UAAA1uB,GAASh+B,IAAO0sD,IAAQ/hD,CAAM,EAAE,KAAK,CAAA22L,OAAW;AAC9C,kBAAMnlB,KAAQmlB,GAAQ,MAAM,MAAM,CAAE,CAAA;AACpC,gBAAInlB,GAAM,WAAW,GAAG;AACtB,oBAAM6qB,KAAa7qB,GAAM,CAAC,GACpB8qB,KAAoB14L,GAAOy4L,EAAU,MAAM,SAC3CE,KAA+B56M,GAAGupF,GAAQtpE,GAAM,MAAM,GAAGy6L,IAAYzxM,EAAI;AAC/E,cAAI0xM,MAAqBC,OACvB1nK,EAAY,YAAYnvB,GAAW8rK,IAAO6qB,IAAYA,EAAU,GAChE5oC,EAAO,eAAe4oC,EAAU;AAAA,YAElD;AAAqB,cAAI7qB,GAAM,SAAS,MACxB38I,EAAY,YAAYnvB,GAAW8rK,IAAOmlB,GAAQ,OAAOA,GAAQ,MAAM,GACvEljC,EAAO,eAAe1xG,EAAM;AAAA,UAE5C,CAAa;AAAA,QACb,CAAW;AAAA,MACX,CAAS;AAAA,IACT;AAYM,WAAO;AAAA,MACL,YAAAq6I;AAAA,MACA,WAbgB,CAAAx6L,OAAS;AACzB,QAAAizB,EAAY,MAAMnvB,CAAS,GAC3Bu2L,GAASr6L,GAAM,QAAQ5B,CAAM,EAAE,OAAOk8L,EAAmB,EAAE,KAAK/V,EAAO,GAAG;AAAA,MAClF;AAAA,MAWQ,WAVgB,CAAAvkL,OAAS;AACzB,QAAA61H,EAAe71H,EAAK;AAAA,MAC5B;AAAA,MASQ,SARc,CAAAA,OAAS;AACvB,QAAA61H,EAAe71H,EAAK,GACpBw6L;MACR;AAAA,IAMA;AAAA,EACA,GAEUv3E,KAAO;AAAA,IACX,UAAUpkH;AAAA,IACV,QAAQ0iD;AAAA,IACR,UAAUC,GAAK;AAAA,IACf,OAAO+3I,GAAQ;AAAA,IACf,SAASnD,GAAY;AAAA,EAC3B,GACUwE,KAAK;AAAA,IACT,UAAUh8L;AAAA,IACV,QAAQyN;AAAA,IACR,UAAUm1C,GAAK;AAAA,IACf,OAAO+3I,GAAQ;AAAA,IACf,SAASnD,GAAY;AAAA,EAC3B,GAEUyE,KAAQ,CAAAzrM,MACL,CAAA0rM,MACEA,MAAY1rM,GAGjB2rM,KAAOF,GAAM,EAAE,GACfG,KAASH,GAAM,EAAE,GACjBI,KAAe,CAAAH,MACZA,KAAW,MAAMA,KAAW,IAE/BI,KAAM;AAAA,IACV,YAAYL,GAAM,EAAE;AAAA,IACpB,WAAWA,GAAM,EAAE;AAAA,EACzB,GACUM,KAAM;AAAA,IACV,YAAYN,GAAM,EAAE;AAAA,IACpB,WAAWA,GAAM,EAAE;AAAA,EACzB,GAEUjxL,KAAQ,CAAAnE,MAAQ;AACpB,UAAMnG,IAAMmG,MAAS,SAAYA,EAAK,MAAM,UACtC78B,IAAI02B,EAAI,KAAK,cAAcA,EAAI,gBAAgB,YAC/C9jB,IAAI8jB,EAAI,KAAK,aAAaA,EAAI,gBAAgB;AACpD,WAAOsF,EAAch8B,GAAG4S,CAAC;AAAA,EAC/B,GACU4/M,KAAK,CAACxyN,GAAG4S,GAAGiqB,MAAS;AAEzB,UAAMP,KADMO,MAAS,SAAYA,EAAK,MAAM,UAC5B;AAChB,IAAIP,KACFA,EAAI,SAASt8B,GAAG4S,CAAC;AAAA,EAEzB,GAEUyiD,KAAMH,GAAI,SAAS;AAAA,IACvB,EAAE,UAAU,CAAC,KAAK,EAAG;AAAA,IACrB;AAAA,MACE,UAAU;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IACD;AAAA,MACE,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,EACP,CAAK,GACK4jB,KAAiB,CAAAC,MAAY1jB,GAAI,MAAM0jB,EAAS,OAAOA,EAAS,SAASA,EAAS,QAAQA,EAAS,OAAO,GAC1GiK,KAAW,CAAA9vB,MAAaA,EAAU,MAAM;AAAA,IAC5C,UAAU,CAAA75C,MAAO2a,GAAa,QAAQ3a,EAAI,cAAc;AAAA,IACxD,UAAU,CAAC89D,GAAW8B,MAAgBL,GAAK,SAASzB,CAAS;AAAA,IAC7D,OAAO,CAACtsD,GAAOquD,GAAUC,GAASC,MAAavuD;AAAA,EACrD,CAAK,GACKwuD,KAAWhkB,GAAI,UACfikB,KAAWjkB,GAAI,UACfkkB,KAAQlkB,GAAI,OACZmkB,KAAS,CAAAtmB,MAAa;AAC1B,UAAMroC,IAAQm4D,GAAS9vB,CAAS;AAChC,WAAO99B,GAAYvK,CAAK;AAAA,EAC9B,GACU4Z,KAAQszC,GAAS,QACjB0B,KAAe;AAAA,IACnB,UAAAJ;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,gBAAAT;AAAA,IACA,QAAAU;AAAA,IACA,OAAA/0C;AAAA,EACN,GAEUuzC,KAAyB,CAACthD,GAAK12B,GAAG4S,MAAM;AAC5C,QAAI/I,GAAIw2C;AACR,WAAO/9B,EAAS,MAAM+9B,KAAMx2C,IAAK6sB,EAAI,KAAK,4BAA4B,QAAQ2pB,MAAO,SAAS,SAASA,EAAG,KAAKx2C,GAAI7J,GAAG4S,CAAC,CAAC,EAAE,KAAK,CAAAmxB,MAAO;AACpI,UAAIA,EAAI,eAAe;AACrB,eAAOzhB,EAAS;AAElB,YAAMjlB,IAAIq5B,EAAI,IAAI,YAAW;AAC7B,aAAAr5B,EAAE,SAAS0mC,EAAI,YAAYA,EAAI,MAAM,GACrC1mC,EAAE,SAAQ,GACHilB,EAAS,KAAKjlB,CAAC;AAAA,IAC9B,CAAO;AAAA,EACP,GACU46E,KAAsB,CAACvhD,GAAK12B,GAAG4S,MAAM;AACzC,QAAI/I,GAAIw2C;AACR,WAAO/9B,EAAS,MAAM+9B,KAAMx2C,IAAK6sB,EAAI,KAAK,yBAAyB,QAAQ2pB,MAAO,SAAS,SAASA,EAAG,KAAKx2C,GAAI7J,GAAG4S,CAAC,CAAC;AAAA,EAC3H,GACUslE,KACA,SAAS,yBACJF,KACE,SAAS,sBACXC,KAEA31D,EAAS,MAGd83D,KAAY,CAAC99C,GAAKt8B,GAAG4S,MAAM;AAC/B,UAAM8jB,IAAM1C,GAAa,QAAQsI,EAAI,QAAQ;AAC7C,WAAO47C,GAAgBxhD,GAAK12B,GAAG4S,CAAC,EAAE,IAAI,CAAAyG,MAAO0+D,GAAS,OAAO/jD,GAAa,QAAQ3a,EAAI,cAAc,GAAGA,EAAI,aAAa2a,GAAa,QAAQ3a,EAAI,YAAY,GAAGA,EAAI,SAAS,CAAC;AAAA,EACpL,GAEUqgE,KAAgB,CAACxoD,GAASzX,MAAW;AACzC,UAAMkgE,IAAStzD,GAAK6K,CAAO;AAC3B,WAAgByoD,MAAZ,UACKf,GAAK,MAAM1nD,CAAO,IACf9N,GAAW;AAAA,MACnB;AAAA,MACA;AAAA,IACD,GAAEu2D,CAAM,IAGFlgE,MAAW,IAAIm/D,GAAK,OAAO1nD,CAAO,IAAI0nD,GAAK,MAAM1nD,CAAO,IAFxD0nD,GAAK,GAAG1nD,GAASzX,CAAM;AAAA,EAItC,GACUmgE,KAAqB,CAACzC,GAAWC,MAAe;AACpD,UAAMvsD,IAAQssD,EAAU,KAAKyB,GAAK,QAAQc,IAAed,GAAK,KAAK,GAC7DrB,IAASH,EAAW,KAAKwB,GAAK,QAAQc,IAAed,GAAK,KAAK;AACrE,WAAOa,GAAa,SAAS5uD,GAAO0sD,CAAM;AAAA,EAChD,GACUsC,KAAkB,CAAChvD,GAAOysD,GAASC,GAAQC,MAAY;AAC3D,UAAML,IAAYuC,GAAc7uD,GAAOysD,CAAO,GACxCF,IAAasC,GAAcnC,GAAQC,CAAO;AAChD,WAAOiC,GAAa,SAAStC,GAAWC,CAAU;AAAA,EACxD,GAEUq7I,KAAY,CAAC5nM,GAAOysD,GAASC,GAAQC,MAAY;AAErD,UAAMn+D,IADM61K,GAAMrkK,CAAK,EACP,IAAI,YAAW;AAC/B,WAAAxR,EAAI,SAASwR,EAAM,KAAKysD,CAAO,GAC/Bj+D,EAAI,OAAOk+D,EAAO,KAAKC,CAAO,GACvBn+D;AAAA,EACb,GACU25C,KAAQ,CAACnoC,GAAOysD,GAASC,GAAQC,MAAY;AACjD,UAAMn6E,IAAIo1N,GAAU5nM,GAAOysD,GAASC,GAAQC,CAAO,GAC7Ck7I,IAAOtyM,GAAKyK,GAAO0sD,CAAM,KAAKD,MAAYE;AAChD,WAAOn6E,EAAE,aAAa,CAACq1N;AAAA,EAC7B,GAEUC,KAAqB,CAAAr2L,MAAOha,EAAS,KAAKga,EAAI,aAAY,CAAE,GAC5Ds2L,KAAmB,CAACt2L,GAAKjjB,MAAQ;AACrC,IAAAs5M,GAAmBr2L,CAAG,EAAE,KAAK,CAAA42B,MAAa;AACxC,MAAAA,EAAU,gBAAe,GACzBA,EAAU,SAAS75C,CAAG;AAAA,IAC9B,CAAO;AAAA,EACP,GACUw5M,KAAa,CAACv2L,GAAKzR,GAAOysD,GAASC,GAAQC,MAAY;AAC3D,UAAMn+D,IAAMg+D,GAAc/6C,GAAKzR,GAAOysD,GAASC,GAAQC,CAAO;AAC9D,IAAAo7I,GAAiBt2L,GAAKjjB,CAAG;AAAA,EAC/B,GACUy5M,KAAoB,CAACx2L,GAAK42B,GAAWroC,GAAOysD,GAASC,GAAQC,MAAY;AAC7E,IAAAtkB,EAAU,SAASroC,EAAM,KAAKysD,CAAO,GACrCpkB,EAAU,OAAOqkB,EAAO,KAAKC,CAAO;AAAA,EAC1C,GACUu7I,KAAuB,CAACz2L,GAAKg9C,MAAaxB,GAASx7C,GAAKg9C,CAAQ,EAAE,MAAM;AAAA,IAC5E,KAAK,CAACzuD,GAAOysD,GAASC,GAAQC,MAAY;AACxC,MAAAq7I,GAAWv2L,GAAKzR,GAAOysD,GAASC,GAAQC,CAAO;AAAA,IAChD;AAAA,IACD,KAAK,CAAC3sD,GAAOysD,GAASC,GAAQC,MAAY;AACxC,MAAAm7I,GAAmBr2L,CAAG,EAAE,KAAK,CAAA42B,MAAa;AACxC,YAAIA,EAAU;AACZ,UAAAA,EAAU,iBAAiBroC,EAAM,KAAKysD,GAASC,EAAO,KAAKC,CAAO;AAAA,iBACzDtkB,EAAU;AACnB,cAAI;AACF,YAAA4/J,GAAkBx2L,GAAK42B,GAAWroC,GAAOysD,GAASC,GAAQC,CAAO;AAAA,UAClE,QAAW;AACV,YAAAq7I,GAAWv2L,GAAKi7C,GAAQC,GAAS3sD,GAAOysD,CAAO;AAAA,UAChD;AAAA;AAED,UAAAu7I,GAAWv2L,GAAKi7C,GAAQC,GAAS3sD,GAAOysD,CAAO;AAAA,MAE3D,CAAS;AAAA,IACF;AAAA,EACP,CAAK,GACK07I,KAAW,CAAC12L,GAAKzR,GAAOysD,GAASC,GAAQC,MAAY;AACzD,UAAM8B,IAAWO,GAAgBhvD,GAAOysD,GAASC,GAAQC,CAAO;AAChE,IAAAu7I,GAAqBz2L,GAAKg9C,CAAQ;AAAA,EACxC,GACU25I,KAAc,CAAC32L,GAAK66C,GAAWC,MAAe;AAClD,UAAMkC,IAAWM,GAAmBzC,GAAWC,CAAU;AACzD,IAAA27I,GAAqBz2L,GAAKg9C,CAAQ;AAAA,EACxC,GACUkG,KAAY,CAAAtsB,MAAa;AAC7B,QAAIA,EAAU,aAAa,GAAG;AAC5B,YAAMggK,IAAWhgK,EAAU,WAAW,CAAC,GACjCglG,IAAUhlG,EAAU,WAAWA,EAAU,aAAa,CAAC;AAC7D,aAAO5wC,EAAS,KAAKy1D,GAAS,OAAO/jD,GAAa,QAAQk/L,EAAS,cAAc,GAAGA,EAAS,aAAal/L,GAAa,QAAQkkI,EAAQ,YAAY,GAAGA,EAAQ,SAAS,CAAC;AAAA,IAChL;AACQ,aAAO51I,EAAS;EAExB,GACU6wM,KAAa,CAAAjgK,MAAa;AAC9B,QAAIA,EAAU,eAAe,QAAQA,EAAU,cAAc;AAC3D,aAAOssB,GAAUtsB,CAAS;AACrB;AACL,YAAMwvH,IAAS1uJ,GAAa,QAAQk/B,EAAU,UAAU,GAClDyvB,IAAQ3uD,GAAa,QAAQk/B,EAAU,SAAS;AACtD,aAAOF,GAAM0vH,GAAQxvH,EAAU,cAAcyvB,GAAOzvB,EAAU,WAAW,IAAI5wC,EAAS,KAAKy1D,GAAS,OAAO2qG,GAAQxvH,EAAU,cAAcyvB,GAAOzvB,EAAU,WAAW,CAAC,IAAIssB,GAAUtsB,CAAS;AAAA,IAChM;AAAA,EACP,GACUkgK,KAAe,CAAC92L,GAAKpL,GAASmiM,IAAuB,OAAS;AAElE,UAAMh6M,KADYg6M,IAAuB5H,KAAqBhkF,IACxCnrG,GAAKpL,CAAO;AAClC,IAAA0hM,GAAiBt2L,GAAKjjB,CAAG;AAAA,EAC/B,GACUi6M,KAAW,CAAAh3L,MAAOq2L,GAAmBr2L,CAAG,EAAE,OAAO,CAAA4sC,MAAOA,EAAI,aAAa,CAAC,EAAE,KAAKiqJ,EAAU,GAC3Fl3I,KAAQ,CAAA3/C,MAAOg3L,GAASh3L,CAAG,EAAE,IAAI,CAAAmI,MAASg1C,GAAa,MAAMh1C,EAAM,OAAOA,EAAM,SAASA,EAAM,QAAQA,EAAM,OAAO,CAAC,GACrH8uL,KAAe,CAACj3L,GAAK42B,MAAc;AACvC,UAAM75C,IAAMwyM,GAAWvvL,GAAK42B,CAAS;AACrC,WAAO04J,GAAevyM,CAAG;AAAA,EAC/B,GACU8gE,KAAa,CAAC79C,GAAKt8B,GAAG4S,MAAMwnE,GAAU99C,GAAKt8B,GAAG4S,CAAC,GAC/Cy6G,KAAQ,CAAA/wF,MAAO;AACnB,IAAAq2L,GAAmBr2L,CAAG,EAAE,KAAK,CAAA42B,MAAaA,EAAU,gBAAe,CAAE;AAAA,EAC3E,GAEUsgK,KAAe,CAAAl3L,OA4DZ;AAAA,IACL,kBA5DuB,CAACt8B,IAAG4S,OACpBohB,GAAa,UAAUA,GAAa,QAAQsI,EAAI,QAAQ,GAAGt8B,IAAG4S,EAAC;AAAA,IA4DtE,SA1Dc,CAAAse,OACPA,GAAQ,IAAI;IA0DnB,eAxDoB,CAACrG,IAAOysD,IAASC,IAAQC,OAAY;AACzD,YAAMtO,KAAMuQ,GAAa,MAAM5uD,IAAOysD,IAASC,IAAQC,EAAO;AAC9D,aAAO+7I,GAAaj3L,GAAK4sC,EAAG;AAAA,IACpC;AAAA,IAsDQ,cArDmB,MACZ+S,GAAM3/C,CAAG,EAAE,IAAI,CAAAm3L,OACb1H,GAAezvL,GAAKm3L,EAAQ,CACpC;AAAA,IAmDD,WAjDgB,CAAAzC,OAAS;AACzB,YAAM13I,KAAWG,GAAa,SAASu3I,GAAM,OAAOA,GAAM,MAAM;AAChE,aAAOjF,GAAezvL,GAAKg9C,EAAQ;AAAA,IAC3C;AAAA,IA+CQ,gBA9CqB,CAACt5E,IAAG4S,OAClBunE,GAAW79C,GAAKt8B,IAAG4S,EAAC,EAAE,IAAI,CAAA2mE,OACxBuyI,GAAM,OAAOvyI,GAAM,OAAOA,GAAM,SAASA,GAAM,QAAQA,GAAM,OAAO,CAC5E;AAAA,IA4CD,gBA1CqB,MAAM;AAC3B,MAAA8zC,GAAM/wF,CAAG;AAAA,IACjB;AAAA,IAyCQ,mBAxCwB,CAACgwB,KAAU,OAAU;AAC7C,MAAA2vB,GAAM3/C,CAAG,EAAE,KAAK,CAAA4sC,OAAOA,GAAI,KAAK,CAAA7vD,OAAOA,GAAI,SAASizC,EAAO,GAAG,CAAC6qB,IAAWC,OAAe;AACvF,cAAMJ,KAAO1qB,KAAU6qB,KAAYC;AACnC,QAAA67I,GAAY32L,GAAK06C,IAAMA,EAAI;AAAA,MAC5B,GAAE,CAACnsD,IAAOysD,IAASC,IAAQC,OAAY;AACtC,cAAM3jD,KAAOy4B,KAAUzhC,KAAQ0sD,IACzB99D,KAAS6yC,KAAUgrB,KAAUE;AACnC,QAAAw7I,GAAS12L,GAAKzI,IAAMpa,IAAQoa,IAAMpa,EAAM;AAAA,MACzC,CAAA,CAAC;AAAA,IACV;AAAA,IAgCQ,cAzBmB,CAAAyvD,OAAO;AAC1B,MAAA8pJ,GAAS12L,GAAK4sC,GAAI,OAAOA,GAAI,SAASA,GAAI,QAAQA,GAAI,OAAO;AAAA,IACrE;AAAA,IAwBQ,sBAvB2B,CAACr+C,IAAO0sD,OAAW;AAC9C,MAAA07I,GAAY32L,GAAKzR,IAAO0sD,EAAM;AAAA,IACtC;AAAA,IAsBQ,YAjCiB,CAAArmD,OAAW;AAC5B,MAAAkiM,GAAa92L,GAAKpL,IAAS,EAAK;AAAA,IACxC;AAAA,IAgCQ,gBA/BqB,CAAAA,OAAW;AAChC,MAAAkiM,GAAa92L,GAAKpL,EAAO;AAAA,IACjC;AAAA,IA8BQ,gBAvBqB,MACdoL,EAAI;AAAA,IAuBX,YArBiB,MACL0E,GAAMhN,GAAa,QAAQsI,EAAI,QAAQ,CAAC,EACzC;AAAA,IAoBX,UAlBe,CAACt8B,IAAG4S,OAAM;AACzB,MAAA4/M,GAAGxyN,IAAG4S,IAAGohB,GAAa,QAAQsI,EAAI,QAAQ,CAAC;AAAA,IACnD;AAAA,EAiBA,IAGUo3L,KAAK,CAAC1gI,GAAM0jG,OAAU;AAAA,IAC1B,MAAA1jG;AAAA,IACA,MAAA0jG;AAAA,EACN,IACUi9B,KAAQ,CAACr3L,GAAKpB,GAAW1F,GAAQ60B,MAAgB;AACrD,UAAM4+H,IAASuqC,GAAal3L,CAAG,GACzB+qD,IAAWsqI,GAAe1oC,GAAQ/tJ,GAAW1F,GAAQ60B,CAAW;AACtE,WAAO;AAAA,MACL,YAAYg9B,EAAS;AAAA,MACrB,WAAWA,EAAS;AAAA,MACpB,WAAWA,EAAS;AAAA,MACpB,SAASA,EAAS;AAAA,IAC1B;AAAA,EACA,GACUusI,KAAiB,CAAA//L,MAAQyE,GAAUzE,GAAMwK,EAAa,EAAE,OAAO4mG,EAAY,GAC3E4uF,KAAsB,CAAChpM,GAAO0sD,MAAWq8I,GAAe/oM,CAAK,KAAK+oM,GAAer8I,CAAM,GACvFu8I,KAAW,CAACx3L,GAAKpB,GAAW1F,GAAQ60B,MAAgB;AACxD,UAAM4+H,IAASuqC,GAAal3L,CAAG,GACzBy3L,IAAkB,OACtB1pK,EAAY,MAAMnvB,CAAS,GACpB5Y,EAAS;AAgFlB,WAAO;AAAA,MACL,SA/Ec,CAAC8U,GAAOvM,IAAOysD,IAASC,IAAQC,IAAS3rB,OAAc;AACrE,cAAMmoK,KAAY58L,EAAM,KAClB86L,KAAU8B,GAAU,OACpB9jE,KAAW8jE,GAAU,aAAa;AA0DxC,eAzDgBntB,GAAW3rK,GAAWmvB,EAAY,gBAAgB,EAAE,KAAK,OACnEgoK,GAAaH,EAAO,KAAK,CAAChiE,MAC5B7lG,EAAY,kBAAkBnvB,CAAS,GAErCm3L,GAAaH,EAAO,KAAKhiE,MAAY,CAAC2jE,GAAoBhpM,IAAO0sD,EAAM,IAClEj1D,EAAS,OACP8vM,GAAOF,EAAO,KAAKhiE,KACrBvuI,GAAMy+B,IAAQ6oI,GAAQ/tJ,GAAW1F,GAAQ6kH,IAAM9iE,IAAQ1sD,IAAOw/B,EAAY,WAAW,IACnF8nK,GAAKD,EAAO,KAAKhiE,KACnBvuI,GAAMy+B,IAAQ6oI,GAAQ/tJ,GAAW1F,GAAQw8L,IAAIz6I,IAAQ1sD,IAAOw/B,EAAY,WAAW,IACjF+nK,GAAOF,EAAO,IAChBvwM,GAAMwjD,IAAU8jH,GAAQzzJ,GAAQ6kH,IAAM9iE,IAAQ1sD,IAAO2mM,EAAa,IAChEW,GAAKD,EAAO,IACdvwM,GAAMwjD,IAAU8jH,GAAQzzJ,GAAQw8L,IAAIz6I,IAAQ1sD,IAAOymM,EAAY,IAE/DhvM,EAAS,OAEjB,CAAA8pM,OAAY;AACb,gBAAM6H,KAAW,CAAAC,OACR,MACc/uM,GAAQ+uM,IAAU,CAAAzrI,OAC5BuhE,GAAOvhE,GAAM,MAAMA,GAAM,MAAMvtD,GAAWkxL,IAAU/hK,CAAW,CACvE,EACiB,KAAK,MACd68I,GAAShsK,GAAWmvB,EAAY,uBAAuBA,EAAY,oBAAoB,EAAE,IAAI,CAAAo9I,OAAS;AAC3G,kBAAMnuH,KAAW84I,GAAOF,EAAO,KAAKrmK,GAAU,UAAUqmK,EAAO,IAAIt5I,GAAK,QAAQA,GAAK;AACrF,mBAAAqwG,EAAO,qBAAqBrwG,GAAK,GAAG6uH,GAAM,OAAO,CAAC,GAAGnuH,GAASmuH,GAAM,KAAK,CAAC,GAC1Ep9I,EAAY,MAAMnvB,CAAS,GACpBswL,GAAS,OAAOlpM,EAAS,KAAM,GAAE,EAAI;AAAA,UAC9D,CAAiB,GACA,CAAAzP,OACMyP,EAAS,KAAKkpM,GAAS,OAAOlpM,EAAS,KAAI,GAAI,EAAI,CAAC,CAC5D;AAGL,iBAAI+vM,GAAaH,EAAO,KAAKhiE,MAAY,CAAC2jE,GAAoBhpM,IAAO0sD,EAAM,IAClEj1D,EAAS,OACP8vM,GAAOF,EAAO,KAAKhiE,KACrB+jE,GAAS,CAACP,GAAG,GAAI,CAAC,CAAC,CAAC,IAClBvB,GAAKD,EAAO,KAAKhiE,KACnB+jE,GAAS,CAACP,GAAG,IAAI,CAAC,CAAC,CAAC,IAClB7nK,GAAU,WAAWqmK,EAAO,KAAKhiE,KACnC+jE,GAAS;AAAA,YACdP,GAAG,GAAG,EAAE;AAAA,YACRA,GAAG,IAAI,CAAC;AAAA,UACtB,CAAa,IACQ7nK,GAAU,UAAUqmK,EAAO,KAAKhiE,KAClC+jE,GAAS;AAAA,YACdP,GAAG,GAAG,CAAE;AAAA,YACRA,GAAG,GAAI,CAAC;AAAA,UACtB,CAAa,IACQrB,GAAaH,EAAO,KAAK,CAAChiE,KAC5B6jE,IAEAzxM,EAAS;AAAA,QAE5B,CAAS,EACa;AAAA,MACtB;AAAA,MAkBQ,OAjBY,CAAC8U,GAAOvM,IAAOysD,IAASC,IAAQC,OACrCqvH,GAAW3rK,GAAWmvB,EAAY,gBAAgB,EAAE,KAAK,MAAM;AACpE,cAAM2pK,KAAY58L,EAAM,KAClB86L,KAAU8B,GAAU;AAE1B,eADiBA,GAAU,aAAa,MAIpC3B,GAAaH,EAAO,KAAK2B,GAAoBhpM,IAAO0sD,EAAM,IACrD00I,GAAK/wL,GAAW1F,GAAQ3K,IAAOysD,IAASC,IAAQC,IAASntB,EAAY,WAAW,IAHhF/nC,EAAS;MAO5B,GAAWA,EAAS,IAAI;AAAA,IAKxB;AAAA,EACA,GACU6xM,KAAW,CAAC73L,GAAKpB,GAAW1F,GAAQ60B,MAAgB;AACxD,UAAM4+H,IAASuqC,GAAal3L,CAAG;AAC/B,WAAO,CAACzR,GAAO0sD,MAAW;AACxB,MAAAltB,EAAY,kBAAkBnvB,CAAS,GACvC2tB,GAASh+B,GAAO0sD,GAAQ/hD,CAAM,EAAE,KAAK,CAAA22L,MAAW;AAC9C,cAAMnlB,IAAQmlB,EAAQ,MAAM,MAAM,CAAE,CAAA;AACpC,QAAA9hK,EAAY,YAAYnvB,GAAW8rK,GAAOmlB,EAAQ,OAAOA,EAAQ,MAAM,GACvEljC,EAAO,eAAe1xG,CAAM,GAC5B0xG,EAAO,kBAAiB;AAAA,MAClC,CAAS;AAAA,IACT;AAAA,EACA,GAEUt/C,KAAO,CAACz4G,GAASqB,MAAS;AAC9B,UAAM3X,IAAQmK,GAAMmM,GAASqB,CAAI;AACjC,WAAO3X,MAAU,UAAaA,MAAU,KAAK,CAAA,IAAKA,EAAM,MAAM,GAAG;AAAA,EACvE,GACUuY,KAAQ,CAACjC,GAASqB,GAAMG,MAAO;AAEnC,UAAMC,IADMg3G,GAAKz4G,GAASqB,CAAI,EACf,OAAO,CAACG,CAAE,CAAC;AAC1B,WAAAqG,GAAM7H,GAASqB,GAAMI,EAAG,KAAK,GAAG,CAAC,GAC1B;AAAA,EACb,GACUu4B,KAAW,CAACh6B,GAASqB,GAAMG,MAAO;AACtC,UAAMC,IAAKomE,GAAS4wC,GAAKz4G,GAASqB,CAAI,GAAG,CAAAvf,MAAKA,MAAM0f,CAAE;AACtD,WAAIC,EAAG,SAAS,IACdoG,GAAM7H,GAASqB,GAAMI,EAAG,KAAK,GAAG,CAAC,IAEjCU,EAASnC,GAASqB,CAAI,GAEjB;AAAA,EACb,GAEUM,KAAW,CAAA3B,MAAWA,EAAQ,IAAI,cAAc,QAChDsvG,KAAQ,CAAAtvG,MAAWy4G,GAAKz4G,GAAS,OAAO,GACxCkjM,KAAQ,CAACljM,GAAS8B,MAAUG,GAAMjC,GAAS,SAAS8B,CAAK,GACzD+rC,KAAW,CAAC7tC,GAAS8B,MAAUk4B,GAASh6B,GAAS,SAAS8B,CAAK,GAE/D0d,KAAM,CAACxf,GAAS8B,MAAU;AAC9B,IAAIH,GAAS3B,CAAO,IAClBA,EAAQ,IAAI,UAAU,IAAI8B,CAAK,IAE/BohM,GAAMljM,GAAS8B,CAAK;AAAA,EAE5B,GACUI,KAAa,CAAAlC,MAAW;AAE5B,KADkB2B,GAAS3B,CAAO,IAAIA,EAAQ,IAAI,YAAYsvG,GAAMtvG,CAAO,GAC7D,WAAW,KACvBmC,EAASnC,GAAS,OAAO;AAAA,EAEjC,GACUkzD,KAAW,CAAClzD,GAAS8B,MAAU;AACnC,IAAIH,GAAS3B,CAAO,IACAA,EAAQ,IAAI,UACpB,OAAO8B,CAAK,IAEtB+rC,GAAS7tC,GAAS8B,CAAK,GAEzBI,GAAWlC,CAAO;AAAA,EACxB,GACUqC,KAAM,CAACrC,GAAS8B,MAAUH,GAAS3B,CAAO,KAAKA,EAAQ,IAAI,UAAU,SAAS8B,CAAK,GAEnFmjG,KAAW,CAACjlG,GAASwwB,MAAY;AACrC,IAAAomI,GAAOpmI,GAAS,CAAA1hD,MAAK;AACnB,MAAAokF,GAASlzD,GAASlxB,CAAC;AAAA,IAC3B,CAAO;AAAA,EACP,GAEU2hD,KAAW,CAAA3uB,MAAS,CAAA9B,MAAW;AACnC,IAAAwf,GAAIxf,GAAS8B,CAAK;AAAA,EACxB,GACUqhM,KAAgB,CAAA3yK,MAAW,CAAAxwB,MAAW;AAC1C,IAAAilG,GAASjlG,GAASwwB,CAAO;AAAA,EAC/B,GA6DU4yK,KAAsB;AAAA,IAC1B,SA5Dc,CAAAnsB,MAAY;AAC1B,YAAMosB,IAAoB5yK,GAASwmJ,EAAS,QAAQ,GAC9CqsB,IAAyBH,GAAc;AAAA,QAC3ClsB,EAAS;AAAA,QACTA,EAAS;AAAA,QACTA,EAAS;AAAA,MACjB,CAAO,GACK96E,IAAQ,CAAAnyF,MAAa;AACzB,cAAM4rK,IAAOrpK,GAAYvC,GAAWitK,EAAS,gBAAgB;AAC7D,QAAArgB,GAAOgf,GAAM0tB,CAAsB;AAAA,MAC3C;AAOM,aAAO;AAAA,QACL,mBAAmBnnG;AAAA,QACnB,OAAAA;AAAA,QACA,aATkB,CAACnyF,GAAWq3D,GAAO1nE,GAAO0sD,MAAW;AACvD,UAAA81C,EAAMnyF,CAAS,GACf4sJ,GAAOv1F,GAAOgiI,CAAiB,GAC/B7jL,GAAI7lB,GAAOs9K,EAAS,aAAa,GACjCz3J,GAAI6mC,GAAQ4wH,EAAS,YAAY;AAAA,QACzC;AAAA,QAKQ,kBAAkBA,EAAS;AAAA,QAC3B,uBAAuBA,EAAS;AAAA,QAChC,sBAAsBA,EAAS;AAAA,MACvC;AAAA,IACA;AAAA,IAoCM,QAnCa,CAACA,GAAUssB,GAAaC,MAAY;AACjD,YAAMC,IAA4B,CAAAzjM,MAAW;AAC3C,QAAAmC,EAASnC,GAASi3K,EAAS,QAAQ,GACnC90K,EAASnC,GAASi3K,EAAS,aAAa,GACxC90K,EAASnC,GAASi3K,EAAS,YAAY;AAAA,MAC/C,GACYysB,IAAwB,CAAA1jM,MAAW;AACvC,QAAA6H,GAAM7H,GAASi3K,EAAS,UAAU,GAAG;AAAA,MAC7C,GACY96E,IAAQ,CAAAnyF,MAAa;AACzB,QAAA25L,EAAkB35L,CAAS,GAC3Bw5L;MACR,GACYG,IAAoB,CAAA35L,MAAa;AACrC,cAAM4rK,KAAOrpK,GAAYvC,GAAW,GAAIitK,EAAS,gBAAgB,IAAMA,EAAS,qBAAqB,IAAMA,EAAS,oBAAoB,EAAG;AAC3I,QAAArgB,GAAOgf,IAAM6tB,CAAyB;AAAA,MAC9C;AAQM,aAAO;AAAA,QACL,mBAAAE;AAAA,QACA,OAAAxnG;AAAA,QACA,aAVkB,CAACnyF,GAAWq3D,IAAO1nE,IAAO0sD,OAAW;AACvD,UAAA81C,EAAMnyF,CAAS,GACf4sJ,GAAOv1F,IAAOqiI,CAAqB,GACnC77L,GAAMlO,IAAOs9K,EAAS,eAAe,GAAG,GACxCpvK,GAAMw+C,IAAQ4wH,EAAS,cAAc,GAAG,GACxCssB,EAAYliI,IAAO1nE,IAAO0sD,EAAM;AAAA,QACxC;AAAA,QAKQ,kBAAkB4wH,EAAS;AAAA,QAC3B,uBAAuBA,EAAS;AAAA,QAChC,sBAAsBA,EAAS;AAAA,MACvC;AAAA,IACA;AAAA,EAIA,GAEUxjD,KAAO,CAACh9F,GAASplC,GAAQuyM,GAAYC,MAAa;AACtD,YAAQptK,EAAQ,KAAG;AAAA,MACnB,KAAK;AACH,eAAOplC,EAAM;AAAA,MACf,KAAK;AACH,eAAOwyM,EAASptK,EAAQ,OAAO;AAAA,MACjC,KAAK;AACH,eAAOmtK,EAAWntK,EAAQ,QAAQ;AAAA,IACnC;AAAA,EACP,GACUqtK,KAAO,OAAO,EAAE,KAAK,OAAQ,IAC7BC,KAAW,CAAAn/L,OAAa;AAAA,IAC5B,KAAK;AAAA,IACL,UAAAA;AAAA,EACN,IACUo/L,KAAS,CAAAhkM,OAAY;AAAA,IACzB,KAAK;AAAA,IACL,SAAAA;AAAA,EACN,IAEUikM,KAAa,CAACC,GAAUpyI,GAAU67G,OAE/B,EAAE,KADG,MAAM0I,GAAS6tB,EAAU,GAAEv2B,CAAgB,EAAE,KAAK,MAAM77G,EAAQ,EAAG,KAAKgyI,IAAME,EAAM,GAAGD,EAAQ,EAC/F,IAGRI,KAAmB,CAACzlC,GAAMtnH,MAAkB;AAChD,UAAMgtJ,IAAS1lC,EAAK,MAAM,GAAGtnH,EAAcA,EAAc,SAAS,CAAC,EAAE,MAAM,CAAC,GACtEitJ,IAAYpmB,GAAammB,CAAM;AACrC,WAAOx5L,GAAOy5L,GAAW,CAAAvlC,MAAU;AACjC,YAAMwlC,IAAcxlC,EAAO,MAAM,MAAM,GAAG1nH,EAAcA,EAAc,SAAS,CAAC,EAAE,SAAS,CAAC;AAC5F,aAAOlhD,GAAMouM,GAAa,CAAA/sJ,MAAQA,EAAK,OAAO;AAAA,IACtD,CAAO;AAAA,EACP,GACUgtJ,KAAsB,CAAC7lC,GAAMtnH,MAAkB;AACnD,UAAMotJ,IAAW9lC,EAAK,MAAMtnH,EAAc,CAAC,EAAE,MAAMA,EAAc,CAAC,EAAE,UAAU,GAAGsnH,EAAK,MAAM,GACtF+lC,IAAcxmB,GAAaumB,CAAQ;AACzC,WAAO55L,GAAO65L,GAAa,CAAA3lC,MAAU;AACnC,YAAMwlC,IAAcxlC,EAAO,MAAM,MAAM1nH,EAAc,CAAC,EAAE,SAASA,EAAc,CAAC,EAAE,UAAU,GAAG0nH,EAAO,MAAM,MAAM;AAClH,aAAO5oK,GAAMouM,GAAa,CAAA/sJ,MAAQA,EAAK,OAAO;AAAA,IACtD,CAAO;AAAA,EACP,GACUmtJ,KAAgB,CAACpkI,GAAOrlE,GAAQ48K,MAAe;AACnD,UAAM7T,IAAYsB,GAAU,UAAUhlG,CAAK;AAE3C,WADgB6+G,GAAQnb,GAAW/oK,CAAM,EAC1B,IAAI,CAAAm8C,MAAiB;AAClC,YAAMsnH,IAAOkf,GAAO5Z,GAAW6T,GAAY,EAAK,GAC1C,EAAC,MAAA/1G,EAAI,IAAIuhG,GAAmB3E,CAAI,GAChCimC,IAAgBR,GAAiBriI,GAAM1qB,CAAa,GACpDwtJ,KAAmBL,GAAoBziI,GAAM1qB,CAAa;AAChE,aAAO;AAAA,QACL,eAAAutJ;AAAA,QACA,kBAAAC;AAAA,MACV;AAAA,IACA,CAAO;AAAA,EACP,GAEU36L,KAAU,CAAChP,GAAQnsB,GAAG4S,GAAG6iB,GAAM2F,GAASC,GAAMhC,OAAS;AAAA,IAC3D,QAAAlN;AAAA,IACA,GAAAnsB;AAAA,IACA,GAAA4S;AAAA,IACA,MAAA6iB;AAAA,IACA,SAAA2F;AAAA,IACA,MAAAC;AAAA,IACA,KAAAhC;AAAA,EACN,IACU08L,KAAiB,CAAAx6L,MAAY;AACjC,UAAMpP,IAAS6H,GAAa,QAAQmD,GAAuBoE,CAAQ,EAAE,MAAMA,EAAS,MAAM,CAAC,GACrF9F,IAAO,MAAM8F,EAAS,mBACtBH,IAAU,MAAMG,EAAS,kBACzBF,IAAOla,GAAQia,GAAS3F,CAAI;AAClC,WAAO0F,GAAQhP,GAAQoP,EAAS,SAASA,EAAS,SAAS9F,GAAM2F,GAASC,GAAME,CAAQ;AAAA,EAC9F,GACU46C,KAAS,CAAC16C,GAAQC,MAAY,CAAAH,MAAY;AAC9C,IAAIE,EAAOF,CAAQ,KACjBG,EAAQq6L,GAAex6L,CAAQ,CAAC;AAAA,EAExC,GACU7Y,KAAS,CAACwO,GAASkG,GAAOqE,GAAQC,GAASC,MAAe;AAC9D,UAAMC,IAAUu6C,GAAO16C,GAAQC,CAAO;AACtC,WAAAxK,EAAQ,IAAI,iBAAiBkG,GAAOwE,GAASD,CAAU,GAChD,EAAE,QAAQha,GAAMka,IAAQ3K,GAASkG,GAAOwE,GAASD,CAAU;EACxE,GACU2mH,KAAS,CAACpxH,GAASkG,GAAOqE,GAAQC,MAAYhZ,GAAOwO,GAASkG,GAAOqE,GAAQC,GAAS,EAAK,GAC3FG,KAAS,CAAC3K,GAASkG,GAAOsE,GAASC,MAAe;AACtD,IAAAzK,EAAQ,IAAI,oBAAoBkG,GAAOsE,GAASC,CAAU;AAAA,EAChE,GAEUF,KAASpZ,IACTghC,KAAO,CAACnyB,GAASkG,GAAOsE,MAAY4mH,GAAOpxH,GAASkG,GAAOqE,IAAQC,CAAO,GAC1EJ,KAAey6L,IAEfC,KAAoB,CAAA74N,MAAK,CAACo2B,GAAIS,GAAa,QAAQ72B,EAAE,MAAM,GAAG,2BAA2B,GACzF84N,KAA4B,CAAChzL,GAAQw+K,MAAkB;AAC3D,UAAMyU,IAAgBf,GAAW,MAAMnhM,GAAa,QAAQiP,EAAO,QAAO,CAAE,GAAG,MAAMsmK,GAAiBvH,GAAkB/+J,CAAM,GAAG4+J,GAAU5+J,CAAM,CAAC,GAAGklK,GAAS,gBAAgB,GACxKssB,IAAc,CAACliI,GAAO1nE,IAAO0sD,OAAW;AAE5C,MADiBia,GAAM3mE,EAAK,EACnB,KAAK,CAAA2mE,OAAS;AACrB,cAAMguG,KAAesB,GAAsB79J,CAAM,GAC3C8lK,KAAa9I,GAAe/+K,IAAM8S,GAAa,QAAQiP,EAAO,OAAM,CAAE,GAAGu8J,EAAY,GACrFl3H,KAAgBkhI,GAAsBvmK,CAAM,GAC5Ck+K,KAAayU,GAAcpkI,IAAO,EAAE,WAAWlpB,GAAa,GAAIygI,EAAU;AAChF,QAAAmY,GAAyBj+K,GAAQsvD,GAAO1nE,IAAO0sD,IAAQ4pI,EAAU;AAAA,MAC3E,CAAS;AAAA,IACT,GACYuT,IAAU,MAAMtT,GAAwBn+K,CAAM,GAC9ConB,IAAciqK,GAAoB,OAAOnsB,IAAUssB,GAAaC,CAAO;AAC7E,WAAAzxL,EAAO,GAAG,QAAQ,CAAAvkC,MAAM;AACtB,YAAM49B,KAAM2G,EAAO,UACb5G,KAAOulK,GAAQ3+J,CAAM,GACrBzN,KAASqsK,GAAU5+J,CAAM,GACzBkzL,KAAgB,MAAM;AAC1B,cAAMjtJ,KAAMjmC,EAAO,WACbpY,KAAQmJ,GAAa,QAAQk1C,GAAI,SAAU,CAAA,GAC3Ch+C,KAAM8I,GAAa,QAAQk1C,GAAI,OAAQ,CAAA;AAK7C,QAJei9H,GAAU30G,IAAO;AAAA,UAC9B3mE;AAAA,UACAK;AAAA,QACZ,CAAW,EACM,KAAK,MAAMm/B,EAAY,MAAMhuB,EAAI,GAAGnb,EAAI;AAAA,MACzD,GACck1M,KAAgBzC,GAAMr3L,IAAKD,IAAM7G,IAAQ60B,CAAW,GACpDgsK,KAAcvC,GAASx3L,IAAKD,IAAM7G,IAAQ60B,CAAW,GACrDisK,KAAanC,GAAS73L,IAAKD,IAAM7G,IAAQ60B,CAAW,GACpD0qG,KAAc,CAAA39H,OAASA,GAAM,IAAI,aAAa;AACpD,MAAA6L,EAAO,GAAG,uBAAuB,CAAA9lC,OAAKm5N,GAAWn5N,GAAE,OAAOA,GAAE,MAAM,CAAC;AACnE,YAAMo5N,KAAiB,CAACn/L,IAAOo/L,OAAa;AAC1C,QAAKzhE,GAAY39H,EAAK,MAGlBo/L,GAAS,QACXp/L,GAAM,KAAI,GAEZo/L,GAAS,UAAU,KAAK,CAAAx/M,OAAM;AAC5B,gBAAMsiE,KAAWG,GAAa,SAASziE,GAAG,OAAOA,GAAG,MAAM,GACpDqC,KAAMwyM,GAAWvvL,IAAKg9C,EAAQ;AACpC,UAAAr2C,EAAO,UAAU,OAAO5pB,EAAG;AAAA,QACvC,CAAW;AAAA,MACX,GACco9M,KAAQ,CAAAr/L,OAAS;AACrB,cAAMs/L,KAAep7L,GAAalE,EAAK;AACvC,YAAIs/L,GAAa,IAAI,YAAYrE,GAAaqE,GAAa,IAAI,KAAK,GAAG;AACrE,gBAAMr9M,KAAM4pB,EAAO,UAAU,OAAM,GAC7BpY,KAAQmJ,GAAa,QAAQ3a,GAAI,cAAc,GAC/C6R,KAAM8I,GAAa,QAAQ3a,GAAI,YAAY;AACjD,UAAAg9M,GAAY,MAAMK,IAAc7rM,IAAOxR,GAAI,aAAa6R,IAAK7R,GAAI,SAAS,EAAE,KAAK,CAAAm9M,OAAY;AAC3F,YAAAD,GAAeG,IAAcF,EAAQ;AAAA,UACnD,CAAa;AAAA,QACF;AAAA,MACX,GACcG,KAAU,CAAAv/L,OAAS;AACvB,cAAMs/L,KAAep7L,GAAalE,EAAK;AACvC,QAAAqqL,EAAc,KAAI;AAClB,cAAMpoM,KAAM4pB,EAAO,UAAU,OAAM,GAC7BpY,KAAQmJ,GAAa,QAAQ3a,GAAI,cAAc,GAC/C6R,KAAM8I,GAAa,QAAQ3a,GAAI,YAAY,GAC3CwyC,KAAYqrI,GAAYo7B,IAAKC,EAAG,EAAEv+L,GAAa,QAAQiP,EAAO,UAAU,SAAQ,CAAE,CAAC;AACzF,QAAAozL,GAAY,QAAQK,IAAc7rM,IAAOxR,GAAI,aAAa6R,IAAK7R,GAAI,WAAWwyC,EAAS,EAAE,KAAK,CAAA2qK,OAAY;AACxG,UAAAD,GAAeG,IAAcF,EAAQ;AAAA,QACjD,CAAW,GACD/U,EAAc,KAAI;AAAA,MAC5B,GACcmV,KAAc,CAAAv9L,OAAOA,GAAI,WAAW,GACpCw9L,KAAsB,CAAAx9L,OACtBA,GAAI,YAAY,SACX,MAEDA,GAAI,UAAU,OAAO,GAEzBy9L,KAAY,CAAAp4N,OAAM;AACtB,QAAA03N,GAAc,WAAU;AAAA,MAClC,GACcW,KAAY,CAAA55N,OAAK;AACrB,QAAIy5N,GAAYz5N,EAAC,KAAK64N,GAAkB74N,EAAC,KACvCi5N,GAAc,UAAU96L,GAAan+B,EAAC,CAAC;AAAA,MAEnD,GACc65N,KAAY,CAAA75N,OAAK;AACrB,QAAI05N,GAAoB15N,EAAC,KAAK64N,GAAkB74N,EAAC,KAC/Ci5N,GAAc,UAAU96L,GAAan+B,EAAC,CAAC;AAAA,MAEnD,GACc85N,KAAU,CAAA95N,OAAK;AACnB,QAAIy5N,GAAYz5N,EAAC,KAAK64N,GAAkB74N,EAAC,KACvCi5N,GAAc,QAAQ96L,GAAan+B,EAAC,CAAC;AAAA,MAEjD,GAmBc+5N,MAlBe,MAAM;AACzB,cAAMC,KAAalyK,GAAKjxB,GAAa,QAAQqI,EAAI,CAAC,GAC5C+6L,KAAgBnyK,GAAK,CAAC;AAc5B,eAAO,EAAE,UAbQ,CAAA7nD,OAAK;AACpB,gBAAM+uB,KAAS6H,GAAa,QAAQ52B,GAAE,MAAM;AAC5C,cAAIu0B,GAAM,IAAI,EAAExF,EAAM,KAAKwF,GAAM,IAAI,EAAExF,EAAM,GAAG;AAC9C,kBAAMkrM,KAAKF,GAAW,OAChBG,KAAMF,GAAc;AAC1B,YAAIh3M,GAAKi3M,IAAIlrM,EAAM,KAAK/uB,GAAE,YAAYk6N,KAAM,QAC1Cl6N,GAAE,eAAc,GAChBk5N,GAAWnqM,IAAQA,EAAM;AAAA,UAE5B;AACD,UAAAgrM,GAAW,IAAIhrM,EAAM,GACrBirM,GAAc,IAAIh6N,GAAE,SAAS;AAAA,QACzC,EAC2B;AAAA,MAC3B;AAEQ,MAAA6lC,EAAO,GAAG,aAAa6zL,EAAS,GAChC7zL,EAAO,GAAG,aAAa8zL,EAAS,GAChC9zL,EAAO,GAAG,aAAa+zL,EAAS,GAChC/zL,EAAO,GAAG,WAAWg0L,EAAO,GAC5Bh0L,EAAO,GAAG,YAAYi0L,GAAU,QAAQ,GACxCj0L,EAAO,GAAG,SAASwzL,EAAK,GACxBxzL,EAAO,GAAG,WAAW0zL,EAAO,GAC5B1zL,EAAO,GAAG,cAAckzL,EAAa;AAAA,IAC7C,CAAO,GACDlzL,EAAO,GAAG,WAAW,MAAM;AACzB,MAAAA,EAAO,WAAW,YAAYklK,GAAS,aAAa,GACpDllK,EAAO,WAAW,YAAYklK,GAAS,YAAY;AAAA,IAC3D,CAAO,GAKM;AAAA,MACL,kBAJuB,MAAMxjD,GAAKuxE,EAAc,IAAG,GAAI10M,GAAS,EAAE,GAAG,CAAA+wE,MAC9DnrE,GAAMmrE,GAAO,CAAA9pB,OAAQA,GAAK,GAAG,GACnC,CAAAA,MAAQ,CAACA,EAAK,GAAG,CAAC;AAAA,MAGnB,oBANyB,CAAAvtC,MAAamvB,EAAY,MAAMr2B,GAAa,QAAQkH,CAAS,CAAC;AAAA,IAO/F;AAAA,EACA,GAEUq8L,KAAQ,CAAA1xE,MAAU;AACtB,QAAIx+D,IAAW,CAAA;AAqBf,WAAO;AAAA,MACL,MArBW,CAAA3rD,MAAW;AACtB,YAAIA,MAAY;AACd,gBAAM,IAAI,MAAM,qCAAqC;AAEvD,QAAA2rD,EAAS,KAAK3rD,CAAO;AAAA,MAC7B;AAAA,MAiBQ,QAhBa,CAAAA,MAAW;AACxB,QAAA2rD,IAAW0R,GAAS1R,GAAU,CAAAliF,MACrBA,MAAMu2B,CACd;AAAA,MACT;AAAA,MAaQ,SAZc,IAAI/d,MAAS;AAC3B,cAAMyZ,IAAQ,CAAA;AACd,QAAA0wJ,GAAOjiC,GAAQ,CAACx/H,GAAMxkB,MAAM;AAC1B,UAAAu1B,EAAM/Q,CAAI,IAAI1I,EAAK9b,CAAC;AAAA,QAC9B,CAAS,GACDimL,GAAOzgG,GAAU,CAAA3rD,MAAW;AAC1B,UAAAA,EAAQtE,CAAK;AAAA,QACvB,CAAS;AAAA,MACT;AAAA,IAKA;AAAA,EACA,GAEUogM,KAAW,CAAAC,MAAY;AAC3B,UAAM/tK,IAAW76B,GAAI4oM,GAAU,CAAArgM,OACtB;AAAA,MACL,MAAMA,EAAM;AAAA,MACZ,QAAQA,EAAM;AAAA,IACxB,EACO,GACKqpH,IAAU5xH,GAAI4oM,GAAU,CAAArgM,MACrBA,EAAM,OACd;AACD,WAAO;AAAA,MACL,UAAAsyB;AAAA,MACA,SAAA+2F;AAAA,IACR;AAAA,EACA,GAEU3jE,KAAO,CAACv4E,GAAI4jD,MAAS;AACzB,QAAIC,IAAQ;AACZ,UAAM/pC,IAAS,MAAM;AACnB,MAAKoC,GAAO2nC,CAAK,MACf,aAAaA,CAAK,GAClBA,IAAQ;AAAA,IAElB;AAQM,WAAO;AAAA,MACL,QAAA/pC;AAAA,MACA,UATe,IAAIV,MAAS;AAC5B,QAAAU,KACA+pC,IAAQ,WAAW,MAAM;AACvB,UAAAA,IAAQ,MACR7jD,EAAG,MAAM,MAAMoZ,CAAI;AAAA,QACpB,GAAEwqC,CAAI;AAAA,MACf;AAAA,IAIA;AAAA,EACA,GAEUvjC,KAAO,CAAApL,MACJA,EAAI,MAAM,CAAC,EAAE,KAAI,GAEpBk+M,KAAa,CAAC9zE,GAAUt+H,MAAS;AACrC,UAAM,IAAI,MAAM,wBAAwBV,GAAKg/H,CAAQ,EAAE,KAAK,IAAI,IAAI,gDAAgDh/H,GAAKU,CAAI,EAAE,KAAK,IAAI,IAAI,GAAG;AAAA,EACrJ,GACUqyM,KAAgB,CAAAC,MAAe;AACnC,UAAM,IAAI,MAAM,kCAAkChzM,GAAKgzM,CAAW,EAAE,KAAK,IAAI,CAAC;AAAA,EACpF,GACUC,KAAiB,CAAChiK,GAAO5uC,MAAU;AACvC,QAAI,CAACF,GAAQE,CAAK;AAChB,YAAM,IAAI,MAAM,SAAS4uC,IAAQ,oCAAoC5uC,IAAQ,GAAG;AAElF,IAAA6gK,GAAO7gK,GAAO,CAAA1pB,MAAK;AACjB,UAAI,CAAC+iB,GAAS/iB,CAAC;AACb,cAAM,IAAI,MAAM,eAAeA,IAAI,aAAas4D,IAAQ,2BAA2B;AAAA,IAE7F,CAAO;AAAA,EACP,GACUiiK,KAAqB,CAACC,GAAWh8M,MAAS;AAC9C,UAAM,IAAI,MAAM,oCAAoCA,IAAO,aAAa6I,GAAKmzM,CAAS,EAAE,KAAK,IAAI,IAAI,aAAa;AAAA,EACxH,GACUC,KAAa,CAAAC,MAAc;AAC/B,UAAMC,IAAStzM,GAAKqzM,CAAU;AAI9B,IAHajvM,EAAOkvM,GAAQ,CAACn2N,GAAGF,MACvBA,IAAIq2N,EAAO,SAAS,KAAKn2N,MAAMm2N,EAAOr2N,IAAI,CAAC,CACnD,EACI,KAAK,CAAA0Q,MAAK;AACb,YAAM,IAAI,MAAM,gBAAgBA,IAAI,qDAAqD2lN,EAAO,KAAK,IAAI,IAAI,IAAI;AAAA,IACzH,CAAO;AAAA,EACP,GAEUzjM,KAAO,CAAC0jM,GAAmBv0E,MACxBw0E,GAASD,GAAmBv0E,GAAU;AAAA,IAC3C,UAAU9iI;AAAA,IACV,OAAO;AAAA,EACf,CAAO,GAEGs3M,KAAW,CAACD,GAAmBv0E,GAAU3iI,MAAS;AACtD,QAAI2iI,EAAS,WAAW;AACtB,YAAM,IAAI,MAAM,+CAA+C;AAEjE,WAAAi0E,GAAe,YAAYj0E,CAAQ,GACnCo0E,GAAWp0E,CAAQ,GACZ,CAAAn+H,MAAO;AACZ,YAAM8vC,IAASjwC,GAAKG,CAAG;AAIvB,MAHgBnB,GAAOs/H,GAAU,CAAAy0E,MACxBj1M,GAAWmyC,GAAQ8iK,CAAG,CAC9B,KAECX,GAAW9zE,GAAUruF,CAAM,GAE7B4iK,EAAkBv0E,GAAUruF,CAAM;AAClC,YAAM+iK,IAAcv/H,GAAS6qD,GAAU,CAAAp9H,MAC9B,CAACvF,EAAK,SAASwE,EAAIe,CAAG,GAAGA,CAAG,CACpC;AACD,aAAI8xM,EAAY,SAAS,KACvBR,GAAmBQ,GAAar3M,EAAK,KAAK,GAErCwE;AAAA,IACf;AAAA,EACA,GACU8yM,KAAc,CAAC30E,GAAUt+H,MAAS;AACtC,UAAMsyM,IAAc7+H,GAASzzE,GAAM,CAAAkB,MAC1B,CAACpD,GAAWwgI,GAAUp9H,CAAG,CACjC;AACD,IAAIoxM,EAAY,SAAS,KACvBD,GAAcC,CAAW;AAAA,EAEjC,GACUY,KAAU,CAAA50E,MAAYnvH,GAAK8jM,IAAa30E,CAAQ,GAEhD60E,KAAWD,GAAQ;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,CAAK,GACKE,KAAWF,GAAQ;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,CAAK,GACKG,KAAUH,GAAQ;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACN,CAAK,GAEKI,KAAS,MAAM;AACnB,QAAIh6E,IAAWt8H,EAAS;AACxB,UAAMgrG,IAAQ,MAAM;AAClB,MAAAsxB,IAAWt8H,EAAS;IAC5B,GACY0nI,IAAS,CAACj3G,GAAMpgB,MAAO;AAC3B,YAAM3X,IAAS4jI,EAAS,IAAI,CAAA0E,MACnBvwG,EAAK,QAAQuwG,GAAK3wH,CAAE,CAC5B;AACD,aAAAisH,IAAWt8H,EAAS,KAAKqQ,CAAE,GACpB3X;AAAA,IACf,GACY69M,IAAU,CAACzhM,GAAO2b,MAAS;AAE/B,MADmBA,EAAK,QAAQ3b,CAAK,EAC1B,KAAK,CAAAojB,MAAQ;AAEtB,QADewvG,EAAOj3G,GAAMyH,CAAI,EACzB,KAAK,CAAAjoC,OAAK;AACf,UAAA4rC,EAAO,QAAQ,KAAK5rC,EAAC;AAAA,QACjC,CAAW;AAAA,MACX,CAAS;AAAA,IACT,GACY4rC,IAASq5K,GAAS,EAAE,MAAMD,GAAM,CAAC,MAAM,CAAC,EAAC,CAAE;AACjD,WAAO;AAAA,MACL,SAAAsB;AAAA,MACA,OAAAvrG;AAAA,MACA,QAAQnvE,EAAO;AAAA,IACvB;AAAA,EACA,GAEU26K,KAAS,MAAM;AACnB,UAAM36K,IAASq5K,GAAS,EAAE,MAAMD,GAAM,CAAC,MAAM,CAAC,EAAC,CAAE;AACjD,WAAO;AAAA,MACL,SAASr2M;AAAA,MACT,OAAOA;AAAA,MACP,QAAQi9B,EAAO;AAAA,IACvB;AAAA,EACA,GAEU46K,KAAW,MAAM;AACrB,UAAMC,IAAcF,MACdG,IAAcL;AACpB,QAAIM,IAAYF;AAehB,WAAO;AAAA,MACL,IAfS,MAAM;AACf,QAAAE,EAAU,MAAK,GACfA,IAAYD;AAAA,MACpB;AAAA,MAaQ,KAZU,MAAM;AAChB,QAAAC,EAAU,MAAK,GACfA,IAAYF;AAAA,MACpB;AAAA,MAUQ,MANW,MACJE,MAAcD;AAAA,MAMrB,SAVc,CAAC7hM,GAAO2b,MAAS;AAC/B,QAAAmmL,EAAU,QAAQ9hM,GAAO2b,CAAI;AAAA,MACrC;AAAA,MASQ,QAAQkmL,EAAY;AAAA,IAC5B;AAAA,EACA,GAEUpsG,KAAQ,CAACssG,GAAUpmL,GAAM/H,MAAa;AAC1C,QAAIy9G,IAAS;AACb,UAAMtqG,IAASq5K,GAAS;AAAA,MACtB,OAAOD,GAAM,EAAE;AAAA,MACf,MAAMA,GAAM,EAAE;AAAA,IACtB,CAAO,GACKvsD,IAAW+tD,MACX5tD,IAAO,MAAM;AACjB,MAAAiuD,GAAK,KAAI,GACLpuD,EAAS,WACXA,EAAS,IAAG,GACZ7sH,EAAO,QAAQ;IAEzB,GACYk7K,IAAgBv8I,GAAKquF,GAAM,GAAG,GAC9B73J,IAAK,CAAA+hB,OAAU;AACnB,MAAA+jM,GAAK,MAAM/jM,EAAM,GACjB21I,EAAS,GAAE,GACX7sH,EAAO,QAAQ;IACvB,GACYm7K,KAAY,CAAAliM,OAAS;AACzB,MAAAiiM,EAAc,OAAM,GACpBruD,EAAS,QAAQ5zI,IAAO2b,CAAI;AAAA,IACpC;AACM,IAAAi4H,EAAS,OAAO,KAAK,KAAK,CAAA5zI,OAAS;AACjC,MAAA2b,EAAK,OAAOomL,GAAU/hM,GAAM,IAAI;AAAA,IACxC,CAAO;AACD,UAAM/yB,KAAK,MAAM;AACf,MAAAokJ,IAAS;AAAA,IACjB,GACY8wE,KAAM,MAAM;AAChB,MAAA9wE,IAAS;AAAA,IACjB,GACY2B,KAAW,MAAM3B,GACjB+wE,KAAc,CAAAx3N,OACX,IAAI2b,OAAS;AAClB,MAAI8qI,KACFzmJ,GAAE,MAAM,MAAM2b,EAAI;AAAA,IAE9B,GAEYy7M,KAAOrmL,EAAK,KAAK4lL,GAAQ;AAAA,MAC7B,WAAWxtD;AAAA,MACX,MAAMquD,GAAYruD,CAAI;AAAA,MACtB,MAAMquD,GAAYF,EAAS;AAAA,MAC3B,WAAWE,GAAYH,EAAc,QAAQ;AAAA,IACrD,CAAO,GAAGruL,CAAQ,GACNsrF,KAAU,MAAM;AACpB,MAAA8iG,GAAK,QAAO;AAAA,IACpB;AACM,WAAO;AAAA,MACL,SAASA,GAAK;AAAA,MACd,IAAA9lN;AAAA,MACA,IAAAjP;AAAA,MACA,KAAAk1N;AAAA,MACA,UAAAnvE;AAAA,MACA,SAAA9zB;AAAA,MACA,QAAQn4E,EAAO;AAAA,IACvB;AAAA,EACA,GAEUllB,KAAM,CAAAwgM,MAAa;AACvB,UAAMC,IAAgBD,EAAU,QAAQ,OAAO,GAAG;AAIlD,WAAO,EAAE,SAHO,CAAAhvM,MACPivM,IAAgB,MAAMjvM,EAEf;AAAA,EACtB,GAGU8nC,KADWt5B,GAAI,gBAAgB,EACV,SAErB0gM,KAAU,CAAA9/M,MAAW;AACzB,UAAMmxB,IAAW;AAAA,MACf,YAAYunB,GAAU,SAAS;AAAA,MAC/B,GAAG14C;AAAA,IACX,GACY6Z,IAAMM,GAAa,QAAQ,KAAK;AACtC,WAAA+E,GAAMrF,GAAK,QAAQ,cAAc,GACjCsF,GAAOtF,GAAK;AAAA,MACV,UAAU;AAAA,MACV,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IAChB,CAAO,GACDgd,GAAIhd,GAAK6+B,GAAU,SAAS,CAAC,GAC7B7hB,GAAIhd,GAAKsX,EAAS,UAAU,GAKrB;AAAA,MACL,SALcxpB,GAASkS,CAAG;AAAA,MAM1B,SALc,MAAM;AACpB,QAAA8F,GAAS9F,CAAG;AAAA,MACpB;AAAA,IAIA;AAAA,EACA;AAqCI,MAAIkmM,KAAYnB,GAAS;AAAA,IACvB,SApCc,CAACn1E,GAAK3wH,MACbqJ,EAAcrJ,EAAG,OAAO2wH,EAAI,MAAM3wH,EAAG,MAAM2wH,EAAI,GAAG;AAAA,IAoCzD,SAlCc,CAAAlsH,MACP9U,EAAS,KAAK0Z,EAAc5E,EAAM,GAAGA,EAAM,CAAC,CAAC;AAAA,IAkCpD,MA7BW,CAACyiM,GAAS7uL,MAAa;AAClC,YAAM8uL,IAAUH,GAAQ3uL,CAAQ,GAC1B+uL,IAAQ12K,GAAKy2K,EAAQ,QAAS,GAAE,aAAaD,EAAQ,SAAS,GAC9DG,IAAM32K,GAAKy2K,EAAQ,QAAS,GAAE,WAAWD,EAAQ,IAAI,GACrDI,IAAQ52K,GAAKy2K,EAAQ,QAAS,GAAE,aAAaD,EAAQ,IAAI,GACzDK,IAAO72K,GAAKy2K,EAAQ,QAAS,GAAE,YAAYD,EAAQ,SAAS,GAC5DvjG,IAAU,MAAM;AACpB,QAAAwjG,EAAQ,QAAO,GACfE,EAAI,OAAM,GACVC,EAAM,OAAM,GACZC,EAAK,OAAM,GACXH,EAAM,OAAM;AAAA,MACpB,GACYlvM,IAAQ,CAAAwK,OAAU;AACtB,QAAAwE,GAASxE,IAAQykM,EAAQ,QAAS,CAAA;AAAA,MAC1C,GACYrkM,KAAO,MAAM;AACjB,QAAA+D,GAASsgM,EAAQ,QAAO,CAAE;AAAA,MAClC;AACM,aAAOpB,GAAS;AAAA,QACd,SAASoB,EAAQ;AAAA,QACjB,OAAAjvM;AAAA,QACA,MAAA4K;AAAA,QACA,SAAA6gG;AAAA,MACR,CAAO;AAAA,IACP;AAAA,IAKM,QAjCa,CAAC6iG,GAAUnvM,MAAS;AACjC,MAAAmvM,EAAS,OAAOnvM,EAAK,MAAMA,EAAK,GAAG;AAAA,IACzC;AAAA,EAgCA,CAAK;AAED,QAAMu1E,KAAY,CAAC45H,GAAUnuL,IAAW,CAAA,MAAO;AAC7C,QAAInhC;AACJ,UAAMkpC,KAAQlpC,IAAKmhC,EAAS,UAAU,QAAQnhC,MAAO,SAASA,IAAK+vN;AACnE,WAAO/sG,GAAMssG,GAAUpmL,GAAM/H,CAAQ;AAAA,EAC3C,GAGUkB,KADSjT,GAAI,eAAe,EACX,SAEjBkhM,KAAW,MAAM;AACrB,UAAMh8K,IAASq5K,GAAS;AAAA,MACtB,MAAMD,GAAM;AAAA,QACV;AAAA,QACA;AAAA,MACV,CAAS;AAAA,IACT,CAAO;AAID,WAAO;AAAA,MACL,QAJa,CAACv3N,GAAG4S,MAAM;AACvB,QAAAurC,EAAO,QAAQ,KAAKn+C,GAAG4S,CAAC;AAAA,MAChC;AAAA,MAGQ,QAAQurC,EAAO;AAAA,IACvB;AAAA,EACA,GAEUi8K,KAAc,MAAM;AACxB,UAAMj8K,IAASq5K,GAAS;AAAA,MACtB,MAAMD,GAAM;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACV,CAAS;AAAA,IACT,CAAO;AACD,QAAIprM,IAAS7J,EAAS;AACtB,UAAM8jK,IAAW+zC;AACjB,WAAA/zC,EAAS,OAAO,KAAK,KAAK,CAAAhvJ,MAAS;AACjC,MAAAjL,EAAO,KAAK,CAAA/uB,MAAK;AACf,QAAA+gD,EAAO,QAAQ,KAAK/mB,EAAM,QAAQA,EAAM,QAAQh6B,CAAC;AAAA,MAC3D,CAAS;AAAA,IACT,CAAO,GAOM;AAAA,MACL,QAPa,CAAAA,MAAK;AAClB,QAAA+uB,IAAS7J,EAAS,KAAKllB,CAAC;AAAA,MAChC;AAAA,MAMQ,KALU,MACH+uB;AAAA,MAKP,QAAQi6J,EAAS;AAAA,MACjB,QAAQjoI,EAAO;AAAA,IACvB;AAAA,EACA,GAEUy4I,KAAM,CAAC7G,GAAQ/vL,GAAG4S,GAAG7U,GAAGoH,MAAM;AAClC,UAAMk1N,IAAMrmM,GAAa,QAAQ,KAAK;AACtC,WAAAgF,GAAOqhM,GAAK;AAAA,MACV,UAAU;AAAA,MACV,MAAMr6N,IAAIjC,IAAI,IAAI;AAAA,MAClB,KAAK6U,IAAI;AAAA,MACT,QAAQzN,IAAI;AAAA,MACZ,OAAOpH,IAAI;AAAA,IACnB,CAAO,GACDg0B,GAASsoM,GAAK;AAAA,MACZ,eAAetqC;AAAA,MACf,MAAQ;AAAA,IAChB,CAAO,GACMsqC;AAAA,EACb,GACUl3G,KAAM,CAAC,GAAGnjH,GAAG4S,GAAG7U,GAAGoH,MAAM;AAC7B,UAAMk1N,IAAMrmM,GAAa,QAAQ,KAAK;AACtC,WAAAgF,GAAOqhM,GAAK;AAAA,MACV,UAAU;AAAA,MACV,MAAMr6N,IAAI;AAAA,MACV,KAAK4S,IAAIzN,IAAI,IAAI;AAAA,MACjB,QAAQA,IAAI;AAAA,MACZ,OAAOpH,IAAI;AAAA,IACnB,CAAO,GACDg0B,GAASsoM,GAAK;AAAA,MACZ,YAAY;AAAA,MACZ,MAAQ;AAAA,IAChB,CAAO,GACMA;AAAA,EACb,GAEUC,KAAYpuL,GAAQ,aAAa,GACjCquL,KAAeruL,GAAQ,cAAc,GACrCsuL,KAAetuL,GAAQ,cAAc,GACrCuuL,KAAgB,GAChBC,KAAgB,CAACxlC,GAAWngH,MAAgBj5C,GAAOo5J,EAAU,KAAK,CAAC/xE,GAAKthH,MAAMkzE,EAAYouC,EAAI,OAAO,IAAI,CAACthH,CAAC,IAAI,CAAA,CAAE,GACjH84N,KAAmB,CAACzlC,GAAWngH,MAAgB;AACnD,UAAM6lJ,IAAgB,CAAA;AACtB,WAAA/rC,GAAQqG,EAAU,KAAK,SAAS,CAAAv5K,MAAS;AAEvC,MADkB66K,GAAU,YAAYtB,GAAWv5K,CAAK,EAAE,IAAI,CAAAi7K,MAAOA,EAAI,OAAO,EAClE,OAAO7hH,CAAW,KAC9B6lJ,EAAc,KAAKj/M,CAAK;AAAA,IAElC,CAAO,GACMo9E,GAAS6hI,GAAe,CAAAnlC,MAAY;AACzC,YAAMmG,IAAcpF,GAAU,YAAYtB,GAAW,CAAAzsH,MAAQA,EAAK,WAAWgtH,CAAQ;AACrF,aAAOnxK,GAAOs3K,GAAa,CAAAnzH,MAAQsM,EAAYtM,EAAK,OAAO,CAAC;AAAA,IACpE,CAAO;AAAA,EACP,GACU6tD,KAAU,CAAAukG,MAAQ;AACtB,UAAMj8E,IAAWnhH,GAAYo9L,EAAK,OAAM,GAAI,MAAMP,EAAS;AAC3D,IAAAxyC,GAAOlpC,GAAUplH,EAAQ;AAAA,EAC/B,GACUshM,KAAU,CAACD,GAAM1tF,GAAW1sF,MAAW;AAC3C,UAAMkxB,IAASkpJ,EAAK;AACpB,IAAA/yC,GAAO36C,GAAW,CAAA4tF,MAAY;AAC5B,MAAAA,EAAS,KAAK,CAAAC,MAAM;AAClB,cAAMX,IAAM55K,EAAOkxB,GAAQqpJ,CAAE;AAC7B,QAAAtqL,GAAI2pL,GAAKC,EAAS,GAClBzgM,GAASghM,EAAK,OAAQ,GAAER,CAAG;AAAA,MACrC,CAAS;AAAA,IACT,CAAO;AAAA,EACP,GACUY,KAAa,CAACJ,GAAMK,GAAcv2J,GAAUw2J,MAAgB;AAChE,IAAAL,GAAQD,GAAMK,GAAc,CAACvpJ,GAAQqpJ,MAAO;AAC1C,YAAMI,IAASxkC,GAAIokC,EAAG,KAAKA,EAAG,IAAIrpJ,EAAO,MAAMhN,EAAS,MAAMgN,EAAO,KAAK8oJ,IAAeU,CAAW;AACpG,aAAAzqL,GAAI0qL,GAAQZ,EAAY,GACjBY;AAAA,IACf,CAAO;AAAA,EACP,GACUC,KAAa,CAACR,GAAMS,GAAc32J,GAAU42J,MAAe;AAC/D,IAAAT,GAAQD,GAAMS,GAAc,CAAC3pJ,GAAQqpJ,MAAO;AAC1C,YAAMQ,IAASr4G,GAAI63G,EAAG,KAAKr2J,EAAS,OAAOgN,EAAO,MAAMqpJ,EAAG,IAAIrpJ,EAAO,KAAK4pJ,GAAYd,EAAa;AACpG,aAAA/pL,GAAI8qL,GAAQjB,EAAY,GACjBiB;AAAA,IACf,CAAO;AAAA,EACP,GACUC,KAAc,CAACC,GAAUb,GAAMrpI,GAAOwB,GAAM0jG,MAAS;AACzD,UAAM/xH,IAAWvoC,GAASo1D,CAAK,GACzBzc,IAAc8lJ,EAAK,aACnBS,IAAetoI,EAAK,SAAS,IAAI51D,GAAO,UAAU41D,GAAMxB,CAAK,IAAI,IACjEmqI,IAAmBL,EAAa,SAAS,IAAIZ,GAAcgB,GAAU3mJ,CAAW,IAAI,IACpF6mJ,KAAwB7iI,GAASuiI,GAAc,CAACO,IAAMh6N,OAAMwhB,GAAOs4M,GAAkB,CAAAG,OAAYj6N,OAAMi6N,EAAQ,CAAC;AACtH,IAAAT,GAAWR,GAAMe,IAAuBj3J,GAAU8uH,GAAWjiG,CAAK,CAAC;AACnE,UAAM0pI,KAAexkC,EAAK,SAAS,IAAIv5J,GAAM,UAAUu5J,GAAMllG,CAAK,IAAI,IAChEuqI,KAAmBb,GAAa,SAAS,IAAIP,GAAiBe,GAAU3mJ,CAAW,IAAI,IACvFinJ,KAAwBjjI,GAASmiI,IAAc,CAACW,IAAMh6N,OAAMwhB,GAAO04M,IAAkB,CAAAD,OAAYj6N,OAAMi6N,EAAQ,CAAC;AACtH,IAAAb,GAAWJ,GAAMmB,IAAuBr3J,GAAU0yH,GAAW7lG,CAAK,CAAC;AAAA,EACzE,GACUyqI,KAAU,CAACpB,GAAMrpI,MAAU;AAE/B,QADA8kC,GAAQukG,CAAI,GACRA,EAAK,YAAYrpI,CAAK,GAAG;AAC3B,YAAM0jG,IAAYsB,GAAU,UAAUhlG,CAAK,GACrC8gG,IAASt/F,GAAKkiG,CAAS,GACvBwB,IAAO7G,GAAQqF,CAAS;AAC9B,MAAAumC,GAAYvmC,GAAW2lC,GAAMrpI,GAAO8gG,GAAQoE,CAAI;AAAA,IACjD;AAAA,EACP,GACU7iB,KAAO,CAACgnD,GAAM74N,MAAM;AACxB,UAAMk6N,IAAOz+L,GAAYo9L,EAAK,OAAM,GAAI,MAAMP,EAAS;AACvD,IAAAxyC,GAAOo0C,GAAMl6N,CAAC;AAAA,EACpB,GACU+/C,KAAO,CAAA84K,MAAQ;AACnB,IAAAhnD,GAAKgnD,GAAM,CAAAR,MAAO;AAChB,MAAAz/L,GAAMy/L,GAAK,WAAW,MAAM;AAAA,IACpC,CAAO;AAAA,EACP,GACUv4K,KAAO,CAAA+4K,MAAQ;AACnB,IAAAhnD,GAAKgnD,GAAM,CAAAR,MAAO;AAChB,MAAAz/L,GAAMy/L,GAAK,WAAW,OAAO;AAAA,IACrC,CAAO;AAAA,EACP,GACU8B,KAAW,CAAAjrM,MACRqC,GAAIrC,GAASqpM,EAAY,GAE5B6B,KAAW,CAAAlrM,MACRqC,GAAIrC,GAASspM,EAAY,GAG5B6B,KAAoBnwL,GAAQ,sBAAsB,GAClDowL,KAAa,CAAAzB,MAAQ;AACzB,UAAM1B,IAAWiB,MACXrqB,IAAWxwG,GAAU45H,GAAU,CAAE,CAAA;AACvC,QAAIoD,IAAaj6M,EAAS;AAC1B,UAAMk6M,IAAa,CAACtrM,IAASnV,OACpBuG,EAAS,KAAKyC,GAAMmM,IAASnV,EAAI,CAAC;AAE3C,IAAAo9M,EAAS,OAAO,KAAK,KAAK,CAAA/hM,OAAS;AACjC,MAAAolM,EAAWplM,GAAM,QAAQ,UAAU,EAAE,KAAK,CAAAqlM,OAAY;AACpD,cAAMzmC,KAAajE,GAAY36J,GAAM,QAAQ,KAAK;AAClD,QAAAwD,GAAMxD,GAAM,QAAQ,OAAO4+J,KAAa5+J,GAAM,SAAS,IAAI;AAAA,MACrE,CAAS,GACDolM,EAAWplM,GAAM,QAAQ,aAAa,EAAE,KAAK,CAAAslM,OAAY;AACvD,cAAMC,KAAa5qC,GAAY36J,GAAM,QAAQ,MAAM;AACnD,QAAAwD,GAAMxD,GAAM,QAAQ,QAAQulM,KAAavlM,GAAM,SAAS,IAAI;AAAA,MACtE,CAAS;AAAA,IACT,CAAO;AACD,UAAMwlM,IAAW,CAACzwM,IAAQk6B,OAAQ;AAChC,YAAMw2K,KAAO9qC,GAAY5lK,IAAQk6B,EAAG,GAC9By2K,KAAOnrC,GAAaxlK,IAAQ,kBAAkBk6B,IAAK,CAAC;AAC1D,aAAOw2K,KAAOC;AAAA,IACtB;AACM,IAAA/sB,EAAS,OAAO,KAAK,KAAK,MAAM;AAC9B,MAAAopB,EAAS,IAAG,EAAG,KAAK,CAAAhtM,OAAU;AAC5B,QAAAowM,EAAW,KAAK,CAAA/qI,OAAS;AACvB,UAAAgrI,EAAWrwM,IAAQ,UAAU,EAAE,KAAK,CAAAg3F,OAAO;AACzC,kBAAM16B,KAAQm0I,EAASzwM,IAAQ,KAAK;AACpC,YAAAkH,EAASlH,IAAQ,kBAAkB,GACnCgyB,GAAO,QAAQ,aAAaqzC,IAAO/I,IAAO,SAAS06B,IAAK,EAAE,CAAC;AAAA,UACzE,CAAa,GACDq5G,EAAWrwM,IAAQ,aAAa,EAAE,KAAK,CAAA4jK,OAAU;AAC/C,kBAAMtnG,KAAQm0I,EAASzwM,IAAQ,MAAM;AACrC,YAAAkH,EAASlH,IAAQ,mBAAmB,GACpCgyB,GAAO,QAAQ,YAAYqzC,IAAO/I,IAAO,SAASsnG,IAAQ,EAAE,CAAC;AAAA,UAC3E,CAAa,GACDksC,GAAQpB,GAAMrpI,EAAK;AAAA,QAC/B,CAAW;AAAA,MACX,CAAS;AAAA,IACT,CAAO;AACD,UAAM91D,IAAU,CAACvP,IAAQk6B,OAAQ;AAC/B,MAAAlI,GAAO,QAAQ,eACfg7K,EAAS,OAAOhtM,EAAM,GACtB4M,GAAM5M,IAAQ,kBAAkBk6B,IAAK0rI,GAAY5lK,IAAQk6B,EAAG,CAAC,GAC7D3V,GAAIvkB,IAAQkwM,EAAiB,GAC7BzhM,GAAMzO,IAAQ,WAAW,KAAK,GAC9B4jL,EAAS,GAAG8qB,EAAK,OAAQ,CAAA;AAAA,IACjC,GACYkC,IAAY15K,GAAKw3K,EAAK,OAAQ,GAAE,aAAa,CAAAzjM,OAAS;AAC1D,MAAI+kM,GAAS/kM,GAAM,MAAM,KACvBsE,EAAQtE,GAAM,QAAQ,KAAK,GAEzBglM,GAAShlM,GAAM,MAAM,KACvBsE,EAAQtE,GAAM,QAAQ,MAAM;AAAA,IAEtC,CAAO,GACK5B,IAAS,CAAAr4B,OACNijB,GAAKjjB,IAAG09N,EAAK,KAAM,CAAA,GAEtBmC,KAA2B,CAAA7wM,OAAUszE,GAAUtzE,IAAQ,SAASqJ,CAAM,EAAE,OAAOyvG,EAAY,GAC3Fg4F,KAAY55K,GAAKw3K,EAAK,KAAM,GAAE,aAAa,CAAAzjM,OAAS;AACxD,MAAA4lM,GAAyB5lM,GAAM,MAAM,EAAE,KAAK,MAAM;AAChD,QAAII,GAAOJ,GAAM,MAAM,KACrBk/F,GAAQukG,CAAI;AAAA,MAEf,GAAE,CAAArpI,OAAS;AACV,QAAIu+G,EAAS,eACXwsB,IAAaj6M,EAAS,KAAKkvE,EAAK,GAChCyqI,GAAQpB,GAAMrpI,EAAK;AAAA,MAE/B,CAAS;AAAA,IACT,CAAO,GACK0rI,KAAY,MAAM;AACtB,MAAAH,EAAU,OAAM,GAChBE,GAAU,OAAM,GAChBltB,EAAS,QAAO,GAChBz5E,GAAQukG,CAAI;AAAA,IACpB,GACYsC,KAAY,CAAAC,OAAO;AACvB,MAAAnB,GAAQpB,GAAMuC,EAAG;AAAA,IACzB,GACYj/K,KAASq5K,GAAS;AAAA,MACtB,cAAcD,GAAM;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MACV,CAAS;AAAA,MACD,aAAaA,GAAM;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,MACV,CAAS;AAAA,MACD,aAAaA,GAAM,EAAE;AAAA,IAC7B,CAAO;AACD,WAAO;AAAA,MACL,SAAS2F;AAAA,MACT,SAASC;AAAA,MACT,IAAIptB,EAAS;AAAA,MACb,KAAKA,EAAS;AAAA,MACd,UAAUpuL,GAAMogC,IAAM84K,CAAI;AAAA,MAC1B,UAAUl5M,GAAMmgC,IAAM+4K,CAAI;AAAA,MAC1B,QAAQ18K,GAAO;AAAA,IACvB;AAAA,EACA,GA6CUk/K,KAAc,EAAE,QA3CP,CAACxC,GAAM9qB,GAAUutB,MAAe;AAC7C,UAAMC,IAAangM,IACbogM,IAAargM,IACbsgM,IAAUnB,GAAWzB,CAAI,GACzB18K,IAASq5K,GAAS;AAAA,MACtB,cAAcD,GAAM;AAAA,QAClB;AAAA,QACA;AAAA,MACV,CAAS;AAAA,MACD,aAAaA,GAAM;AAAA,QACjB;AAAA,QACA;AAAA,MACV,CAAS;AAAA,MACD,WAAWA,GAAM,EAAE;AAAA,IAC3B,CAAO;AACD,WAAAkG,EAAQ,OAAO,aAAa,KAAK,CAAArmM,MAAS;AACxC,YAAMo6D,IAAQp6D,EAAM;AACpB,MAAA+mB,EAAO,QAAQ,aAAaqzC,GAAO,KAAK;AACxC,YAAM/I,KAAQ80I,EAAW,MAAMnmM,EAAM,OAAOo6D,CAAK;AACjD,MAAA4nH,GAAa5nH,GAAO/I,IAAOrxD,EAAM,KAAKmmM,CAAU,GAChDp/K,EAAO,QAAQ,YAAYqzC,GAAO,KAAK;AAAA,IAC/C,CAAO,GACDisI,EAAQ,OAAO,YAAY,KAAK,CAAAC,MAAU;AACxC,MAAAv/K,EAAO,QAAQ;IACvB,CAAO,GACDs/K,EAAQ,OAAO,YAAY,KAAK,CAAArmM,MAAS;AACvC,YAAMo6D,IAAQp6D,EAAM;AACpB,MAAA+mB,EAAO,QAAQ,aAAaqzC,GAAO,KAAK;AACxC,YAAM/I,KAAQ+0I,EAAW,MAAMpmM,EAAM,OAAOo6D,CAAK,GAC3C0qG,KAAYohC,EAAW9rI,CAAK;AAClC,MAAAunH,GAAYvnH,GAAO/I,IAAOrxD,EAAM,QAAQ24K,GAAU7T,EAAS,GAC3D/9I,EAAO,QAAQ,YAAYqzC,GAAO,KAAK;AAAA,IAC/C,CAAO,GACM;AAAA,MACL,IAAIisI,EAAQ;AAAA,MACZ,KAAKA,EAAQ;AAAA,MACb,aAAaA,EAAQ;AAAA,MACrB,UAAUA,EAAQ;AAAA,MAClB,UAAUA,EAAQ;AAAA,MAClB,SAASA,EAAQ;AAAA,MACjB,QAAQt/K,EAAO;AAAA,IACvB;AAAA,EACA,KA6BUw/K,KAAa;AAAA,IACjB,MA3BW,CAACzsM,GAAS6jD,MAAgB;AACrC,YAAM1/C,IAASuY,GAAW1c,CAAO,IAAIiE,GAAgBjE,CAAO,IAAIA;AAChE,aAAO;AAAA,QACL,QAAQ1P,GAAS6T,CAAM;AAAA,QACvB,MAAM7T,GAAS0P,CAAO;AAAA,QACtB,QAAQ1P,GAASwa,EAAc,GAAG,CAAC,CAAC;AAAA,QACpC,aAAA+4C;AAAA,MACR;AAAA,IACA;AAAA,IAoBM,UAnBe,CAACt8C,GAAUmlM,GAAQ7oJ,MAAgB;AAClD,YAAMpD,IAAS,MAAMv1C,GAASwhM,CAAM;AACpC,aAAO;AAAA,QACL,QAAQp8M,GAASo8M,CAAM;AAAA,QACvB,MAAMp8M,GAASiX,CAAQ;AAAA,QACvB,QAAAk5C;AAAA,QACA,aAAAoD;AAAA,MACR;AAAA,IACA;AAAA,IAYM,MAXW,CAACt8C,GAAUmlM,GAAQ7oJ,OACvB;AAAA,MACL,QAAQvzD,GAASo8M,CAAM;AAAA,MACvB,MAAMp8M,GAASiX,CAAQ;AAAA,MACvB,QAAQjX,GAASwa,EAAc,GAAG,CAAC,CAAC;AAAA,MACpC,aAAA+4C;AAAA,IACR;AAAA,EAMA,GAEU8oJ,KAAkB,MAAM;AAC5B,UAAM3iM,IAAYlH,GAAa,QAAQ,KAAK;AAC5C,WAAAgF,GAAOkC,GAAW;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,IAChB,CAAO,GACDrB,GAASm3J,KAAU91J,CAAS,GACrBA;AAAA,EACb,GACU4F,KAAM,CAACmC,GAAQ8xC,MACZ9xC,EAAO,SAAS06L,GAAW,KAAK3pM,GAAa,QAAQiP,EAAO,QAAO,CAAE,GAAG46L,GAAiB,GAAE9oJ,CAAW,IAAI4oJ,GAAW,KAAK3pM,GAAa,QAAQiP,EAAO,OAAM,CAAE,GAAG8xC,CAAW,GAE/Kh0B,KAAS,CAAC9d,GAAQ43L,MAAS;AAC/B,IAAI53L,EAAO,UACTzJ,GAASqhM,EAAK,OAAM,CAAE;AAAA,EAE9B,GAEU71L,KAAU,CAAAnR,MAAQhT,GAAcgT,CAAI,KAAKA,EAAK,aAAa,SAC3DiqM,KAAmB,QACnB/oJ,KAAc,CAAA5yC,MAAOpd,GAAMod,GAAK,iBAAiB,MAAM,SACvD47L,KAAa,CAAAvsI,MAAS;AAC1B,UAAM0jG,IAAYsB,GAAU,UAAUhlG,CAAK;AAC3C,IAAKglG,GAAU,WAAWtB,CAAS,KACjCpN,GAAOoK,GAAQ1gG,CAAK,GAAG,CAAA/oB,MAAQ;AAC7B,YAAMu1J,IAAgBz3M,GAAMkiD,GAAM,OAAO;AACzC,MAAA7tC,GAAM6tC,GAAM,SAASu1J,CAAa,GAClC3qM,EAASo1C,GAAM,OAAO;AAAA,IAChC,CAAS;AAAA,EAET,GACUw1J,KAAqB,CAAAh7L,MAAU;AACnC,UAAM8tC,IAAen2D,MACfsjN,IAActjN,MACdujN,IAAavjN;AACnB,QAAIw5D,GACAgqJ;AACJ,UAAMd,IAAa,CAAA9rI,OAAS50D,GAAMqG,GAAQuuD,EAAK,GACzC6sI,IAAwB,MAAMl9B,GAA8Bl+J,CAAM,IAAIsoK,GAAa,IAAKZ,MACxF2zB,IAAgB,CAAA9sI,OAASs6G,GAAYt6G,EAAK,EAAE,SAC5C+sI,KAAoB,CAAC/sI,IAAO7f,IAAQx0C,OAAU;AAClD,YAAMqhM,KAAoBpzM,GAASumD,IAAQ,GAAG;AAI9C,UAHIysJ,MAAc,MAChBlX,GAAqB11H,EAAK,GAExBr0D,OAAUi3C,KAAUgqJ,MAAc,IAAI;AACxC,QAAAxjM,GAAM42D,IAAO,SAAS4sI,CAAS;AAC/B,cAAMruB,KAAWsuB,KACXniC,KAAYohC,EAAW9rI,EAAK,GAC5BolG,KAAMuK,GAA8Bl+J,CAAM,KAAKu7L,KAAoBF,EAAc9sI,EAAK,IAAI,IAAI;AACpG,QAAAunH,GAAYvnH,IAAOr0D,KAAQi3C,GAAQwiH,IAAKmZ,IAAU7T,EAAS;AAAA,MACrE,WAAmBkG,GAAeg8B,CAAS,GAAG;AACpC,cAAMK,KAAW,WAAWL,EAAU,QAAQ,KAAK,EAAE,CAAC,GAChDM,KAAiBvhM,KAAQshM,KAAWrqJ;AAC1C,QAAAx5C,GAAM42D,IAAO,SAASktI,KAAiB,GAAG;AAAA,MAC3C;AACD,MAAIr8B,GAAQ+7B,CAAS,KACnBL,GAAWvsI,EAAK;AAAA,IAE1B,GACY8kC,KAAU,MAAM;AACpB,MAAA4nG,EAAY,GAAG,CAAAS,OAAM;AACnB,QAAAA,GAAG,QAAO;AAAA,MACpB,CAAS,GACDR,EAAW,GAAG,CAAApgO,OAAK;AACjB,QAAAgjD,GAAO9d,GAAQllC,EAAC;AAAA,MAC1B,CAAS;AAAA,IACT;AACM,WAAAklC,EAAO,GAAG,QAAQ,MAAM;AACtB,YAAM27L,KAAU99L,GAAImC,GAAQ8xC,EAAW;AAEvC,UADAopJ,EAAW,IAAIS,EAAO,GAClB79B,GAAuB99J,CAAM,KAAKs+J,GAAmBt+J,CAAM,GAAG;AAChE,cAAM8sK,KAAWsuB,KACXM,KAAKtB,GAAY,OAAOuB,IAAS7uB,IAAUutB,CAAU;AAC3D,QAAAqB,GAAG,GAAE,GACLA,GAAG,OAAO,UAAU,KAAK,CAAAjB,OAAU;AACjC,UAAA3sJ,EAAa,IAAI9tC,EAAO,UAAU,OAAQ,CAAA;AAAA,QACtD,CAAW,GACD07L,GAAG,OAAO,aAAa,KAAK,CAAAvnM,OAAS;AACnC,gBAAMynM,KAAWznM,GAAM,MAAM;AAC7B,UAAAs6C,GAAsBzuC,GAAQ47L,IAAU58B,GAAc48B,EAAQ,GAAG38B,GAAe28B,EAAQ,GAAGf,KAAmB1mM,GAAM,IAAI;AAAA,QACpI,CAAW,GACDunM,GAAG,OAAO,YAAY,KAAK,CAAAvnM,OAAS;AAClC,gBAAMo6D,KAAQp6D,GAAM,OACdynM,KAAWrtI,GAAM;AACvB,UAAAswG,GAAgBtwG,EAAK,GACrBzgB,EAAa,GAAG,CAAA13D,OAAO;AACrB,YAAA4pB,EAAO,UAAU,OAAO5pB,EAAG,GAC3B4pB,EAAO,MAAK;AAAA,UAC1B,CAAa,GACD2uC,GAAkB3uC,GAAQ47L,IAAU58B,GAAc48B,EAAQ,GAAG38B,GAAe28B,EAAQ,GAAGf,KAAmB1mM,GAAM,IAAI,GACpH6L,EAAO,YAAY;QAC/B,CAAW,GACDi7L,EAAY,IAAIS,EAAE;AAAA,MACnB;AAAA,IACT,CAAO,GACD17L,EAAO,GAAG,qBAAqB,CAAA9lC,OAAK;AAClC,YAAM24E,KAAY34E,GAAE;AACpB,UAAI6nC,GAAQ8wC,EAAS,GAAG;AACtB,cAAM0b,KAAQx9D,GAAa,QAAQ8hD,EAAS;AAC5C,QAAAgyG,GAAO7kJ,EAAO,IAAI,OAAO,sBAAsB,GAAG,CAAApkB,OAAS;AACzD,UAAAokB,EAAO,IAAI,SAASpkB,IAAO,SAASqiL,GAAgCj+J,CAAM,IAAI,UAAU;AAAA,QACpG,CAAW,GACG,CAAC8jL,GAAcv1H,EAAK,KAAKmvG,GAAoB19J,CAAM,IACrDkkL,GAAmB31H,EAAK,IACf,CAACs1H,GAAgBt1H,EAAK,KAAK8vG,GAAyBr+J,CAAM,KACnEikL,GAAqB11H,EAAK,GAExBw1H,GAAax1H,EAAK,KAAKxmE,GAAW7tB,GAAE,QAAQ2gO,EAAgB,KAC9D5W,GAAqB11H,EAAK,GAE5Bpd,IAASj3E,GAAE,OACXihO,IAAY39B,GAAwBx9J,CAAM,IAAI,KAAKk/J,GAAYl/J,GAAQ6yC,EAAS,EAAE,MAAM,EAAE;AAAA,MAC3F;AAAA,IACT,CAAO,GACD7yC,EAAO,GAAG,iBAAiB,CAAA9lC,OAAK;AAC9B,YAAM24E,KAAY34E,GAAE;AACpB,UAAI6nC,GAAQ8wC,EAAS,GAAG;AACtB,cAAM0b,KAAQx9D,GAAa,QAAQ8hD,EAAS,GACtCnE,KAASx0E,GAAE;AACjB,QAAI6tB,GAAW2mD,IAAQ,SAAS,KAC9B4sJ,GAAkB/sI,IAAO7f,IAAQx0E,GAAE,KAAK,GAE1C2kM,GAAgBtwG,EAAK,GACrByvH,GAAkBh+K,GAAQuuD,GAAM,KAAK6vH,EAAa;AAAA,MACnD;AAAA,IACT,CAAO,GACDp+K,EAAO,GAAG,cAAc,MAAM;AAC5B,MAAAi7L,EAAY,GAAG,CAAAnmB,OAAU;AACvB,QAAI90K,EAAO,KAAK,eACd80K,GAAO,SAAQ,IAEfA,GAAO,SAAQ;AAAA,MAE3B,CAAS;AAAA,IACT,CAAO,GACD90K,EAAO,GAAG,qBAAqB,CAAA9lC,OAAK;AAClC,MAAA+gO,EAAY,GAAG,CAAAnmB,OAAU;AACvB,QAAI56M,GAAE,SAAS,eACb46M,GAAO,SAAQ,GACfA,GAAO,IAAG,MAEVA,GAAO,GAAE,GACTA,GAAO,SAAQ;AAAA,MAE3B,CAAS;AAAA,IACT,CAAO,GACD90K,EAAO,GAAG,UAAU,MAAM;AACxB,MAAAqzF;IACR,CAAO,GAUM;AAAA,MACL,SAVc,CAAA9kC,OAAS;AACvB,QAAA0sI,EAAY,GAAG,CAAAnmB,OAAUA,GAAO,YAAY/jL,GAAa,QAAQw9D,EAAK,CAAC,CAAC;AAAA,MAChF;AAAA,MASQ,MARW,MAAM;AACjB,QAAA0sI,EAAY,GAAG,CAAAnmB,OAAUA,GAAO,SAAU,CAAA;AAAA,MAClD;AAAA,MAOQ,MANW,MAAM;AACjB,QAAAmmB,EAAY,GAAG,CAAAnmB,OAAUA,GAAO,SAAU,CAAA;AAAA,MAClD;AAAA,IAKA;AAAA,EACA,GAEU+mB,KAAa,CAAA77L,MAAU;AAC3B,IAAA+9F,GAAS/9F,CAAM;AACf,UAAMw+K,IAAgBwc,GAAmBh7L,CAAM,GACzCy+K,IAAuBuU,GAA0BhzL,GAAQw+K,CAAa,GACtE7X,IAAU4X,GAAav+K,GAAQw+K,GAAeC,CAAoB;AACxE,WAAAl+B,GAAiBvgJ,GAAQ2mK,CAAO,GAChCwhB,GAAsBnoL,GAAQ2mK,CAAO,GACrCvmE,GAAepgG,GAAQ2mK,CAAO,GACvB;AAAA,MACL,kBAAkB8X,EAAqB;AAAA,MACvC,oBAAoBA,EAAqB;AAAA,IACjD;AAAA,EACA,GAEUqd,KAAW,CAAA97L,OAER,EAAE,OADK67L,GAAW77L,CAAM,EACjB;AAEhB,MAAI43I,KAAQ,MAAM;AAChB,IAAA+T,EAAS,IAAI,OAAOmwC,EAAQ;AAAA,EAClC;AAEI,EAAAlkD;AAEJ,GAAI;AAAA,CCn2PH,WAAY;AAGT,MAAI+T,IAAW,QAAQ,KAAK,MAAM,QAAQ,uBAAuB;AAEjE,QAAMowC,IAAkB,CAAC/7L,IAAQg8L,IAAU/3H,OAAe;AACxD,UAAMzwC,KAAMwoK,OAAa,OAAO,wBAAwB;AACxD,IAAAh8L,GAAO,YAAYwzB,IAAK,IAAOywC,OAAe,KAAQ,OAAO,EAAE,mBAAmBA,GAAU,CAAE;AAAA,EACpG,GAEUsiD,IAAa,CAAAvmH,OAAU;AAC3B,IAAAA,GAAO,WAAW,2BAA2B,CAACr0B,IAAIgM,OAAU;AAC1D,MAAAokN,EAAgB/7L,IAAQ,MAAMroB,GAAM,iBAAiB,CAAC;AAAA,IAC9D,CAAO,GACDqoB,GAAO,WAAW,yBAAyB,CAACr0B,IAAIgM,OAAU;AACxD,MAAAokN,EAAgB/7L,IAAQ,MAAMroB,GAAM,iBAAiB,CAAC;AAAA,IAC9D,CAAO;AAAA,EACP,GAEU04B,KAAS,CAAAjtB,OAAQ,CAAA4c,OAAUA,GAAO,QAAQ,IAAI5c,EAAI,GAClDo7I,KAAa,CAAAx+H,OAAU;AAC3B,UAAM80B,KAAiB90B,GAAO,QAAQ;AACtC,IAAA80B,GAAe,yBAAyB;AAAA,MACtC,WAAW;AAAA,MACX,SAAS,sEAAsE,MAAM,GAAG;AAAA,IAChG,CAAO,GACDA,GAAe,yBAAyB;AAAA,MACtC,WAAW;AAAA,MACX,SAAS,wBAAwB,MAAM,GAAG;AAAA,IAClD,CAAO;AAAA,EACP,GACUmnK,KAAkB5rL,GAAO,uBAAuB,GAChD6rL,KAAkB7rL,GAAO,uBAAuB,GAEhD1yB,KAAa,CAAArjB,OAAKA,MAAM,MACxBsjB,KAAgB,CAAAtjB,OAAK,CAACqjB,GAAWrjB,EAAC;AAExC,MAAIwrN,KAAS,QAAQ,KAAK,MAAM,QAAQ,oBAAoB;AAAA,EAE5D,MAAMzmM,GAAS;AAAA,IACb,YAAYxH,IAAKF,IAAO;AACtB,WAAK,MAAME,IACX,KAAK,QAAQF;AAAA,IACd;AAAA,IACD,OAAO,KAAKA,IAAO;AACjB,aAAO,IAAI0H,GAAS,IAAM1H,EAAK;AAAA,IAChC;AAAA,IACD,OAAO,OAAO;AACZ,aAAO0H,GAAS;AAAA,IACjB;AAAA,IACD,KAAKC,IAAQC,IAAQ;AACnB,aAAI,KAAK,MACAA,GAAO,KAAK,KAAK,IAEjBD,GAAM;AAAA,IAEhB;AAAA,IACD,SAAS;AACP,aAAO,KAAK;AAAA,IACb;AAAA,IACD,SAAS;AACP,aAAO,CAAC,KAAK;AAAA,IACd;AAAA,IACD,IAAIE,IAAQ;AACV,aAAI,KAAK,MACAH,GAAS,KAAKG,GAAO,KAAK,KAAK,CAAC,IAEhCH,GAAS;IAEnB;AAAA,IACD,KAAKI,IAAQ;AACX,aAAI,KAAK,MACAA,GAAO,KAAK,KAAK,IAEjBJ,GAAS;IAEnB;AAAA,IACD,OAAOvC,IAAW;AAChB,aAAO,KAAK,OAAOA,GAAU,KAAK,KAAK;AAAA,IACxC;AAAA,IACD,OAAOA,IAAW;AAChB,aAAO,CAAC,KAAK,OAAOA,GAAU,KAAK,KAAK;AAAA,IACzC;AAAA,IACD,OAAOA,IAAW;AAChB,aAAI,CAAC,KAAK,OAAOA,GAAU,KAAK,KAAK,IAC5B,OAEAuC,GAAS;IAEnB;AAAA,IACD,MAAMK,IAAa;AACjB,aAAO,KAAK,MAAM,KAAK,QAAQA;AAAA,IAChC;AAAA,IACD,GAAGA,IAAa;AACd,aAAO,KAAK,MAAM,OAAOA;AAAA,IAC1B;AAAA,IACD,WAAWC,IAAO;AAChB,aAAO,KAAK,MAAM,KAAK,QAAQA,GAAK;AAAA,IACrC;AAAA,IACD,QAAQA,IAAO;AACb,aAAO,KAAK,MAAM,OAAOA,GAAK;AAAA,IAC/B;AAAA,IACD,SAASC,IAAS;AAChB,UAAK,KAAK;AAGR,eAAO,KAAK;AAFZ,YAAM,IAAI,MAAMA,MAAmD,yBAAyB;AAAA,IAI/F;AAAA,IACD,OAAO,KAAKjI,IAAO;AACjB,aAAOiG,GAAcjG,EAAK,IAAI0H,GAAS,KAAK1H,EAAK,IAAI0H,GAAS;IAC/D;AAAA,IACD,YAAY;AACV,aAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,IAChC;AAAA,IACD,iBAAiB;AACf,aAAO,KAAK;AAAA,IACb;AAAA,IACD,KAAKQ,IAAQ;AACX,MAAI,KAAK,OACPA,GAAO,KAAK,KAAK;AAAA,IAEpB;AAAA,IACD,UAAU;AACR,aAAO,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;AAAA,IAClC;AAAA,IACD,WAAW;AACT,aAAO,KAAK,MAAM,QAAS,KAAK,KAAO,MAAK;AAAA,IAC7C;AAAA,EACF;AACD,EAAAR,GAAS,gBAAgB,IAAIA,GAAS,EAAK;AAE3C,QAAMgtH,KAAY,CAACr2H,IAAIgI,IAAMgD,OAAU;AACrC,aAASpiB,KAAI,GAAGud,KAAMnG,GAAG,QAAQpX,KAAIud,IAAKvd,MAAK;AAC7C,YAAM7B,KAAIiZ,GAAGpX,EAAC;AACd,UAAIof,GAAKjhB,IAAG6B,EAAC;AACX,eAAOygB,GAAS,KAAKtiB,EAAC;AACjB,UAAIikB,GAAMjkB,IAAG6B,EAAC;AACnB;AAAA,IAEH;AACD,WAAOygB,GAAS;EACtB,GAEU88M,KAAe,CAAAt8C,OAAQ,UAAU,KAAKA,GAAK,SAAS,GACpDu8C,KAAgB,CAACp8L,IAAQd,OACtBc,GAAO,IAAI,UAAUd,IAAKc,GAAO,QAAO,CAAE,GAE7CxE,KAAiB,CAAA6gM,OAAS,CAAAzrM,OAAQhT,GAAcgT,EAAI,KAAKyrM,GAAM,KAAKzrM,GAAK,QAAQ,GACjF0rM,KAAa9gM,GAAe,cAAc,GAC1C+gM,KAAkB/gM,GAAe,WAAW,GAC5CghM,KAAS,CAACx8L,IAAQ6G,IAASlL,OAAa0wG,GAAUxlG,IAAS,CAAAzU,OAAUkqM,GAAWlqM,EAAM,KAAK,CAAC+pM,GAAa/pM,EAAM,GAAGmqM,EAAe,EAAE,OAAO,CAAA18C,OAAQA,GAAK,aAAalkJ,MAAYygM,GAAcp8L,IAAQ6/I,EAAI,CAAC,GAC3M48C,KAAuB,CAAAz8L,OAAU;AACrC,UAAMwhF,KAAUxhF,GAAO,IAAI,UAAUA,GAAO,UAAU,WAAW,OAAO,GAClEqoC,KAAQroC,GAAO,IAAI,SAASwhF,IAAS,eAAe;AAC1D,WAAOniG,GAAS,KAAKgpD,EAAK;AAAA,EAChC,GACUq0J,KAAsB,CAAC18L,IAAQ/R,OAAYA,OAAY,QAAQ,CAAC+R,GAAO,IAAI,WAAW/R,EAAO,GAC7FkgI,KAA0B,CAACnuH,IAAQ/R,OAAY;AACnD,UAAMmgI,KAAapuH,GAAO,IAAI,UAAU/R,IAAS,UAAU;AAC3D,WAAOyuM,GAAoB18L,IAAQouH,EAAU,KAAKpuH,GAAO,UAAU;EACzE,GACU28L,KAAuB,CAAC38L,IAAQ48L,OAAsB;AAC1D,UAAMC,KAAc78L,GAAO,UAAU,QAAO;AAC5C,WAAA48L,GAAkB;AAAA,MAChB,SAAS58L,GAAO,IAAI,WAAW68L,EAAW;AAAA,MAC1C,SAASA;AAAA,IACjB,CAAO,GACD78L,GAAO,GAAG,cAAc48L,EAAiB,GAClC,MAAM58L,GAAO,IAAI,cAAc48L,EAAiB;AAAA,EAC7D,GAEUE,KAAmB,CAAA74H,OAChBA,GAAW,QAAQ,OAAO,GAAG,EAAE,QAAQ,SAAS,CAAAx4D,OAC9CA,GAAI,aACZ,GAEG08B,KAAsB,CAAA87B,OAActmF,GAAWsmF,EAAU,KAAKA,OAAe,YAAY,KAAKA,IAC9F84H,KAAmB,CAAC/8L,IAAQrE,OAAa,CAAAg9C,OAAO;AACpD,UAAMqkJ,KAAoB,CAACh9L,IAAQ6G,OAAY;AAC7C,YAAM5Y,KAAU+R,GAAO,UAAU,SAAS,EAAI;AAC9C,MAAA24C,GAAI,UAAU6jJ,GAAOx8L,IAAQ6G,IAASlL,EAAQ,CAAC,GAC/Cg9C,GAAI,WAAW,CAACw1E,GAAwBnuH,IAAQ/R,EAAO,KAAK+R,GAAO,UAAU,WAAU,CAAE;AAAA,IACjG;AAEM,WAAO28L,GAAqB38L,IADF,CAAA9lC,OAAK8iO,GAAkBh9L,IAAQ9lC,GAAE,OAAO,CACb;AAAA,EAC3D,GACU+iO,KAAiB,CAACj9L,IAAQvQ,IAAIytM,IAAS1pK,IAAK73B,IAAUoU,OAAW;AACrE,IAAA/P,GAAO,GAAG,SAAS,eAAevQ,IAAI;AAAA,MACpC,SAAAytM;AAAA,MACA,MAAMvhM,OAAa,OAAO,iBAAiB;AAAA,MAC3C,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO,CAAAvX,OAAY;AACjB,cAAMsH,KAAQo6L,GAAO,IAAI/1K,IAAQ,CAAAk0D,OAAc;AAC7C,gBAAMk5H,KAAYxhM,OAAa,OAAO,QAAQ,QACxCyhM,KAAWn5H,OAAe,UAAUA,OAAe,YAAY,YAAYA,IAC3Eo5H,KAAYl1J,GAAoB87B,EAAU,GAC1Cq5H,KAAcR,GAAiB74H,EAAU;AAC/C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,OAAOo5H;AAAA,YACP,MAAM,UAAUF,KAAY,MAAMC;AAAA,YAClC,MAAME;AAAA,UACpB;AAAA,QACA,CAAW;AACD,QAAAl5M,GAASsH,EAAK;AAAA,MACf;AAAA,MACD,UAAU,MAAMsU,GAAO,YAAYwzB,EAAG;AAAA,MACtC,cAAc,CAAC+pK,IAAiB5lN,OAAU;AACxC,QAAAokN,EAAgB/7L,IAAQrE,IAAUhkB,EAAK;AAAA,MACxC;AAAA,MACD,QAAQ,CAAAA,OACgB8kN,GAAqBz8L,EAAM,EAC5B,IAAI,CAAAw9L,OAAa7lN,OAAU6lN,EAAS,EAAE,MAAM,EAAK;AAAA,MAExE,SAAST,GAAiB/8L,IAAQrE,EAAQ;AAAA,IAClD,CAAO;AAAA,EACP,GACU8hM,KAAY,CAACz9L,IAAQvQ,IAAIytM,IAAS1pK,IAAK73B,IAAUsoE,OAAe;AACpE,IAAAjkE,GAAO,GAAG,SAAS,gBAAgBvQ,IAAI;AAAA,MACrC,QAAQ;AAAA,MACR,SAAAytM;AAAA,MACA,MAAMvhM,OAAa,OAAO,iBAAiB;AAAA,MAC3C,SAASohM,GAAiB/8L,IAAQrE,EAAQ;AAAA,MAC1C,UAAU,MAAMqE,GAAO,kBAAkBwzB,EAAG,KAAKywC,OAAe,KAAKjkE,GAAO,YAAYwzB,EAAG,IAAIuoK,EAAgB/7L,IAAQrE,IAAUsoE,EAAU;AAAA,IACnJ,CAAO;AAAA,EACP,GACUy5H,KAAa,CAAC19L,IAAQvQ,IAAIytM,IAAS1pK,IAAK73B,IAAUoU,OAAW;AACjE,IAAIA,GAAO,SAAS,IAClBktL,GAAej9L,IAAQvQ,IAAIytM,IAAS1pK,IAAK73B,IAAUoU,EAAM,IAEzD0tL,GAAUz9L,IAAQvQ,IAAIytM,IAAS1pK,IAAK73B,IAAUwsC,GAAoBp4B,GAAO,CAAC,CAAC,CAAC;AAAA,EAEpF,GACUguF,IAAW,CAAA/9F,OAAU;AACzB,IAAA09L,GAAW19L,IAAQ,WAAW,iBAAiB,qBAAqB,MAAMi8L,GAAgBj8L,EAAM,CAAC,GACjG09L,GAAW19L,IAAQ,WAAW,eAAe,uBAAuB,MAAMk8L,GAAgBl8L,EAAM,CAAC;AAAA,EACvG;AAEI,MAAI62I,KAAS,MAAM;AACjB,IAAA8U,EAAS,IAAI,WAAW,CAAA3rJ,OAAU;AAChC,MAAIA,GAAO,UAAU,OAAO,KAC1Bw+H,GAAWx+H,EAAM,GACjB+9F,EAAS/9F,EAAM,GACfumH,EAAWvmH,EAAM,KAEjB,QAAQ,MAAM,qEAAqE;AAAA,IAE7F,CAAO;AAAA,EACP;AAEI,EAAA62I;AAEJ,GAAI;AAAA,CC9PH,WAAY;AAGT,MAAI8mD,IAAW,QAAQ,KAAK,MAAM,QAAQ,uBAAuB,GAE7DhyC,IAAW,QAAQ,KAAK,MAAM,QAAQ,wBAAwB,GAE9Dm6B,IAAS,QAAQ,KAAK,MAAM,QAAQ,oBAAoB;AAE5D,QAAMz1K,KAAS,CAAAjtB,OAAQ,CAAA4c,OAAUA,GAAO,QAAQ,IAAI5c,EAAI,GAClDmjI,KAAa,CAAAvmH,OAAU;AAC3B,UAAM80B,KAAiB90B,GAAO,QAAQ;AACtC,IAAA80B,GAAe,8BAA8B;AAAA,MAC3C,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO;AAAA,EACP,GACU8oK,KAAyBvtL,GAAO,4BAA4B,GAE5DwtL,KAAsB,iBACtBC,KAAgB,CAAAt2M,OAAO,CAACA,IACxBu2M,KAAkB,CAAA7+L,OACXA,GAAI,aAAa,IAAI,KAAKA,GAAI,aAAa,MAAM,KAC/C,IAET8+L,KAAW,CAAA9+L,OAAOA,GAAI,SAAS,YAAa,MAAK,KACjDsE,KAAgB,CAAAtE,OAAO8+L,GAAS9+L,EAAG,KAAK,CAACA,GAAI,aAAa,MAAM,KAAK6+L,GAAgB7+L,EAAG,MAAM,IAC9F++L,KAAqB,CAAA/+L,OAAOsE,GAActE,EAAG,KAAK,CAACA,GAAI,YAEvDg/L,KAAqC,CAAAl+L,OAAU;AACnD,UAAMpR,KAAMoR,GAAO;AACnB,IAAA2rJ,EAAS/8J,EAAG,EAAE,KAAKoR,GAAO,UAAU,OAAQ,GAAE,CAAAvI,OAAS;AACrD,MAAAquL,EAAO,KAAKruL,IAAO,CAAA7G,OAAQ;AACzB,QAAIqtM,GAAmBrtM,EAAI,KACzBhC,GAAI,OAAOgC,IAAM,EAAK;AAAA,MAElC,CAAS;AAAA,IACT,CAAO;AAAA,EACP,GACUutM,KAAY,CAAA1uM,OAAM,8BAA8B,KAAKA,EAAE,GACvD2uM,KAAiB,CAAAp+L,OAAUA,GAAO,IAAI,UAAUA,GAAO,UAAU,YAAY69L,EAAmB,GAChGQ,KAAQ,CAAAr+L,OAAU;AACtB,UAAMy/I,KAAS2+C,GAAep+L,EAAM;AACpC,WAAIy/I,KACKs+C,GAAgBt+C,EAAM,IAEtB;AAAA,EAEf,GACU6+C,KAAe,CAACt+L,IAAQvQ,OAAO;AACnC,IAAAuQ,GAAO,YAAY,SAAS,MAAM;AAChC,MAAK49L,GAAuB59L,EAAM,KAChCA,GAAO,UAAU,SAAS,EAAI,GAE5BA,GAAO,UAAU,gBACnBA,GAAO,cAAcA,GAAO,IAAI,WAAW,KAAK,EAAE,IAAAvQ,GAAI,CAAA,CAAC,KAEvDyuM,GAAmCl+L,EAAM,GACzCA,GAAO,UAAU,OAAO,eAAe,QAAW,QAAW,EAAI,GACjEA,GAAO,UAAU,MAAM,eAAe,EAAE,OAAOvQ,GAAE,CAAE,GACnDuQ,GAAO,UAAS;AAAA,IAE1B,CAAO;AAAA,EACP,GACUu+L,KAAe,CAACv+L,IAAQvQ,IAAI+uM,OAAkB;AAClD,IAAAA,GAAc,gBAAgB,MAAM,GACpCA,GAAc,KAAK/uM,IACnBuQ,GAAO,UAAS,GAChBA,GAAO,YAAY;EACzB,GACUigJ,KAAS,CAACjgJ,IAAQvQ,OAAO;AAC7B,UAAMgwJ,KAAS2+C,GAAep+L,EAAM;AACpC,IAAIy/I,KACF8+C,GAAav+L,IAAQvQ,IAAIgwJ,EAAM,IAE/B6+C,GAAat+L,IAAQvQ,EAAE,GAEzBuQ,GAAO,MAAK;AAAA,EAClB,GAEUy+L,KAAe,CAACz+L,IAAQ0+L,OACvBP,GAAUO,EAAK,KAIlBz+C,GAAOjgJ,IAAQ0+L,EAAK,GACb,OAJP1+L,GAAO,cAAc,MAAM,wGAAwG,GAC5H,KAMLu1F,KAAO,CAAAv1F,OAAU;AACrB,UAAM2+L,KAAYN,GAAMr+L,EAAM;AAC9B,IAAAA,GAAO,cAAc,KAAK;AAAA,MACxB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,CAAC;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,aAAa;AAAA,QAC3B,CAAa;AAAA,MACJ;AAAA,MACD,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACP;AAAA,QACD;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,MACF;AAAA,MACD,aAAa,EAAE,IAAI2+L,GAAW;AAAA,MAC9B,UAAU,CAAAhmJ,OAAO;AACf,QAAI8lJ,GAAaz+L,IAAQ24C,GAAI,QAAS,EAAC,EAAE,KACvCA,GAAI,MAAK;AAAA,MAEZ;AAAA,IACT,CAAO;AAAA,EACP,GAEU6lF,KAAa,CAAAx+H,OAAU;AAC3B,IAAAA,GAAO,WAAW,aAAa,MAAM;AACnC,MAAAu1F,GAAKv1F,EAAM;AAAA,IACnB,CAAO;AAAA,EACP,GAEU4+L,KAAoB,CAAAhuM,OAAQktM,GAAcltM,GAAK,KAAK,MAAM,CAAC,KAAK,CAACktM,GAAcltM,GAAK,KAAK,IAAI,KAAKA,GAAK,KAAK,MAAM,CAAC,GACnHiuM,KAAyB,CAAAjuM,OAAQguM,GAAkBhuM,EAAI,KAAK,CAACA,GAAK,YAClEmwJ,KAAqB,CAAA/3I,OAAS,CAAAvR,OAAS;AAC3C,aAAS74B,KAAI,GAAGA,KAAI64B,GAAM,QAAQ74B,MAAK;AACrC,YAAMgyB,KAAO6G,GAAM74B,EAAC;AACpB,MAAIigO,GAAuBjuM,EAAI,KAC7BA,GAAK,KAAK,mBAAmBoY,EAAK;AAAA,IAErC;AAAA,EACP,GACU4gF,KAAQ,CAAA5pF,OAAU;AACtB,IAAAA,GAAO,GAAG,WAAW,MAAM;AACzB,MAAAA,GAAO,OAAO,cAAc,KAAK+gJ,GAAmB,OAAO,CAAC,GAC5D/gJ,GAAO,WAAW,cAAc,KAAK+gJ,GAAmB,IAAI,CAAC;AAAA,IACrE,CAAO;AAAA,EACP,GAEU+9C,KAAkB,CAAA9+L,OAAU;AAChC,IAAAA,GAAO,UAAU,SAAS,eAAe;AAAA,MACvC,QAAQ;AAAA,MACR,UAAU69L;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,YAAY,EAAE,IAAI,SAAU;AAAA,MAC5B,SAAS,CAACjtM,IAAM6sG,IAAMC,OACbl6F,GAAc5S,EAAI;AAAA,IAEnC,CAAO;AAAA,EACP,GAEUmuM,KAAkB,CAAA/+L,OAAU,CAAA24C,OAAO;AACvC,UAAMqmJ,KAAc,MAAM;AACxB,MAAArmJ,GAAI,WAAW34C,GAAO,UAAU,WAAY,CAAA;AAAA,IACpD;AACM,WAAAA,GAAO,GAAG,cAAcg/L,EAAW,GACnCA,MACO,MAAM;AACX,MAAAh/L,GAAO,IAAI,cAAcg/L,EAAW;AAAA,IAC5C;AAAA,EACA,GACUjhG,IAAW,CAAA/9F,OAAU;AACzB,UAAMklH,KAAW,MAAMllH,GAAO,YAAY,WAAW;AACrD,IAAAA,GAAO,GAAG,SAAS,gBAAgB,UAAU;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAAklH;AAAA,MACA,SAAS,CAAA+5E,OAAa;AACpB,cAAMC,KAAwBl/L,GAAO,UAAU,0BAA0B,iBAAiBi/L,GAAU,SAAS,EAAE,QACzGE,KAAwBJ,GAAgB/+L,EAAM,EAAEi/L,EAAS;AAC/D,eAAO,MAAM;AACX,UAAAC,MACAC;QACZ;AAAA,MACS;AAAA,IACT,CAAO,GACDn/L,GAAO,GAAG,SAAS,YAAY,UAAU;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAAklH;AAAA,MACA,SAAS65E,GAAgB/+L,EAAM;AAAA,IACvC,CAAO;AAAA,EACP;AAEI,MAAI62I,KAAS,MAAM;AACjB,IAAA8mD,EAAS,IAAI,UAAU,CAAA39L,OAAU;AAC/B,MAAAumH,GAAWvmH,EAAM,GACjB4pF,GAAM5pF,EAAM,GACZw+H,GAAWx+H,EAAM,GACjB+9F,EAAS/9F,EAAM,GACfA,GAAO,GAAG,WAAW,MAAM;AACzB,QAAA8+L,GAAgB9+L,EAAM;AAAA,MAChC,CAAS;AAAA,IACT,CAAO;AAAA,EACP;AAEI,EAAA62I;AAEJ,GAAI;AAAA,CCjNH,WAAY;AAGX,MAAI8U,IAAW,QAAQ,KAAK,MAAM,QAAQ,uBAAuB;AAEjE,QAAM7iJ,IAAO,MAAM,uQAEbuH,IAAS,CAAAjtB,OAAQ,CAAA4c,OAAUA,GAAO,QAAQ,IAAI5c,EAAI,GAClD26G,KAAW,CAAA/9F,OAAU;AACzB,UAAM80B,KAAiB90B,GAAO,QAAQ;AACtC,IAAA80B,GAAe,oBAAoB;AAAA,MACjC,WAAW;AAAA,MACX,SAAS,IAAI,OAAO,MAAMhsB,EAAI,EAAG,SAAS,KAAK,GAAG;AAAA,IACxD,CAAK,GACDgsB,GAAe,uBAAuB,EAAE,WAAW,SAAU,CAAA,GAC7DA,GAAe,yBAAyB;AAAA,MACtC,WAAW;AAAA,MACX,SAAS;AAAA,IACf,CAAK;AAAA,EACL,GACQsqK,KAAqB/uL,EAAO,kBAAkB,GAC9CgvL,KAAuBhvL,EAAO,qBAAqB,GACnDivL,KAAyBjvL,EAAO,uBAAuB,GACvDkvL,KAAwBlvL,EAAO,0BAA0B,GAEzDzzB,KAAW,CAAC7M,IAAG8M,IAAaC,OAAc;AAC9C,QAAIlW;AACJ,WAAIkW,GAAU/M,IAAG8M,GAAY,SAAS,IAC7B,OAEEjW,KAAKmJ,GAAE,iBAAiB,QAAQnJ,OAAO,SAAS,SAASA,GAAG,UAAUiW,GAAY;AAAA,EAEjG,GACQE,KAAS,CAAAhgB,OAAK;AAClB,UAAM5C,KAAI,OAAO4C;AACjB,WAAIA,OAAM,OACD,SACE5C,OAAM,YAAY,MAAM,QAAQ4C,EAAC,IACnC,UACE5C,OAAM,YAAYyiB,GAAS7f,IAAG,QAAQ,CAAC8B,IAAGme,OAAUA,GAAM,cAAcne,EAAC,CAAC,IAC5E,WAEA1E;AAAA,EAEb,GACQg0B,KAAS,CAAArV,OAAQ,CAAAnB,OAASoF,GAAOpF,EAAK,MAAMmB,IAC5C6K,KAAK,CAAAxpB,OAAK,CAAAG,OAAKH,OAAMG,IACrB+iB,KAAW8Q,GAAO,QAAQ,GAC1BzQ,KAAciG,GAAG,MAAS,GAC1BhG,KAAa,CAAArjB,OAAKA,MAAM,MACxBsjB,KAAgB,CAAAtjB,OAAK,CAACqjB,GAAWrjB,EAAC,GAElCwkB,KAAM,CAAA/f,OAAK,CAAA5E,OAAK,CAAC4E,GAAE5E,EAAC,GAEpBod,KAAiB,OAAO,gBACxB+Y,KAAM,CAAC9N,IAAKe,OAAQhM,GAAe,KAAKiL,IAAKe,EAAG,GAEhDmE,KAAa,CAACF,IAAKG,IAAQC,OAAUD,OAAW,MAAMH,GAAI,UAAUG,GAAO,UAAUH,GAAI,OAAOI,IAAOA,KAAQD,GAAO,MAAM,MAAMA,IAClIiK,KAAW,CAACpK,IAAKG,IAAQC,KAAQ,GAAGK,OAAQ;AAChD,UAAMC,IAAMV,GAAI,QAAQG,IAAQC,EAAK;AACrC,WAAIM,MAAQ,KACHxK,GAAYuK,EAAG,IAAI,KAAOC,IAAMP,GAAO,UAAUM,KAEjD;AAAA,EAEb,GACQF,KAAa,CAACP,IAAKM,OAChBJ,GAAWF,IAAKM,IAAQ,CAAC,GAG5ByV,KAAY,UACZoF,KAAS,CAAAjF,OAAQA,OAASH,IAC1BI,KAAa,CAAA7+B,OAAKA,GAAE,QAAQ,WAAW,EAAE;AAE/C,MAAIgnN,KAAS,QAAQ,KAAK,MAAM,QAAQ,wBAAwB;AAEhE,QAAM0Z,KAAa,CAAA5uM,OAAQA,GAAK,aAAa,GACvC88G,KAAY,CAAA98G,OAAQA,GAAK,aAAa,GACtC6uM,IAAmB,CAAA/hM,OAAQ,kBAAkB,KAAKA,EAAI,GACtDgiM,KAAc,CAAAtzM,OAAO,yCAAyC,KAAKA,EAAG,GACtEuzM,KAAgB,CAAAjiM,OAAQ,WAAW,KAAKA,EAAI,GAC5CkiM,KAAW,CAAC9uM,IAAMpY,IAAOoE,OAAc;AAC3C,aAASle,KAAI8Z,KAAQ,GAAG9Z,MAAK,GAAGA,MAAK;AACnC,YAAM8+B,IAAO5M,GAAK,OAAOlyB,EAAC;AAC1B,UAAI,CAAC+jC,GAAOjF,CAAI,KAAK5gB,GAAU4gB,CAAI;AACjC,eAAO9+B;AAAA,IAEV;AACD,WAAO;AAAA,EACX,GACQovF,KAAc,CAAC/1D,IAAWzhB,OAAW;AACzC,QAAI6rB,KAAWpK,IACX4nM,KAAarpN;AACjB,WAAOk3H,GAAUrrG,EAAQ,KAAKA,GAAS,WAAWw9L,EAAU;AAC1D,MAAAx9L,KAAWA,GAAS,WAAWw9L,EAAU,GACzCA,KAAaL,GAAWn9L,EAAQ,IAAIA,GAAS,KAAK,SAASA,GAAS,WAAW;AAEjF,WAAO;AAAA,MACL,WAAWA;AAAA,MACX,QAAQw9L;AAAA,IACd;AAAA,EACA,GAEQC,KAAmB,CAAC9/L,IAAQxpB,OAAW;AAC3C,QAAI5P;AACJ,UAAMmzJ,KAAe/5H,GAAO,OAAO,gBAAe,GAC5C+/L,IAAkBX,GAAmBp/L,EAAM,GAC3C,EAAC,KAAApR,IAAK,WAAAqhC,GAAS,IAAIjwB;AACzB,QAAIpR,GAAI,UAAUqhC,GAAU,QAAO,GAAI,SAAS,MAAM;AACpD,aAAO;AAET,UAAM75C,KAAM65C,GAAU,UAChB6a,KAAag7I,GAAOl3L,IAAK,CAAAgC,OACtBhC,GAAI,QAAQgC,EAAI,KAAKN,GAAIypI,IAAcnpI,GAAK,SAAS,YAAW,CAAE,KAAKhC,GAAI,mBAAmBgC,EAAI,MAAM,OAChH,GACK;AAAA,MACJ,WAAW86C;AAAA,MACX,QAAQC;AAAA,IACT,IAAGqiB,GAAY53E,GAAI,cAAcA,GAAI,SAAS,GACzCc,KAAQtQ,KAAKgoB,GAAI,UAAU88C,IAAc98C,GAAI,OAAO,OAAO,QAAQhoB,OAAO,SAASA,KAAKgoB,GAAI,WAC5Fy/I,KAAUvjG,GAAW,UAAUY,IAAcC,IAAYn1D,IAAQ,CAACoa,IAAMpa,OAAW;AACvF,YAAMsa,KAAOF,GAAK,MACZ1I,KAAM03M,GAAS9uM,IAAMta,IAAQsI,GAAI2gN,CAAgB,CAAC;AACxD,aAAOv3M,OAAQ,MAAMy3M,GAAc7uM,GAAK5I,EAAG,CAAC,IAAIA,KAAMA,KAAM;AAAA,IAC7D,GAAEhR,CAAI;AACP,QAAI,CAACm3J;AACH,aAAO;AAET,QAAIxjG,IAAewjG,GAAQ;AAC3B,UAAM2xD,KAAYl1J,GAAW,UAAUujG,GAAQ,WAAWA,GAAQ,QAAQ,CAACz9I,IAAMpa,OAAW;AAC1F,MAAAq0D,IAAej6C;AACf,YAAM1I,KAAM03M,GAAShvM,GAAK,MAAMpa,IAAQipN,CAAgB;AACxD,aAAOv3M,OAAQ,KAAKA,KAAMA,KAAM;AAAA,IACjC,GAAEhR,CAAI,GACD21C,KAASj+B,GAAI;AACnB,IAAKoxM,KAGHnzK,GAAO,SAASmzK,GAAU,WAAWA,GAAU,MAAM,IAFrDnzK,GAAO,SAASge,GAAc,CAAC,GAIjChe,GAAO,OAAOwhH,GAAQ,WAAWA,GAAQ,MAAM;AAE/C,UAAMxhI,KADUlP,GAAWkvB,GAAO,SAAU,CAAA,EACpB,MAAMkzK,CAAe;AAC7C,QAAIlzL,IAAS;AACX,UAAIzgB,KAAMygB,GAAQ,CAAC;AACnB,aAAI9kB,GAAWqE,IAAK,MAAM,IAExBA,KADiBkzM,GAAuBt/L,EAAM,IAC7B,QAAQ5T,KAChBwF,GAASxF,IAAK,GAAG,KAAK,CAACszM,GAAYtzM,EAAG,MAC/CA,KAAM,YAAYA,KAEb;AAAA,QACL,KAAKygC;AAAA,QACL,KAAAzgC;AAAA,MACR;AAAA,IACA;AACM,aAAO;AAAA,EAEb,GACQ6zM,KAAgB,CAACjgM,IAAQjoB,OAAW;AACxC,UAAM,EAAC,KAAA6W,IAAK,WAAAqhC,GAAS,IAAIjwB,IACnB,EAAC,KAAA5pB,GAAK,KAAAgW,GAAG,IAAIrU,IACbgrD,KAAW9S,GAAU;AAC3B,IAAAA,GAAU,OAAO75C,CAAG;AACpB,UAAMq9C,KAAU,cACV/4C,KAAO;AAAA,MACX,SAAA+4C;AAAA,MACA,IAAI;AAAA,MACJ,OAAOrnC;AAAA,IACb;AAEI,QAAI,CADoB4T,GAAO,SAAS,qBAAqBtlB,EAAI,EAC5C,sBAAsB;AACzC,MAAAslB,GAAO,OAAM,EAAG,YAAYyzB,IAAS,IAAOrnC,EAAG,GAC/C4T,GAAO,SAAS,eAAetlB,EAAI;AACnC,YAAMwlN,IAAoBb,GAAqBr/L,EAAM;AACrD,UAAI3iB,GAAS6iN,CAAiB,GAAG;AAC/B,cAAMzgD,IAASxvH,GAAU;AACzB,QAAArhC,GAAI,UAAU6wJ,GAAQ,UAAUygD,CAAiB,GAC7CA,MAAsB,YAAY,CAACX,GAAsBv/L,EAAM,KACjEpR,GAAI,UAAU6wJ,GAAQ,OAAO,UAAU;AAAA,MAE1C;AAAA,IACF;AACD,IAAAxvH,GAAU,eAAe8S,EAAQ,GACjC/iC,GAAO,YAAW;AAAA,EACtB,GACQmgM,KAAiB,CAAAngM,OAAU;AAC/B,UAAMjoB,KAAS+nN,GAAiB9/L,IAAQ,EAAE;AAC1C,IAAIpiB,GAAc7F,EAAM,KACtBkoN,GAAcjgM,IAAQjoB,EAAM;AAAA,EAElC,GACQqoN,KAAgBD,IAChBxwD,KAAc,CAAA3vI,OAAU;AAC5B,UAAMjoB,KAAS+nN,GAAiB9/L,IAAQ,CAAC;AACzC,IAAIpiB,GAAc7F,EAAM,KACtBkoN,GAAcjgM,IAAQjoB,EAAM;AAAA,EAElC,GACQ6xG,KAAQ,CAAA5pF,OAAU;AACtB,IAAAA,GAAO,GAAG,WAAW,CAAA9lC,OAAK;AACxB,MAAIA,GAAE,YAAY,MAAM,CAACA,GAAE,mBAAkB,KAC3Cy1K,GAAY3vI,EAAM;AAAA,IAE1B,CAAK,GACDA,GAAO,GAAG,SAAS,CAAA9lC,OAAK;AACtB,MAAIA,GAAE,YAAY,KAChBimO,GAAengM,EAAM,KACZ9lC,GAAE,YAAY,MAAMA,GAAE,YAAYA,GAAE,YAAY,QACzDkmO,GAAcpgM,EAAM;AAAA,IAE5B,CAAK;AAAA,EACL;AAEE,MAAI62I,KAAS,MAAM;AACjB,IAAA8U,EAAS,IAAI,YAAY,CAAA3rJ,OAAU;AACjC,MAAA+9F,GAAS/9F,EAAM,GACf4pF,GAAM5pF,EAAM;AAAA,IAClB,CAAK;AAAA,EACL;AAEE,EAAA62I;AAEF,GAAI;AAAA,CC/NH,WAAY;AAGT,MAAIwpD,IAAW,QAAQ,KAAK,MAAM,QAAQ,uBAAuB;AAEjE,QAAMzjN,IAAW,CAAC7M,IAAG8M,IAAaC,OAAc;AAC9C,QAAIlW;AACJ,WAAIkW,GAAU/M,IAAG8M,GAAY,SAAS,IAC7B,OAEEjW,KAAKmJ,GAAE,iBAAiB,QAAQnJ,OAAO,SAAS,SAASA,GAAG,UAAUiW,GAAY;AAAA,EAEnG,GACUE,IAAS,CAAAhgB,OAAK;AAClB,UAAM5C,KAAI,OAAO4C;AACjB,WAAIA,OAAM,OACD,SACE5C,OAAM,YAAY,MAAM,QAAQ4C,EAAC,IACnC,UACE5C,OAAM,YAAYyiB,EAAS7f,IAAG,QAAQ,CAAC8B,IAAGme,OAAUA,GAAM,cAAcne,EAAC,CAAC,IAC5E,WAEA1E;AAAA,EAEf,GACUg0B,KAAS,CAAArV,OAAQ,CAAAnB,OAASoF,EAAOpF,EAAK,MAAMmB,IAC5C6K,KAAK,CAAAxpB,OAAK,CAAAG,OAAKH,OAAMG,IACrB+iB,KAAW8Q,GAAO,QAAQ,GAC1BzQ,KAAciG,GAAG,MAAS;AAEhC,MAAI28M,KAAW,QAAQ,KAAK,MAAM,QAAQ,oBAAoB,GAE1D3C,KAAW,QAAQ,KAAK,MAAM,QAAQ,2BAA2B,GAEjEhyC,KAAW,QAAQ,KAAK,MAAM,QAAQ,oBAAoB;AAE9D,QAAM40C,KAAmB,CAAAvgM,OAAUA,GAAO,SAAS,cAAc,GAC3DwgM,KAAiB,CAAAxgM,OAAUA,GAAO,SAAS,YAAY,GACvDygM,KAAkB,CAAAzgM,OAAUA,GAAO,SAAS,aAAa,GAEzDg2J,KAAQ,CAAA0qC,OAAc;AAC1B,UAAMC,KAAY;AAAA,MAChB,GAAG;AAAA,MACH,GAAG;AAAA,IACX,GACYC,KAAa,iBAAiB,KAAKF,EAAU;AACnD,YAAQE,MAAcA,GAAW,CAAC,IAAID,GAAUC,GAAW,CAAC,CAAC,IAAI,KAAK,SAASF,IAAY,EAAE;AAAA,EACnG,GAEUrwL,KAAS,CAAAjtB,OAAQ,CAAA4c,OAAUA,GAAO,QAAQ,IAAI5c,EAAI,GAClDo7I,KAAa,CAAAx+H,OAAU;AAC3B,UAAM80B,KAAiB90B,GAAO,QAAQ,UAChC6gM,KAAgB,CAAAlpN,OAAS;AAC7B,YAAMg9C,KAAQt3C,GAAS1F,EAAK;AAC5B,aAAIg9C,KACK;AAAA,QACL,OAAOqhI,GAAMr+K,EAAK;AAAA,QAClB,OAAAg9C;AAAA,MACZ,IAEiB;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,MACrB;AAAA,IAEA;AACM,IAAAG,GAAe,8BAA8B;AAAA,MAC3C,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,GAAe,mBAAmB;AAAA,MAChC,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,GAAe,+BAA+B;AAAA,MAC5C,WAAW;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACDA,GAAe,qBAAqB;AAAA,MAClC,WAAW+rK;AAAA,MACX,SAAS;AAAA,IACjB,CAAO,GACD/rK,GAAe,sBAAsB;AAAA,MACnC,WAAW+rK;AAAA,MACX,SAAS;AAAA,IACjB,CAAO;AAAA,EACP,GACUC,KAAwBzwL,GAAO,4BAA4B,GAC3D0wL,KAAyB1wL,GAAO,6BAA6B,GAC7D2wL,KAAsB3wL,GAAO,mBAAmB,GAChD4wL,KAAuB5wL,GAAO,oBAAoB,GAClD6wL,KAAoB,CAAAlhM,OAAU;AAClC,UAAM6/B,KAAW,SAAS;AAC1B,WAAO7/B,GAAO,QAAQ,IAAI,iBAAiB,EAAE,QAAQ,WAAW6/B,GAAS,QAAQ,EAAE,QAAQ,YAAYA,GAAS,MAAM,EAAE,QAAQ,WAAWA,GAAS,IAAI,EAAE,QAAQ,SAAS7/B,GAAO,EAAE;AAAA,EAC1L,GAEU6f,KAAU,CAAC7f,IAAQxP,OAAS;AAChC,QAAI9S,GAAY8S,EAAI;AAClB,aAAOwP,GAAO,IAAI,QAAQA,GAAO,QAAS,CAAA;AACrC;AACL,YAAMk8D,KAAcyvF,GAAS,KAAKn7J,EAAI;AACtC,UAAI0rE,OAAgB;AAClB,eAAO;AACF;AACL,cAAMpkE,KAAW,IAAI,UAAS,EAAG,gBAAgBokE,IAAa,WAAW;AACzE,eAAOl8D,GAAO,IAAI,QAAQlI,EAAQ;AAAA,MACnC;AAAA,IACF;AAAA,EACP,GACUqpM,KAAW,CAAAnhM,OAAU;AACzB,QAAIp5B;AACJ,UAAM6T,KAAO,UAAU7T,KAAK+2N,GAAS,QAAQuD,GAAkBlhM,EAAM,IAAI,MAAM,OAAO,QAAQp5B,OAAO,SAASA,KAAK,KAAK,EAAE,KAAK;AAC/H,YAAI,oBAAI,KAAI,GAAG,QAAO,IAAK6T,KAAOwmN,GAAqBjhM,EAAM,KAC3DohM,GAAYphM,IAAQ,EAAK,GAClB,MAEF;AAAA,EACb,GACUohM,KAAc,CAACphM,IAAQ0gB,OAAS;AACpC,UAAM54B,KAASo5M,GAAkBlhM,EAAM;AACvC,IAAA29L,GAAS,WAAW71M,KAAS,OAAO,GACpC61M,GAAS,WAAW71M,KAAS,MAAM,GAC/B44B,OAAS,MACX+/K,GAAgBzgM,EAAM;AAAA,EAE9B,GACUqhM,KAAa,CAAArhM,OAAU;AAC3B,UAAMlY,KAASo5M,GAAkBlhM,EAAM;AACvC,IAAI,CAAC6f,GAAQ7f,EAAM,KAAKA,GAAO,QAAO,MACpC29L,GAAS,QAAQ71M,KAAS,SAASkY,GAAO,WAAW;AAAA,MACnD,QAAQ;AAAA,MACR,WAAW;AAAA,IACZ,CAAA,CAAC,GACF29L,GAAS,QAAQ71M,KAAS,SAAQ,oBAAI,KAAI,GAAG,QAAO,EAAG,SAAQ,CAAE,GACjE04M,GAAexgM,EAAM;AAAA,EAE7B,GACUshM,KAAe,CAAAthM,OAAU;AAC7B,QAAIp5B;AACJ,UAAMkhB,KAASo5M,GAAkBlhM,EAAM;AACvC,IAAImhM,GAASnhM,EAAM,MACjBA,GAAO,YAAYp5B,KAAK+2N,GAAS,QAAQ71M,KAAS,OAAO,OAAO,QAAQlhB,OAAO,SAASA,KAAK,IAAI,EAAE,QAAQ,MAAK,CAAE,GAClH25N,GAAiBvgM,EAAM;AAAA,EAE/B,GACUuhM,KAAkB,CAAAvhM,OAAU;AAChC,UAAMwhM,KAAWR,GAAoBhhM,EAAM;AAC3C,IAAAsgM,GAAS,kBAAkBtgM,IAAQ,MAAM;AACvC,MAAAqhM,GAAWrhM,EAAM;AAAA,IAClB,GAAEwhM,EAAQ;AAAA,EACjB,GACUC,KAAmB,CAAAzhM,OAAU;AACjC,IAAAA,GAAO,YAAY,SAAS,MAAM;AAChC,MAAAshM,GAAathM,EAAM,GACnBohM,GAAYphM,EAAM;AAAA,IAC1B,CAAO,GACDA,GAAO,MAAK;AAAA,EAClB,GAEUnC,IAAM,CAAAmC,QAAW;AAAA,IACrB,UAAU,MAAMmhM,GAASnhM,EAAM;AAAA,IAC/B,YAAY,MAAMqhM,GAAWrhM,EAAM;AAAA,IACnC,cAAc,MAAMshM,GAAathM,EAAM;AAAA,IACvC,aAAa,CAAA0gB,OAAQ0gL,GAAYphM,IAAQ0gB,EAAI;AAAA,IAC7C,SAAS,CAAAlwB,OAAQqvB,GAAQ7f,IAAQxP,EAAI;AAAA,EAC3C;AAEI,MAAIs1L,KAAS,QAAQ,KAAK,MAAM,QAAQ,uBAAuB;AAE/D,QAAMl8F,KAAQ,CAAA5pF,OAAU;AACtB,IAAAA,GAAO,cAAc,GAAG,gBAAgB,CAAA9lC,OAAK;AAC3C,UAAI8kB;AACJ,MAAA2sK,GAAS,KAAKm6B,GAAO,IAAG,GAAI,CAAA9lL,OAAU;AACpC,QAAIA,GAAO,QAAQ,YACjBA,GAAO,QAAQ,SAAS,cAEtB,CAAChhB,MAAOghB,GAAO,QAAO,KAAM8gM,GAAsB9gM,EAAM,MAC1DhhB,KAAMghB,GAAO,UAAU,kEAAkE;AAAA,MAErG,CAAS,GACGhhB,OACF9kB,GAAE,eAAc,GAChBA,GAAE,cAAc8kB;AAAA,IAE1B,CAAO;AAAA,EACP,GAEU+9M,KAAmB,CAAA/8L,OAAU,CAAA24C,OAAO;AACxC,IAAAA,GAAI,WAAWwoJ,GAASnhM,EAAM,CAAC;AAC/B,UAAM0hM,KAAsB,MAAM/oJ,GAAI,WAAWwoJ,GAASnhM,EAAM,CAAC;AACjE,WAAAA,GAAO,GAAG,uCAAuC0hM,EAAmB,GAC7D,MAAM1hM,GAAO,IAAI,uCAAuC0hM,EAAmB;AAAA,EACxF,GACU3jG,KAAW,CAAA/9F,OAAU;AACzB,IAAAuhM,GAAgBvhM,EAAM;AACtB,UAAMklH,KAAW,MAAM;AACrB,MAAAu8E,GAAiBzhM,EAAM;AAAA,IAC/B;AACM,IAAAA,GAAO,GAAG,SAAS,UAAU,gBAAgB;AAAA,MAC3C,SAAS;AAAA,MACT,MAAM;AAAA,MACN,UAAAklH;AAAA,MACA,SAAS63E,GAAiB/8L,EAAM;AAAA,IACxC,CAAO,GACDA,GAAO,GAAG,SAAS,YAAY,gBAAgB;AAAA,MAC7C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UAAAklH;AAAA,MACA,SAAS63E,GAAiB/8L,EAAM;AAAA,IACxC,CAAO;AAAA,EACP;AAEI,MAAI62I,KAAS,MAAM;AACjB,IAAAwpD,EAAS,IAAI,YAAY,CAAArgM,QACvBw+H,GAAWx+H,EAAM,GACjB4pF,GAAM5pF,EAAM,GACZ+9F,GAAS/9F,EAAM,GACfA,GAAO,GAAG,QAAQ,MAAM;AACtB,MAAI+gM,GAAuB/gM,EAAM,KAAKA,GAAO,IAAI,QAAQA,GAAO,QAAO,CAAE,KACvEshM,GAAathM,EAAM;AAAA,IAE/B,CAAS,GACMnC,EAAImC,EAAM,EAClB;AAAA,EACP;AAEI,EAAA62I;AAEJ,GAAI;AAAA,CCpOH,WAAY;AAGT,MAAI8U,IAAW,QAAQ,KAAK,MAAM,QAAQ,uBAAuB;AAEjE,QAAMg2C,IAAuB,CAAC3hM,GAAQyL,MAC7BzL,EAAO,SAAS,oBAAoB,EAAE,KAAAyL,EAAK,CAAA,GAG9Cm2L,IAAa,CAAC5hM,GAAQyL,MAAQ;AAClC,UAAMo2L,KAASF,EAAqB3hM,GAAQyL,CAAG,EAAE;AACjD,IAAAzL,EAAO,YAAY,oBAAoB,IAAO6hM,EAAM;AAAA,EAC1D,GAEUjlN,KAAW,CAAC7M,GAAG8M,GAAaC,OAAc;AAC9C,QAAIlW;AACJ,WAAIkW,GAAU/M,GAAG8M,EAAY,SAAS,IAC7B,OAEEjW,IAAKmJ,EAAE,iBAAiB,QAAQnJ,MAAO,SAAS,SAASA,EAAG,UAAUiW,EAAY;AAAA,EAEnG,GACUE,KAAS,CAAAhgB,MAAK;AAClB,UAAM5C,IAAI,OAAO4C;AACjB,WAAIA,MAAM,OACD,SACE5C,MAAM,YAAY,MAAM,QAAQ4C,CAAC,IACnC,UACE5C,MAAM,YAAYyiB,GAAS7f,GAAG,QAAQ,CAAC8B,IAAGme,MAAUA,EAAM,cAAcne,EAAC,CAAC,IAC5E,WAEA1E;AAAA,EAEf,GACUg0B,KAAS,CAAArV,MAAQ,CAAAnB,MAASoF,GAAOpF,CAAK,MAAMmB,GAC5CoE,KAAe,CAAApE,MAAQ,CAAAnB,MAAS,OAAOA,MAAUmB,GACjD6K,KAAK,CAAAxpB,MAAK,CAAAG,MAAKH,MAAMG,GACrBijB,KAAY4Q,GAAO,OAAO,GAC1B3Q,KAASmG,GAAG,IAAI,GAChBjG,KAAciG,GAAG,MAAS,GAC1BhG,KAAa,CAAArjB,MAAKA,KAAM,MACxBsjB,KAAgB,CAAAtjB,MAAK,CAACqjB,GAAWrjB,CAAC,GAClCujB,KAAaX,GAAa,UAAU,GAOpCiC,MALW,CAAAxH,MACR,MACEA,GAGY,EAAK;AAAA,EAE5B,MAAM0H,GAAS;AAAA,IACb,YAAYxH,GAAKF,IAAO;AACtB,WAAK,MAAME,GACX,KAAK,QAAQF;AAAA,IACd;AAAA,IACD,OAAO,KAAKA,GAAO;AACjB,aAAO,IAAI0H,GAAS,IAAM1H,CAAK;AAAA,IAChC;AAAA,IACD,OAAO,OAAO;AACZ,aAAO0H,GAAS;AAAA,IACjB;AAAA,IACD,KAAKC,GAAQC,IAAQ;AACnB,aAAI,KAAK,MACAA,GAAO,KAAK,KAAK,IAEjBD,EAAM;AAAA,IAEhB;AAAA,IACD,SAAS;AACP,aAAO,KAAK;AAAA,IACb;AAAA,IACD,SAAS;AACP,aAAO,CAAC,KAAK;AAAA,IACd;AAAA,IACD,IAAIE,GAAQ;AACV,aAAI,KAAK,MACAH,GAAS,KAAKG,EAAO,KAAK,KAAK,CAAC,IAEhCH,GAAS;IAEnB;AAAA,IACD,KAAKI,GAAQ;AACX,aAAI,KAAK,MACAA,EAAO,KAAK,KAAK,IAEjBJ,GAAS;IAEnB;AAAA,IACD,OAAOvC,GAAW;AAChB,aAAO,KAAK,OAAOA,EAAU,KAAK,KAAK;AAAA,IACxC;AAAA,IACD,OAAOA,GAAW;AAChB,aAAO,CAAC,KAAK,OAAOA,EAAU,KAAK,KAAK;AAAA,IACzC;AAAA,IACD,OAAOA,GAAW;AAChB,aAAI,CAAC,KAAK,OAAOA,EAAU,KAAK,KAAK,IAC5B,OAEAuC,GAAS;IAEnB;AAAA,IACD,MAAMK,GAAa;AACjB,aAAO,KAAK,MAAM,KAAK,QAAQA;AAAA,IAChC;AAAA,IACD,GAAGA,GAAa;AACd,aAAO,KAAK,MAAM,OAAOA;AAAA,IAC1B;AAAA,IACD,WAAWC,GAAO;AAChB,aAAO,KAAK,MAAM,KAAK,QAAQA,EAAK;AAAA,IACrC;AAAA,IACD,QAAQA,GAAO;AACb,aAAO,KAAK,MAAM,OAAOA,EAAK;AAAA,IAC/B;AAAA,IACD,SAASC,GAAS;AAChB,UAAK,KAAK;AAGR,eAAO,KAAK;AAFZ,YAAM,IAAI,MAAMA,KAAmD,yBAAyB;AAAA,IAI/F;AAAA,IACD,OAAO,KAAKjI,GAAO;AACjB,aAAOiG,GAAcjG,CAAK,IAAI0H,GAAS,KAAK1H,CAAK,IAAI0H,GAAS;IAC/D;AAAA,IACD,YAAY;AACV,aAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,IAChC;AAAA,IACD,iBAAiB;AACf,aAAO,KAAK;AAAA,IACb;AAAA,IACD,KAAKQ,GAAQ;AACX,MAAI,KAAK,OACPA,EAAO,KAAK,KAAK;AAAA,IAEpB;AAAA,IACD,UAAU;AACR,aAAO,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;AAAA,IAClC;AAAA,IACD,WAAW;AACT,aAAO,KAAK,MAAM,QAAS,KAAK,KAAO,MAAK;AAAA,IAC7C;AAAA,EACF;AACD,EAAAR,GAAS,gBAAgB,IAAIA,GAAS,EAAK;AAE3C,QAAMW,KAAa,MAAM,UAAU,MAC7B4L,KAAM,CAAC5V,GAAIjX,MAAM;AACrB,UAAMod,KAAMnG,EAAG,QACT5b,IAAI,IAAI,MAAM+hB,EAAG;AACvB,aAASvd,KAAI,GAAGA,KAAIud,IAAKvd,MAAK;AAC5B,YAAM7B,KAAIiZ,EAAGpX,EAAC;AACd,MAAAxE,EAAEwE,EAAC,IAAIG,EAAEhC,IAAG6B,EAAC;AAAA,IACd;AACD,WAAOxE;AAAA,EACb,GACUw2K,KAAO,CAAC56J,GAAIjX,MAAM;AACtB,aAASH,KAAI,GAAGud,IAAMnG,EAAG,QAAQpX,KAAIud,GAAKvd,MAAK;AAC7C,YAAM7B,KAAIiZ,EAAGpX,EAAC;AACd,MAAAG,EAAEhC,IAAG6B,EAAC;AAAA,IACP;AAAA,EACP,GACUytI,KAAY,CAACr2H,GAAIgI,GAAMgD,OAAU;AACrC,aAASpiB,IAAI,GAAGud,KAAMnG,EAAG,QAAQpX,IAAIud,IAAKvd,KAAK;AAC7C,YAAM7B,KAAIiZ,EAAGpX,CAAC;AACd,UAAIof,EAAKjhB,IAAG6B,CAAC;AACX,eAAOygB,GAAS,KAAKtiB,EAAC;AACjB,UAAIikB,GAAMjkB,IAAG6B,CAAC;AACnB;AAAA,IAEH;AACD,WAAOygB,GAAS;EACtB,GACUk6D,KAAO,CAACvjE,GAAIgI,MACTquH,GAAUr2H,GAAIgI,GAAMmB,EAAK,GAE5BgC,KAAU,CAAAnL,MAAM;AACpB,UAAM5b,IAAI,CAAA;AACV,aAASwE,KAAI,GAAGud,IAAMnG,EAAG,QAAQpX,KAAIud,GAAK,EAAEvd,IAAG;AAC7C,UAAI,CAAC2e,GAAUvH,EAAGpX,EAAC,CAAC;AAClB,cAAM,IAAI,MAAM,sBAAsBA,KAAI,+BAA+BoX,CAAE;AAE7E,MAAAgK,GAAW,MAAM5lB,GAAG4b,EAAGpX,EAAC,CAAC;AAAA,IAC1B;AACD,WAAOxE;AAAA,EACb,GACUgmD,KAAO,CAACpqC,GAAIjX,MAAMoiB,GAAQyK,GAAI5V,GAAIjX,CAAC,CAAC;AAE1C,MAAI+mN,KAAS,QAAQ,KAAK,MAAM,QAAQ,oBAAoB;AAE5D,QAAMz1K,KAAS,CAAAjtB,MAAQ,CAAA4c,MAAUA,EAAO,QAAQ,IAAI5c,CAAI,GAClDmjI,KAAa,CAAAvmH,MAAU;AAC3B,UAAM80B,IAAiB90B,EAAO,QAAQ,UAChC8hM,KAAmB,CAAAnqN,MAASkG,GAAWlG,CAAK,KAAK4F,GAAU5F,CAAK;AACtE,IAAAm9C,EAAe,WAAW,EAAE,WAAWgtK,GAAkB,CAAA,GACzDhtK,EAAe,kBAAkB,EAAE,WAAWgtK,GAAkB,CAAA;AAAA,EACtE,GACUC,KAAe1xL,GAAO,SAAS,GAC/B2xL,IAAmB3xL,GAAO,gBAAgB,GAE1CvsB,KAAUgiM,GAAO,SACjBmc,KAAc,gBACdC,KAAoB,MACjB;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,QACD;AAAA,QACD;AA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ACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACD;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACP;A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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]}